Repository: jessicayung/machine-learning-nd Branch: master Commit: 441aecafb136 Files: 147 Total size: 22.7 MB Directory structure: gitextract_wrwg0zgp/ ├── .gitignore ├── .ipynb_checkpoints/ │ └── Getting Started - From Artificial Intelligence to Machine Learning-checkpoint.ipynb ├── README.md ├── lesson-notes/ │ ├── .ipynb_checkpoints/ │ │ ├── Fast, Scalable Deep Learning - Alan Mosca-checkpoint.ipynb │ │ └── Healthcare - Christopher Thompson 1 Oct 2016-checkpoint.ipynb │ ├── 0-intro/ │ │ ├── .ipynb_checkpoints/ │ │ │ └── Getting Started - From Artificial Intelligence to Machine Learning-checkpoint.ipynb │ │ └── Getting Started - From Artificial Intelligence to Machine Learning.ipynb │ ├── 1-model-evaluation-and-validation/ │ │ ├── .ipynb_checkpoints/ │ │ │ ├── 1.3.1 Evaluation Metrics-checkpoint.ipynb │ │ │ └── 1.3.2 Validation-checkpoint.ipynb │ │ ├── 1.3.1 Evaluation Metrics.ipynb │ │ ├── 1.3.2 Validation.ipynb │ │ └── 1.4 Managing Error and Complexity.ipynb │ ├── 2-supervised-learning/ │ │ ├── .ipynb_checkpoints/ │ │ │ ├── 2.4.1 Kernel Methods and Support Vector Machines-checkpoint.ipynb │ │ │ ├── 2.5 Instance-based Learning-checkpoint.ipynb │ │ │ ├── 2.6.2 Bayesian Learning-checkpoint.ipynb │ │ │ └── 2.6.4 Bayes NLP project-checkpoint.ipynb │ │ ├── 2.1.2 Regression and Classification.ipynb │ │ ├── 2.1.4 More Regressions.ipynb │ │ ├── 2.2 Decision Trees.ipynb │ │ ├── 2.3 Neural Networks.ipynb │ │ ├── 2.4.1 Kernel Methods and Support Vector Machines.ipynb │ │ ├── 2.5 Instance-based Learning.ipynb │ │ ├── 2.6.2 Bayesian Learning.ipynb │ │ ├── 2.6.4 Bayes NLP project.ipynb │ │ └── README.md │ ├── 3-unsupervised-learning/ │ │ ├── .ipynb_checkpoints/ │ │ │ ├── 3.1.3 More Clustering-checkpoint.ipynb │ │ │ ├── 3.2.2 Feature Selection-checkpoint.ipynb │ │ │ ├── 3.3.1 PCA-checkpoint.ipynb │ │ │ ├── Feature Transformation-checkpoint.ipynb │ │ │ ├── More Clustering-checkpoint.ipynb │ │ │ └── Untitled-checkpoint.ipynb │ │ ├── 3.1.3 More Clustering.ipynb │ │ ├── 3.2.2 Feature Selection.ipynb │ │ ├── 3.3.1 PCA.ipynb │ │ └── README.md │ ├── 4-reinforcement-learning/ │ │ ├── .ipynb_checkpoints/ │ │ │ ├── 4.1.1 Markov Decision Processes-checkpoint.ipynb │ │ │ └── 4.1.2 Reinforcement Learning-checkpoint.ipynb │ │ ├── 4.1.1 Markov Decision Processes.ipynb │ │ ├── 4.1.2 Reinforcement Learning.ipynb │ │ └── README.md │ ├── 5-ml-for-trading/ │ │ ├── .ipynb_checkpoints/ │ │ │ └── 0. Course Outline-checkpoint.ipynb │ │ └── 0. Course Outline.ipynb │ └── Healthcare - Christopher Thompson 1 Oct 2016.ipynb ├── p0-titanic-survival-exploration/ │ ├── .ipynb_checkpoints/ │ │ └── titanic_survival_exploration-checkpoint.ipynb │ ├── README.md │ ├── report.html │ ├── titanic_data.csv │ ├── titanic_survival_exploration.ipynb │ └── titanic_visualizations.py ├── p1-boston-housing/ │ ├── .ipynb_checkpoints/ │ │ └── boston_housing-checkpoint.ipynb │ ├── README.md │ ├── boston_housing.ipynb │ ├── housing.csv │ ├── report.html │ └── visuals.py ├── p2-student-intervention/ │ ├── .ipynb_checkpoints/ │ │ ├── student_intervention-Copy1-checkpoint.ipynb │ │ ├── student_intervention-checkpoint.ipynb │ │ ├── student_intervention1-checkpoint.ipynb │ │ └── student_intervention_py2.7-checkpoint.ipynb │ ├── README.md │ ├── archive/ │ │ ├── student_intervention-Copy1.ipynb │ │ ├── student_intervention1.ipynb │ │ └── student_intervention_py2.7.ipynb │ ├── report.html │ ├── student-data.csv │ └── student_intervention.ipynb ├── p3-creating-customer-segments/ │ ├── .ipynb_checkpoints/ │ │ └── customer_segments-checkpoint.ipynb │ ├── README.md │ ├── archive/ │ │ └── customer_segments_python2.7.ipynb │ ├── customer_segments.ipynb │ ├── customers.csv │ ├── renders.py │ ├── renders_py3.py │ └── report.html ├── p4-smartcab/ │ ├── .ipynb_checkpoints/ │ │ ├── Smartcab Report-Copy1-checkpoint.ipynb │ │ ├── Smartcab Report-Copy2-checkpoint.ipynb │ │ ├── Smartcab Report-checkpoint.ipynb │ │ └── smartcab-report-checkpoint.ipynb │ ├── README.md │ ├── old-versions-of-reports/ │ │ ├── .ipynb_checkpoints/ │ │ │ └── Smartcab Report-Copy1-checkpoint.ipynb │ │ ├── Smartcab Report-Copy1.ipynb │ │ └── Smartcab Report-Copy2.ipynb │ ├── smartcab/ │ │ ├── __init__.py │ │ ├── agent.py │ │ ├── environment.py │ │ ├── planner.py │ │ ├── qtable.js │ │ ├── report.html │ │ ├── simulator.py │ │ └── trial-data/ │ │ ├── data.js │ │ ├── trial1.js │ │ ├── trial10.js │ │ ├── trial2.js │ │ ├── trial3.js │ │ ├── trial4.js │ │ ├── trial5.js │ │ ├── trial6.js │ │ ├── trial7.js │ │ ├── trial8.js │ │ └── trial9.js │ ├── smartcab-report.ipynb │ ├── smartcab_parameter_search.csv │ └── smartcab_params_summary.csv └── p5-capstone/ ├── .ipynb_checkpoints/ │ ├── 2-analysis-code-py2-checkpoint.ipynb │ ├── 2-analysis-code-py3-checkpoint.ipynb │ ├── 3-methodology-results-conclusion-code-py2-Copy1-checkpoint.ipynb │ ├── 3-methodology-results-conclusion-code-py2-checkpoint.ipynb │ ├── 3-methodology-results-conclusion-code-py3-checkpoint.ipynb │ ├── Discarded Notes-checkpoint.ipynb │ ├── delete-checkpoint.ipynb │ ├── lse-list-checkpoint.ipynb │ ├── p5.1-definition-checkpoint.ipynb │ ├── p5.2-4-code-checkpoint.ipynb │ ├── p5.2-4-report-checkpoint.ipynb │ └── p5.5-conclusion-checkpoint.ipynb ├── 2-analysis-code-py2.ipynb ├── 2-analysis-code-py2.ipynb.bak ├── 2-analysis-code-py3.ipynb ├── 3-methodology-results-conclusion-code-py2.ipynb ├── 3-methodology-results-conclusion-code-py3.ipynb ├── README.md ├── archive/ │ ├── .ipynb_checkpoints/ │ │ └── Discarded Notes-checkpoint.ipynb │ ├── Discarded Notes.ipynb │ ├── III. Methodology - Code-Copy1.ipynb │ ├── lse-list.ipynb │ ├── ml-for-trading/ │ │ ├── .ipynb_checkpoints/ │ │ │ ├── 2. Computational Investment-checkpoint.ipynb │ │ │ └── 3. ML for Trading Algorithms-checkpoint.ipynb │ │ ├── 2. Computational Investment.ipynb │ │ └── 3. ML for Trading Algorithms.ipynb │ ├── p5.2-4-code.ipynb │ ├── report-drafts/ │ │ ├── p5.1-definition.ipynb │ │ ├── p5.2-4-report.ipynb │ │ └── p5.5-conclusion.ipynb │ ├── robot_motion_planning/ │ │ ├── maze.py │ │ ├── robot.py │ │ ├── showmaze.py │ │ ├── test_maze_01.txt │ │ ├── test_maze_02.txt │ │ ├── test_maze_03.txt │ │ └── tester.py │ └── udacity-materials/ │ └── project_report_template.md ├── ftse100-figures.csv ├── ftse100-list.csv ├── google-finance-py2.py ├── google-finance-scraper.py ├── list-of-all-securities-ex-debt.csv └── report.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ code/ *.zip ================================================ FILE: .ipynb_checkpoints/Getting Started - From Artificial Intelligence to Machine Learning-checkpoint.ipynb ================================================ { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: README.md ================================================ # machine-learning-nd Udacity's Machine Learning Nanodegree project files and notes. This repository contains project files and lecture notes for [Udacity's Machine Learning Engineer Nanodegree program](https://www.udacity.com/course/machine-learning-engineer-nanodegree--nd009) which I started working on in September 2016. The Machine Learning Engineer Nanodegree is an online certification. It involves 1. Courses in supervised learning, unsupervised learning and reinforcement learning and 2. Six projects (p0-p5 in this directory). Courses include lecture videos, quizzes and programming problems. These courses were developed by Georgia Tech, Udacity, Google and Kaggle. This directory includes lecture notes (`lesson_notes`) and project code (`p0` to `p5`). See also: [My notes for Udacity's Data Analyst Nanodegree](https://www.udacity.com/course/data-analyst-nanodegree--nd002?v=a). ## Program Outline: 0) Exploratory Project: Titanic Survival Exploration 1. Model Evaluation and Validation - Project 1: Predicting Boston Housing Prices 2. Supervised Learning - Project 2: Building a Student Intervention System (Predicting whether or not students will fail so schools can intervene to help them graduate) 3. Unsupervised Learning - Project 3: Creating Customer Segments (Segmenting customers based on spending in different categories) 4. Reinforcement Learning - Project 4: Train a Smartcab to Drive (Implement Q-learning algorithm) 5. Machine Learning Specialisation of Choice ================================================ FILE: lesson-notes/.ipynb_checkpoints/Fast, Scalable Deep Learning - Alan Mosca-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Fast, Scalable Deep Learning\n", "- Alan Mosca\n", "(PhD in Deep Learning and Ensembles)\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/.ipynb_checkpoints/Healthcare - Christopher Thompson 1 Oct 2016-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Christopher Thompson: Applications of ML in Healthcare and Pharma\n", "\n", "Microbiologist at Imperial (Postdoc)\n", "\n", "1. Diagnosis DTs\n", "2. Imaging analysis MRI X ray Pathology 40 images per needle biopsy hours per processs\n", "3. Brug Discovery\n", " - nwe uses for existing drugs\n", " - combine 4 drgus into single therapy -> pill or injection -> 5 concentrations\n", " - fastest route? HUH HOW\n", " - off-target drug actions (IBS tuberculosis antibiotics) -> more DA, hmm\n", "4. Patient surveillance\n", "5. Personalised medicine or therapy\n", " - data sources\n", " - electronic health records: structured and unstructured (clinician notes), BoW no cancer vs cancer\n", " - epidem behaviour\n", " - dna (cookbook) -> rna (recipe) -> protein (meal)\n", " - rna as a market of prostate cancer mestasisis (moving)\n", " - diagnosis only by biopsy\n", " - survival rates vary by local vs distance\n", " - gen model predict P(metastasis), log loss -> penalises wrong confident preds a lot\n", " - vs current can only test if cancer has mestatisised\n", " - used anova, pca\n", " - F stat (take with max f stat) -> filter for genes that are diff in metastasis vs normal\n", " - NOTE dataset is live: what is classified as local might go to metastetic eventually. but no otehr way back.\n", " - features RNA 20k + 20 clinical features, 500 patients.\n", " - Gleason score :) 2 - 10 :( -> 0.3\n", " - RNA -> 0.7\n", " - Filter down to 20 genes\n", " -> Probablity in the next X years. makes sens.\n", "\n", "\n", "23me? - > what's that angelo\n", "\n", "gaddaga? oh so if you see they have BLAH they won't hire them.\n", "- esp if attach location and ethnicity to data\n", "$39bn per year US health institute\n", "\n", "OCR get capture?\n", "\n", "H l 7\n", "Electronic health records: there are 10 competing formats.\n", "\n", "Nature vs nurture -> DNA modification, molecular tagging\n", "\n", "Alzheimers depends on Epigenetics likely.\n", "Combo of epigenetic and genetic\n", "\n", "\n", "Climate patterns\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Baxter\n", "Myo\n", "Thync\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/0-intro/.ipynb_checkpoints/Getting Started - From Artificial Intelligence to Machine Learning-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started - From Artificial Intelligence to Machine Learning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Artificial Intelligence: Problems and Characteristics\n", "\n", "Machine Learning: Artificial Intelligence x Data Science\n", "\n", "AI -> Cognitive Systems (thinking like humans) vs Machine Learning\n", "\n", "#### Conundrums in AI:\n", "1. Intelligent agents have limited resources (computational speed, memory) -> But many problems are computationally intractable.\n", "2. Computation is local, but problems have global constraints.\n", "3. Logic is deductive, but many problems are not (they are abductive or inductive).\n", "4. The world is dynamic, but knowledge is limited. AI agent always begins with what it knows -> How does it address new problems?\n", "5. Problem solving, reasoning and learning are complex, but explanation and justification are even more complex.\n", "\n", "#### Characteristics of AI Problems:\n", "1. Knowledge often arrives incrementally.\n", "2. Problems exhibit recurring patterns.\n", "3. Problems have multiple levels of granularity.\n", "4. Many problems are computationally intractable.\n", "5. The world is dynamic, but knowledge of the world is static.\n", "6. The world is open-ended, but knowledge is limited.\n", "\n", "(From [Knowledge-Based AI](https://www.udacity.com/course/knowledge-based-ai-cognitive-systems--ud409?_ga=1.192741295.463903328.1463823313))\n", "\n", "#### AI As Uncertainty Management\n", "AI = what to do when you don't know what to do\n", "\n", "Reasons for uncertainty:\n", "- Sensor limits\n", "- Adversaries\n", "- Stochastic environments (rolling dice)\n", "- Laziness (Can compute what situation is but too lazy to do it)\n", "- Ignorance (Could know something but just don't care)\n", "\n", "(From uDacity Sebastian Thrun)\n", "\n", "e.g.: Watson (answering Jeopardy questions)\n", "\n", "Process:\n", "- Read clue (understand natural language sentences)\n", "- Search through knowledge base\n", "- Decide on answer\n", "- Phrase answer\n", "\n", "Specifics:\n", "- Know of the potential answers (e.g. Michael Phelps, Hey Jude) and know information pertaining to the potential answers\n", "- Understand the statement: Interpret words in context. May need to interpret puns.\n", "- Know the format of the answer\n", "\n", "Core **deliberation processes**:\n", "1. Reasoning (read and generate natural language sentences)\n", "2. Learning (make decisions and see if those decisions are correct or not -> Change)\n", "3. Memory (Store knowledge and what we learn)\n", "\n", "[img](images/intro-1.png)\n", "\n", "#### Four schools of thought of AI\n", "[Four quadrants (schools of thought) of AI](images/intro-2.png)\n", "\n", "Thinking vs acting,\n", "Optimally vs like humans.\n", "\n", "Knowledge-based AI: interested in agents that think like humans.\n", "Examples:\n", "[Examples of applications in each school of thought of AI](images/intro-3.png)\n", "\n", "E.g. autonomous vehicle: acts (and thinks?) optimally.\n", "\n", "Patterns of knowledge-based data: AI behaviour \n", "\n", "[Categorising four examples](images/intro-4.png)\n", "\n", "### Bayes' Rule\n", "\n", "$$P(A|B) = \\frac{P(B|A)*P(A)}{P(B)}$$\n", "\n", "$$ Posterior = \\frac{Likelihood x Prior}{Marginal likelihood}$$\n", "\n", "Likelihood: If we knew the cause (A), what would be the probability of the evidence we just observed? But to correct for the inversion, we need to multiply by the prior.\n", "\n", "$$P(B) = \\sum_aP(B|A=a)P(A=a)$$\n", "\n", "(Total probability)\n", "\n", "#### Bayes Network\n", "[Bayes Network](images/intro-5.png)\n", "\n", "Number of parameters in this Bayes Network: 3. P(A), P(B|A), P(B| not A).\n", "\n", "Data is a lot about discerning unseen cause of the data that we can see.\n", "\n", "## Data Science\n", "\n", "[What is a data scientist?](images/intro-ds1.png)\n", "\n", "'Substantive Expertise':\n", "- Know which questions to ask\n", "- Can interpret the data well\n", "- Understands structure of the data\n", "\n", "But data scientists often work in teams so they can complement each other's strengths and weaknesses.\n", "\n", "[Data Science Process](images/intro-ds2.png)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Machine Learning\n", "\n", "What is ML?\n", "\n", "Philosophy of ML:\n", "- Theoretical (Michael) vs Practical (Charles)\n", "\n", "\n", "Theoretical: ML is computational statistics that is about proving theorems.\n", "Practical: ML is the broader notion of building computational artifacts that learn over time based on experience. Applied stats.\n", "\n", "(They are hilarious.)\n", "\n", "Supervised learning:\n", "- Taking labelled datasets, gleaning info from it so you can label new datasets.\n", "- Function approximation\n", "- Approximate function induction\n", "-> Make assumptions about the world, e.g. well-behaved function that fits that data that is generalises.\n", "\n", "Supervised learning is about **inductive bias**. Specifics -> Generalities.\n", "\n", "Vs deduction: Generalities -> Specifics.\n", "\n", "### Induction, deduction and abduction\n", "\n", "[ida](images/intro-ida.png)\n", "\n", "Deduction: Given the rule and the cause, deduce the effect. (Proof-preserving)\n", "\n", "[d](images/intro-d.png)\n", "\n", "Induction: Given a cause and an effect, induce a rule. (Correctness not guaranteed.)\n", "\n", "[i](images/intro-i.png)\n", "\n", "Abduction: Given a rule and an effect, abduce a cause. (Correctness not guaranteed.)\n", "\n", "[a](images/intro-a.png)\n", "\n", "ML is about **inducing a rule**. The rule doesn't have to be causal - correlations are useful too.\n", "\n", "E.g. apply abductively to figure out where insider trading has occurred." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unsupervised Learning\n", "\n", "**Description or summarisation** (vs supervised learning -> Approximation).\n", "Just have input, no given labels. Derive structure from input.\n", "\n", "Differences with supervised learning:\n", "- All ways of dividing up the world are in a way equally good (absent other signals telling you something is goood or not good).\n", "- Unsupervised is helpful in supervised -> Can help\n", "\n", "[unsup](images/intro-unsup.png)\n", "\n", "## Reinforcement Learning\n", "\n", "Learning from delayed reward vs supervised learning 'here's what you should do'.\n", "\n", "E.g. Playing tic-tac-toe -> lost -> learn which moves were important (bad).\n", "\n", "Reinforcement learn is in a sense harder than supervised learning because you're not told what to do.\n", "Like playing a game without knowing any of the rules but being told once in a while that you've won or you've lost.\n", "\n", "## Comparison of three parts of ML\n", "\n", "Supervised: Labels. \n", "Unsupervised: Don't know if one cluster is better than another.\n", "-> But there is an assumed set of labels because you're clustering.\n", "\n", "- In many cases you can formulate these problems as some sort of optimisation.\n", " - SL: Labels data well\n", " - RL: Behaviour scores well\n", " - UL: Cluster scores well\n", "\n", "One view:\n", "Compsci hink in terms of algorithms, theorems vs ML data being central. Or the two being co-equal.\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/0-intro/Getting Started - From Artificial Intelligence to Machine Learning.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started - From Artificial Intelligence to Machine Learning" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Artificial Intelligence: Problems and Characteristics\n", "\n", "Machine Learning: Artificial Intelligence x Data Science\n", "\n", "AI -> Cognitive Systems (thinking like humans) vs Machine Learning\n", "\n", "#### Conundrums in AI:\n", "1. Intelligent agents have limited resources (computational speed, memory) -> But many problems are computationally intractable.\n", "2. Computation is local, but problems have global constraints.\n", "3. Logic is deductive, but many problems are not (they are abductive or inductive).\n", "4. The world is dynamic, but knowledge is limited. AI agent always begins with what it knows -> How does it address new problems?\n", "5. Problem solving, reasoning and learning are complex, but explanation and justification are even more complex.\n", "\n", "#### Characteristics of AI Problems:\n", "1. Knowledge often arrives incrementally.\n", "2. Problems exhibit recurring patterns.\n", "3. Problems have multiple levels of granularity.\n", "4. Many problems are computationally intractable.\n", "5. The world is dynamic, but knowledge of the world is static.\n", "6. The world is open-ended, but knowledge is limited.\n", "\n", "(From [Knowledge-Based AI](https://www.udacity.com/course/knowledge-based-ai-cognitive-systems--ud409?_ga=1.192741295.463903328.1463823313))\n", "\n", "#### AI As Uncertainty Management\n", "AI = what to do when you don't know what to do\n", "\n", "Reasons for uncertainty:\n", "- Sensor limits\n", "- Adversaries\n", "- Stochastic environments (rolling dice)\n", "- Laziness (Can compute what situation is but too lazy to do it)\n", "- Ignorance (Could know something but just don't care)\n", "\n", "(From uDacity Sebastian Thrun)\n", "\n", "e.g.: Watson (answering Jeopardy questions)\n", "\n", "Process:\n", "- Read clue (understand natural language sentences)\n", "- Search through knowledge base\n", "- Decide on answer\n", "- Phrase answer\n", "\n", "Specifics:\n", "- Know of the potential answers (e.g. Michael Phelps, Hey Jude) and know information pertaining to the potential answers\n", "- Understand the statement: Interpret words in context. May need to interpret puns.\n", "- Know the format of the answer\n", "\n", "Core **deliberation processes**:\n", "1. Reasoning (read and generate natural language sentences)\n", "2. Learning (make decisions and see if those decisions are correct or not -> Change)\n", "3. Memory (Store knowledge and what we learn)\n", "\n", "[img](images/intro-1.png)\n", "\n", "#### Four schools of thought of AI\n", "[Four quadrants (schools of thought) of AI](images/intro-2.png)\n", "\n", "Thinking vs acting,\n", "Optimally vs like humans.\n", "\n", "Knowledge-based AI: interested in agents that think like humans.\n", "Examples:\n", "[Examples of applications in each school of thought of AI](images/intro-3.png)\n", "\n", "E.g. autonomous vehicle: acts (and thinks?) optimally.\n", "\n", "Patterns of knowledge-based data: AI behaviour \n", "\n", "[Categorising four examples](images/intro-4.png)\n", "\n", "### Bayes' Rule\n", "\n", "$$P(A|B) = \\frac{P(B|A)*P(A)}{P(B)}$$\n", "\n", "$$ Posterior = \\frac{Likelihood x Prior}{Marginal likelihood}$$\n", "\n", "Likelihood: If we knew the cause (A), what would be the probability of the evidence we just observed? But to correct for the inversion, we need to multiply by the prior.\n", "\n", "$$P(B) = \\sum_aP(B|A=a)P(A=a)$$\n", "\n", "(Total probability)\n", "\n", "#### Bayes Network\n", "[Bayes Network](images/intro-5.png)\n", "\n", "Number of parameters in this Bayes Network: 3. P(A), P(B|A), P(B| not A).\n", "\n", "Data is a lot about discerning unseen cause of the data that we can see.\n", "\n", "## Data Science\n", "\n", "[What is a data scientist?](images/intro-ds1.png)\n", "\n", "'Substantive Expertise':\n", "- Know which questions to ask\n", "- Can interpret the data well\n", "- Understands structure of the data\n", "\n", "But data scientists often work in teams so they can complement each other's strengths and weaknesses.\n", "\n", "[Data Science Process](images/intro-ds2.png)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Machine Learning\n", "\n", "What is ML?\n", "\n", "Philosophy of ML:\n", "- Theoretical (Michael) vs Practical (Charles)\n", "\n", "\n", "Theoretical: ML is computational statistics that is about proving theorems.\n", "Practical: ML is the broader notion of building computational artifacts that learn over time based on experience. Applied stats.\n", "\n", "(They are hilarious.)\n", "\n", "Supervised learning:\n", "- Taking labelled datasets, gleaning info from it so you can label new datasets.\n", "- Function approximation\n", "- Approximate function induction\n", "-> Make assumptions about the world, e.g. well-behaved function that fits that data that is generalises.\n", "\n", "Supervised learning is about **inductive bias**. Specifics -> Generalities.\n", "\n", "Vs deduction: Generalities -> Specifics.\n", "\n", "### Induction, deduction and abduction\n", "\n", "[ida](images/intro-ida.png)\n", "\n", "Deduction: Given the rule and the cause, deduce the effect. (Proof-preserving)\n", "\n", "[d](images/intro-d.png)\n", "\n", "Induction: Given a cause and an effect, induce a rule. (Correctness not guaranteed.)\n", "\n", "[i](images/intro-i.png)\n", "\n", "Abduction: Given a rule and an effect, abduce a cause. (Correctness not guaranteed.)\n", "\n", "[a](images/intro-a.png)\n", "\n", "ML is about **inducing a rule**. The rule doesn't have to be causal - correlations are useful too.\n", "\n", "E.g. apply abductively to figure out where insider trading has occurred." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Unsupervised Learning\n", "\n", "**Description or summarisation** (vs supervised learning -> Approximation).\n", "Just have input, no given labels. Derive structure from input.\n", "\n", "Differences with supervised learning:\n", "- All ways of dividing up the world are in a way equally good (absent other signals telling you something is goood or not good).\n", "- Unsupervised is helpful in supervised -> Can help\n", "\n", "[unsup](images/intro-unsup.png)\n", "\n", "## Reinforcement Learning\n", "\n", "Learning from delayed reward vs supervised learning 'here's what you should do'.\n", "\n", "E.g. Playing tic-tac-toe -> lost -> learn which moves were important (bad).\n", "\n", "Reinforcement learn is in a sense harder than supervised learning because you're not told what to do.\n", "Like playing a game without knowing any of the rules but being told once in a while that you've won or you've lost.\n", "\n", "## Comparison of three parts of ML\n", "\n", "Supervised: Labels. \n", "Unsupervised: Don't know if one cluster is better than another.\n", "-> But there is an assumed set of labels because you're clustering.\n", "\n", "- In many cases you can formulate these problems as some sort of optimisation.\n", " - SL: Labels data well\n", " - RL: Behaviour scores well\n", " - UL: Cluster scores well\n", "\n", "One view:\n", "Compsci hink in terms of algorithms, theorems vs ML data being central. Or the two being co-equal.\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/1-model-evaluation-and-validation/.ipynb_checkpoints/1.3.1 Evaluation Metrics-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Training and Testing\n", "\n", "Benefits of testing: \n", "- Gives estimate of performance on an independent dataset\n", "- Serves as a check on overfitting\n", "\n", "## Train/Test Split in sklearn\n", "\n", "Look for cross-validation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((150, 4), (150,))" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from sklearn import cross_validation\n", "from sklearn import datasets\n", "from sklearn import svm\n", "\n", "iris = datasets.load_iris()\n", "iris.data.shape, iris.target.shape" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test \\\n", " = cross_validation.train_test_split(iris.data, iris.target, test_size=0.4, random_state=0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((90, 4), (90,))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape, y_train.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((60, 4), (60,))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape, y_test.shape" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.96666666666666667" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)\n", "clf.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Evaluation Metrics\n", "\n", "\n", "### 1. Accuracy \n", "Accuracy = (no. of items in a class labelled correctly / all items in that class)\n", "\n", "Shortcomings:\n", "- Not ideal for skewed cases (very few Persons of Interest -> Denominator 'All items in that class' is small.)\n", "- May want to err on side of guessing innocent (or guilty, depending on consequences of labelling) -> i.e. asymmetries favouring different types of error.\n", "\n", "## Confusion Matrix\n", "\n", "[Confusion Matrix](images/14-01.png)\n", "\n", "Note: Tuning parameters can move the boundaries.\n", "\n", "[Decision Tree Confusion Matrix](images/14-02.png)\n", "\n", "[7x7 Confusion Matrix](images/14-03.png)\n", "\n", "### Recall: P(alg identifies as A | is A)\n", "(rows for true in rows, predicted in cols)\n", "- is like 'lacer' backwards which is similar to 'liar', and the opposite of a lie is the truth, so the denominator is the true values.\n", "- recall: finding X. i.e. P(finding X | ...)\n", "- Recall = TP/(TP + FN)\n", "\n", "### Precision: P(is A | alg identifies as A)\n", "- (columns for true in rows, prediction in cols)\n", "Starts with 'pre', so denominator is predicted.\n", "- Precision = TP/(TP + FP)\n", "\n", "### True positives, false positives, false negatives\n", "\n", "## F1 Score\n", "The harmonic mean of precision and recall.\n", "\n", "$$F_1 = 2 * \\frac{precision * recall}{precision + recall}$$\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Precision vs Recall\n", "\n", "# As with the previous exercises, let's look at the performance of a couple of classifiers\n", "# on the familiar Titanic dataset. Add a train/test split, then store the results in the\n", "# dictionary provided.\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "# Load the dataset\n", "X = pd.read_csv('titanic_data.csv')\n", "\n", "X = X._get_numeric_data()\n", "y = X['Survived']\n", "del X['Age'], X['Survived']\n", "\n", "\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.metrics import recall_score as recall\n", "from sklearn.metrics import precision_score as precision\n", "from sklearn.naive_bayes import GaussianNB\n", "\n", "# TODO: split the data into training and testing sets,\n", "# using the standard settings for train_test_split.\n", "# Then, train and test the classifiers with your newly split data instead of X and y.\n", "\n", "from sklearn.cross_validation import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", "\n", "\n", "results = {\n", " \"Naive Bayes Recall\": 0,\n", " \"Naive Bayes Precision\": 0,\n", " \"Decision Tree Recall\": 0,\n", " \"Decision Tree Precision\": 0\n", "}\n", "\n", "clf = DecisionTreeClassifier()\n", "clf.fit(X_train, y_train)\n", "print \"Decision Tree recall: {:.2f} and precision: {:.2f}\".format(recall(clf.predict(X_test),y_test),precision(clf.predict(X),y))\n", "\n", "results[\"Decision Tree Recall\"] = recall(clf.predict(X_test),y_test)\n", "results[\"Decision Tree Precision\"] = precision(clf.predict(X_test),y_test)\n", "\n", "clf = GaussianNB()\n", "clf.fit(X_train, y_train)\n", "print \"GaussianNB recall: {:.2f} and precision: {:.2f}\".format(recall(clf.predict(X_test),y_test),precision(clf.predict(X),y))\n", "\n", "results[\"Naive Bayes Recall\"] = recall(clf.predict(X_test),y_test)\n", "results[\"Naive Bayes Precision\"] = precision(clf.predict(X_test),y_test)\n", "\n", "\"\"\"\n", "Decision Tree recall: 0.48 and precision: 0.53\n", "GaussianNB recall: 0.69 and precision: 0.48\n", "\n", "\"\"\"" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/1-model-evaluation-and-validation/.ipynb_checkpoints/1.3.2 Validation-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Validation\n", "\n", "(Insert Train/Test split etc info from Evaluation Metrics notebook)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Where you use Training vs Testing data\n", "\n", "1. Train/test split.\n", "2. Feature transform e.g. PCA fit then PCA transform.\n", " - PCA fit on training features\n", " - PCA transform on training features\n", " - PCA transform on test features (usually after training SVC) -> Represent test data with principle components found in training data.\n", "3. Classifier e.g. SVM fit then SVM predict.\n", " - SVC fit on training features\n", " - SVC predict on test features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Validation\n", "\n", "**Problems with splitting data into training & testing data**:\n", "- Want to maximise size of both training and test sets, but there's a tradeoff.\n", "\n", "### K-fold cross-validation process:\n", "1. Partition dataset into k bins.\n", "2. Run k separate learning experiments.\n", " - Pick test set\n", " - Train\n", " - Test on testing set\n", "3. Average test results from these k experiments.\n", "\n", "Pick Train/Test or e.g. 10-fold CV based on priorities, which can be\n", "- Min training time (train/test)\n", "- Min run time (unclear but may as well do CV)\n", "- Max accuracy (CV)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'time' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcross_validation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mKFold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mt0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mkf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mKFold\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#length of dataset, no. of folds\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtrain_indices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_indices\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'time' is not defined" ] } ], "source": [ "from sklearn.cross_validation import KFold\n", "\n", "t0 = time()\n", "kf = KFold(len(data), 2) #length of dataset, no. of folds\n", "for train_indices, test_indices in kf:\n", " # Make training and testing datasets\n", " features_train = [word_data[ii] for ii in train_indices]\n", " features_test = [word_data[ii] for ii in test_indices]\n", " authors_train = [authors[ii] for ii in train_indices]\n", " authors_test = [authors[ii] for ii in test_indices]\n", "\n", "# Debugging\n", "print(\"train_indices: \", train_indices)\n", "print(\"authors_train: \", authors_train)\n", "print(\"authours_test: \"authors_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note \n", "**sklearn k-fold CV just splits data into equal-sized partitions - it doesn't shuffle the data.**\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Validation for Parameter Tuning\n", "\n", "### GridSearchCV\n", "- Systematically works through multiple combinations of parameter tunes, cross-validating as it goes to determine which tune gives the best performance." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}\n", "svr = svm.SVC()\n", "clf = grid_search.GridSearchCV(svr, parameters)\n", "clf.fit(iris.data, iris.target)\n", "\n", "print(\"Optimal parameter combination found: \", clf.best_params_)\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.cross_validation import train_test_split\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function train_test_split in module sklearn.cross_validation:\n", "\n", "train_test_split(*arrays, **options)\n", " Split arrays or matrices into random train and test subsets\n", " \n", " Quick utility that wraps input validation and\n", " ``next(iter(ShuffleSplit(n_samples)))`` and application to input\n", " data into a single call for splitting (and optionally subsampling)\n", " data in a oneliner.\n", " \n", " Read more in the :ref:`User Guide `.\n", " \n", " Parameters\n", " ----------\n", " *arrays : sequence of indexables with same length / shape[0]\n", " \n", " allowed inputs are lists, numpy arrays, scipy-sparse\n", " matrices or pandas dataframes.\n", " \n", " .. versionadded:: 0.16\n", " preserves input type instead of always casting to numpy array.\n", " \n", " test_size : float, int, or None (default is None)\n", " If float, should be between 0.0 and 1.0 and represent the\n", " proportion of the dataset to include in the test split. If\n", " int, represents the absolute number of test samples. If None,\n", " the value is automatically set to the complement of the train size.\n", " If train size is also None, test size is set to 0.25.\n", " \n", " train_size : float, int, or None (default is None)\n", " If float, should be between 0.0 and 1.0 and represent the\n", " proportion of the dataset to include in the train split. If\n", " int, represents the absolute number of train samples. If None,\n", " the value is automatically set to the complement of the test size.\n", " \n", " random_state : int or RandomState\n", " Pseudo-random number generator state used for random sampling.\n", " \n", " stratify : array-like or None (default is None)\n", " If not None, data is split in a stratified fashion, using this as\n", " the labels array.\n", " \n", " .. versionadded:: 0.17\n", " *stratify* splitting\n", " \n", " Returns\n", " -------\n", " splitting : list, length = 2 * len(arrays),\n", " List containing train-test split of inputs.\n", " \n", " .. versionadded:: 0.16\n", " Output type is the same as the input type.\n", " \n", " Examples\n", " --------\n", " >>> import numpy as np\n", " >>> from sklearn.cross_validation import train_test_split\n", " >>> X, y = np.arange(10).reshape((5, 2)), range(5)\n", " >>> X\n", " array([[0, 1],\n", " [2, 3],\n", " [4, 5],\n", " [6, 7],\n", " [8, 9]])\n", " >>> list(y)\n", " [0, 1, 2, 3, 4]\n", " \n", " >>> X_train, X_test, y_train, y_test = train_test_split(\n", " ... X, y, test_size=0.33, random_state=42)\n", " ...\n", " >>> X_train\n", " array([[4, 5],\n", " [0, 1],\n", " [6, 7]])\n", " >>> y_train\n", " [2, 0, 3]\n", " >>> X_test\n", " array([[2, 3],\n", " [8, 9]])\n", " >>> y_test\n", " [1, 4]\n", "\n" ] } ], "source": [ "help(train_test_split)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/1-model-evaluation-and-validation/1.3.1 Evaluation Metrics.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Training and Testing\n", "\n", "Benefits of testing: \n", "- Gives estimate of performance on an independent dataset\n", "- Serves as a check on overfitting\n", "\n", "## Train/Test Split in sklearn\n", "\n", "Look for cross-validation" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((150, 4), (150,))" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "from sklearn import cross_validation\n", "from sklearn import datasets\n", "from sklearn import svm\n", "\n", "iris = datasets.load_iris()\n", "iris.data.shape, iris.target.shape" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "X_train, X_test, y_train, y_test \\\n", " = cross_validation.train_test_split(iris.data, iris.target, test_size=0.4, random_state=0)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((90, 4), (90,))" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train.shape, y_train.shape" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((60, 4), (60,))" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_test.shape, y_test.shape" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.96666666666666667" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clf = svm.SVC(kernel='linear', C=1).fit(X_train, y_train)\n", "clf.score(X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Evaluation Metrics\n", "\n", "\n", "### 1. Accuracy \n", "Accuracy = (no. of items in a class labelled correctly / all items in that class)\n", "\n", "Shortcomings:\n", "- Not ideal for skewed cases (very few Persons of Interest -> Denominator 'All items in that class' is small.)\n", "- May want to err on side of guessing innocent (or guilty, depending on consequences of labelling) -> i.e. asymmetries favouring different types of error.\n", "\n", "## Confusion Matrix\n", "\n", "[Confusion Matrix](images/14-01.png)\n", "\n", "Note: Tuning parameters can move the boundaries.\n", "\n", "[Decision Tree Confusion Matrix](images/14-02.png)\n", "\n", "[7x7 Confusion Matrix](images/14-03.png)\n", "\n", "### Recall: P(alg identifies as A | is A)\n", "(rows for true in rows, predicted in cols)\n", "- is like 'lacer' backwards which is similar to 'liar', and the opposite of a lie is the truth, so the denominator is the true values.\n", "- recall: finding X. i.e. P(finding X | ...)\n", "- Recall = TP/(TP + FN)\n", "\n", "### Precision: P(is A | alg identifies as A)\n", "- (columns for true in rows, prediction in cols)\n", "Starts with 'pre', so denominator is predicted.\n", "- Precision = TP/(TP + FP)\n", "\n", "### True positives, false positives, false negatives\n", "\n", "## F1 Score\n", "The harmonic mean of precision and recall.\n", "\n", "$$F_1 = 2 * \\frac{precision * recall}{precision + recall}$$\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Precision vs Recall\n", "\n", "# As with the previous exercises, let's look at the performance of a couple of classifiers\n", "# on the familiar Titanic dataset. Add a train/test split, then store the results in the\n", "# dictionary provided.\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "# Load the dataset\n", "X = pd.read_csv('titanic_data.csv')\n", "\n", "X = X._get_numeric_data()\n", "y = X['Survived']\n", "del X['Age'], X['Survived']\n", "\n", "\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.metrics import recall_score as recall\n", "from sklearn.metrics import precision_score as precision\n", "from sklearn.naive_bayes import GaussianNB\n", "\n", "# TODO: split the data into training and testing sets,\n", "# using the standard settings for train_test_split.\n", "# Then, train and test the classifiers with your newly split data instead of X and y.\n", "\n", "from sklearn.cross_validation import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y)\n", "\n", "\n", "results = {\n", " \"Naive Bayes Recall\": 0,\n", " \"Naive Bayes Precision\": 0,\n", " \"Decision Tree Recall\": 0,\n", " \"Decision Tree Precision\": 0\n", "}\n", "\n", "clf = DecisionTreeClassifier()\n", "clf.fit(X_train, y_train)\n", "print \"Decision Tree recall: {:.2f} and precision: {:.2f}\".format(recall(clf.predict(X_test),y_test),precision(clf.predict(X),y))\n", "\n", "results[\"Decision Tree Recall\"] = recall(clf.predict(X_test),y_test)\n", "results[\"Decision Tree Precision\"] = precision(clf.predict(X_test),y_test)\n", "\n", "clf = GaussianNB()\n", "clf.fit(X_train, y_train)\n", "print \"GaussianNB recall: {:.2f} and precision: {:.2f}\".format(recall(clf.predict(X_test),y_test),precision(clf.predict(X),y))\n", "\n", "results[\"Naive Bayes Recall\"] = recall(clf.predict(X_test),y_test)\n", "results[\"Naive Bayes Precision\"] = precision(clf.predict(X_test),y_test)\n", "\n", "\"\"\"\n", "Decision Tree recall: 0.48 and precision: 0.53\n", "GaussianNB recall: 0.69 and precision: 0.48\n", "\n", "\"\"\"" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/1-model-evaluation-and-validation/1.3.2 Validation.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Validation\n", "\n", "(Insert Train/Test split etc info from Evaluation Metrics notebook)\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Where you use Training vs Testing data\n", "\n", "1. Train/test split.\n", "2. Feature transform e.g. PCA fit then PCA transform.\n", " - PCA fit on training features\n", " - PCA transform on training features\n", " - PCA transform on test features (usually after training SVC) -> Represent test data with principle components found in training data.\n", "3. Classifier e.g. SVM fit then SVM predict.\n", " - SVC fit on training features\n", " - SVC predict on test features" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Validation\n", "\n", "**Problems with splitting data into training & testing data**:\n", "- Want to maximise size of both training and test sets, but there's a tradeoff.\n", "\n", "### K-fold cross-validation process:\n", "1. Partition dataset into k bins.\n", "2. Run k separate learning experiments.\n", " - Pick test set\n", " - Train\n", " - Test on testing set\n", "3. Average test results from these k experiments.\n", "\n", "Pick Train/Test or e.g. 10-fold CV based on priorities, which can be\n", "- Min training time (train/test)\n", "- Min run time (unclear but may as well do CV)\n", "- Max accuracy (CV)\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'time' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcross_validation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mKFold\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mt0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mkf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mKFold\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;31m#length of dataset, no. of folds\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mtrain_indices\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtest_indices\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkf\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'time' is not defined" ] } ], "source": [ "from sklearn.cross_validation import KFold\n", "\n", "t0 = time()\n", "kf = KFold(len(data), 2) #length of dataset, no. of folds\n", "for train_indices, test_indices in kf:\n", " # Make training and testing datasets\n", " features_train = [word_data[ii] for ii in train_indices]\n", " features_test = [word_data[ii] for ii in test_indices]\n", " authors_train = [authors[ii] for ii in train_indices]\n", " authors_test = [authors[ii] for ii in test_indices]\n", "\n", "# Debugging\n", "print(\"train_indices: \", train_indices)\n", "print(\"authors_train: \", authors_train)\n", "print(\"authours_test: \"authors_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note \n", "**sklearn k-fold CV just splits data into equal-sized partitions - it doesn't shuffle the data.**\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cross-Validation for Parameter Tuning\n", "\n", "### GridSearchCV\n", "- Systematically works through multiple combinations of parameter tunes, cross-validating as it goes to determine which tune gives the best performance." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}\n", "svr = svm.SVC()\n", "clf = grid_search.GridSearchCV(svr, parameters)\n", "clf.fit(iris.data, iris.target)\n", "\n", "print(\"Optimal parameter combination found: \", clf.best_params_)\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.cross_validation import train_test_split\n", "\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function train_test_split in module sklearn.cross_validation:\n", "\n", "train_test_split(*arrays, **options)\n", " Split arrays or matrices into random train and test subsets\n", " \n", " Quick utility that wraps input validation and\n", " ``next(iter(ShuffleSplit(n_samples)))`` and application to input\n", " data into a single call for splitting (and optionally subsampling)\n", " data in a oneliner.\n", " \n", " Read more in the :ref:`User Guide `.\n", " \n", " Parameters\n", " ----------\n", " *arrays : sequence of indexables with same length / shape[0]\n", " \n", " allowed inputs are lists, numpy arrays, scipy-sparse\n", " matrices or pandas dataframes.\n", " \n", " .. versionadded:: 0.16\n", " preserves input type instead of always casting to numpy array.\n", " \n", " test_size : float, int, or None (default is None)\n", " If float, should be between 0.0 and 1.0 and represent the\n", " proportion of the dataset to include in the test split. If\n", " int, represents the absolute number of test samples. If None,\n", " the value is automatically set to the complement of the train size.\n", " If train size is also None, test size is set to 0.25.\n", " \n", " train_size : float, int, or None (default is None)\n", " If float, should be between 0.0 and 1.0 and represent the\n", " proportion of the dataset to include in the train split. If\n", " int, represents the absolute number of train samples. If None,\n", " the value is automatically set to the complement of the test size.\n", " \n", " random_state : int or RandomState\n", " Pseudo-random number generator state used for random sampling.\n", " \n", " stratify : array-like or None (default is None)\n", " If not None, data is split in a stratified fashion, using this as\n", " the labels array.\n", " \n", " .. versionadded:: 0.17\n", " *stratify* splitting\n", " \n", " Returns\n", " -------\n", " splitting : list, length = 2 * len(arrays),\n", " List containing train-test split of inputs.\n", " \n", " .. versionadded:: 0.16\n", " Output type is the same as the input type.\n", " \n", " Examples\n", " --------\n", " >>> import numpy as np\n", " >>> from sklearn.cross_validation import train_test_split\n", " >>> X, y = np.arange(10).reshape((5, 2)), range(5)\n", " >>> X\n", " array([[0, 1],\n", " [2, 3],\n", " [4, 5],\n", " [6, 7],\n", " [8, 9]])\n", " >>> list(y)\n", " [0, 1, 2, 3, 4]\n", " \n", " >>> X_train, X_test, y_train, y_test = train_test_split(\n", " ... X, y, test_size=0.33, random_state=42)\n", " ...\n", " >>> X_train\n", " array([[4, 5],\n", " [0, 1],\n", " [6, 7]])\n", " >>> y_train\n", " [2, 0, 3]\n", " >>> X_test\n", " array([[2, 3],\n", " [8, 9]])\n", " >>> y_test\n", " [1, 4]\n", "\n" ] } ], "source": [ "help(train_test_split)" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/1-model-evaluation-and-validation/1.4 Managing Error and Complexity.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Causes of Error\n", "\n", "Two main causes of error: Bias and Variance\n", "\n", "**Bias** due to a model being unable to represent the complexity of the underlying data and \n", "\n", "**Variance** due to a model being overly sensitive to the limited data it has been trained on. \n", "\n", "## Bias\n", "Error due to Bias - Accuracy and Underfitting\n", "Bias occurs when a model has enough data but is not complex enough to capture the underlying relationships. As a result, the model consistently and systematically misrepresents the data, leading to low accuracy in prediction. This is known as underfitting.\n", "\n", "Simply put, bias occurs when we have an inadequate model. An example might be when we have objects that are classified by color and shape, for example easter eggs, but our model can only partition and classify objects by color. It would therefore consistently mislabel future objects--for example labeling rainbows as easter eggs because they are colorful.\n", "\n", "Another example would be continuous data that is polynomial in nature, with a model that can only represent linear relationships. In this case it does not matter how much data we feed the model because it cannot represent the underlying relationship. To overcome error from bias, we need a more complex model.\n", "\n", "## Variance\n", "Error due to Variance - Precision and Overfitting\n", "When training a model, we typically use a limited number of samples from a larger population. If we repeatedly train a model with randomly selected subsets of data, we would expect its predictons to be different based on the specific examples given to it. Here variance is a measure of how much the predictions vary for any given test sample.\n", "\n", "Some variance is normal, but too much variance indicates that the model is unable to generalize its predictions to the larger population. High sensitivity to the training set is also known as overfitting, and generally occurs when either the model is too complex or when we do not have enough data to support it.\n", "\n", "We can typically reduce the variability of a model's predictions and increase precision by training on more data. If more data is unavailable, we can also control variance by limiting our model's complexity.\n", "\n", "## Improving the Validity of a Model\n", "There is a trade-off in the value of simplicity or complexity of a model given a fixed set of data. If it is too simple, our model cannot learn about the data and misrepresents the data. However if our model is too complex, we need more data to learn the underlying relationship. Otherwise it is very common for a model to infer relationships that might not actually exist in the data.\n", "\n", "The key is to find the sweet spot that minimizes bias and variance by finding the right level of model complexity. Of course with more data any model can improve, and different models may be optimal.\n", "\n", "To learn more about bias and variance, we recommend this essay by Scott Fortmann-Roe.\n", "\n", "In addition to the subset of data chosen for training, what features you use from a given dataset can also greatly affect the bias and variance of your model.\n", "\n", "## Bias-variance dilemma and no. of features\n", "High bias: Pays little attention to data, oversimplified\n", "- High error on training set\n", "- Low r^2, large SSE\n", "High variance: Pays too much attention to data (does not generalise well), overfits.\n", "- Much higher error on test set than on training data\n", "\n", "E.g. \n", "- few features used (if you have access to lots more) -> high bias.\n", "- Carefully minimised SSE (used lots of features, tuned parameters) -> High variance\n", "\n", "Want min number of features (simplicity) to achieve good accuracy (goodness of fit)\n", "- Few features, large r^2, low SSE.\n", "\n", "[overfit regression](images/p1-4-1-1.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Curse of Dimensionality\n", "As the number of **features or dimensions grows**, the amount of **data** we need to **generalise accurately** grows **exponentially**.\n", "\n", "e.g. KNN: distance or similarity function that assumes veerything is equally relevant, you'll have to see a lot of data before it washes itself away.\n", "\n", "e.g. 10 points uniformly distributed across a line segment. Each point owns a uniform part of the line segment. (// KNN)\n", "-> Move from a line segment to a 2D space. Each `x` still represents 1/10th of the space, but now it represents a bigger space. The farthest point that the first `x` is representing has a much larger distance. \n", "-> Q: How to make it such that each `x` has the same farthest-point-'diameter'? -> many more `x`s, e.g. 100.\n", "\n", "Think of it as points covering a space. If you want to cover the same amount of hyperspace...\n", "More features -> more volume to fill." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Learning Curves\n", "\n", "A **Learning Curve** is: a graph that compares the performance of a model on training and testing data over a varying number of training instances.\n", "\n", "- Should generally see performance improve as the number of training points increases.\n", "\n", "- By separating training and testing sets and graphing performance on each separately, we can get a better idea of how well the model can generalize to unseen data.\n", "\n", "A learning curve allows us to **verify when a model has learned as much as it can about the data**. When this occurs, the performance on both training and testing sets plateau and there is a consistent gap between the two error rates.\n", "\n", "### Bias\n", "When the training and testing errors converge and are quite high this usually means \n", "-> the model is biased. \n", "- No matter how much data we feed it, the model cannot represent the underlying relationship and therefore has systematic high errors.\n", "\n", "### Variance\n", "When there is a large gap between the training and testing error this generally means \n", "-> the model suffers from high variance. \n", "- Unlike a biased model, models that suffer from variance generally require more data to improve. \n", "- We can also limit variance by simplifying the model to represent only the most important features of the data.\n", "\n", "## Ideal Learning Curve\n", "The ultimate goal for a model is one that **has good performance that generalizes well to unseen data**. In this case, both the **testing and training curves converge at similar values**. \n", "- The smaller the gap between the training and testing sets, the better our model generalizes. \n", "- The better the performance on the testing set, the better our model performs.\n", "\n", "## Model Complexity\n", "The visual technique of graphing performance is not limited to learning. With most models, we can change the complexity by changing the inputs or parameters.\n", "\n", "A **model complexity graph** looks at training and testing curves as the model's complexity varies. The most common trend is that **as a model increases (in complexity), bias will fall off and variance will rise.**\n", "\n", "Scikit-learn provides a tool for validation curves which can be used to monitor model complexity by varying the parameters of a model. We'll explore the specifics of how these parameters affect complexity in the next course on supervised learning.\n", "\n", "### Learning Curves and Model Complexity\n", "So what is the relationship between learning curves and model complexity?\n", "\n", "If we were to take the learning curves of the same machine learning algorithm with the same fixed set of data, but create several graphs at different levels of model complexity, all the learning curve graphs would fit together into a 3D model complexity graph.\n", "\n", "If we took the final testing and training errors for each model complexity and visualized them along the complexity of the model we would be able to see how well the model performs as the model complexity increases.\n", "\n", "## Practical use of Model Complexity\n", "Knowing that **we can identify issues with bias and variance by analyzing a model complexity graph**, we now have a visual tool to help identify ways to optimize our models.\n", "\n", "This will be one of the core tools we use in the upcoming project.\n", "\n", "In the final section, we will introduce cross validation and grid search, which will give us a concrete, systematic way of searching through different levels of complexity to find the optimal model that complexity and learning curves give us a holistic understanding of." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/.ipynb_checkpoints/2.4.1 Kernel Methods and Support Vector Machines-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Support Vector Machines\n", "\n", "(SVM 1)\n", "\n", "Drawing it in the middle gives a biggest 'demilitarised' zone.\n", "Intuition:\n", "* There might bu other minuses near the minunes we can see that we risk chopping off if a line gets too close to the current minuses.\n", "* This data is just a sample from the population. // NN algorithms. Lines very close to e.g. the pluses -> believing training data too much. Overfitting.\n", "* Middle line is **consistent with the data but commits least to it.**\n", "* Interesting because it's not a complex overfit. They're all just lines.\n", "\n", "Hyperplanes:\n", "$$y = w^Tx+b$$\n", "* y represents the classification label\n", "* w representns parameters for our plane\n", "* b moves it out of the origin\n", "\n", "Taking some new point, projecting it onto the line, looking at the value you get when you project it.\n", "\n", "Value is positive if you are in the class, negative if you're not.\n", "\n", "Decision boundary being as far away from the data as possible without being inconsistent with it.\n", "\n", "Hyperplane equation at the decision boundary (neither positive nor negative output) is $w^Tx + b = 0$. \n", "\n", "What are the equations of the grey lines?\n", "* We know labels are {-1, +1}. Line that brushes up against positive example: want it s.t. the output of the line is +1 on the first point that it encounters.\n", "* $w^Tx+b=1$ for top grey line. Similarly, $w^T+b=-1$ for bottom grey line.\n", "\n", "(img)\n", "\n", "Need to maximise distance between two grey lines. The lines are parallel to one another. Choose one point on each grey line such that the line between them is perpendicular to the parallel lines.\n", "\n", "* Point on positive line: $w^Tx_1+b=1$\n", "* Point on negative line: $w^Tx_2+b-1$\n", "* Subtract to get line $w^T(x_1-x_2)=2\n", "* Divide both sides by the length of w: \n", "$$\\frac{w_t}{||w||}(x_1-x_2)=\\frac{2}{||w||}$$\n", "\n", "LHS: $x_1-x_2$ is projected onto the normalised vector (unit length, some direction). This is callled the **margin**.\n", "\n", "w represents a vector perpendicular to the line (eqn of a plane)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So we want to maximise $\\frac{2}{||w||}$ while classifying everything correctly. Let's turn the condition into a mathematical expression.\n", "\n", "That is,\n", "$$y_i(w^Tx_i + b) \\geq 1 \\forall i$$.\n", "\n", "* Q: Why geq 1 as opposed to geq 0?\n", "\n", "* Solve equivalent problem (LHS):\n", "$$\\min \\frac{1}{2}||w||^2$$\n", "\n", "This is easier because it's a quadratic programming problem and people know how to solvo those in straightforward ways. They always have a unique solution.\n", "\n", "Transform into quadratic programming form:\n", "$$\\max W(\\alpha) = \\sum_i \\alpha_i - \\frac{1}{2}\\sum_{i,j}\\alpha_i\\alpha_j y_iy_jx_i^Tx_j$$\n", "s.t. $\\alpha_i \\geq 0, \\sum_i \\alpha_i y_i = 0$.\n", "\n", "Properties\n", "* Once you find $\\alpha$, you can recover w: $w=\\sum_i\\alpha_iy_ix_i$.\n", "* You can also recover b from having w.\n", "* It turns out that those $\\alpha_i$s are mostly zero. -> Only a few x-s matter. Cause some datapoints don't factor into (don't matter for) w. -> Can find all of support you need in some vectors with the non-zero $\\alpha_i$s. -> **machine that only needs a few support vectors**.\n", "* Which vectors matter (will be part of the support vectors)? (Those closer to the line)\n", "\n", "* Similarities to Nearest Neighbours cause only local points matter. Like KNN except you've already done the work to figure out which ones you need and which ones you can throw away. -> Like instance-based learning but it's not completely lazy. (?)\n", "\n", "Dot product of $x_i^Tx_j$ -> Length of the projection. Measure of similarity (of direction) -> If they point in opposite directions it'll be a negative, if orthogonal it'll be 0, if in same direction it'll be positive and bigger.\n", "* Eqn: Find all pairs of points, figure out which ones matter, and think about how they relate to one another wrt their output labels wrt how similar they are.\n", "\n", "## Supposing not linearly separable\n", "\n", "* If have **outlier or intruder**: Can tradeoff: Maximise margin Makes the minimal set of errors while maximising the margin if you were allowed to flip a few points from pos to neg or vv.\n", "* 'Linearly married': minuses in a ring around the pluses. **Transform datapoints**.\n", " - e.g. $\\Phi(q) = $\n", " - $\\Phi(x)^T\\Phi(y) = (x_1y_1+x_2y_2)^2 = (x^T y)^2$ (dot product, circle)\n", " - Different notion of similarity: Now whether or not you fall in a circle vs direction. Distance in different spaces.\n", " - Chose this form but doesn't require that you do this transformation. Can still simply compute the dot product.\n", " - This is the **kernel trick**.\n", " - Turns out for any function that you use, there is some transformation into some higher dimensional space that happens to represent your kernel.\n", " \n", "### Kernel Trick\n", "- The kernel is the function itself. e.g. $k = (x^Ty)^2$\n", "$$\\max W(\\alpha) = \\sum_i \\alpha_i - \\frac{1}{2}\\sum_{i,j}\\alpha_i\\alpha_j y_iy_jk(x_i,x_j)$$\n", "\n", "\n", "Kernel is mech by which we **measure of similarity** , mech by which we **inject domain knowledge** into the SVM algorithm. Just like KNN.\n", "\n", "And in higher dimensional space, your points are linearly separable.\n", "\n", "**Common kernels**\n", "* Polynomial kernel $k = (x^Ty+c)^p$ -> Like polynomial regression.\n", "* $k = e^{\\frac{-||x-y||^2}{2\\sigma^2}}$. If on top of each other, similarity is 1. If very distant, k close to 1. It's symmetric. Like a Gaussian with some width.\n", "* $k = tanh(\\betax^Ty + \\theta)$ -> Like a sigmoid.\n", "\n", "**Good kernels**: Captures your domain knowledge, your notion of similarity.\n", "\n", "**Requirements: Mercer Condition**: it acts like a distance. Positive semidefinite (well-behaved).\n", "- In practice stuff often works even if it doesn't satisfy the Mercer Condition so it's que merciful.\n", "\n", "#### Applications\n", "x, y can be discrete variables as long as you have some notion of similarity than you can define that returns a number. You can think about strings, graphs, images." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "- Margins and relation to genelatisation and overfitting\n", "- Want to max margin\n", "- Optimisation problem for finding linear separator that has max margin (quadratic programming)\n", "- Support vectors: SVM is as lazy as necessary\n", "- Kernel trick (transformations for non-linearly-separable data)\n", "\n", "General alg q: What are the levers we have for expressing domain knowledge? " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/.ipynb_checkpoints/2.5 Instance-based Learning-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Instance-Based Learning\n", "*Nonparametric Models*\n", "\n", "**Prev SL tasks**: Given a bunch of data (x,y) and we would learn some functions, e.g a line, to represent them. And then we'd effectively throw the data away when we're making our predictions.\n", "\n", "New model **Version 1**:\n", "Instead, put all data (x,y) in a database. Then when we want to predict y for x, we look it up as **f(x) = lookup(x).\n", "\n", "- Remembers \n", " - But no generalisation :( \n", " - Overfitting problems, sensitive to noise\n", " - If same x has multiple ys, will return all of them.\n", "- It's fast: No 'wasted time' doing learning\n", "\n", "e.g. housing prices example. -> **K Nearest Neighbours**\n", "Parameters:\n", "- Number of nearest neighbours\n", "- Some notion of distance. \n", " - Note: Distance might be straight-line distance, driving distance, may need to take into account that crossing a highway in Atlanta is metaphorically a BIG distance.\n", " - Some measure of similarity\n", "\n", "Free parameters" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAB4gAAASgCAYAAAAKMRWZAAAKCGlDQ1BJQ0MgUHJvZmlsZQAASImF\nlgdUFNcexu/M9kbZhaX33jssIL036VVUlgWWLixVxIYEFYgoIiKgSAlVwWiosSCiWAgCCljQLBIE\nlBgsgIpKBkhikvfOe/8599zf+fbeb/5zd86ZDwCSKzMhIRbmAyAuPpnj5WAtHRAYJI3jAiygAj4g\nApSZrKQEKw8PV4DUn/M/a3EUQKvzPY1Vr//8/X8Wf1h4EgsAyANhBiuBk4zwAYR90pITVnkcYQEO\n0hTC86vMXmMYvcqh6yy8tsbHywZhdQDwZCaTwwaAyEB06VQWG/EhBiCsHR8WFY/wqr85K5IZhvBN\nhNUjYlPSEX63uiYubhuik+QRVg79myf7H/6hf/kzmey/OC42hfXHc62eCDk83tcbmUWRIQ4igCaI\nBSkgHUiDBMAB2xAlClHCkbP/7/sYa/tskJUJYDuyIwqwQSRIRvbb/83Le80pGaQBJrImHFFckctm\n9X9ct3xLX3OF6Le/aondABjnIiL7q8aUA6DzOQC0xa+a3BukncMAXBpkpXBS17XVowcYQAS8QAB5\nQySBHFAGGkAXGAJTYAnsgDNwBz4gEGwBLKTfOKSrNJAJ9oIckAcOg2OgFFSAalAPzoLzoB1cBFfB\nDXAHDIIR8BhwwRR4CebBIliGIAgHUSAaJAJJQQqQGqQLMSBzyA5yhbygQCgEYkPxUAqUCe2D8qBC\nqBSqhBqg76FO6Cp0CxqCHkIT0Cz0BvoIo2AyLABLwIqwFsyArWAX2AfeDLPhRDgDzoYPwSVwFXwG\nboOvwnfgEZgLv4QXUABFQtFRMigNFANlg3JHBaEiUBzULlQuqhhVhWpGdaH6UPdQXNQc6gMai6ah\npdEaaFO0I9oXzUInoneh89Gl6Hp0G7oXfQ89gZ5Hf8FQMOIYNYwJxgkTgGFj0jA5mGJMLaYVcx0z\ngpnCLGKxWDpWCWuEdcQGYqOxO7D52JPYFmw3dgg7iV3A4XAiODWcGc4dx8Ql43JwJ3BncFdww7gp\n3Hs8CS+F18Xb44Pw8fgsfDG+EX8ZP4yfxi8T+AgKBBOCOyGMsJ1QQKghdBHuEqYIy0R+ohLRjOhD\njCbuJZYQm4nXiePEtyQSSZZkTPIkRZH2kEpI50g3SROkD2QqWZVsQw4mp5APkevI3eSH5LcUCkWR\nYkkJoiRTDlEaKNcoTynveWg8mjxOPGE8u3nKeNp4hnle8RJ4FXiteLfwZvAW817gvcs7x0fgU+Sz\n4WPy7eIr4+vkG+Nb4Kfx6/C788fx5/M38t/in6HiqIpUO2oYNZtaTb1GnaShaHI0GxqLto9WQ7tO\nmxLACigJOAlEC+QJnBUYEJgXpArqC/oJpguWCV4S5NJRdEW6Ez2WXkA/Tx+lfxSSELISChc6KNQs\nNCy0JCwmbCkcLpwr3CI8IvxRRFrETiRG5IhIu8gTUbSoqqinaJroKdHronNiAmKmYiyxXLHzYo/E\nYXFVcS/xHeLV4v3iCxKSEg4SCRInJK5JzEnSJS0loyWLJC9LzkrRpMyloqSKpK5IvZAWlLaSjpUu\nke6VnpcRl3GUSZGplBmQWZZVkvWVzZJtkX0iR5RjyEXIFcn1yM3LS8m7yWfKN8k/UiAoMBQiFY4r\n9CksKSop+ivuV2xXnFESVnJSylBqUhpXpihbKCcqVynfV8GqMFRiVE6qDKrCqgaqkaplqnfVYDVD\ntSi1k2pD6hh1Y/V49Sr1MQ2yhpVGqkaTxoQmXdNVM0uzXfOVlrxWkNYRrT6tL9oG2rHaNdqPdag6\nzjpZOl06b3RVdVm6Zbr39Sh69nq79Tr0Xuur6Yfrn9J/YEAzcDPYb9Bj8NnQyJBj2Gw4ayRvFGJU\nbjTGEGB4MPIZN40xxtbGu40vGn8wMTRJNjlv8puphmmMaaPpzAalDeEbajZMmsmaMc0qzbjm0uYh\n5qfNuRYyFkyLKotnlnKWYZa1ltNWKlbRVmesXllrW3OsW62XbExsdtp026JsHWxzbQfsqHa+dqV2\nT+1l7dn2TfbzDgYOOxy6HTGOLo5HHMecJJxYTg1O885Gzjude13ILt4upS7PXFVdOa5dbrCbs9tR\nt/GNChvjN7a7A3cn96PuTzyUPBI9fvTEenp4lnk+99LxyvTq86Z5b/Vu9F70sfYp8Hnsq+yb4tvj\nx+sX7Nfgt+Rv61/ozw3QCtgZcCdQNDAqsCMIF+QXVBu0sMlu07FNU8EGwTnBo5uVNqdvvrVFdEvs\nlktbebcyt14IwYT4hzSGfGK6M6uYC6FOoeWh8ywb1nHWyzDLsKKw2XCz8MLw6QiziMKIGbYZ+yh7\nNtIisjhyLsomqjTqdbRjdEX0Uox7TF3MSqx/bEscPi4krjOeGh8T37tNclv6tqEEtYScBG6iSeKx\nxHmOC6c2CUranNSRLIB8PPtTlFO+SZlINU8tS32f5pd2IZ0/PT69f7vq9oPbpzPsM77bgd7B2tGT\nKZO5N3Nip9XOyl3QrtBdPbvldmfvntrjsKd+L3FvzN6fsrSzCrPe7fPf15Utkb0ne/Ibh2+acnhy\nODlj+033VxxAH4g6MHBQ7+CJg19yw3Jv52nnFed9ymfl3/5W59uSb1cORRwaKDAsOHUYezj+8OgR\niyP1hfyFGYWTR92OthVJF+UWvTu29ditYv3iiuPE4ynHuSWuJR0n5E8cPvGpNLJ0pMy6rKVcvPxg\n+dLJsJPDpyxPNVdIVORVfDwddfpBpUNlW5ViVXE1tjq1+nmNX03fd4zvGmpFa/NqP9fF13Hrvep7\nG4waGhrFGwua4KaUptkzwWcGz9qe7WjWaK5sobfknQPnUs69+D7k+9HzLud7LjAuNP+g8EN5K601\ntw1q29423x7Zzu0I7BjqdO7s6TLtav1R88e6izIXyy4JXiq4TLycfXnlSsaVhe6E7rmr7KuTPVt7\nHl8LuHa/17N34LrL9Zs37G9c67Pqu3LT7ObFWya3Om8zbrffMbzT1m/Q3/qTwU+tA4YDbXeN7nYM\nGg92DW0YujxsMXz1nu29G/ed7t8Z2TgyNOo7+mAseIz7IOzBzMPYh68fpT5afrxnHDOe+4TvSfFT\n8adVP6v83MI15F6asJ3of+b97PEka/LlL0m/fJrKfk55XjwtNd0woztzcdZ+dvDFphdTLxNeLs/l\n/Mr/a/kr5Vc//Gb5W/98wPzUa87rlTf5b0Xe1r3Tf9ez4LHwdDFucXkp973I+/oPjA99H/0/Ti+n\nfcJ9Kvms8rnri8uX8ZW4lZUEJoe5FgVQyIAjIgB4UwcAJRDJDoNIFuJZz1x/5Bnob8nmTwaD1V+5\ngrWey9bKEIA6SwB89wDgimSUU8hQQJiMzKsR0ccSwHp6f40/KilCT3f9HmQOEk3er6y8lQAA1wXA\nZ87KyvLJlZXPNUizDwHoTvy/vf2L1/PgamGRlHxaZJX6x4i54F/1O9WvvprLW0UNAAAACXBIWXMA\nABkPAAAbUAFDvWypAABAAElEQVR4Aey92XccSXbmebHvAEmQIME1mZnMvbJUqpJUas1Ip2de5ky3\nzpl51YNepD9Leuj+H/qx55yeOV3dKpVqyUpmMsnkBoIAse87EJjvMwuLsHB4RHhsQAT4Oekwc7Nr\n16793MM8wq+bmZk2ERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABEehsAl2dbb6sF4GWEdBno2VopVgEREAE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEzo3A6bnVpIpEoEMIyAnWISfqkpup6/CSn2A1TwRE\nQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREoEBATusCCkUugoAccxdB/XLWqWvpcp5XtUoE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERKB9CMi53D7nomMtkVOvY0/duRqu6+Rccasy\nERABERABERABERABERABERABERABERABERABERABERABEaibgJzIdaN7PwrK8fd+nOdqrdR1UI2Q\n8kVABERABERABERABERABERABERABERABERABERABERABETgchCQA/lynMe6WyHHYN3oOrKgzndH\nnjYZLQIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAItJyDHccsRt0cFchi2x3lohRU6\nt62gKp0iIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi8P4QkNP4Ep5rOREvx0nVebwc\n51GtEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIF2JyCncbufoSr2ybFYBVCbZuu8\ntemJkVkiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi8J4RkMO4w064HI2dccJ0njrj\nPMlKERABERABERABERABERABERABERABERABERABERABERABEXjfCchh3OZXgByP7XuCdG7a99zI\nMhEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQgeoE5CyuzujcJeSEPHfkFSvU+aiI\nR5kiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIdSkDO4jY5cXJIXvyJ0Dm4+HOQ\nZoHOSxoVpYmACIiACIiACIiACIiACIiACIiACIiACIiACIiACIhAZxGQU7I9z5fOywWeFznBLga+\nuGfnLlbZWUlSBERABERABERABERABERABERABERABERABERABERABESgPQjIAZr9PIhVdlZNkZTz\nrSkYMyt5n3m/z23PfIFIUAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQARE4L0m8D47S9/n\ntp/rRS+nXetxvw+M34c2tv5KUQ0iIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUJ3A\n++BIfR/aWP1Mt0hCjr0WgYXay8b2srWndWdemkVABERABERABERABERABERABERABERABERABERA\nBERABETgYghcNsfqZWvPxVwViVrl9EsAacJhpzPtdPubcAqlQgREQAREQAREQAREQAREQAREQARE\nQAREQAREQAREQAREQAQuFYFOd7R2uv1tdTHJGdi809GpLDvV7uadOWkSAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQAREQAREQgfeLQKc6XDvV7ra6uuQcbPx0dBLDTrK18TNzfhrE9fxYqyYREAER\nEAEREAEREAEREAEREAEREAEREAEREAEREAERkJOwNddAJ3HtJFtbc7Ya0CrHVv3wOoFdJ9hY6xm4\njG2qlYHkRUAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAE2ovAZXRYdkKbOsHG9rpSYY2c\nbbWfknZn1u72BeKdYmewV6EIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAINJtApzg4\n293Odrev2ddNQ/rkpMuOr11ZtaNd7WhT9jMtSREQAREQAREQAREQAREQAREQAREQAREQAREQAREQ\nAREQARFoHwLt6PxsR5t4xtrVrva5mmCJHHnZTke7cWoHe9rBhmxnT1IiIAIiIAIiIAIiIAIiIAIi\nIAIiIAIiIAIiIAIiIAIiIAIicDkJtINDtB1siM9uu9kT29YWcTn5Kp+GduNzUfZcVL2Vz45yRUAE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEkgQuykF6UfUm2x+O282eYNeFh3L8lT8F\n7cLmvO047/rKn4HsOZ1oc/bWSVIEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERKCdCHSi\n4/G8bT7v+spdH+1iRzn7LiRdjrWz2NuByXnZcF71nKWcntJu9qRbqVQREAEREAEREAEREAEREAER\nEAEREAEREAEREAEREAEREAERqJ1Auzkrz8ue86qn0hlpBxsq2XeueXLIleK+aB6trr/V+ktpFo8u\nqt6iBYqJgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQGcQuChnZqvrbbX+amf3ouuv\nZt+55ctx51FfNIdW1t9K3fGFel71xHUqLgIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi\nIALvE4HzcnK2sp5W6s5yLVx0/VlsbKmMnHpmF8mgVXW3Si8vxlbqbvbF3km2Nrvt0icCIiACIiAC\nIiACIiACIiACIiACIiACIiACIiACIiACItAYgU5yJLbS1lbpbpXeLGf9IuvOYl9LZd5nB9pFtb1V\n9bZCbyt0Zr2gL7LurDZKTgREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqEbhIR2Qr\n6m6FTvJrld5K5+Yi661mV0vz31cn3EW1u9n1NlNfM3VVumjPq55KNihPBERABERABERABERABERA\nBERABERABERABERABERABERABNqJwHk5SJtZTzN18Vw0W1/W83tR9Wa1r+ly76Oz7iLa3Mw6m6Wr\nWXqSF2Wr9CbraYfj96mt7cBbNoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIhATOB9cuy1\nqq3N0tssPTy/zdQVXy+V4hdRZyV7Wpr3vjm4zru9zayvGbqaoSNckM3UFXTWGraDDbXaLHkREAER\nEAEREAEREAEREAEREAEREAEREAEREAEREAEREIHLQaAdnIrNtKEZupqhI1wdzdQVdFYKz7u+Sra0\nNO99cbCddzubVV8z9LSLjkoXcjNsrKRfeSIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIg\nAiLQLgRa7Yhshv520cFz1gxbajn3511fLbY1RfZ9cMyddxubUV+jOi66fPLibNSepL52PX5f2tmu\n/GWXCIiACIiACIiACIiACIiACIiACIiACIiACIiACIjA5SZw6R13+dPX7HY2qu+iyxNLozbU+sk4\n7/pqta8h+cvu0DrP9jWjrkZ0XFTZcAE2Un/QUU94UfXWY6vKiIAIiIAIiIAIiIAIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIXA4CF+VAbEa9jei4qLLhqmmk/qAja3iedWW1qSlyl9m5dl5ta0Y99eo473Lh\noqu33lC+XNgqveXqU7oIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAInBeBVjkcG9Vb\nb/nzLhefp3rrjnVkiZ9XPVlsaZrMZXXInVe7Gq2n3vL1lKunDC+0esslL9Jm6UnqbdZxu9vXrHZK\njwiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAi8zwTa3eHXLPvq1VNPuXrK8Bqst1y4fhst\nH/RUC8+rnmp2NC3/MjrFzqtNjdRTb9lay9UqzwurnjLxBdlo+VhXWrzV+tPqVJoIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIVCLQaidio/rrKV9rmVrlA896y7F8I2VD/VnC86oniy0N\ny1w2Z9t5tKfROmot327y4aKr1a5QLi1spq40/UoTAREQAREQAREQAREQAREQAREQAREQAREQAREQ\nAREQAREQgXYh0ExnY726ai3XbvLJc1mrfcnyWY7Po44sdjQsc9kcc61uTyP6ay3bSvlW6k67KGut\nL01H1rTzrCurTZITAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQARHobALn6RxstK5ay9ci\nX4ssz3ir5eOrqta64rJZ4q3Wn8WGpshcFmfaebSj3jpqLVeLfDvIxhdiLfbE5crFm62vXD1KFwER\nEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIFmE2i2Q7FefbWUawdZnoda7IjPW73lYh3V\n4udRRzUbGsq/DA64VrehEf21lG2FbCt0hguuFt2hTAgbKRt01BNeVL312KoyIiACIiACIiACIiAC\nIiACIiACIiACIiACIiACIiACIiAC50vgohx/jdRba9la5LPKZpXj2WyVbPJKqaWeZNksx63Wn8WG\numUug8OslW2oV3et5bLKZ5HLIsMLJqtcrbLhYqxFfyhTKWy2vkp1KU8EREAEREAEREAEREAEREAE\nREAEREAEREAEREAEREAEREAE6iHQbMdhPfpqKZNVNotcFhkyzSoX+Ncq32i5UL5SWK9NlXSeW16n\nO91aaX+9umspl1U2i1wWGV5YWeSyyMQXaa3yzSob66k13ojNtdYleREQAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQAREQgfYkcFGOvkbqrbVsFvksMjyDWeSyyGTVFa6arDqDfAjrLRfKVwpbqbtS\nvQ3ndaqTrNV216s/a7lmymXR1SwZXnBZdCUvzHrKJHWE42bqCjoVioAIiIAIiIAIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIiIAIiEAjBJrpLKxHV9YyWeTOU4bMs9RXi1zyPGbVnyyX9bjV+rPakVmuU51t\nrbS7Ht21lMki2wyZZujghZRFT7jgapENZWqtIy5Xb7xeO+utT+VEQAREQAREQAREQAREQAREQARE\nQAREQAREQAREQAREQATal8B5O/jqra+WcllkmyHTDB28MrLoCVdQLbKNlAllq4X12FNNZ0vzO9FR\n1kqb69GdtUwWuWoy1fJ5sVSTaTQ/XJDV9AS5ENYqH8rFYTN0xPoUFwEREAEREAEREAEREAEREAER\nEAEREAEREAEREAEREAEREIFmEWiGo7BWHVnlq8k1mk+G56EjnKtqdQW5OKynTFy+UryVuivVW1de\nJzrcWmFzPTprKVNNtt3zeXFVszFcgFnlgnwtuuMytcTrsakW/ZIVAREQAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQARG4PARa7eyrR3/WMlnkqsm0e358pVWzNZYN8XrKhLLlwlboLFdXw+md5Dhr\npa216s4qn0WukkylPJ78SvmV8qqVzZKfVYZy3KrZ46XK/220fHnNrc/pZNtbT0c1iIAIiIAIiIAI\n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\nQAREIKsJUAxeyWI4WLrmmvDHfs/MTLs76evXrttXX31l3d3dblHMcwX5BVZaXurr6jY2RNbSW11L\nN86GdbMeWtVSdG+D5TCth5tgkU1307kcOC4KwowKIiACIiACIiACIiACIiACIiACIiACIiACWycg\ngXjr7FRSBERABERABERABERglwnExc9dbmpHq6dQS3fPo6OjbkX8uPOxzc7NJtuorKq09957zz76\n6CM7fvy4W/rGBeKtjpvr8dIVM+ucmppyi9tDhw5ZXV2dr98bOsD6t9pGqENbERABERABERABERAB\nERABERABERABERCB3CQggTg3r5t6LQIiIAIiIAIiIAIikMUEKL7SJTLdOh85csTOnjvrgjGFY1rA\ndnR02MWLF+3dd991QXenrHvZ3tGjR21+ft7X6K2trfG2ampq3LI4IMtlcZgMGcMYwjaMTVsREAER\nEAEREAEREAEREAEREAEREAEREIG1CUggXpuPzoqACIiACIiACIiACIjApglQtKyqqrJTp07Zv//7\nv9vFDy7a5MSkC5t0/9zS3GLHjh9zC19a9+5UqKystDNnzlhbW5u7sy4qKrKmpiYXqveLkMpx7Jex\n7NR1Vz0iIAIiIAIiIAIiIAIiIAIiIAIiIAIisBkCEog3Q0t5RUAEREAEREAEREAERGADBChgUpxt\nbm52i+GTJ0+6y2davtJamOJxQ0PDjq8LzLWcufYwo4IIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI\nrERAAvFKVJQmAiIgAiIgAiIgAiIgAtskQJGYYjBF4sbGRltcXPQamc71huNrDm+zqRWLU4xmkLXt\niniUKAIiIAIiIAIiIAIiIAIiIAIiIAIiIAKvLQEJxK/tpdfARUAEREAEREAEREAEdpsAxdkgCO92\nW5n1s90gEmee07EIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiMDrSyD/9R26Ri4CIiACIiACIiACIiAC\n+5uArIf39/XV6ERABERABERABERABERABERABERABERgKwRkQbwVaiojAiIgAiIgAiIgAiIgAhsg\nELfgje8Hy+INVKEsIiACIiACGyYQudaHc/0Nl1BGERABERABERABERABERABEXgdCUggfh2vusYs\nAiKQcwSCqCBLsJy7dOqwCIjAa05gtef2aumvOS4NXwREYB0Cm5U/N5t/neaz/HQYLbvJ/RVE4niW\n+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\nCBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/G\nuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFg\nUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrE\ne30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMF\nFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7\nFVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQGCygQDwaVjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwWECBeDCodAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENirgALxXp+M\ncxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGABBeLB\noNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI\n9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYL\nKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2\nKqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z\n5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSD\nQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ\n7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGCygQDwaVjgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwW\nUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjs\nVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwWECBeDCodAQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30y\nzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgH\ng0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg\n3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgs\noEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDY\nq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQGCygQDwaVjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECAwWMfeKpwAAEAASURBVECBeDCodAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xz\nESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg\n0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3\n+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgso\nEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYq\noEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAXgUUiPf6ZJyLAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGCygQDwaVjgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE9iqgQLzXJ+NcBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwWECBeDCodAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9Phnn\nIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINB\npSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv\n9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQ\nIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxV\nQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\nYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTKn\nz/XGFBJfLgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ3KaBOdZfag++lQDwY9JbTKQjfMrD0\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECZwuoYZ1N9uZtUCB+8+y33Nm/vtiiJIYAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQGAvAupbe3kSC+dQIF6AeROm/WF5E9DdkgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4NYF1MFunXj7DRSIt1uJJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwL0WeOZen/5+Hj7+hUS9nqoDfQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIPXCA/UZztA3+5\n+3p5PkG8r+fhNAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELg1AQXiW6OVmAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAvsSUCC+nefh4/C34yorAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIDA4xBQb7ul56xAPBb2rt6ocR8XAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTdT4C5q\nVndVf3szHe/03grEY7jv4o2Zf8CyHXNyWQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhcXyBr\nV9leP9P6zsh/2/dYP8EDWVUgvh8P0pv9fjwnpyRAgAABAgQIECBAgAABAgQIECBAgAABAgQIPGYB\nNa178PSfuQdnfGxHrH9wnnpsL97rJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBACUfPKrwfx\ngh7Ki/AJ4vOeZC3enrdTNAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECtyGghneGqgLxdqzb\nemP5lxPbn4FIAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB+ytwm3Wx26rl3V/thZMrEC/ANNN7\nfEPd5h+g5uUbEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELgU2Gudao81vUu0vXQUiJefxG28\ngW6a86b7l1+tFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLXE7hpDeum+3unvo2cvfvcuzkF\n4v4jG/mGiVz51b/b+uzIs6zfySoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBmwlct7aV9bTr\n7u+demSuXv57OadAfLuP7aZvupvuv91XJzsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBnxW4\naY3rpvt/9kRmLgUUiC8p5k/5Xo3uvhdvdG/2u3d3RwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngdsV2EMdTB3u4hkrEN/um/02su/hD9BtvC45CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE7peA\nutX9el7zaR97gXjEvxS4bo5z/8Bc9z738G3pyAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvdM\n4Jxa1rl1skpxzn3qvtofkaPmu1f9x1ogHvXQr5Mn9py779z4e/UmdFgCBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIEHIXBuTes6dbOAOvc+S7ij8izl3+X8Yy0Qj3gYt/mG2fqH4TbPMMJIDgIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgYcnsKVGtbXedV2dLWe4bu4Hve+xFYhHvFH28mYe8Voe9Jvb\niyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIELg1ga21qq1x1znoqLrdbZ7xOq/rVvc8lgLxnh/q\nOW/cPb+OW32jSk6AAAECBAgQIECAAAECBAgQIECAAAECBAgQILBbga01rHPqYm/Gi936Ot6Msw27\n52MpEA8D25ho1Jt7VJ6NxxZGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4EYCo+pbo/Lc6MU8\nxM0PvUAcb5ybXufkuKs36jlnuunrt58AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAT+Aualbn\n1t9GnGlEjp7XLuYeeoH4psjnPPwtsadiTq3H69kSc9PXbT8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBLQJbalenYk6txzm2xOR5z4nNPY+mfagF4rt+6KfuF+tbYpbeeFv2L+01T4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQOC2BU7Vs7bUyrbE3PbrqPlPnafG3pv+Qy0Q3+QBjHzQkWst33XX\n4vWdyn0TA3sJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILAlsqVNdtw62JffSuXrza+foxT/4\nuYdWIL7pA77p/q1vmLU39qm1rfcQR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOAuBJZqbKfq\nXkv7Rp/5pve56f7Rr+dG+R5agfi6GFsf6ta4tXOMyLGW3xoBAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACB+yIwona2NcfWuPtid61zKhCv/wjoinpbb5jIu5S7t9abq+c8o5+psj1jq1ACBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHHLtArMvXm0mltLWOu20buLdfWuC257mXMQygQ38VDvIt7nHoD\n7eEMp85onQABAgQIECBAgAABAgQIECBAgAABAgQIECBA4HEK7KGWdRdnuIt73Oo76CEUiK8LNOLh\nRY4ReeI1rOXq3WOOf+ONN16/LoB9BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBM4RuKhNLdW1\nejWtSL8Uf86tM3ZUrqWz5n0ebPsYC8RbH/apuLX1WOut9+aW3ly92Hbux9/5znf+dSnB6fmnppD6\ndXqHCAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgccrcFGb+nEj0NawYrk312y7HPZiY643n5vW\n1iLm1PrWPBn3YNr7WiA+9Ya46QM69YZZW++tLZ33nNjea3rt85///NefWFi60xNBBgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgTOF7ioTb22cedS5eqcGlkvNm+/thYxp9Yzz3XayH2b+a9zpk17\n7muBeNOLa4JGPaClPL03QW8ujrU03xy5G1f3/vuf/dmf/fvlpljJq/ZzTkuAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIEDgBgIXtamsT9W6VWbtzeVabZfievO9ucwVayOuUXlGnOVWczymAvFtQp7z\nhmljY9zOtWftxcTc1/7gD/7gK1/72tf+33lD/LTovGo/5za1eavabtooiAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4AELRE0qalPTS/za9BXFpHplcanOtf1eTJun3VPH58TWffpF4DEUiLe+UbbG\nFb7h3VNnaNe/8rd/+7f/3+///n/70uHw0+kw0/JTF1/zn8mYO/crbtF+ZY52/txx9VrbW+P0CRAg\n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\nLuNru7S3xugTIECAAAECBAgQIECAAAECBAgQIECAAAEC2wW2/t37Wtw5azW29uPEOW7btbVTsXU9\n+5kvxktzuZZt7Imrxh9njt8zrtf29mWejD8npu5tz5DjjOnlzZhz2pov9/Xmcu1RtArEpx9zvEnW\nioDter6pYk/tn77TMaLmy/5anjYmsqydN8+ROXOc+3J+KUeuZ3y07VyOM0eMW486l2vZRs68ci7b\nnM+2ztd+rvfaiIsrzxn9nIt+XHXtOHP1vcauxV3t0CNAgAABAgQIECBAgAABAgQIECBAgAABAgRu\nS+Ccv6vvxV5nru7p9XMu23jt2e+17VzG1/no57iu17mYr1fdk/3a1tilfhsf496VcbFWY2q/t6+d\na/O0+9txb387Z1wE7nuBON4AtVhXXtrcXVtfW2vz5Ljdc2qc+5badv9SXM5nfLY537axXq8wyrns\n99xq3oyveaJf92VMzi2NM0feO8eZL/flfMZlm/NtfG89Y2Mtrsyd4zo3B2z8dpP9de/G2wkjQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQKPViD/bv86AKf2nrte42s/zlbH2c+2rudctrmW49rWfsTFFXM5\n3xvXuYzNNtbiqvuPM8fvOV/js59tjW/7dX+7tjbOfWsxda2NPzWue5f6bY4at7YWcafWa67d9e97\ngfg6oPHAegW73nxvLu/ZrrXjjKttjcl+tHHFmXIuxrUf47xyPvflfLs/56PNPbXf7o+1zJH9aOvV\n21PX6/52PsZ5jtpmXO5t21jvzeW+XI8282Y/2rUr8ubVvra6FjHteu7TEiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAmMFRv6d/Fqu3lpvLl5dnc9+tvnqc5xt3Zdzp9rcU+Pafox7c3mO2i7FtvO5J/Pm\nONucz33ZxnquZWy2dT77S/tyPff22jamHdc9vbXeXOxZmq/5HlR/LwXihG+LctfFjnyjcuUZas7a\nj/V2nHtqmzHRxtWer7eesccdP7sn56Nt98dc3CPnY5z9bGMur5iLK/ccR09+r2duc/T2Z3yuZba8\nx1KbcdFmTDsX4zxDm38pNueXzpXr57SZa23P2vnW9lkjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\n+gJb/+59S1wvpp1bG+datnHi7Gfbm8u1aGs/YuNq5zPmuHq1p45zT23bXBmf87Wt/V6Ourft1/jo\nx5Vz2Z8ny7dT6yV07mbenK/j2s/1m7Yjc47MdaPXtZcC8Y1exMbNgb61mNfG1b21v3brjIs2rjbn\ncfa875mr7oq8ea86H/2cz301NudyT54v9+R8jnvxda63v65Hvrx/5r7OXC9H5mvX2nHG9dqIrVd7\n9rqmT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECLy5Atf9e/zevt5cvLp2vo5rv8bmfLa9tZzLmNrW\nfsTFlXPZj3HOZT/bjIk2r4yNccZlm3PZZmy2MV+vnM/9ta1x1+1nvtif9zqVq8bVfu7rzeVabbfG\n1T33sv+YCsR3+YDiDZTFybbwWM+xFpdrNb7Xz7ho86r3zvVYy37b5lrur23NlfN5r1zL+aW2xmU/\n29zTjmM+57LN2GyX5uveGpv9PH+Ot7Rxr951nVy9POYIECBAgAABAgQIECBAgAABAgQIECBAgACB\nmwuc+nv7c9drfO3HSeu418+5bOuenKvt1n4vLuXatRjXr15cPVft93LV9cy11Ob+up5z2da12s/1\nbOua/g0F7mOBON4IS8W6cznaXHVc+2t5a1z041o6X8bWuHbumOGqOJrjbLMounSPiKs5Mz7ms9+2\nuRZtvfKcdS76ee+8T8xlbObuxWVMrMVVY48zV3NraxmbbT1PzPX2Zmxtc1/MtWercTft1/vcNJf9\nBAgQIECAAAECBAgQIECAAAECBAgQIEDgoQvc5O/sz9nbi90ylzHZ5vPIcbYxn/22zbV2Pse99XYt\nYuKK+d7XvNh8y7iYzny1rf0a06S5HNb46Nev3N+bq2vZj7Z35f5ci/GWq8bVfuxtx1vyLcWMzLV0\nj6Hz97FAvAYQD6Atxm2dW8u7tFZz134vPtez7cVsmcv90S5dWSBt24hv53LcyxVr9Tp1z4jN82W/\n7s9+e88cZ5tx0S7NxVrvPEvxvdjIsXRFnnqdu7/u1SdAgAABAgQIECBAgAABAgQIECBAgAABAgS2\nC4z8O/m1XEtrvfk6V/vxqnKc7da5jI+29uv+Xr+Nr+OIzyvn2zbWYy6u2tZ+b63N08bPCa/xbWue\njKtnu8btnthSc+bC1rmMv3ftQysQX/cBxIOuBcE6PrefZ8h90cZV8x9n1r/X/Vn03Jpjbe/Wtd7p\n8v71NWW/F9/O5euo8zeZizy9/afy1/Wb9tNkLc85Rmt5rBEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJHga1/974Wd85aG1vHvf6WuYypbe3HK41xneuNjyJXsRmTbeapcXUu8/fm6lruX2oztm2X4nvz\nsXdtf67F3nP77Z4YP8pLgXj9sccbKwuAS/1ehozNdimmN59zWfhs21xfa9s9OV7bE2sZF21ccf7e\nlXGxVvttbK5lW+PrXJ2vOdqYpbjc04vPtdpGXFxLr++46jsBAgQIECBAgAABAgQIECBAgAABAgQI\nECCwV4Gtf8e/Ja4Xc2quXc9xtuGW/Wx7c7kWbe1nbDtfY9p+xmYbOeI6FZfxNe7cfdfdOx+w863N\n1wmZpzIuBkv9pb2Pdv4hFIjjYWfBrz7I3vzWuZrn3H7vHpkj17LN+dFt5m/btftEbHu1rjWmFmMz\nLu8XeTI247Jt79GOe3G9udi3NJ9r0eY5on/qinx5nbMv92gJECBAgAABAgQIECBAgAABAgQIECBA\ngACBuxG4zt/jL+1Zmo9XUtdqf20t47KtsTm3pc2Yuj/7uRZtfsVavXK+tnW914/YuNr2ODv++5b7\nZMyou/fybZ2LM/RiR53tTvLchwJxINfC3W3BrN2nrtV+nKWOa789Z65l267XccQsXVkUzbYXl2tt\n24vNuYitV+8Mma/G1X5dr/0aE/1cy7ZdfzPGezrLm/H63ZMAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCNwngV4dY8v5e/t6c5mrrtV+rNdxr3/OXMb22joX/fzKMyyt53zE5ZV7l9qIy3217cW3sb2YzJH3\n77UZk+1aTL1nxtV9tZ/r2a6tZcyI9q7uc+2z3ocCcby4gIwC3nWv3v7e3Ln5a47ar3liPq7e+XPt\nGHH1vRebq3mfbHO+trnWthnTzse4vZYKpnW+9tv9vfFSfG9+61zcJ2Lj6r2O48rV917eq1U9AgQI\nECBAgAABAgQIECBAgAABAgQIECBA4D4IbKkJ9F7H0r5z5jM227xPjrON+exn25vLtWhrP2PrXBvT\nW+vF5FyNz/zR5nVqPeOibWPrWu3Xe9d+jcl+rue4tnm/mKv9GnNOv5ejN3fTnOfsv5PYuywQB2gW\n8m7zxd30PtfZ39sTc3H1XvPa2nHX1ffMXfe0c1fR23pZJG3bdnc9e94/YnJ+6znyPm3+dtyL6821\n+7aM65m3xC/FZJ5cry45pyVAgAABAgQIECBAgAABAgQIECBAgAABAgTuVmDr39efimvX23G8qpzL\nNl9pHWc/296+XOu1dW6pX+8bMRnXm6/rGVfbXD+nbV9TzZdnWGvzXr2YpbW8R2/P0tx19tRcN91f\nc6317+o+h7ssEK+94LtcC9y2yJf3r2u1v3W9F1fnsn/q/vUNELH1LNnPNnNuaWveNr6eqReX52j3\nxbiuLfVzX13PuXPbyBFX75zHlfHf34x7jn8VMhIgQIAAAQIECBAgQIAAAQIECBAgQIAAgYctcKp2\ncO56L76dy3G2IZz9bHtz7VqOa7u138bFOL/i3nnlXK/NmK1t5Igr29qv+et89Nurja3rNXedj35d\nq/2Mq3O1n+vZrq1lzINq77pAXIGz4HYd0MxzKkfErcUsrdf57Gcb56399vy9td5c5qn746xrsfla\nMibac67cn3uW8mRcmz/Pl/trW9dqP2N6c7HWm+/NZR4tAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGBJoK1ttHHnrvfi27kcZxv37PXbuXac+3K+tm2/Hde9sZbrS/N1PWLiyn1b29wzb77Yn/3a5r3a\nvDUm+xmb42h7c7le17Kf7dreGpO5antqfS13zXOqv+U+p3KcvX7XBeKzDzhwQwBH4bF3La315tu5\nOq79vM/SXKwvnSfWYl+9atE0+2v7c2/ev80X6zXP2nrmqnvafm+8NLc2H2s3vfJ13TSP/QQIECBA\ngAABAgQIECBAgAABAgQIECBAgMD9EujVO+oruM56u2dpXOd7/bW5XKtt7cdriHF+1XHt99ZzLtqM\nzbautevH6OXvNb7tZ97l3U++lhqXuZbm2vV2HPt6c2vzp9Zi/cFcD6VAnA95S8H0Og8v8vdy1/m2\nn/ep+5bOmXtzPfbWfZkr2158rrVt5KnxOT4Vl+t5jvZsOT6VL/Ocapfy5L5T6xl3W219vbd1D3kJ\nECBAgAABAgQIECBAgAABAgQIECBAgACB6wnk3+Of2n0qrrfezq2Ncy3bOE+vn3Nb2hqz1s+1vGeM\nc662OZ9txrdtri+1NT76vavujfUYt1fG1Pmcq/FL/XZfHY/s1/uPzHvnuR5KgbiFiweUhc12Lcan\n1nt72rmaY6mfe2I9rnqmnMv5miPmclzjYj6uLJbWfDGfe7Ifbb3afRmf96jrOZf7c21pnPN7aPN1\n3cZZei63cR85CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWWB9u/rlyOfXDm1r11vx5Gtnavj7Gfb\n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\nECBAYE9g99/oR/W9eBvbGdfa7Gcbb5j9M21vzlGs5nv9PFMvF7FePOdEG0/WtP3/JJv8LNabn2u3\nba82165tzquxWX+3frbW03P/76Ydr16mrcwf1fTibayOaz9ev457/YxlW+dkbNT2attYO7fme/1R\nfcZ7cyLWPrU+c6uxrD/bjv7SjOKjfXr1EZvFe7ne+rlOtr0aMQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOC9BPLf9bNdOV3WRts+mevFj2J1vdqPeTnOtsZqP/Nn2t6cUWwUz7Nkvh3P4pmLtvZjjXhq\nrPYz14tlrtdGrH1yjYiP+rM57by29hXj+h6n9r/rvyCOg/QuF08d6sGTzp716rw6P/vRxhN2GYtx\nr5+1kc8nzUe5jNf1M5ZrRJv5o1jN39WP8+R7tGu2uXYc9b3YLJ65aEf7Rq59Yp/es7NGb74YAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsC8w+nf7nZWO1hjle/E2NhvX3FE/81fa3twaq/3wi3GNteM0\nbuN1Tq1p++28Xj5jO23uvzMnas/O293njvpbznrXBXHF+7QLs4DMM9d+fqRZLHOjNteobVsbuRqL\ncZwnYvFkv3fGrPmp/Pc96tzMj2I7+Vq70s93W6mNmrb+aNybk3u1czOebeTzSd8cr7Z1jdGcs2uP\n1hMnQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfLLDyb+9n33917VFdL97Gdsa1NvvZxjtm/462rlH7\nuc8sNqrJeLTx1DVG/Z/Kf2sz1rZ1jciNxnVe1oxivXytfcf+rWd+5MXVmbVX5vRqVmJtTR3v9LO2\nbePH0sZi3Iu1tbWm9rOuxnb7vTV2Y1l/pq1zVvuzusjFkw4/o58/e7HMz3JZU9vd+jpXnwABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgPgd2LtVl9L3cUa/N1vNPP2ittb+6ZWJ2z0o9fQtSNajPftrW+\n5mp/pabWz/ptrjfeiUVtffKsNXbUPzPnaM3/ufO/ID7c7EsK4kPE5WHbjl5vpS5rYo3s1zbiuees\nH7n2qfMyV2PZzzZrapu5tq01j+ynRd1jNZZzoj6feI+jp9ZH7cqcozXlCRAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgccKtP++v7LbypxezUqsranjnX7Wtm28XxuLcS/W1taa2s+6Gqv9o3yvNubEk7mf\n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\nHQLvcJF45xnuWOuONfLXcedaueasffZ+s7M8NPcXL9he8c537nnXWnet0/5AH7Vuu887jP/Su76D\ntzMQIECAAAECBAgQIECAAAECBAgQIECAAIEq8Gcu9P73pR/1rnete9c68X3vXKv+Xmb9V+w5O89D\nc3/1gutV7333vneud+dasx/ts/aZnUGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIPBOAs+6oLxz\nnzvXim9x93qr3/dV+66e7/a6v3xZ96p3f9S+j1j3EWuu/ohfuffqGdURIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBGYCr7x8fMTej1gz/B617uzbvHLfo3M9NO8S7n/+55UGj9r7UevGj/GRa9/9Y/+k\ns9797tYjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIErgm86tLyzKkfedZHrf2odVf8Xrn3yvkeWuMC\n7Yf31Q6P3P+Ra9cf57P2qXvqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgT+ksCzLjYfuc8j1175\nLbx6/5UzPrTGpd6/vK/2ePT+j17/X83f0av2/T2BHgECBAgQIECAAAECBAgQIECAAAECBAgQIEDg\nMwRedYH56H0fvf7R1331/kfne1rexd1/U7+DybPO8Kx9/lu5H3m38/RPKUqAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQ2Bd4twvKZ53nWfvMvsg7nGF2vqfmXMiNud/F5tnnePZ+4y+wnvnEM6+/nUoC\nBAgQIECAAAECBAgQIECAAAECBAgQIEDgnQQ+8bLx2Wd+9n6j38e7nGN0vpfEXazN2d/N51XnedW+\n868jS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0Aq86lL0Vfu275/jdztPnuvlrYu/tU/wbk7v\ncJ53OMPa11NFgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhOgXe4BH2HM9Sv+27nqWd7i75LvvXP\n8K5W73iudzzT+pdWSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4H4F3vPB8xzPFF3vXc73Pr+l/\nT+Iib/9zvLvZu58vxT/lnHleLQECBAgQIECAAAECBAgQIECAAAECBAgQIEDgboFPudB893O++/nu\n/t1cWs8l3Xm+T7D7hDPufoFvfKddA/UECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAewl84wXlJ7zT\nJ5zxvX6p/3sal23XP8knGX7SWa9/meetwPV51nYiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIuBR/z\nG/gk108662O+1oVVXWxdwGumfqrlp5674TckQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYFPjU\nC9ZPPffiZ3lOmcvB+50/3fTTz3//F7UiAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCzBT79YvXT\nz/9Wvx6XgY/7HN9m+23v87gvb2UCBAgQIECAAAECBAgQIECAAAECBAgQIECAwGsEvu0i9dve5zW/\nimZXl34NyAOGf8H4L7zjA34aliRAgAABAgQIECBAgAABAgQIECBAgAABAgQIbAv8hUvTv/CO2x/+\nrgku9u6SXFvnL3v/5Xdf+3WoIkCAAAECBAgQIECAAAECBAgQIECAAAECBP66wF++GP3L7/7U371L\nu6dy/99m3P+P4rDD6pBIAQECBAgQIECAAAECBAgQIECAAAECBAgQIPBmAi471z8Iq3WrWypdvt3C\neGkR3+AS38Mm+y4Po7UwAQIECBAgQIAAAQIECBAgQIAAAQIECBB4moDLx6dRb23ku2xx3VvsEuxe\nz6ur+R5XBc0nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4RwGXwm/yVVxIvsmH6BzDt+mgCBEg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHyMgEvhN/xULiHf8KN0juQ7dVCECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE3k7ApfDbfZJ/D+Ti8V+PTxn5bp/ypZyTAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIPDdAi6EP+z7umj8sA82OK7vOIARJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQuFXA\nhfCtnM9fzMXi882ftaNv+yxp+xAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvlPAZfAXfleXiF/4\nUSev5HtPcKQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9YwGXwH/n4Lgz/yIc+eE2/gwMgaQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAlwi4CP6SD3n2NVwMnpX7W/P8Tv7W9/a2BAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwOcKuAD+3G/3lJO7+HsK85/YxG/pT3xmL0mAAAECBAgQIECAAAECBAgQ\nIECAAAECBAi8UMDl7wvxv2Vrl3rf8iU/+z38Dj/7+zk9AQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nsC7gknfdSuUDBFzMPQDVkl8h4O/GV3xGL0GAAAECBAgQIECAAAECBAgQIECAAAECf1zAZewf/wF4\nfQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD7BP4/lAOziQiZtnUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename=\"images/5-01.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## KNN \n", "\n", "Given: \n", "- Training data D={x_i,y_i}\n", "- Distance metric d(q,x) <- Represents domain knowledge\n", "- Number of neighbours k <- Also represents\n", "- Query point\n", "\n", "Algorithm:\n", "- $NN = \\{ i: d(q,x_i) \\text{ k smallest} \\}$\n", " - If there are more than k that are closest, just take all of them. So take smallest number $\\geq$ k.\n", "Return:\n", "- Classification: Vote of $y_i \\in NN$, take the plurality (which one occurs the most). You can tiebreak e.g. by picking randomly or by picking the one that's more frequent in the entire dataset.\n", " - Could also do a weighted vote (weights depend on how far away you are). E.g. weight by 1/distance.\n", "- Regression: Take the mean of the $y_i$s. Don't have to worry about a tie.\n", "\n", "Simple algorithm but a lot left up to the designer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running Time and Space\n", "\n", "Given n sorted data points in R1 mapping to labels in R1.\n", "\n", "1-NN query running time: binary search. Query space: constant because data storage accounted for in learning space.\n", "\n", "KNN query running time : lgn + k, similar to merge sort. If k >= n/2 it dominates -> O(n), else log n dominates. Query space is constant because we can point in place. List is sorted so only need to point to first and last nearest neighbours.\n", "\n", "Linear Regression\n", "- Learning running time: involves inverting a matrix but this is scalar laned so we can just scan through the list to populate a constant-size matrix. n.\n", "- Learning space: 1 (m and b)\n", "- Query running time and space: 1\n", "\n", "KNN learning is fast and querying is slow. With linear regression, learning is expensive and querying is cheap.\n", "- If we query more than n times, NN is worse in terms of running time.\n", "- Tradeoff: Want to balance the two.\n", "- NN: Put off doing any work until you have to. **Lazy** learners vs linear regression **eager** learner.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/5-07.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How KNN alg works\n", "\n", "e.g. R2 -> R\n", "- Distance metrics\n", " - Euclidean distance metric\n", " - Manhattan distance (l1?) (The distance between two points in a grid based on a strictly horizontal and/or vertical path (that is, along the grid lines), as opposed to the diagonal or \"as the crow flies\" distance.)\n", "\n", "Different k and distance metrics can give completely different answers depending on the assumptions you make about your domain.\n", "\n", "- KNN tends to work well.\n", "\n", "### Preference biases of KNN\n", "*Our belief about what makes a good hypothesis.*\n", "- Locality -> Near points are similar\n", " - Further biases depending on distance function used\n", "- Smoothness (Expecting functions to behave smoothly) -> Averaging (Think intermediate value theorem or something)\n", "- ALl features matter equally (as opposed to $y = x_1^2 + x_2$.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Curse of Dimensionality\n", "\n", "(In separate notebook)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other stuff\n", "- Distance metric d(x,q) \n", " - Euclidean (cont), \n", " - Manhattan, \n", " - weighted versions (can weight different dimensions differently to deal with the Curse of Dimensionality)\n", " - Mismatches (Discrete)\n", " - (Comparing convoluted features)\n", "- How you pick k\n", " - Special case: Consider k = n with a weighted average.\n", " - -> Regression-y thing on a subset of points. **locally weighted regression**. Can throw in nn, dt. (Replace average with regression or dt allows you to do more powerful things. \n", " - E.g. locally weighted linear regression -> Get something like a curve. Cool because we start with a hypothesis space of lines but end up being able te represent a hypothesis space that is strictly greater than the space of lines (with locally weighted linear regression).\n", " - Allows you to take local info and build concepts -> can build arbitrarily complicated functions.\n", " \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "Domain KNNowledge!\n", "- Instance-based learning\n", "- Lazy vs eager learners\n", "- KNN (K Nearest Neighbours) (Lazy learner)\n", "- Nearest neighbour: Similarity function (distance)\n", "- Classification vs regression (KNN can handle both)\n", "- Averaging\n", "- Composing different learning algorithms e.g. via locally weighted \\$x regression\n", "- Curse of Dimensionality: The more features you include, the more data you need (exponentially) to produce an equally accurate model\n", "\n", "+ 'No Free Lunch' theorem: for any learning algorithm, if you average over all possible instances, it's no better than random.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Doesn't work\n", "\n", "def imgshow(file_name):\n", " Image(filename=file_name)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/.ipynb_checkpoints/2.6.2 Bayesian Learning-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bayesian Learning\n", "\n", "Thinking omore generally about learning theory\n", "\n", "Claim we're trying to **learn the best hypothesis we can given data and some domain knowledge**.\n", "\n", "Try to be more precise about 'best': **most probable** hypothesis (most probably the correct one). I.e. **$$\\text{argmax}_{h\\in H} P(h|D)$$**, where D is data.\n", "\n", "\n", "Bayes's Rules\n", "$$P(h|D) = \\frac{P(D|h)P(h)}{P(D)}$$\n", "\n", "Follows directly from the chain rule in probability. Numerator is probability of D and h together (conjunction).\n", "So $$Pr(a,b) = P(a|b)*P(b)$$.\n", "\n", "Ask what each term means: \n", "- **P(D)** is your prior belief for seeing a particular set of data.\n", "- **P(D|h)**: Likelihood we'll see some data where a hypothesis is true. Data is training data. Is set of inputs and labels corresponding to those inputs. $D = \\{(x_i, d_i)\\}$. **P(seeing labels $d_i$)** where h is true and we have inputs $x_i$.\n", " - P(D|h) is a lot easier to compute.\n", " - ? version space.\n", " - Kind of like accuracy?\n", "- **Pr(h)**: Prior on hypothesis. Encapsulates belief that a hypothesis is likely or unlikely compared to other hypotheses. I.e. our **domain knowledge**.\n", "\n", "vs kernels and similarity functions for domain knowledge.\n", "\n", "**Priors matter**. E.g. if we only give the test to people who have certain symptoms (add evidence), you can increase the spleentitis prior. It's actually changing the posterior but you can think of it as a prior. IT depends where you are in the process when you're thinking of it as a prior.\n", "\n", "Q: What's the boundary of the prior at which a pos result will make you believe someone has spleentitis?\n", "(Philo Q: so what)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithm\n", "\n", "For each $h \\in H$,\n", "\n", "calculate $P(h|D) \\sim P(D|h)P(h)$\n", "\n", "(Denominator doesn't change maximal h)\n", "\n", "Output: \n", "$h_{map} = argmax_h P(h|D)$\n", "\n", "MAP = maximum a posterior. Max posterior given all priors.\n", "\n", "Hard to say what P(h) is.\n", "\n", "So it's common to drop P(h) and compute\n", "\n", "$h_{ml} = argmax_h P(D|h)$\n", "\n", "ML = maximum likelihood hypothesis. Maximum a-priori hypothesis.\n", "- Dropping P(h) -> Uniform prior. We're saying our prior hypotheses are equally likely.\n", "\n", "But **not practical** because we need to look at every h in H.\n", "\n", "### e.g.s\n", "\n", "1. Given {} as noise-free examples of c. Binary classification problem.\n", "2. c is in H, finite hypothesis class.\n", "3. uniform prior (uninformed prior)\n", "\n", "\n", "- $P(h) = \\frac{1}{|H|}$\n", "- $P(D|h) = 1$ if $d_i=h(x_i) \\forall x_i, d_i \\in D$, $P(D|h) = 0$ otherwise.\n", "- $P(D) = \\sum_{h_i \\in H} P(D|h_i)P(h_i) = \\sum_ {h_i \\in VS_{H,D}} 1 * \\frac{1}{|H|} = \\frac{|VS|}{|H|}$\n", "\n", "P(D|h) = 1 if H is in the version-space of D.\n", "\n", "\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/.ipynb_checkpoints/2.6.4 Bayes NLP project-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sample_memo = '''\n", "Milt, we're gonna need to go ahead and move you downstairs into storage B. We have some new people coming in, and we need all the space we can get. So if you could just go ahead and pack up your stuff and move it down there, that would be terrific, OK?\n", "Oh, and remember: next Friday... is Hawaiian shirt day. So, you know, if you want to, go ahead and wear a Hawaiian shirt and jeans.\n", "Oh, oh, and I almost forgot. Ahh, I'm also gonna need you to go ahead and come in on Sunday, too...\n", "Hello Peter, whats happening? Ummm, I'm gonna need you to go ahead and come in tomorrow. So if you could be here around 9 that would be great, mmmk... oh oh! and I almost forgot ahh, I'm also gonna need you to go ahead and come in on Sunday too, kay. We ahh lost some people this week and ah, we sorta need to play catch up.\n", "'''\n", "\n", "#\n", "# Maximum Likelihood Hypothesis\n", "#\n", "#\n", "# In this quiz we will find the maximum likelihood word based on the preceding word\n", "#\n", "# Fill in the NextWordProbability procedure so that it takes in sample text and a word,\n", "# and returns a dictionary with keys the set of words that come after, whose values are\n", "# the number of times the key comes after that word.\n", "# \n", "# Just use .split() to split the sample_memo text into words separated by spaces.\n", "\n", "def NextWordProbability(sampletext,word):\n", " corpus = sampletext.split()\n", " dict = {}\n", " for i in range(len(corpus) - 1):\n", " if corpus[i] == word:\n", " if corpus[i+1] in dict:\n", " dict[corpus[i+1]] += 1\n", " else:\n", " dict[corpus[i+1]] = 1\n", " \n", " return dict" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.1.2 Regression and Classification.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Regression and Classification\n", "\n", "(Charles and Michael)\n", "\n", "**Supervised learning**: Take examples of inputs and outputs. Now, given a new input, predict its output.\n", "\n", "Regression is special because we're **mapping continuous inputs to outputs**. vs discrete input to discrete/continuous output.\n", "\n", "Origin: Height of children *regressing* to the mean.\n", "Term misused -> people were really referring to the idea of finding a mathematical relationship based on measurements of points.\n", "\n", "Similar with Reinforcement learning: mathmos named RL that but that's not what RL (first in psychology) actually is.\n", "\n", "[Origin of Regression](r-and-c-03.png)\n", "\n", "## Line of best fit\n", "How do we find the line of best fit? (Least squared error)\n", "- Calculus\n", "Loss error function chosen: Squares because it's well-behaved, **smooth**.\n", "\n", "$$E(c) = \\sum_{i=1}^n (y_i-c)^2 $$\n", "\n", "Differentiate with respect to c. $c = \\bar y$.\n", "\n", "Fitting polynomial functions.\n", "Parabola has more degrees of freedom. If the best fit was a line, the parabola wouldn't have any curve in it.\n", "-> Can't go past order = number of data points. (n-1?)\n", "\n", "[img](r-and-c-07.png)\n", "\n", "[Training Error with Degrees](r-and-c-07b.png)\n", "\n", "[Polynomial Regression](r-and-c-10.png)\n", "-> Solve through least squares:\n", "(X^T)X has inverse.\n", "\n", "['Solving' for polynomial regression](r-and-c-10b.png)\n", "\n", "Need to use least squares because of \n", "### Errors\n", "Not modelling f, but f + $\\epsilon$.\n", "\n", "Sources of error:\n", "- Sensor error (physical)\n", "- Misrepresented data\n", "- Data entry (transcription) error\n", "- Unmodeled influences\n", "\n", "Want to fit signal, not underlying error or noise.\n", "\n", "## Cross-validation\n", "\n", "If we don't like e.g. a linear model because we think there's too much error, we could use a higher order model.\n", "BUT then it wouldn't generalise well. Goal is to generalise.\n", "\n", "**Test set is just a stand-in for what we don't know what we're going to see in the real world.**\n", "\n", "Nothing we do on our training or test sets make sense unless we think they will be **representative** of what we'll see in the future in the real world.\n", "\n", "I.e. \n", "### **count on data being IID**: \n", "Independent and identically distributed (coming from the same source).\n", "-> Fundamental assumption in many algorithms.\n", "\n", "We want to use a model that is complex enough to fit the data without causing problems on the test set.\n", "\n", "### Cross-validation set\n", "We can take some of the training set and pretend it's a test set and it's not cheating because it's not actually the test set.\n", "\n", "Folds: (sheep?)\n", "[CV](r-and-c-13.png)\n", "\n", "Blue line initially higher because predicting on some data it hasn't seen before vs red line predicting on same data it was trained on.\n", "\n", "More power tends to overfit training data at expense of generalisation.\n", "[CV](r-and-c-14.png)\n", "\n", "[CV](r-and-c-14b.png)\n", "\n", "## Other Input Spaces\n", "So far have talked about \n", "- scalar input, continuous. x\n", "\n", "Also have:\n", "- vector iinput, continuous. x\n", " - e.g. Features: size and distance from zoo for housing prices.\n", " - Generalise to planes and hyperplanes vs lines.\n", "- discrete {0,1}, vector or scalar.\n", " - e.g. predicting credit score features: Do they have a job? (discrete) What is the value of assets they currently hold? (continuous)\n", " - Encoding features:\n", " - Enumerating (red is 1, beige is 2, brown is 3. Implies beige is between red and brown, which it kinda isn't.)\n", " - Boolean vectors for each\n", "\n", "## Summary\n", "- Historical facts\n", "- Model selection and under/over-fitting\n", "- Cross-validation\n", "- Linear, polynomial regression\n", "- Best constant in terms of squared error: Mean\n", "- (Input) Representation for regression" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.1.4 More Regressions.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Using data to build a model that predicts a numerical output based on a set of numerical inputs.\n", "\n", "## 1. Parametric regression\n", "\n", "Building a model where we represent a model using a set of parameters.\n", "- e.g. polynomial regression\n", "- Biased in that you have a guess for what kind of equation the underlying model is -> Can be good if you do know.\n", "- Don't need to store original data so more space-efficient\n", "- Can't update the model as more data is gathered.\n", "- Training is slow, querying is fast.\n", "\n", "## 2. K Nearest Neighbour (KNN)\n", "\n", "**Instance-based methods:** Data-centric approach: Keep data and use it when we make a query. (Best for where you don't have a guess for what the underlying mathematical method might look like because instance-based methods can fit any shape.)\n", "**Take mean of k nearest neighbours' y-value.**\n", "Repeat across the x-axis\n", "- Interpolates smoothly around datapoints.\n", "- Unbiased: Avoid having to assume a particular model. Good for fitting complex datasets where we don't know what the underlying model is like.\n", "- Hard to apply with a large dataset (takes up a lot of memory)\n", "- New data can be added easily\n", "- Training is fast, querying is potentially slow.\n", "\n", "## 3. Kernel Regression\n", "\n", "Weigh each datapoint according to how far away they are vs KNN each neighbour gets essentially equal weight.\n", "\n", "## Numpy Polyfit\n", "\n", "numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)[source]\n", "Least squares polynomial fit.\n", "\n", "Fit a polynomial p(x) = p[0] * x**deg + ... + p[deg] of degree deg to points (x, y). Returns a vector of coefficients p that minimises the squared error.\n", "\n", "Parameters:\t\n", "x : array_like, shape (M,)\n", "x-coordinates of the M sample points (x[i], y[i]).\n", "y : array_like, shape (M,) or (M, K)\n", "y-coordinates of the sample points. Several data sets of sample points sharing the same x-coordinates can be fitted at once by passing in a 2D-array that contains one dataset per column.\n", "deg : int\n", "Degree of the fitting polynomial\n", "rcond : float, optional\n", "Relative condition number of the fit. Singular values smaller than this relative to the largest singular value will be ignored. The default value is len(x)*eps, where eps is the relative precision of the float type, about 2e-16 in most cases.\n", "full : bool, optional\n", "Switch determining nature of return value. When it is False (the default) just the coefficients are returned, when True diagnostic information from the singular value decomposition is also returned.\n", "w : array_like, shape (M,), optional\n", "weights to apply to the y-coordinates of the sample points.\n", "cov : bool, optional\n", "Return the estimate and the covariance matrix of the estimate If full is True, then cov is not returned.\n", "Returns:\t\n", "p : ndarray, shape (M,) or (M, K)\n", "Polynomial coefficients, highest power first. If y was 2-D, the coefficients for k-th data set are in p[:,k].\n", "residuals, rank, singular_values, rcond :\n", "Present only if full = True. Residuals of the least-squares fit, the effective rank of the scaled Vandermonde coefficient matrix, its singular values, and the specified value of rcond. For more details, see linalg.lstsq.\n", "V : ndarray, shape (M,M) or (M,M,K)\n", "Present only if full = False and cov`=True. The covariance matrix of the polynomial coefficient estimates. The diagonal of this matrix are the variance estimates for each coefficient. If y is a 2-D array, then the covariance matrix for the `k-th data set are in V[:,:,k]\n", "Warns:\t\n", "RankWarning\n", "The rank of the coefficient matrix in the least-squares fit is deficient. The warning is only raised if full = False.\n", "The warnings can be turned off by\n", ">>> import warnings\n", ">>> warnings.simplefilter('ignore', np.RankWarning)\n", "See also\n", "polyval\n", "Computes polynomial values.\n", "linalg.lstsq\n", "Computes a least-squares fit.\n", "scipy.interpolate.UnivariateSpline\n", "Computes spline fits.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This function takes in a list of regression values x and y and a degree, and outputs a polynomial in the form of a list p = [p[0],p[1],...,p[degree]] as in the model above.\n", "\n", "Another tool you may see or use in the future is the SciKit-Learn preprocessing function, PolynomialFeatures, which you can read about here. This function adds features to a dataset which are quadratic (or higher) combinations of the previous features.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#\n", "#\n", "# Regression and Classification programming exercises\n", "#\n", "#\n", "\n", "\n", "#\n", "#\tIn this exercise we will be taking a small data set and computing a linear function\n", "#\tthat fits it, by hand.\n", "#\t\n", "\n", "#\tthe data set\n", "\n", "import numpy as np\n", "\n", "sleep = [5,6,7,8,10]\n", "scores = [65,51,75,75,86]\n", "\n", "\n", "def compute_regression(sleep,scores):\n", "\n", " #\tFirst, compute the average amount of each list\n", "\n", " avg_sleep = np.mean(sleep)\n", " avg_scores = np.mean(scores)\n", "\n", " #\tThen normalize the lists by subtracting the mean value from each entry\n", "\n", " normalized_sleep = [s - avg_sleep for s in sleep]\n", " normalized_scores = [s - avg_scores for s in scores]\n", " print normalized_sleep\n", " #\tCompute the slope of the line by taking the sum over each student\n", " #\tof the product of their normalized sleep times their normalized test score.\n", " #\tThen divide this by the sum of squares of the normalized sleep times.\n", "\n", " \n", " slope = np.dot(normalized_sleep, normalized_scores) / np.dot(normalized_sleep, normalized_sleep)\n", " #\tFinally, We have a linear function of the form\n", " #\ty - avg_y = slope * ( x - avg_x )\n", " #\tRewrite this function in the form\n", " #\ty = m * x + b\n", " #\tThen return the values m, b\n", "\n", " m = slope\n", " b = - slope * avg_sleep + avg_scores\n", "\n", " print \"m, b = \", m, b\n", " return m,b\n", "\n", "\n", "if __name__==\"__main__\":\n", " m,b = compute_regression(sleep,scores)\n", " print \"Your linear model is y={}*x+{}\".format(m,b)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#\n", "#\tPolynomial Regression\n", "#\n", "#\tIn this exercise we will examine more complex models of test grades as a function of \n", "#\tsleep using numpy.polyfit to determine a good relationship and incorporating more data.\n", "#\n", "#\n", "# at the end, store the coefficients of the polynomial you found in coeffs\n", "#\n", "\n", "import numpy as np\n", "\n", "sleep = [5,6,7,8,10,12,16]\n", "scores = [65,51,75,75,86,80,0]\n", "\n", "coeffs = np.polyfit(sleep, scores, 2)\n", "\n", "print coeffs" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.2 Decision Trees.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Supervised Learning\n", "\n", "## Classification vs Regression\n", "\n", "Two types of supervised learning: Classification and Regression\n", "C: Taking some input and mapping it to some discrete label.\n", "R: More about continuous-valued functions. Mapping pictures of Michael to the length of his hair.\n", "- MAPPING TO discrete / continuous output.\n", "\n", "## Terminology\n", "\n", "- Instances: Input (Vectors, sets of). Can be credit score, pixels.\n", "- Concept: Function that maps inputs to outputs. (Like a concepts of 'what defines maleness')\n", "- Target concept: ANSWER. The specific function we're trying to find out of all the possible concepts.\n", "- Hypothesis: Class. The set of all possible concepts you're willing to entertain. Could be all possible functions but it might be hard to figure out which function is best given finite data.\n", " - Already now our hypothesis class is restricted to classification.\n", "\n", "- Sample (Training set): Set of all input paired with output.\n", "- Candidate: A concept you think might be the target concept.\n", "- Testing set: Determine if candidate concept does a good job or not by testing it on the testing set. (Apply candidate concept on input and check predictions against labels.\n", "\n", "- Testing set needs to be different from the training set else it's cheating." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Decision Trees\n", "\n", "E.g. of dating and choosing whether or not to go into a certain restaurant.\n", "- Some features have to do with the restaurant and some have to do with things external to the restaurant (whether or not you're hungry)\n", "- Some irrelevant features (number of cars parked across the country)\n", "\n", "Consider the representation of a DT:\n", "- Ask a series of questions and depending on the answers move from the root of the tree (top) along different paths down the tree.\n", "- Leaves of the tree contain ANSWERs (output). Nodes have attributes (features).\n", "\n", "### Algorithm\n", "Thoughts:\n", "- 20 questions example. Think about the ordering of questions.\n", "- Goal in asking questions was to **further** narrow down possibilities as much as possible.\n", "- That is, the usefulness of each question depends on the answers you have to the previous questions.\n", "- DT vs 20 questions: with DT, can build entire flowchart at the start vs 20 questions asking interactively.\n", "\n", "Recipe:\n", "1. Pick the best attribute\n", " - Best: splitting the data roughly in half (say)\n", "2. Asked question\n", "3. Follow the path of the answer\n", "4. Go to 1\n", "\n", "UNTIL got an answer.\n", "\n", "If an attribute node splits data into half but doesn't change distributions, it could arguably be bad because it doesn't help and only **contributes to overfitting**.\n", "\n", "### Decision Trees: Expressiveness\n", "e.g. Boolean A AND B.\n", "\n", "A -> F -> leaf; No\n", "\n", " -> T\n", " -> B ->\n", " -> F -> leaf: No\n", " -> T -> leaf: Yes\n", "\n", "The same if you switch A and B around.\n", "Cause A and B are commutative: The play the same role in the function.\n", "\n", "Also: OR, XOR (exclusive OR)\n", "- Representations of a truth table.\n", "\n", "### Size of DTs\n", "\n", "For AND and OR, need two nodes. For XOR need three nodes. Scaled,\n", "\n", "1. n-OR: If any of the n nodes is true, n-OR is true.\n", " - n nodes. Size of DT is linear, O(n).\n", "\n", "2. n-XOR: Parity, e.g. pick odd parity. If the number of attributes that are true is odd, then True. Else False.\n", " - 2^n - 1 nodes. Size of DT is exponential, O(2^n).\n", " - Sub-trees are a version of XOR.\n", "\n", "-> Want to look at more **any** questions than **parity** questions.\n", "\n", "-> Can feature engineer to solve this. **The hardest problem is coming up with a good representation.**\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Exactly how expressive is a decision tree?\n", "- i.e. how many decision trees do we have to look at?\n", "- e.g. n boolean attributes and output is boolean.\n", "\n", "- Nodes: n!\n", "- Truth table: 2^n rows.\n", " - How many ways are there to fill in the outputs? 2^n cells to fill, so 2^2^n.\n", "\n", "n = 6 -> 2^2^6 is of order of magnitude 10^19.\n", "- Decision trees are expressive.\n", "- Need a smart way to search all DTs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ID3: Alg\n", "\n", "Loop forever until solve problem:\n", "- A <- best attribute\n", "- Assign A as a decision attribute for NODE.\n", "- For each value of A, create a descendant of NODE\n", "- Sort training examples to leaves\n", "- If examples perfectly classified, STOP\n", "- Else iterate over leaves to find best attribute that will sort leaves\n", "\n", "### Finding the Best attribute: Information gain.\n", "Gain(S,A) = Entropy(S) - expected or avg entropy you'd have over each set of examples that you have with a particular value.\n", "\n", "$$\\max Gain(S,A) = Entropy(S) - \\sum_v \\frac{|S_v|}{|S|}Entropy(S_v)$$\n", "\n", "S is collection of training examples you're looking at\n", "A is the attribute\n", "\n", "**Info Gain: Reduction in randomness of data based on knowing value of attribute.**\n", "\n", "**Entropy: A measure of randomness.** \n", "- E.g. fair coin entropy is 1. -> No basis going into flipping the coin to guess if it's heads or tails.\n", "\n", "#### Formula for Entropy\n", "$$-\\sum_v p(v)logp(v)$$\n", "\n", "c.f. randomised optimisation later for more details.\n", "\n", "Previously we said we preferred splits that were less random (lower entropy). We want there to be info gain " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## ID3 Bias: Inductive Bias\n", "\n", "**Two kinds of biases we worry about when thinking about algorithms who search through space:**\n", "- Restriction Bias: Hypothesis set that you care about (e.g. all decision trees. Not consider quadratic equations...)\n", "- Preference Bias: What sorts of hypotheses from this hypothesis test that we prefer -> at the heart of inductive bias.\n", "\n", "Inductive bias of ID3 algorithm\n", "- Since making decision top-down, more likely to choose trees that have **good splits near the top** than not. Even if both represent the function that we care about.\n", "- **Correct over incorrect**: Prefers ones that model the data better to ones that model the data worse.\n", "- Prefers **shorter trees** to longer ones. Comes naturally from preference for good splits at the top.\n", "\n", "## DTs: Other Considerations\n", "1. What if we had **continuous attributes**?\n", " - Use ranges or '<20?' splits, binary search.\n", "2. When do we stop?\n", " - You might think 'when everything is classified correctly.' BUT if there's **noise** :(\n", " - Or if we've run out of attributes (doesn't help when we have continuous attributes)\n", " - No overfitting (overfit by having a tree that's too big, violates Occam's Razor.)\n", " - CV?\n", " - Stop expanding tree once you reach a certain accuracy on a validation set\n", " - **Pruning** -> smaller tree. (vid 28)\n", " - Need to have **votes on output**.\n", "3. Regression\n", " - Q: What are the splitting criteria?\n", " - Try to measure how mixed up things are using **variance**.\n", " - What would you do with leaves? (Output) -> Average? Local linear fit?\n", "\n", "## Conclusion\n", "- Representation\n", "- ID3: A top-down learning algorithm\n", "- Expressiveness of DTs\n", "- Bias of ID3 (Inductive Bias)\n", "- 'Best attributes' (Deciding on splits) Maximum information gain\n", "- Dealing with overfitting e.g. using pruning.\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.3 Neural Networks.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Neural Networks\n", "\n", "* Synapse: Gap between one neutron and another\n", "* Info travels down axon and causes synapses excitation to occur on other neurons which can fire by sending out spike trains.\n", "* Neurons are computational units.\n", "* Neurons are complicated. By first approximation though (by def) they are v simple.\n", "\n", "(image of artificial \n", "\n", "## Perceptron\n", "1. Inputs x_i: think of them as firing rates or the strength of inputs. \n", "2. Multiplied by weights w_i.\n", "3. Activation: Sum the w_ix_i. and see if it's >= the firing threshold. If it is, then output 1. Else output 0.\n", "4. Output\n", "\n", "Artificial Neurons can be tuned such that they fire under different things." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Perceptron class\n", "\n", "import numpy as np\n", "\n", "\n", "class Perceptron:\n", " \"\"\"\n", " This class models an artificial neuron with step activation function.\n", " \"\"\"\n", "\n", " def __init__(self, weights = np.array([1]), threshold = 0):\n", " \"\"\"\n", " Initialize weights and threshold based on input arguments. Note that no\n", " type-checking is being performed here for simplicity.\n", " \"\"\"\n", " self.weights = weights\n", " self.threshold = threshold\n", " \n", " def activate(self,inputs):\n", " \"\"\"\n", " Takes in @param inputs, a list of numbers equal to length of weights.\n", " @return the output of a threshold perceptron with given inputs based on\n", " perceptron weights and threshold.\n", " \"\"\" \n", "\n", " # INSERT YOUR CODE HERE\n", " \n", "\n", " # TODO: calculate the strength with which the perceptron fires\n", " activation = np.dot(inputs, self.weights)\n", " \n", " \n", " # TODO: return 0 or 1 based on the threshold\n", " if activation > self.threshold:\n", " result = 1\n", " else:\n", " result = 0\n", " \n", " return result\n", "\n", "\n", "def test():\n", " \"\"\"\n", " A few tests to make sure that the perceptron class performs as expected.\n", " Nothing should show up in the output if all the assertions pass.\n", " \"\"\"\n", " p1 = Perceptron(np.array([1, 2]), 0.)\n", " assert p1.activate(np.array([ 1,-1])) == 0 # < threshold --> 0\n", " assert p1.activate(np.array([-1, 1])) == 1 # > threshold --> 1\n", " assert p1.activate(np.array([ 2,-1])) == 0 # on threshold --> 0\n", "\n", "if __name__ == \"__main__\":\n", " test()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What sort of things can ANNs compute?\n", "/ How powerful is a perceptron unit?\n", "\n", "**Perceptrons are always going to compute hyperplanes (lines)**.\n", "\n", "- Representing the region in an input space that's going to get an output of 0 versus the region that's going to get an output of 1\n", "(2D plane)\n", " - Linear programming (x_1 = 0, threshold x_2 = 1.5)\n", "\n", "Computations expressible as perceptron units\n", "- AND (x_1 in {0,1}, x_2 in {0,1}).\n", "- OR\n", "- NOT (One variable e.g. when x_1 = 0, good. When x_1 = 1, bad.) w_1 = -1, theta = 0.\n", "- If we can combine the perceptron functions together, we can represent any boolean function.\n", "### Ways \n", "- Perceptron rule (threshold)\n", "- Gradient descent (unthreshold)\n", "\n", "### Perceptron rule\n", " \n", "- Threshold foldled into weights. Add a 1 to the x inputs.\n", "- Run while there is error:\n", "$$\\Delta w_i = \\eta(y-\\hat y)x_i$$\n", "where\n", "$$\\hat y = (\\sum_i w_ix_i \\geq 0)$$,\n", "\n", "$\\hat y$ is boolean and\n", "$\\eta$ is the learning rate.\n", "\n", "If the data is linearly separable, the perceptron rule will find the separation line in finite time.\n", "* But often it's not clear if data is linearly separaable, especially if the data has many dimensions." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# ----------\n", "#\n", "# In this exercise, you will update the perceptron class so that it can update\n", "# its weights.\n", "#\n", "# Finish writing the update() method so that it updates the weights according\n", "# to the perceptron update rule.\n", "# \n", "# ----------\n", "\n", "import numpy as np\n", "\n", "\n", "class Perceptron:\n", " \"\"\"\n", " This class models an artificial neuron with step activation function.\n", " \"\"\"\n", "\n", " def __init__(self, weights = np.array([1]), threshold = 0):\n", " \"\"\"\n", " Initialize weights and threshold based on input arguments. Note that no\n", " type-checking is being performed here for simplicity.\n", " \"\"\"\n", " self.weights = weights\n", " self.threshold = threshold\n", "\n", "\n", " def activate(self, values):\n", " \"\"\"\n", " Takes in @param values, a list of numbers equal to length of weights.\n", " @return the output of a threshold perceptron with given inputs based on\n", " perceptron weights and threshold.\n", " \"\"\"\n", " \n", " # First calculate the strength with which the perceptron fires\n", " strength = np.dot(values,self.weights)\n", " \n", " # Then return 0 or 1 depending on strength compared to threshold \n", " return int(strength > self.threshold)\n", "\n", "\n", " def update(self, values, train, eta=.1):\n", " \"\"\"\n", " Takes in a 2D array @param values consisting of a LIST of inputs and a\n", " 1D array @param train, consisting of a corresponding list of expected\n", " outputs. Updates internal weights according to the perceptron training\n", " rule using these values and an optional learning rate, @param eta.\n", " \"\"\"\n", " \n", " # YOUR CODE HERE\n", " self.weights = self.weights.astype(float)\n", " \n", " # TODO: for each data point...\n", " for i in range(len(train)):\n", " # TODO: obtain the neuron's prediction for that point\n", " prediction = self.activate(values[i])\n", " print(\"prediction for i=\", i, \" : \", prediction)\n", " print(\"train for i=\", i, \" : \", train[i])\n", " # TODO: update self.weights based on prediction accuracy, learning\n", " # rate and input value\n", " for j in range(len(self.weights)):\n", " weight_delta = eta * (train[i] - prediction) * values [i][j]\n", " print(\"weight_delta for j=\", j, \" : \", weight_delta)\n", " self.weights[j] = self.weights[j] + weight_delta\n", " print(\"self.weights after j=\", j, \" is now \", self.weights)\n", " print(\"self.weights after \", i, \" is now \", self.weights)\n", "\n", "def test():\n", " \"\"\"\n", " A few tests to make sure that the perceptron class performs as expected.\n", " Nothing should show up in the output if all the assertions pass.\n", " \"\"\"\n", " def sum_almost_equal(array1, array2, tol = 1e-6):\n", " return sum(abs(array1 - array2)) < tol\n", "\n", " p1 = Perceptron(np.array([1,1,1]),0)\n", " print(\"p1 weights:\", p1.weights)\n", " p1.update(np.array([[2,0,-3]]), np.array([1]))\n", " print(\"p1 weights:\", p1.weights)\n", " print(\"should be equal to np.array([1.2, 1, 0.7])\")\n", " # assert sum_almost_equal(p1.weights, np.array([1.2, 1, 0.7]))\n", "\n", " p2 = Perceptron(np.array([1,2,3]),0)\n", " print(\"p2 weights:\", p2.weights)\n", " p2.update(np.array([[3,2,1],[4,0,-1]]),np.array([0,0]))\n", " print(\"p2 weights:\", p2.weights)\n", " print(\"should be equal to np.array([0.7, 1.8, 2.9])\")\n", " # assert sum_almost_equal(p2.weights, np.array([0.7, 1.8, 2.9]))\n", "\n", " p3 = Perceptron(np.array([3,0,2]),0)\n", " print(\"p3 weights:\", p3.weights)\n", " p3.update(np.array([[2,-2,4],[-1,-3,2],[0,2,1]]),np.array([0,1,0]))\n", " print(\"p3 weights:\", p3.weights)\n", " print(\"should be equal to np.array([2.7, -0.3, 1.7])\")\n", " # assert sum_almost_equal(p3.weights, np.array([2.7, -0.3, 1.7]))\n", "\n", "test()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bulding the XOR Network Debugging" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# ----------\n", "#\n", "# In this exercise, you will create a network of perceptrons that can represent\n", "# the XOR function, using a network structure like those shown in the previous\n", "# quizzes.\n", "#\n", "# You will need to do two things:\n", "# First, create a network o f perceptrons with the correct weights\n", "# Second, define a procedure EvalNetwork() which takes in a list of inputs and\n", "# outputs the value of this network.\n", "#\n", "# ----------\n", "\n", "import numpy as np\n", "\n", "class Perceptron:\n", " \"\"\"\n", " This class models an artificial neuron with step activation function.\n", " \"\"\"\n", "\n", " def __init__(self, weights = np.array([1]), threshold = 0):\n", " \"\"\"\n", " Initialize weights and threshold based on input arguments. Note that no\n", " type-checking is being performed here for simplicity.\n", " \"\"\"\n", " self.weights = weights\n", " self.threshold = threshold\n", "\n", "\n", " def activate(self, values):\n", " \"\"\"\n", " Takes in @param values, a list of numbers equal to length of weights.\n", " @return the output of a threshold perceptron with given inputs based on\n", " perceptron weights and threshold.\n", " \"\"\"\n", " \n", " # First calculate the strength with which the perceptron fires\n", " strength = np.dot(values,self.weights)\n", " \n", " # Then return 0 or 1 depending on strength compared to threshold \n", " return int(strength > self.threshold)\n", "\n", " \n", "# Part 1: Set up the perceptron network\n", "Network = [\n", " # input layer, declare input layer perceptrons here\n", " [Perceptron(np.array([1.,0.])), Perceptron(np.array([0.5,0.5,])), Perceptron(np.array([0.0,1.0]))], \\\n", " # output node, declare output layer perceptron here\n", " [Perceptron(np.array([1,-2,1]))]\n", "]\n", "\n", "# Part 2: Define a procedure to compute the output of the network, given inputs\n", "def EvalNetwork(inputValues, Network):\n", " \"\"\"\n", " Takes in @param inputValues, a list of input values, and @param Network\n", " that specifies a perceptron network. @return the output of the Network for\n", " the given set of inputs.\n", " \"\"\"\n", " \n", " # YOUR CODE HERE\n", " x_1 = inputValues[0]\n", " x_2 = inputValues[1]\n", " input = [1,0]\n", " for layer in Network:\n", " output = []\n", " for perceptron in layer:\n", " perceptron_output = perceptron.activate(input)\n", " output.append(perceptron_output)\n", " print \"pw: \", perceptron.weights, \"input: \", input, \"output: \", perceptron_output\n", " output_temp = output\n", " input = output\n", " \n", " \n", " OutputValue = int(output_temp[0]) \n", " # Be sure your output value is a single number\n", " return OutputValue\n", "\n", "\n", "def test():\n", " \"\"\"\n", " A few tests to make sure that the perceptron class performs as expected.\n", " \"\"\"\n", " print \"0 XOR 0 = 0?:\", EvalNetwork(np.array([0,0]), Network)\n", " print \"0 XOR 1 = 1?:\", EvalNetwork(np.array([0,1]), Network)\n", " print \"1 XOR 0 = 1?:\", EvalNetwork(np.array([1,0]), Network)\n", " print \"1 XOR 1 = 0?:\", EvalNetwork(np.array([1,1]), Network)\n", "\n", "if __name__ == \"__main__\":\n", " test()" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "\n", "Running test()...\n", "0 XOR 0 = 0?: pw: [ 1. 0.] input: [1, 0] output: 1\n", "pw: [ 0.5 0.5] input: [1, 0] output: 1\n", "pw: [ 0. 1.] input: [1, 0] output: 0\n", "pw: [ 1 -2 1] input: [1, 1, 0] output: 0\n", "0\n", "0 XOR 1 = 1?: pw: [ 1. 0.] input: [1, 0] output: 1\n", "pw: [ 0.5 0.5] input: [1, 0] output: 1\n", "pw: [ 0. 1.] input: [1, 0] output: 0\n", "pw: [ 1 -2 1] input: [1, 1, 0] output: 0\n", "0\n", "1 XOR 0 = 1?: pw: [ 1. 0.] input: [1, 0] output: 1\n", "pw: [ 0.5 0.5] input: [1, 0] output: 1\n", "pw: [ 0. 1.] input: [1, 0] output: 0\n", "pw: [ 1 -2 1] input: [1, 1, 0] output: 0\n", "0\n", "1 XOR 1 = 0?: pw: [ 1. 0.] input: [1, 0] output: 1\n", "pw: [ 0.5 0.5] input: [1, 0] output: 1\n", "pw: [ 0. 1.] input: [1, 0] output: 0\n", "pw: [ 1 -2 1] input: [1, 1, 0] output: 0\n", "0\n", "All done!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And I figured out I'd got my AND weights wrong. Missed out a threshold=1.0.\n", "\n", "WOWW I'm such a moron." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "1 XOR 1 = 0?: pw: [ 1. 0.] input: [1 1] output: 1\n", "pw: [ 0.5 0.5] input: [1 1] output: 0\n", "pw: [ 0. 1.] input: [1 1] output: 1\n", "pw: [ 1 -2 1] input: [1, 0, 1] output: 1\n", "1\n", "All done!\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ah whoops threshold needs to be 0.9999" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# ----------\n", "#\n", "# In this exercise, you will create a network of perceptrons that can represent\n", "# the XOR function, using a network structure like those shown in the previous\n", "# quizzes.\n", "#\n", "# You will need to do two things:\n", "# First, create a network o f perceptrons with the correct weights\n", "# Second, define a procedure EvalNetwork() which takes in a list of inputs and\n", "# outputs the value of this network.\n", "#\n", "# ----------\n", "\n", "import numpy as np\n", "\n", "class Perceptron:\n", " \"\"\"\n", " This class models an artificial neuron with step activation function.\n", " \"\"\"\n", "\n", " def __init__(self, weights = np.array([1]), threshold = 0):\n", " \"\"\"\n", " Initialize weights and threshold based on input arguments. Note that no\n", " type-checking is being performed here for simplicity.\n", " \"\"\"\n", " self.weights = weights\n", " self.threshold = threshold\n", "\n", "\n", " def activate(self, values):\n", " \"\"\"\n", " Takes in @param values, a list of numbers equal to length of weights.\n", " @return the output of a threshold perceptron with given inputs based on\n", " perceptron weights and threshold.\n", " \"\"\"\n", " \n", " # First calculate the strength with which the perceptron fires\n", " strength = np.dot(values,self.weights)\n", " \n", " # Then return 0 or 1 depending on strength compared to threshold \n", " return int(strength > self.threshold)\n", "\n", " \n", "# Part 1: Set up the perceptron network\n", "Network = [\n", " # input layer, declare input layer perceptrons here\n", " [Perceptron(np.array([1.,0.])), Perceptron(np.array([0.5,0.5,]), threshold=0.99999), Perceptron(np.array([0.0,1.0]))], \\\n", " # output node, declare output layer perceptron here\n", " [Perceptron(np.array([1,-2,1]))]\n", "]\n", "\n", "# Part 2: Define a procedure to compute the output of the network, given inputs\n", "def EvalNetwork(inputValues, Network):\n", " \"\"\"\n", " Takes in @param inputValues, a list of input values, and @param Network\n", " that specifies a perceptron network. @return the output of the Network for\n", " the given set of inputs.\n", " \"\"\"\n", " \n", " # YOUR CODE HERE\n", " input = inputValues\n", " for layer in Network:\n", " output = []\n", " for perceptron in layer:\n", " perceptron_output = perceptron.activate(input)\n", " output.append(perceptron_output)\n", " print \"pw: \", perceptron.weights, \"input: \", input, \"output: \", perceptron_output\n", " output_temp = output\n", " input = output\n", " \n", " \n", " OutputValue = int(output_temp[0]) \n", " # Be sure your output value is a single number\n", " return OutputValue\n", "\n", "\n", "def test():\n", " \"\"\"\n", " A few tests to make sure that the perceptron class performs as expected.\n", " \"\"\"\n", " print \"0 XOR 0 = 0?:\", EvalNetwork(np.array([0,0]), Network)\n", " print \"0 XOR 1 = 1?:\", EvalNetwork(np.array([0,1]), Network)\n", " print \"1 XOR 0 = 1?:\", EvalNetwork(np.array([1,0]), Network)\n", " print \"1 XOR 1 = 0?:\", EvalNetwork(np.array([1,1]), Network)\n", "\n", "if __name__ == \"__main__\":\n", " test()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### Gradient Descent\n", "- More robust to non(linear separability).\n", "Activation\n", "$$a = \\sum_i x_i w_i$$\n", "\n", "Imagine the output is not thresholded. \n", "-> figure out weights s.t. not-thresholded value is as close to the output value as we can.\n", "\n", "$$E(w)=\\frac{1}{2}\\sum_{(x,y)\\in D} (y-a)^2$$\n", " \n", "Take partial derivative of E(w) with respect to w_i.\n", "\n", "$$\\frac{\\delta E}{\\delta w_i} = \\sum_{(x,y)\\in 0}(y-a)(-x_i)$$\n", "\n", "Looks like the perceptron rule.\n", "\n", "### Comparison of learning rules\n", "Perceptron: guarantee of finite convergence in the case of linear separability.\n", "$$\\Delta w_i = \\eta(y-\\hat y)x_i$$\n", "\n", "Gradient descent: calculus. More robust to datasets that are not linearly separable. Converges in the limit to a local optimum.\n", "$$\\Delta w_i = \\eta(y-a)x_i$$\n", "* Why not do gradient descent on $\\hat y$? -> It's not differentiable because it's discontinuous (a step function).\n", "* So we want to try to smooth out the threshold.\n", "-> SIGMOID.\n", "\n", "### Advantages of having threshold vs returning \n", "\n", "### Tuning perceptron parameters\n", "- \n", "\n", "\n", "### Inputs to perceptron networks\n", "- A single perceptron is very much like linear regression. Therefore it should take the same kinds of inputs. However the outputs of perceptrons will generally be classifications, not numerical.\n", "- A matrix" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Variation of Perceptrons\n", "\n", "I just took the number of perceptrons in each layer and multiplied them together to get the total number of possible outcomes for the quiz. Somehow I think that's wrong.\n", "\n", "As discussed in the previous lesson, to solve the problem of having only a very few discrete outputs from our neural net, we'll apply a transition function.\n", "\n", "We'll start by letting you test out a variety of functions, numerically approximating their derivatives in order to apply a gradient descent update rule.\n", "\n", "We have decided we need a function that is continuous (to avoid the discrete problem of perceptrons) but not linear (to allow us to represent non-linear functions). \n", "* Logistic function is appropriate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sigmoids\n", "\n", "Sigmoid: S-like.\n", "\n", "$$ \\sigma(a) = \\frac{1}{1+e^{-a}} $$\n", "\n", "$ a -> -\\infty$, $\\sigma(a) -> 0$\n", "$ a -> +\\infty$, $\\sigma(a) -> 1$\n", "\n", "$$ D\\sigma(a) = \\sigma(a)(1-\\sigma(a))$$\n", "\n", "Q: Difference between sigmoid unit and a single perceptron in a binary classification problem?\n", "* Sigmoid unit will give more info but both give the same answer.\n", "\n", "Determine update rules using calculus.\n", "\n", "### Potential problems with gradient descent\n", "(to find locally optimal set of weights)\n", "- Local extrema\n", "- Lengthy run times\n", "- Infinite loops\n", "- Failure to completely converge" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Layered networks\n", "\n", "### Additional layers don't give us more representational power if the units are all linear.\n", "\n", "(Neural net diagram)\n", "\n", "If entire neural net is made up of sigmoids, the mapping from input to output is differentiable in terms of the weights.\n", "* That is, for any given weight in the network, we can figure out how moving it up or down by a little bit changes the mapping from input to output. So\n", "\n", "### Back-propagation\n", "A computationally beneficial organisation of the chain rule.\n", "Info from input _> output\n", "error info flowing back from output -> input\n", "\n", "If we replace the sigmoids with some other differentiable unit, this also works.\n", "\n", "The error function can have multiple local optima. -> Could just be stuck at an overall non-optimal weight setting.\n", "* Imagine combining many parabolas in a higher dimensional space and considering the local minima that are quite high up.\n", "\n", "### Optimising Weights\n", "\n", "Methods\n", "- Gradient Descent\n", "- Advanced methods\n", " - Momentum terms in gradient: instead of being stuck in a high bowl, you can have energy to bounce out and pop over to the text thing.\n", " - Higher order derivatives (look at changes in combinations of weights vs individual weights. e.g. Hamiltonians.)\n", " - Randomised optimisation\n", " - Penalty for 'complexity'. // Decision tree, regression overfitting.\n", " - Networks get complex when we: add more nodes or more layers, have large weights.\n", "\n", "Some people in ML think optimisation and learning are the same thing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Restriction Bias\n", "What are neural nets appropriate for?\n", "\n", "Restriction Bias tells you about the representation of the data structure. - Representational power. \n", "- Set of hypotheses we're willing to consider.\n", "\n", "e.g. Perceptrons -> Linear. Half spaces\n", "Sigmoids -> More complex.\n", "* So not much restruction at all.\n", "\n", "Types of functions we can represent: \n", "* Boolean via network of threshold-like units.\n", "* Continuous: Can do this with a single hidden layer as long as we can have as many units as we want. -> Each unit can worry about a small patch of the function. -> Output layer stitch the patches together.\n", "* Arbitrary: Adding hidden layers to stitch patches together even if they have jumps between them.\n", " - But that means we have a **danger of overfitting**: We can represent the noise as well. \n", " - Set max number of hidden layers.\n", " - Cross-validation: nodes to put in each layer, number of layers, max weights\n", " - Training NN is an iterative process where error decreases as no. of iterations increase. VS other supervised classification where at some point error increases as no. of iterations increase.\n", " \n", "\n", "## Preference Bias\n", "\n", "Algorithm's selection of one representation over another\n", "(e.g. DTs correct trees, max information gain)\n", "\n", "1. How do we start?\n", " - Initial weights: Small, random values. (Randomness gives some variance: If we run multiple times we don't want it to get stuck in the same place multiple times. Small to avoid overfitting.)\n", "2. PReference bias\n", " - Prefer correct over incorrect\n", " - Prefer simpler over complex\n", " \n", "**Occam's Razor**: Entities should not be multiplied unneccessarily.\n", "\n", "\n", "...Better generalisation error?\n", "\n", "## Summary\n", "- Perceptrons: Linear threshold unit\n", "- Networks can be put together to produce any boolean function\n", "- Perceptron rule - finite time for linearly separable datasets\n", "- General differentiable rule: Back propagation and gradient descent\n", "- Preference and restriction bias\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## I totally don't get this activation function sandbox quiz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Josh: ML x design\n", "\n", "Teaching a computer to recognise sketches\n", "* Feature extraction and engineering\n", "\n", "Applications\n", "- Teddy search\n", "- Search Doodle 2.0 semantic search horse running annotating motions\n", "- Simulate physics \n", "- TEDDY 3d mesh\n", "- Shadow Draw / Sketch\n", "- (Comparing comments)\n", " -> UNderstanding comments (Good or bad)\n", "\n", "Data: 250 categories, 80 images per category\n", "\n", "Feature engineering\n", "- Word expansion -> Synonyms\n", "- Lower case normalise\n", "- Bag of words could be two-word groups\n", "- Convolution\n", "\n", "Feautures\n", "- Colors RGB\n", "- Gradients (hog)\n", "- (Feat Engin still) Cluster using KMeans\n", "\n", "Train: \n", "...\n", "Test if in 'Top k'\n", "\n", "? NN extract features for you\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.4.1 Kernel Methods and Support Vector Machines.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Support Vector Machines\n", "\n", "(SVM 1)\n", "\n", "Drawing it in the middle gives a biggest 'demilitarised' zone.\n", "Intuition:\n", "* There might bu other minuses near the minunes we can see that we risk chopping off if a line gets too close to the current minuses.\n", "* This data is just a sample from the population. // NN algorithms. Lines very close to e.g. the pluses -> believing training data too much. Overfitting.\n", "* Middle line is **consistent with the data but commits least to it.**\n", "* Interesting because it's not a complex overfit. They're all just lines.\n", "\n", "Hyperplanes:\n", "$$y = w^Tx+b$$\n", "* y represents the classification label\n", "* w representns parameters for our plane\n", "* b moves it out of the origin\n", "\n", "Taking some new point, projecting it onto the line, looking at the value you get when you project it.\n", "\n", "Value is positive if you are in the class, negative if you're not.\n", "\n", "Decision boundary being as far away from the data as possible without being inconsistent with it.\n", "\n", "Hyperplane equation at the decision boundary (neither positive nor negative output) is $w^Tx + b = 0$. \n", "\n", "What are the equations of the grey lines?\n", "* We know labels are {-1, +1}. Line that brushes up against positive example: want it s.t. the output of the line is +1 on the first point that it encounters.\n", "* $w^Tx+b=1$ for top grey line. Similarly, $w^T+b=-1$ for bottom grey line.\n", "\n", "(img)\n", "\n", "Need to maximise distance between two grey lines. The lines are parallel to one another. Choose one point on each grey line such that the line between them is perpendicular to the parallel lines.\n", "\n", "* Point on positive line: $w^Tx_1+b=1$\n", "* Point on negative line: $w^Tx_2+b-1$\n", "* Subtract to get line $w^T(x_1-x_2)=2\n", "* Divide both sides by the length of w: \n", "$$\\frac{w_t}{||w||}(x_1-x_2)=\\frac{2}{||w||}$$\n", "\n", "LHS: $x_1-x_2$ is projected onto the normalised vector (unit length, some direction). This is callled the **margin**.\n", "\n", "w represents a vector perpendicular to the line (eqn of a plane)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So we want to maximise $\\frac{2}{||w||}$ while classifying everything correctly. Let's turn the condition into a mathematical expression.\n", "\n", "That is,\n", "$$y_i(w^Tx_i + b) \\geq 1 \\forall i$$.\n", "\n", "* Q: Why geq 1 as opposed to geq 0?\n", "\n", "* Solve equivalent problem (LHS):\n", "$$\\min \\frac{1}{2}||w||^2$$\n", "\n", "This is easier because it's a quadratic programming problem and people know how to solvo those in straightforward ways. They always have a unique solution.\n", "\n", "Transform into quadratic programming form:\n", "$$\\max W(\\alpha) = \\sum_i \\alpha_i - \\frac{1}{2}\\sum_{i,j}\\alpha_i\\alpha_j y_iy_jx_i^Tx_j$$\n", "s.t. $\\alpha_i \\geq 0, \\sum_i \\alpha_i y_i = 0$.\n", "\n", "Properties\n", "* Once you find $\\alpha$, you can recover w: $w=\\sum_i\\alpha_iy_ix_i$.\n", "* You can also recover b from having w.\n", "* It turns out that those $\\alpha_i$s are mostly zero. -> Only a few x-s matter. Cause some datapoints don't factor into (don't matter for) w. -> Can find all of support you need in some vectors with the non-zero $\\alpha_i$s. -> **machine that only needs a few support vectors**.\n", "* Which vectors matter (will be part of the support vectors)? (Those closer to the line)\n", "\n", "* Similarities to Nearest Neighbours cause only local points matter. Like KNN except you've already done the work to figure out which ones you need and which ones you can throw away. -> Like instance-based learning but it's not completely lazy. (?)\n", "\n", "Dot product of $x_i^Tx_j$ -> Length of the projection. Measure of similarity (of direction) -> If they point in opposite directions it'll be a negative, if orthogonal it'll be 0, if in same direction it'll be positive and bigger.\n", "* Eqn: Find all pairs of points, figure out which ones matter, and think about how they relate to one another wrt their output labels wrt how similar they are.\n", "\n", "## Supposing not linearly separable\n", "\n", "* If have **outlier or intruder**: Can tradeoff: Maximise margin Makes the minimal set of errors while maximising the margin if you were allowed to flip a few points from pos to neg or vv.\n", "* 'Linearly married': minuses in a ring around the pluses. **Transform datapoints**.\n", " - e.g. $\\Phi(q) = $\n", " - $\\Phi(x)^T\\Phi(y) = (x_1y_1+x_2y_2)^2 = (x^T y)^2$ (dot product, circle)\n", " - Different notion of similarity: Now whether or not you fall in a circle vs direction. Distance in different spaces.\n", " - Chose this form but doesn't require that you do this transformation. Can still simply compute the dot product.\n", " - This is the **kernel trick**.\n", " - Turns out for any function that you use, there is some transformation into some higher dimensional space that happens to represent your kernel.\n", " \n", "### Kernel Trick\n", "- The kernel is the function itself. e.g. $k = (x^Ty)^2$\n", "$$\\max W(\\alpha) = \\sum_i \\alpha_i - \\frac{1}{2}\\sum_{i,j}\\alpha_i\\alpha_j y_iy_jk(x_i,x_j)$$\n", "\n", "\n", "Kernel is mech by which we **measure of similarity** , mech by which we **inject domain knowledge** into the SVM algorithm. Just like KNN.\n", "\n", "And in higher dimensional space, your points are linearly separable.\n", "\n", "**Common kernels**\n", "* Polynomial kernel $k = (x^Ty+c)^p$ -> Like polynomial regression.\n", "* $k = e^{\\frac{-||x-y||^2}{2\\sigma^2}}$. If on top of each other, similarity is 1. If very distant, k close to 1. It's symmetric. Like a Gaussian with some width.\n", "* $k = tanh(\\betax^Ty + \\theta)$ -> Like a sigmoid.\n", "\n", "**Good kernels**: Captures your domain knowledge, your notion of similarity.\n", "\n", "**Requirements: Mercer Condition**: it acts like a distance. Positive semidefinite (well-behaved).\n", "- In practice stuff often works even if it doesn't satisfy the Mercer Condition so it's que merciful.\n", "\n", "#### Applications\n", "x, y can be discrete variables as long as you have some notion of similarity than you can define that returns a number. You can think about strings, graphs, images." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "- Margins and relation to genelatisation and overfitting\n", "- Want to max margin\n", "- Optimisation problem for finding linear separator that has max margin (quadratic programming)\n", "- Support vectors: SVM is as lazy as necessary\n", "- Kernel trick (transformations for non-linearly-separable data)\n", "\n", "General alg q: What are the levers we have for expressing domain knowledge? " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.5 Instance-based Learning.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Instance-Based Learning\n", "*Nonparametric Models*\n", "\n", "**Prev SL tasks**: Given a bunch of data (x,y) and we would learn some functions, e.g a line, to represent them. And then we'd effectively throw the data away when we're making our predictions.\n", "\n", "New model **Version 1**:\n", "Instead, put all data (x,y) in a database. Then when we want to predict y for x, we look it up as **f(x) = lookup(x).\n", "\n", "- Remembers \n", " - But no generalisation :( \n", " - Overfitting problems, sensitive to noise\n", " - If same x has multiple ys, will return all of them.\n", "- It's fast: No 'wasted time' doing learning\n", "\n", "e.g. housing prices example. -> **K Nearest Neighbours**\n", "Parameters:\n", "- Number of nearest neighbours\n", "- Some notion of distance. \n", " - Note: Distance might be straight-line distance, driving distance, may need to take into account that crossing a highway in Atlanta is metaphorically a BIG distance.\n", " - Some measure of similarity\n", "\n", "Free parameters" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n16793MM8wq+bmZk2ERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERABERAB\nERABERABERABERABERABERABERABERABERABERABERABEehsAl2dbb6sF4GWEdBno2VopVgEREAE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEzo3A6bnVpIpEoEMIyAnWISfqkpup6/CSn2A1TwRE\nQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREoEBATusCCkUugoAccxdB/XLWqWvpcp5XtUoE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERKB9CMi53D7nomMtkVOvY0/duRqu6+Rccasy\nERABERABERABERABERABERABERABERABERABERABERABEaibgJzIdaN7PwrK8fd+nOdqrdR1UI2Q\n8kVABERABERABERABERABERABERABERABERABERABERABETgchCQA/lynMe6WyHHYN3oOrKgzndH\nnjYZLQIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAItJyDHccsRt0cFchi2x3lohRU6\nt62gKp0iIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi8P4QkNP4Ep5rOREvx0nVebwc\n51GtEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIF2JyCncbufoSr2ybFYBVCbZuu8\ntemJkVkiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi8J4RkMO4w064HI2dccJ0njrj\nPMlKERABERABERABERABERABERABERABERABERABERABERABEXjfCchh3OZXgByP7XuCdG7a99zI\nMhEQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQgeoE5CyuzujcJeSEPHfkFSvU+aiI\nR5kiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIdSkDO4jY5cXJIXvyJ0Dm4+HOQ\nZoHOSxoVpYmACIiACIiACIiACIiACIiACIiACIiACIiACIiACIhAZxGQU7I9z5fOywWeFznBLga+\nuGfnLlbZWUlSBERABERABERABERABERABERABERABERABERABERABESgPQjIAZr9PIhVdlZNkZTz\nrSkYMyt5n3m/z23PfIFIUAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQARE4L0m8D47S9/n\ntp/rRS+nXetxvw+M34c2tv5KUQ0iIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiUJ3A\n++BIfR/aWP1Mt0hCjr0WgYXay8b2srWndWdemkVABERABERABERABERABERABERABERABERABERA\nBERABETgYghcNsfqZWvPxVwViVrl9EsAacJhpzPtdPubcAqlQgREQAREQAREQAREQAREQAREQARE\nQAREQAREQAREQAREQAQuFYFOd7R2uv1tdTHJGdi809GpLDvV7uadOWkSAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQAREQAREQgfeLQKc6XDvV7ra6uuQcbPx0dBLDTrK18TNzfhrE9fxYqyYREAER\nEAEREAEREAEREAEREAEREAEREAEREAEREAERkJOwNddAJ3HtJFtbc7Ya0CrHVv3wOoFdJ9hY6xm4\njG2qlYHkRUAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAE2ovAZXRYdkKbOsHG9rpSYY2c\nbbWfknZn1u72BeKdYmewV6EIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAINJtApzg4\n293Odrev2ddNQ/rkpMuOr11ZtaNd7WhT9jMtSREQAREQAREQAREQAREQAREQAREQAREQAREQAREQ\nAREQARFoHwLt6PxsR5t4xtrVrva5mmCJHHnZTke7cWoHe9rBhmxnT1IiIAIiIAIiIAIiIAIiIAIi\nIAIiIAIiIAIiIAIiIAIiIAIicDkJtINDtB1siM9uu9kT29YWcTn5Kp+GduNzUfZcVL2Vz45yRUAE\nREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAEkgQuykF6UfUm2x+O282eYNeFh3L8lT8F\n7cLmvO047/rKn4HsOZ1oc/bWSVIEREAEREAEREAEREAEREAEREAEREAEREAEREAEREAERKCdCHSi\n4/G8bT7v+spdH+1iRzn7LiRdjrWz2NuByXnZcF71nKWcntJu9qRbqVQREAEREAEREAEREAEREAER\nEAEREAEREAEREAEREAEREAERqJ1Auzkrz8ue86qn0hlpBxsq2XeueXLIleK+aB6trr/V+ktpFo8u\nqt6iBYqJgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQGcQuChnZqvrbbX+amf3ouuv\nZt+55ctx51FfNIdW1t9K3fGFel71xHUqLgIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIi\nIALvE4HzcnK2sp5W6s5yLVx0/VlsbKmMnHpmF8mgVXW3Si8vxlbqbvbF3km2Nrvt0icCIiACIiAC\nIiACIiACIiACIiACIiACIiACIiACIiACItAYgU5yJLbS1lbpbpXeLGf9IuvOYl9LZd5nB9pFtb1V\n9bZCbyt0Zr2gL7LurDZKTgREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQAQqEbhIR2Qr\n6m6FTvJrld5K5+Yi661mV0vz31cn3EW1u9n1NlNfM3VVumjPq55KNihPBERABERABERABERABERA\nBERABERABERABERABERABERABNqJwHk5SJtZTzN18Vw0W1/W83tR9Wa1r+ly76Oz7iLa3Mw6m6Wr\nWXqSF2Wr9CbraYfj96mt7cBbNoiACIiACIiACIiACIiACIiACIiACIiACIiACIiACIhATOB9cuy1\nqq3N0tssPTy/zdQVXy+V4hdRZyV7Wpr3vjm4zru9zayvGbqaoSNckM3UFXTWGraDDbXaLHkREAER\nEAEREAEREAEREAEREAEREAEREAEREAEREAEREIHLQaAdnIrNtKEZupqhI1wdzdQVdFYKz7u+Sra0\nNO99cbCddzubVV8z9LSLjkoXcjNsrKRfeSIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIg\nAiLQLgRa7Yhshv520cFz1gxbajn3511fLbY1RfZ9cMyddxubUV+jOi66fPLibNSepL52PX5f2tmu\n/GWXCIiACIiACIiACIiACIiACIiACIiACIiACIiACIjA5SZw6R13+dPX7HY2qu+iyxNLozbU+sk4\n7/pqta8h+cvu0DrP9jWjrkZ0XFTZcAE2Un/QUU94UfXWY6vKiIAIiIAIiIAIiIAIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIXA4CF+VAbEa9jei4qLLhqmmk/qAja3iedWW1qSlyl9m5dl5ta0Y99eo473Lh\noqu33lC+XNgqveXqU7oIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAInBeBVjkcG9Vb\nb/nzLhefp3rrjnVkiZ9XPVlsaZrMZXXInVe7Gq2n3vL1lKunDC+0esslL9Jm6UnqbdZxu9vXrHZK\njwiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiIgAi8zwTa3eHXLPvq1VNPuXrK8Bqst1y4fhst\nH/RUC8+rnmp2NC3/MjrFzqtNjdRTb9lay9UqzwurnjLxBdlo+VhXWrzV+tPqVJoIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAIVCLQaidio/rrKV9rmVrlA896y7F8I2VD/VnC86oniy0N\ny1w2Z9t5tKfROmot327y4aKr1a5QLi1spq40/UoTAREQAREQAREQAREQAREQAREQAREQAREQAREQ\nAREQAREQgXYh0ExnY726ai3XbvLJc1mrfcnyWY7Po44sdjQsc9kcc61uTyP6ay3bSvlW6k67KGut\nL01H1rTzrCurTZITAREQAREQAREQAREQAREQAREQAREQAREQAREQAREQARHobALn6RxstK5ay9ci\nX4ssz3ir5eOrqta64rJZ4q3Wn8WGpshcFmfaebSj3jpqLVeLfDvIxhdiLfbE5crFm62vXD1KFwER\nEAEREAEREAEREAEREAEREAEREAEREAEREAEREAEREIFmE2i2Q7FefbWUawdZnoda7IjPW73lYh3V\n4udRRzUbGsq/DA64VrehEf21lG2FbCt0hguuFt2hTAgbKRt01BNeVL312KoyIiACIiACIiACIiAC\nIiACIiACIiACIiACIiACIiACIiAC50vgohx/jdRba9la5LPKZpXj2WyVbPJKqaWeZNksx63Wn8WG\numUug8OslW2oV3et5bLKZ5HLIsMLJqtcrbLhYqxFfyhTKWy2vkp1KU8EREAEREAEREAEREAEREAE\nREAEREAEREAEREAEREAEREAE6iHQbMdhPfpqKZNVNotcFhkyzSoX+Ncq32i5UL5SWK9NlXSeW16n\nO91aaX+9umspl1U2i1wWGV5YWeSyyMQXaa3yzSob66k13ojNtdYleREQAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQAREQgfYkcFGOvkbqrbVsFvksMjyDWeSyyGTVFa6arDqDfAjrLRfKVwpbqbtS\nvQ3ndaqTrNV216s/a7lmymXR1SwZXnBZdCUvzHrKJHWE42bqCjoVioAIiIAIiIAIiIAIiIAIiIAI\niIAIiIAIiIAIiIAIiIAIiEAjBJrpLKxHV9YyWeTOU4bMs9RXi1zyPGbVnyyX9bjV+rPakVmuU51t\nrbS7Ht21lMki2wyZZujghZRFT7jgapENZWqtIy5Xb7xeO+utT+VEQAREQAREQAREQAREQAREQARE\nQAREQAREQAREQAREQATal8B5O/jqra+WcllkmyHTDB28MrLoCVdQLbKNlAllq4X12FNNZ0vzO9FR\n1kqb69GdtUwWuWoy1fJ5sVSTaTQ/XJDV9AS5ENYqH8rFYTN0xPoUFwEREAEREAEREAEREAEREAER\nEAEREAEREAEREAEREAEREIFmEWiGo7BWHVnlq8k1mk+G56EjnKtqdQW5OKynTFy+UryVuivVW1de\nJzrcWmFzPTprKVNNtt3zeXFVszFcgFnlgnwtuuMytcTrsakW/ZIVAREQAREQAREQAREQAREQAREQ\nAREQAREQAREQAREQARG4PARa7eyrR3/WMlnkqsm0e358pVWzNZYN8XrKhLLlwlboLFdXw+md5Dhr\npa216s4qn0WukkylPJ78SvmV8qqVzZKfVYZy3KrZ46XK/220fHnNrc/pZNtbT0c1iIAIiIAIiIAI\n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\nQAREIKsJUAxeyWI4WLrmmvDHfs/MTLs76evXrttXX31l3d3dblHMcwX5BVZaXurr6jY2RNbSW11L\nN86GdbMeWtVSdG+D5TCth5tgkU1307kcOC4KwowKIiACIiACIiACIiACIiACIiACIiACIiACWycg\ngXjr7FRSBERABERABERABERglwnExc9dbmpHq6dQS3fPo6OjbkX8uPOxzc7NJtuorKq09957zz76\n6CM7fvy4W/rGBeKtjpvr8dIVM+ucmppyi9tDhw5ZXV2dr98bOsD6t9pGqENbERABERABERABERAB\nERABERABERABERCB3CQggTg3r5t6LQIiIAIiIAIiIAIikMUEKL7SJTLdOh85csTOnjvrgjGFY1rA\ndnR02MWLF+3dd991QXenrHvZ3tGjR21+ft7X6K2trfG2ampq3LI4IMtlcZgMGcMYwjaMTVsREAER\nEAEREAEREAEREAEREAEREAEREIG1CUggXpuPzoqACIiACIiACIiACIjApglQtKyqqrJTp07Zv//7\nv9vFDy7a5MSkC5t0/9zS3GLHjh9zC19a9+5UqKystDNnzlhbW5u7sy4qKrKmpiYXqveLkMpx7Jex\n7NR1Vz0iIAIiIAIiIAIiIAIiIAIiIAIiIAIisBkCEog3Q0t5RUAEREAEREAEREAERGADBChgUpxt\nbm52i+GTJ0+6y2davtJamOJxQ0PDjq8LzLWcufYwo4IIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAI\nrERAAvFKVJQmAiIgAiIgAiIgAiIgAtskQJGYYjBF4sbGRltcXPQamc71huNrDm+zqRWLU4xmkLXt\niniUKAIiIAIiIAIiIAIiIAIiIAIiIAIiIAKvLQEJxK/tpdfARUAEREAEREAEREAEdpsAxdkgCO92\nW5n1s90gEmee07EIiIAIiIAIiIAIiIAIiIAIiIAIiIAIiMDrSyD/9R26Ri4CIiACIiACIiACIiAC\n+5uArIf39/XV6ERABERABERABERABERABERABERABERgKwRkQbwVaiojAiIgAiIgAiIgAiIgAhsg\nELfgje8Hy+INVKEsIiACIiACGyYQudaHc/0Nl1BGERABERABERABERABERABEXgdCUggfh2vusYs\nAiKQcwSCqCBLsJy7dOqwCIjAa05gtef2aumvOS4NXwREYB0Cm5U/N5t/neaz/HQYLbvJ/RVE4niW\n+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\nCBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/G\nuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFg\nUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrE\ne30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMF\nFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7\nFVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQGCygQDwaVjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwWECBeDCodAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENirgALxXp+M\ncxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGABBeLB\noNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI\n9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYL\nKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2\nKqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z\n5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSD\nQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ\n7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGCygQDwaVjgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwW\nUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAjs\nVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwWECBeDCodAQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30y\nzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgH\ng0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg\n3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgs\noEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDY\nq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIDAXgUUiPf6ZJyLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQGCygQDwaVjgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIE9iqgQLzXJ+NcBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECAwWMfeKpwAAEAASURBVECBeDCodAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9PhnnIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINBpSNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxVQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xz\nESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg\n0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3\n+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgso\nEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBPYq\noEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTLORYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcECCsSDQaUjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAXgUUiPf6ZJyLAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECgwUUiAeDSkeAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIG9CigQ7/XJOBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQGCygQDwaVjgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnsVUCDe65NxLgIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwWUCAeDCodAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE9iqgQLzXJ+NcBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCygQDwYVDoCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAjsVUCBeK9PxrkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwWECBeDCodAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIENirgALxXp+McxEgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGCwgALxYFDpCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFcBBeK9Phnn\nIkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGABBeLBoNIRIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgrwIKxHt9Ms5FgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBwQIKxINB\npSNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBeBRSI9/pknIsAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQKDBRSIB4NKR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgb0KKBDv\n9ck4FwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAYLKBAPBpWOAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECexVQIN7rk3EuAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIDBZQ\nIB4MKh0BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgT2KqBAvNcn41wECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYLKBAPBhUOgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOxV\nQIF4r0/GuQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBYQIF4MKh0BAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQ2KuAAvFen4xzESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\nYLCAAvFgUOkIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwVwEF4r0+GeciQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAYAEF4sGg0hEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGCvAgrEe30yzkWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHBAgrEg0GlI0CAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAwF4FFIj3+mSciwABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAoMFFIgHg0pHgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBvQooEO/1yTgXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEBgsoEA8GlY4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ7FVAg3uuTcS4CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgMFlAgHgwqHQECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBPYqoEC81yfjXAQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEBgsoEA8GFQ6AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI7FVAgXivT8a5CBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMFhAgXgwqHQECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBDYq4AC8V6fjHMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsIAC8WBQ6QgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBXAQXivT4Z5yJAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgMBgAQXiwaDSESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYK8CCsR7fTKn\nz/XGFBJfLgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJ3KaBOdZfag++lQDwY9JbTKQjfMrD0\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECZwuoYZ1N9uZtUCB+8+y33Nm/vtiiJIYAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQGAvAupbe3kSC+dQIF6AeROm/WF5E9DdkgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4NYF1MFunXj7DRSIt1uJJECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwL0WeOZen/5+Hj7+hUS9nqoDfQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIPXCA/UZztA3+5\n+3p5PkG8r+fhNAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELg1AQXiW6OVmAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAvsSUCC+nefh4/C34yorAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIDA4xBQb7ul56xAPBb2rt6ocR8XAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTdT4C5q\nVndVf3szHe/03grEY7jv4o2Zf8CyHXNyWQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAhcXyBr\nV9leP9P6zsh/2/dYP8EDWVUgvh8P0pv9fjwnpyRAgAABAgQIECBAgAABAgQIECBAgAABAgQIPGYB\nNa178PSfuQdnfGxHrH9wnnpsL97rJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQeBACUfPKrwfx\ngh7Ki/AJ4vOeZC3enrdTNAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECtyGghneGqgLxdqzb\nemP5lxPbn4FIAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB+ytwm3Wx26rl3V/thZMrEC/ANNN7\nfEPd5h+g5uUbEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIELgU2Gudao81vUu0vXQUiJefxG28\ngW6a86b7l1+tFQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLXE7hpDeum+3unvo2cvfvcuzkF\n4v4jG/mGiVz51b/b+uzIs6zfySoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBmwlct7aV9bTr\n7u+demSuXv57OadAfLuP7aZvupvuv91XJzsBAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBnxW4\naY3rpvt/9kRmLgUUiC8p5k/5Xo3uvhdvdG/2u3d3RwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngdsV2EMdTB3u4hkrEN/um/02su/hD9BtvC45CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE7peA\nutX9el7zaR97gXjEvxS4bo5z/8Bc9z738G3pyAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvdM\n4Jxa1rl1skpxzn3qvtofkaPmu1f9x1ogHvXQr5Mn9py779z4e/UmdFgCBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIEHIXBuTes6dbOAOvc+S7ij8izl3+X8Yy0Qj3gYt/mG2fqH4TbPMMJIDgIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgYcnsKVGtbXedV2dLWe4bu4Hve+xFYhHvFH28mYe8Voe9Jvb\niyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIELg1ga21qq1x1znoqLrdbZ7xOq/rVvc8lgLxnh/q\nOW/cPb+OW32jSk6AAAECBAgQIECAAAECBAgQIECAAAECBAgQILBbga01rHPqYm/Gi936Ot6Msw27\n52MpEA8D25ho1Jt7VJ6NxxZGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4EYCo+pbo/Lc6MU8\nxM0PvUAcb5ybXufkuKs36jlnuunrt58AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAT+Aualbn\n1t9GnGlEjp7XLuYeeoH4psjnPPwtsadiTq3H69kSc9PXbT8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBLQJbalenYk6txzm2xOR5z4nNPY+mfagF4rt+6KfuF+tbYpbeeFv2L+01T4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQOC2BU7Vs7bUyrbE3PbrqPlPnafG3pv+Qy0Q3+QBjHzQkWst33XX\n4vWdyn0TA3sJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILAlsqVNdtw62JffSuXrza+foxT/4\nuYdWIL7pA77p/q1vmLU39qm1rfcQR4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOAuBJZqbKfq\nXkv7Rp/5pve56f7Rr+dG+R5agfi6GFsf6ta4tXOMyLGW3xoBAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACB+yIwona2NcfWuPtid61zKhCv/wjoinpbb5jIu5S7t9abq+c8o5+psj1jq1ACBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHHLtArMvXm0mltLWOu20buLdfWuC257mXMQygQ38VDvIt7nHoD\n7eEMp85onQABAgQIECBAgAABAgQIECBAgAABAgQIECBA4HEK7KGWdRdnuIt73Oo76CEUiK8LNOLh\nRY4ReeI1rOXq3WOOf+ONN16/LoB9BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBM4RuKhNLdW1\nejWtSL8Uf86tM3ZUrqWz5n0ebPsYC8RbH/apuLX1WOut9+aW3ly92Hbux9/5znf+dSnB6fmnppD6\ndXqHCAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgccrcFGb+nEj0NawYrk312y7HPZiY643n5vW\n1iLm1PrWPBn3YNr7WiA+9Ya46QM69YZZW++tLZ33nNjea3rt85///NefWFi60xNBBgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgTOF7ioTb22cedS5eqcGlkvNm+/thYxp9Yzz3XayH2b+a9zpk17\n7muBeNOLa4JGPaClPL03QW8ujrU03xy5G1f3/vuf/dmf/fvlpljJq/ZzTkuAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIEDgBgIXtamsT9W6VWbtzeVabZfievO9ucwVayOuUXlGnOVWczymAvFtQp7z\nhmljY9zOtWftxcTc1/7gD/7gK1/72tf+33lD/LTovGo/5za1eavabtooiAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4AELRE0qalPTS/za9BXFpHplcanOtf1eTJun3VPH58TWffpF4DEUiLe+UbbG\nFb7h3VNnaNe/8rd/+7f/3+///n/70uHw0+kw0/JTF1/zn8mYO/crbtF+ZY52/txx9VrbW+P0CRAg\n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\nLuNru7S3xugTIECAAAECBAgQIECAAAECBAgQIECAAAEC2wW2/t37Wtw5azW29uPEOW7btbVTsXU9\n+5kvxktzuZZt7Imrxh9njt8zrtf29mWejD8npu5tz5DjjOnlzZhz2pov9/Xmcu1RtArEpx9zvEnW\nioDter6pYk/tn77TMaLmy/5anjYmsqydN8+ROXOc+3J+KUeuZ3y07VyOM0eMW486l2vZRs68ci7b\nnM+2ztd+rvfaiIsrzxn9nIt+XHXtOHP1vcauxV3t0CNAgAABAgQIECBAgAABAgQIECBAgAABAgRu\nS+Ccv6vvxV5nru7p9XMu23jt2e+17VzG1/no57iu17mYr1fdk/3a1tilfhsf496VcbFWY2q/t6+d\na/O0+9txb387Z1wE7nuBON4AtVhXXtrcXVtfW2vz5Ljdc2qc+5badv9SXM5nfLY537axXq8wyrns\n99xq3oyveaJf92VMzi2NM0feO8eZL/flfMZlm/NtfG89Y2Mtrsyd4zo3B2z8dpP9de/G2wkjQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQKPViD/bv86AKf2nrte42s/zlbH2c+2rudctrmW49rWfsTFFXM5\n3xvXuYzNNtbiqvuPM8fvOV/js59tjW/7dX+7tjbOfWsxda2NPzWue5f6bY4at7YWcafWa67d9e97\ngfg6oPHAegW73nxvLu/ZrrXjjKttjcl+tHHFmXIuxrUf47xyPvflfLs/56PNPbXf7o+1zJH9aOvV\n21PX6/52PsZ5jtpmXO5t21jvzeW+XI8282Y/2rUr8ubVvra6FjHteu7TEiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAmMFRv6d/Fqu3lpvLl5dnc9+tvnqc5xt3Zdzp9rcU+Pafox7c3mO2i7FtvO5J/Pm\nONucz33ZxnquZWy2dT77S/tyPff22jamHdc9vbXeXOxZmq/5HlR/LwXihG+LctfFjnyjcuUZas7a\nj/V2nHtqmzHRxtWer7eesccdP7sn56Nt98dc3CPnY5z9bGMur5iLK/ccR09+r2duc/T2Z3yuZba8\nx1KbcdFmTDsX4zxDm38pNueXzpXr57SZa23P2vnW9lkjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\n+gJb/+59S1wvpp1bG+datnHi7Gfbm8u1aGs/YuNq5zPmuHq1p45zT23bXBmf87Wt/V6Ourft1/jo\n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\nNl9pHWc/296+XOu1dW6pX+8bMRnXm6/rGVfbXD+nbV9TzZdnWGvzXr2YpbW8R2/P0tx19tRcN91f\nc6317+o+h7ssEK+94LtcC9y2yJf3r2u1v3W9F1fnsn/q/vUNELH1LNnPNnNuaWveNr6eqReX52j3\nxbiuLfVzX13PuXPbyBFX75zHlfHf34x7jn8VMhIgQIAAAQIECBAgQIAAAQIECBAgQIAAgYctcKp2\ncO56L76dy3G2IZz9bHtz7VqOa7u138bFOL/i3nnlXK/NmK1t5Igr29qv+et89Nurja3rNXedj35d\nq/2Mq3O1n+vZrq1lzINq77pAXIGz4HYd0MxzKkfErcUsrdf57Gcb56399vy9td5c5qn746xrsfla\nMibac67cn3uW8mRcmz/Pl/trW9dqP2N6c7HWm+/NZR4tAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGBJoK1ttHHnrvfi27kcZxv37PXbuXac+3K+tm2/Hde9sZbrS/N1PWLiyn1b29wzb77Yn/3a5r3a\nvDUm+xmb42h7c7le17Kf7dreGpO5antqfS13zXOqv+U+p3KcvX7XBeKzDzhwQwBH4bF3La315tu5\nOq79vM/SXKwvnSfWYl+9atE0+2v7c2/ev80X6zXP2nrmqnvafm+8NLc2H2s3vfJ13TSP/QQIECBA\ngAABAgQIECBAgAABAgQIECBAgMD9EujVO+oruM56u2dpXOd7/bW5XKtt7cdriHF+1XHt99ZzLtqM\nzbautevH6OXvNb7tZ97l3U++lhqXuZbm2vV2HPt6c2vzp9Zi/cFcD6VAnA95S8H0Og8v8vdy1/m2\nn/ep+5bOmXtzPfbWfZkr2158rrVt5KnxOT4Vl+t5jvZsOT6VL/Ocapfy5L5T6xl3W219vbd1D3kJ\nECBAgAABAgQIECBAgAABAgQIECBAgACB6wnk3+Of2n0qrrfezq2Ncy3bOE+vn3Nb2hqz1s+1vGeM\nc662OZ9txrdtri+1NT76vavujfUYt1fG1Pmcq/FL/XZfHY/s1/uPzHvnuR5KgbiFiweUhc12Lcan\n1nt72rmaY6mfe2I9rnqmnMv5miPmclzjYj6uLJbWfDGfe7Ifbb3afRmf96jrOZf7c21pnPN7aPN1\n3cZZei63cR85CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAgWWB9u/rlyOfXDm1r11vx5Gtnavj7Gfb\n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\nECBAYE9g99/oR/W9eBvbGdfa7Gcbb5j9M21vzlGs5nv9PFMvF7FePOdEG0/WtP3/JJv8LNabn2u3\nba82165tzquxWX+3frbW03P/76Ydr16mrcwf1fTibayOaz9ev457/YxlW+dkbNT2attYO7fme/1R\nfcZ7cyLWPrU+c6uxrD/bjv7SjOKjfXr1EZvFe7ne+rlOtr0aMQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOC9BPLf9bNdOV3WRts+mevFj2J1vdqPeTnOtsZqP/Nn2t6cUWwUz7Nkvh3P4pmLtvZjjXhq\nrPYz14tlrtdGrH1yjYiP+rM57by29hXj+h6n9r/rvyCOg/QuF08d6sGTzp716rw6P/vRxhN2GYtx\nr5+1kc8nzUe5jNf1M5ZrRJv5o1jN39WP8+R7tGu2uXYc9b3YLJ65aEf7Rq59Yp/es7NGb74YAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsC8w+nf7nZWO1hjle/E2NhvX3FE/81fa3twaq/3wi3GNteM0\nbuN1Tq1p++28Xj5jO23uvzMnas/O293njvpbznrXBXHF+7QLs4DMM9d+fqRZLHOjNteobVsbuRqL\ncZwnYvFkv3fGrPmp/Pc96tzMj2I7+Vq70s93W6mNmrb+aNybk3u1czOebeTzSd8cr7Z1jdGcs2uP\n1hMnQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfLLDyb+9n33917VFdL97Gdsa1NvvZxjtm/462rlH7\nuc8sNqrJeLTx1DVG/Z/Kf2sz1rZ1jciNxnVe1oxivXytfcf+rWd+5MXVmbVX5vRqVmJtTR3v9LO2\nbePH0sZi3Iu1tbWm9rOuxnb7vTV2Y1l/pq1zVvuzusjFkw4/o58/e7HMz3JZU9vd+jpXnwABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgPgd2LtVl9L3cUa/N1vNPP2ittb+6ZWJ2z0o9fQtSNajPftrW+\n5mp/pabWz/ptrjfeiUVtffKsNXbUPzPnaM3/ufO/ID7c7EsK4kPE5WHbjl5vpS5rYo3s1zbiuees\nH7n2qfMyV2PZzzZrapu5tq01j+ynRd1jNZZzoj6feI+jp9ZH7cqcozXlCRAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgccKtP++v7LbypxezUqsranjnX7Wtm28XxuLcS/W1taa2s+6Gqv9o3yvNubEk7mf\n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\nHQLvcJF45xnuWOuONfLXcedaueasffZ+s7M8NPcXL9he8c537nnXWnet0/5AH7Vuu887jP/Su76D\ntzMQIECAAAECBAgQIECAAAECBAgQIECAAIEq8Gcu9P73pR/1rnete9c68X3vXKv+Xmb9V+w5O89D\nc3/1gutV7333vneud+dasx/ts/aZnUGOAAECBAgQIECAAAECBAgQIECAAAECBAgQIPBOAs+6oLxz\nnzvXim9x93qr3/dV+66e7/a6v3xZ96p3f9S+j1j3EWuu/ohfuffqGdURIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBGYCr7x8fMTej1gz/B617uzbvHLfo3M9NO8S7n/+55UGj9r7UevGj/GRa9/9Y/+k\ns9797tYjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIErgm86tLyzKkfedZHrf2odVf8Xrn3yvkeWuMC\n7Yf31Q6P3P+Ra9cf57P2qXvqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgT+ksCzLjYfuc8j1175\nLbx6/5UzPrTGpd6/vK/2ePT+j17/X83f0av2/T2BHgECBAgQIECAAAECBAgQIECAAAECBAgQIEDg\nMwRedYH56H0fvf7R1331/kfne1rexd1/U7+DybPO8Kx9/lu5H3m38/RPKUqAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQ2Bd4twvKZ53nWfvMvsg7nGF2vqfmXMiNud/F5tnnePZ+4y+wnvnEM6+/nUoC\nBAgQIECAAAECBAgQIECAAAECBAgQIEDgnQQ+8bLx2Wd+9n6j38e7nGN0vpfEXazN2d/N51XnedW+\n868jS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg0Aq86lL0Vfu275/jdztPnuvlrYu/tU/wbk7v\ncJ53OMPa11NFgAABAgQIECBAgAABAgQIECBAgAABAgQIEPhOgXe4BH2HM9Sv+27nqWd7i75LvvXP\n8K5W73iudzzT+pdWSYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4H4F3vPB8xzPFF3vXc73Pr+l/\nT+Iib/9zvLvZu58vxT/lnHleLQECBAgQIECAAAECBAgQIECAAAECBAgQIEDgboFPudB893O++/nu\n/t1cWs8l3Xm+T7D7hDPufoFvfKddA/UECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAewl84wXlJ7zT\nJ5zxvX6p/3sal23XP8knGX7SWa9/meetwPV51nYiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIuBR/z\nG/gk108662O+1oVVXWxdwGumfqrlp5674TckQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYFPjU\nC9ZPPffiZ3lOmcvB+50/3fTTz3//F7UiAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCzBT79YvXT\nz/9Wvx6XgY/7HN9m+23v87gvb2UCBAgQIECAAAECBAgQIECAAAECBAgQIECAwGsEvu0i9dve5zW/\nimZXl34NyAOGf8H4L7zjA34aliRAgAABAgQIECBAgAABAgQIECBAgAABAgQIbAv8hUvTv/CO2x/+\nrgku9u6SXFvnL3v/5Xdf+3WoIkCAAAECBAgQIECAAAECBAgQIECAAAECBP66wF++GP3L7/7U371L\nu6dy/99m3P+P4rDD6pBIAQECBAgQIECAAAECBAgQIECAAAECBAgQIPBmAi471z8Iq3WrWypdvt3C\neGkR3+AS38Mm+y4Po7UwAQIECBAgQIAAAQIECBAgQIAAAQIECBB4moDLx6dRb23ku2xx3VvsEuxe\nz6ur+R5XBc0nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4RwGXwm/yVVxIvsmH6BzDt+mgCBEg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECHyMgEvhN/xULiHf8KN0juQ7dVCECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE3k7ApfDbfZJ/D+Ti8V+PTxn5bp/ypZyTAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIPDdAi6EP+z7umj8sA82OK7vOIARJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQuFXA\nhfCtnM9fzMXi882ftaNv+yxp+xAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvlPAZfAXfleXiF/4\nUSev5HtPcKQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9YwGXwH/n4Lgz/yIc+eE2/gwMgaQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAlwi4CP6SD3n2NVwMnpX7W/P8Tv7W9/a2BAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwOcKuAD+3G/3lJO7+HsK85/YxG/pT3xmL0mAAAECBAgQIECAAAECBAgQ\nIECAAAECBAi8UMDl7wvxv2Vrl3rf8iU/+z38Dj/7+zk9AQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nsC7gknfdSuUDBFzMPQDVkl8h4O/GV3xGL0GAAAECBAgQIECAAAECBAgQIECAAAECf1zAZewf/wF4\nfQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD7BP4/lAOziQiZtnUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename=\"images/5-01.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## KNN \n", "\n", "Given: \n", "- Training data D={x_i,y_i}\n", "- Distance metric d(q,x) <- Represents domain knowledge\n", "- Number of neighbours k <- Also represents\n", "- Query point\n", "\n", "Algorithm:\n", "- $NN = \\{ i: d(q,x_i) \\text{ k smallest} \\}$\n", " - If there are more than k that are closest, just take all of them. So take smallest number $\\geq$ k.\n", "Return:\n", "- Classification: Vote of $y_i \\in NN$, take the plurality (which one occurs the most). You can tiebreak e.g. by picking randomly or by picking the one that's more frequent in the entire dataset.\n", " - Could also do a weighted vote (weights depend on how far away you are). E.g. weight by 1/distance.\n", "- Regression: Take the mean of the $y_i$s. Don't have to worry about a tie.\n", "\n", "Simple algorithm but a lot left up to the designer." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running Time and Space\n", "\n", "Given n sorted data points in R1 mapping to labels in R1.\n", "\n", "1-NN query running time: binary search. Query space: constant because data storage accounted for in learning space.\n", "\n", "KNN query running time : lgn + k, similar to merge sort. If k >= n/2 it dominates -> O(n), else log n dominates. Query space is constant because we can point in place. List is sorted so only need to point to first and last nearest neighbours.\n", "\n", "Linear Regression\n", "- Learning running time: involves inverting a matrix but this is scalar laned so we can just scan through the list to populate a constant-size matrix. n.\n", "- Learning space: 1 (m and b)\n", "- Query running time and space: 1\n", "\n", "KNN learning is fast and querying is slow. With linear regression, learning is expensive and querying is cheap.\n", "- If we query more than n times, NN is worse in terms of running time.\n", "- Tradeoff: Want to balance the two.\n", "- NN: Put off doing any work until you have to. **Lazy** learners vs linear regression **eager** learner.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/5-07.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How KNN alg works\n", "\n", "e.g. R2 -> R\n", "- Distance metrics\n", " - Euclidean distance metric\n", " - Manhattan distance (l1?) (The distance between two points in a grid based on a strictly horizontal and/or vertical path (that is, along the grid lines), as opposed to the diagonal or \"as the crow flies\" distance.)\n", "\n", "Different k and distance metrics can give completely different answers depending on the assumptions you make about your domain.\n", "\n", "- KNN tends to work well.\n", "\n", "### Preference biases of KNN\n", "*Our belief about what makes a good hypothesis.*\n", "- Locality -> Near points are similar\n", " - Further biases depending on distance function used\n", "- Smoothness (Expecting functions to behave smoothly) -> Averaging (Think intermediate value theorem or something)\n", "- ALl features matter equally (as opposed to $y = x_1^2 + x_2$.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Curse of Dimensionality\n", "\n", "(In separate notebook)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Other stuff\n", "- Distance metric d(x,q) \n", " - Euclidean (cont), \n", " - Manhattan, \n", " - weighted versions (can weight different dimensions differently to deal with the Curse of Dimensionality)\n", " - Mismatches (Discrete)\n", " - (Comparing convoluted features)\n", "- How you pick k\n", " - Special case: Consider k = n with a weighted average.\n", " - -> Regression-y thing on a subset of points. **locally weighted regression**. Can throw in nn, dt. (Replace average with regression or dt allows you to do more powerful things. \n", " - E.g. locally weighted linear regression -> Get something like a curve. Cool because we start with a hypothesis space of lines but end up being able te represent a hypothesis space that is strictly greater than the space of lines (with locally weighted linear regression).\n", " - Allows you to take local info and build concepts -> can build arbitrarily complicated functions.\n", " \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "Domain KNNowledge!\n", "- Instance-based learning\n", "- Lazy vs eager learners\n", "- KNN (K Nearest Neighbours) (Lazy learner)\n", "- Nearest neighbour: Similarity function (distance)\n", "- Classification vs regression (KNN can handle both)\n", "- Averaging\n", "- Composing different learning algorithms e.g. via locally weighted \\$x regression\n", "- Curse of Dimensionality: The more features you include, the more data you need (exponentially) to produce an equally accurate model\n", "\n", "+ 'No Free Lunch' theorem: for any learning algorithm, if you average over all possible instances, it's no better than random.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Doesn't work\n", "\n", "def imgshow(file_name):\n", " Image(filename=file_name)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.6.2 Bayesian Learning.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bayesian Learning\n", "\n", "Thinking omore generally about learning theory\n", "\n", "Claim we're trying to **learn the best hypothesis we can given data and some domain knowledge**.\n", "\n", "Try to be more precise about 'best': **most probable** hypothesis (most probably the correct one). I.e. **$$\\text{argmax}_{h\\in H} P(h|D)$$**, where D is data.\n", "\n", "\n", "Bayes's Rules\n", "$$P(h|D) = \\frac{P(D|h)P(h)}{P(D)}$$\n", "\n", "Follows directly from the chain rule in probability. Numerator is probability of D and h together (conjunction).\n", "So $$Pr(a,b) = P(a|b)*P(b)$$.\n", "\n", "Ask what each term means: \n", "- **P(D)** is your prior belief for seeing a particular set of data.\n", "- **P(D|h)**: Likelihood we'll see some data where a hypothesis is true. Data is training data. Is set of inputs and labels corresponding to those inputs. $D = \\{(x_i, d_i)\\}$. **P(seeing labels $d_i$)** where h is true and we have inputs $x_i$.\n", " - P(D|h) is a lot easier to compute.\n", " - ? version space.\n", " - Kind of like accuracy?\n", "- **Pr(h)**: Prior on hypothesis. Encapsulates belief that a hypothesis is likely or unlikely compared to other hypotheses. I.e. our **domain knowledge**.\n", "\n", "vs kernels and similarity functions for domain knowledge.\n", "\n", "**Priors matter**. E.g. if we only give the test to people who have certain symptoms (add evidence), you can increase the spleentitis prior. It's actually changing the posterior but you can think of it as a prior. IT depends where you are in the process when you're thinking of it as a prior.\n", "\n", "Q: What's the boundary of the prior at which a pos result will make you believe someone has spleentitis?\n", "(Philo Q: so what)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithm\n", "\n", "For each $h \\in H$,\n", "\n", "calculate $P(h|D) \\sim P(D|h)P(h)$\n", "\n", "(Denominator doesn't change maximal h)\n", "\n", "Output: \n", "$h_{map} = argmax_h P(h|D)$\n", "\n", "MAP = maximum a posterior. Max posterior given all priors.\n", "\n", "Hard to say what P(h) is.\n", "\n", "So it's common to drop P(h) and compute\n", "\n", "$h_{ml} = argmax_h P(D|h)$\n", "\n", "ML = maximum likelihood hypothesis. Maximum a-priori hypothesis.\n", "- Dropping P(h) -> Uniform prior. We're saying our prior hypotheses are equally likely.\n", "\n", "But **not practical** because we need to look at every h in H.\n", "\n", "### e.g.s\n", "\n", "1. Given {} as noise-free examples of c. Binary classification problem.\n", "2. c is in H, finite hypothesis class.\n", "3. uniform prior (uninformed prior)\n", "\n", "\n", "- $P(h) = \\frac{1}{|H|}$\n", "- $P(D|h) = 1$ if $d_i=h(x_i) \\forall x_i, d_i \\in D$, $P(D|h) = 0$ otherwise.\n", "- $P(D) = \\sum_{h_i \\in H} P(D|h_i)P(h_i) = \\sum_ {h_i \\in VS_{H,D}} 1 * \\frac{1}{|H|} = \\frac{|VS|}{|H|}$\n", "\n", "P(D|h) = 1 if H is in the version-space of D.\n", "\n", "\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/2.6.4 Bayes NLP project.ipynb ================================================ { "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "sample_memo = '''\n", "Milt, we're gonna need to go ahead and move you downstairs into storage B. We have some new people coming in, and we need all the space we can get. So if you could just go ahead and pack up your stuff and move it down there, that would be terrific, OK?\n", "Oh, and remember: next Friday... is Hawaiian shirt day. So, you know, if you want to, go ahead and wear a Hawaiian shirt and jeans.\n", "Oh, oh, and I almost forgot. Ahh, I'm also gonna need you to go ahead and come in on Sunday, too...\n", "Hello Peter, whats happening? Ummm, I'm gonna need you to go ahead and come in tomorrow. So if you could be here around 9 that would be great, mmmk... oh oh! and I almost forgot ahh, I'm also gonna need you to go ahead and come in on Sunday too, kay. We ahh lost some people this week and ah, we sorta need to play catch up.\n", "'''\n", "\n", "#\n", "# Maximum Likelihood Hypothesis\n", "#\n", "#\n", "# In this quiz we will find the maximum likelihood word based on the preceding word\n", "#\n", "# Fill in the NextWordProbability procedure so that it takes in sample text and a word,\n", "# and returns a dictionary with keys the set of words that come after, whose values are\n", "# the number of times the key comes after that word.\n", "# \n", "# Just use .split() to split the sample_memo text into words separated by spaces.\n", "\n", "def NextWordProbability(sampletext,word):\n", " corpus = sampletext.split()\n", " dict = {}\n", " for i in range(len(corpus) - 1):\n", " if corpus[i] == word:\n", " if corpus[i+1] in dict:\n", " dict[corpus[i+1]] += 1\n", " else:\n", " dict[corpus[i+1]] = 1\n", " \n", " return dict" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/2-supervised-learning/README.md ================================================ # 2 Supervised Learning Lessons in this module: 1. Supervised Learning Tasks 2. Decision Trees 3. Artificial Neural Networks 4. Support Vector Machines 5. Nonparametric Models 6. Bayesian Methods 7. Ensemble of Learners ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/3.1.3 More Clustering-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Clustering\n", "\n", "Each algorithm is its own problem because there are many definitions of clustering.\n", "\n", "## 1. Single Linkage Clustering\n", "(Hierarchical agglomorative clustering. SLIC HAC)\n", "- Consider each object a cluster (n o bjects)\n", "- Define intercluster distance as the distance between the closest two points in the two clusters\n", "- Merge two closest clusters\n", "- Repeat n-k times to make n clusters\n", "\n", "Interesting: **median** distances. A non-metric statistic. Only ordering matters.\n", "\n", "### Characteristics\n", "- Deterministic\n", "- If doing in space where distances are equal to edge lengths on a graph, SLC is the same as a **minimum spanning tree**.\n", "- Running time O(n^3).\n", " - Repeat k times (worst is n/2):\n", " - Find two closest points O(n^2)\n", " - Merge clusters together \n", "\n", "? Methods: Fibonacci heaps, hash tables.\n", "\n", "## 2. Soft Clustering\n", "- Allows for points to be shared -> Probabilitistically in certain clusters\n", "\n", "Assume the data was generated by\n", "1. Select one of K Gaussians (fixed known variance) uniformly\n", "2. Sample X_i from that Gaussian\n", "3. Repeat n times\n", "\n", "Task:\n", "Find a hypothesis h=<\\mu_1,...,\\mu_k> that maximises the probability of the data (ML -> maximum likelihood)\n", "\n", "ML mean of the Gaussian $\\mu$ is the mean of the data\n", "- Calculate mean of Gaussian by calculating sample mean\n", "\n", "What if there are k of them? -> Hidden Variables. \n", "$$ where $z_i$s indicate which cluster x is in.\n", "\n", "### **Expectation maximisation**\n", "$z_{ij}$ represents the likelihood element i comes from cluster j.\n", "Prop to p(el 1 was produced by cluster j).\n", "Pass that clustering info z to maximisation step\n", "Maximisation step: Compute means for clusters. if $z_{ij}$ is thought of as a {0,1} variable, it's like assigning elements to clusters. But because they are probabilities, we're soft assigning.\n", "\n", "\n", "- All points have some non-zero probability of being in each cluster.\n", " - Makes sense because Gaussians have infinite extent\n", "\n", "#### Properties of EM\n", "- Monotonically non-decreasing likelihood\n", " - i.e. generally goes in a good direction?\n", "- Does not converge (does in practice) (vs K Means does)\n", "- Will not diverge (bc working in probability space)\n", "- Can get stuck (Local optima problem) -> random restart\n", "- Works with any distribution (if E, M solvable). Usualy E (estimation) is harder. E-> probabilistic inference, Bayes stuff. M counting things.\n", "\n", "#### K-means arguments\n", "- Finite number of configurations\n", " - Not getting worse w.r.t. error metric\n", " -> As long as you have a way of breaking ties, you have to stop." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering properties\n", "\n", "- Richness\n", " - For any assignment of objects to clusters, there is some distance matrix D such that P_0 returns that clustering $\\forall c \\exists D | P_0 = c$\n", " - Any clustering could be an output\n", "- Scale-invariance\n", " - Scaling distances by value (e.g. doubling everything or changing units) does not change the clustering $\\forall D \\forall K > 0 P_D = P_{KD}$\n", "- Consistency\n", " - Shrinking intracluster distances and expanding intercluster distances does not change the clustering $P_D=P_{D'}$\n", " - Use domain knowledge. & like making similar things more similar and different things more different.\n", "\n", "D -> Clusters partitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Impossibility Theorem (Kleinberg)\n", "\n", "No clustering scheme can achieve all three of\n", "- Richness\n", "- Scale invariance\n", "- Consistency" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "- Clustering: the idea\n", "- Connection to compact description (?)\n", "- Algorithms\n", " - K means\n", " - SLC (terminates fast)\n", " - EM (soft clusters)\n", "- Clustering proprties and the Impossibility Theorem\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/3.2.2 Feature Selection-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Selection\n", "Minimal number of features it takes to capture trends in the data.\n", "- Select best features\n", "- Add new features\n", "\n", "**Process**\n", "- Use human intuition\n", " - POIs send emails to each other at a higher rate\n", "- Code up new feature\n", " - Int number of messages to this person from POI\n", "- Visualise\n", " - Does the new feature give discriminating power between POIs?\n", "- Repeat\n", " - Can we do better? E.g. scale featre by total number of messages to or from that person.\n", "\n", "Observe\n", "- Outliers\n", "- Mixture of labelled points: Are there chunks in your visualisation where there are only one category of labels? (e.g. if <20% of emails sent to POIs -> all not POIs." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#!/usr/bin/python\n", "\n", "###\n", "### in poiFlagEmail() below, write code that returns a boolean\n", "### indicating if a given email is from a POI\n", "###\n", "\n", "import sys\n", "import reader\n", "import poi_emails\n", "\n", "def getToFromStrings(f):\n", " '''\n", " The imported reader.py file contains functions that we've created to help\n", " parse e-mails from the corpus. .getAddresses() reads in the opening lines\n", " of an e-mail to find the To: From: and CC: strings, while the\n", " .parseAddresses() line takes each string and extracts the e-mail addresses\n", " as a list.\n", " '''\n", " f.seek(0)\n", " to_string, from_string, cc_string = reader.getAddresses(f)\n", " to_emails = reader.parseAddresses( to_string )\n", " from_emails = reader.parseAddresses( from_string )\n", " cc_emails = reader.parseAddresses( cc_string )\n", "\n", " return to_emails, from_emails, cc_emails\n", "\n", "\n", "### POI flag an email\n", "\n", "def poiFlagEmail(f):\n", " \"\"\" given an email file f,\n", " return a trio of booleans for whether that email is\n", " to, from, or cc'ing a poi \"\"\"\n", "\n", " to_emails, from_emails, cc_emails = getToFromStrings(f)\n", "\n", " ### poi_emails.poiEmails() returns a list of all POIs' email addresses.\n", " poi_email_list = poi_emails.poiEmails()\n", "\n", " to_poi = False\n", " from_poi = False\n", " cc_poi = False\n", "\n", " ### to_poi and cc_poi are related functions, which flag whether\n", " ### the email under inspection is addressed to a POI, or if a POI is in cc\n", " ### you don't have to change this code at all\n", "\n", " ### there can be many \"to\" emails, but only one \"from\", so the\n", " ### \"to\" processing needs to be a little more complicated\n", " if to_emails:\n", " ctr = 0\n", " while not to_poi and ctr < len(to_emails):\n", " if to_emails[ctr] in poi_email_list:\n", " to_poi = True\n", " ctr += 1\n", " if cc_emails:\n", " ctr = 0\n", " while not to_poi and ctr < len(cc_emails):\n", " if cc_emails[ctr] in poi_email_list:\n", " cc_poi = True\n", " ctr += 1\n", "\n", "\n", " #################################\n", " ######## your code below ########\n", " ### set from_poi to True if #####\n", " ### the email is from a POI #####\n", " #################################\n", "\n", " if from_emails:\n", " ctr = 0\n", " while not from_poi and ctr < len(from_emails):\n", " if from_emails[ctr] in poi_email_list:\n", " from_poi = True\n", " ctr += 1\n", " \n", " \n", "\n", " #################################\n", " return to_poi, from_poi, cc_poi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beware of bugs - be skeptical of classifiers with near 100% accuracy\n", "\n", "When Katie was working on the Enron POI identifier, she engineered a feature that identified when a given person was on the same email as a POI. So for example, if Ken Lay and Katie Malone are both recipients of the same email message, then Katie Malone should have her \"shared receipt\" feature incremented. If she shares lots of emails with POIs, maybe she's a POI herself.\n", "\n", "Here's the problem: there was a subtle bug, that Ken Lay's \"shared receipt\" counter would also be incremented when this happens. And of course, then Ken Lay always shares receipt with a POI, because he is a POI. So the \"shared receipt\" feature became extremely powerful in finding POIs, because it effectively was encoding the label for each person as a feature.\n", "\n", "We found this first by being suspicious of a classifier that was always returning 100% accuracy. Then we removed features one at a time, and found that this feature was driving all the performance. Then, digging back through the feature code, we found the bug outlined above. We changed the code so that a person's \"shared receipt\" feature was only incremented if there was a different POI who received the email, reran the code, and tried again. The accuracy dropped to a more reasonable level." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting rid of features\n", "Reasons\n", "- It's noisy\n", "- It causes overfitting\n", "- It is highly correlated with a feature that's already present\n", "- Additional features slow donw training/testing process\n", "\n", "## Features != Information.\n", "Features attempt to access information but are not info themselves. We want the info. // Quantity vs quality.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#!/usr/bin/python\n", "\n", "import pickle\n", "import cPickle\n", "import numpy\n", "\n", "from sklearn import cross_validation\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.feature_selection import SelectPercentile, f_classif\n", "\n", "\n", "\n", "def preprocess(words_file = \"../tools/word_data.pkl\", authors_file=\"../tools/email_authors.pkl\"):\n", " \"\"\" \n", " this function takes a pre-made list of email texts (by default word_data.pkl)\n", " and the corresponding authors (by default email_authors.pkl) and performs\n", " a number of preprocessing steps:\n", " -- splits into training/testing sets (10% testing)\n", " -- vectorizes into tfidf matrix\n", " -- selects/keeps most helpful features\n", "\n", " after this, the feaures and labels are put into numpy arrays, which play nice with sklearn functions\n", "\n", " 4 objects are returned:\n", " -- training/testing features\n", " -- training/testing labels\n", "\n", " \"\"\"\n", "\n", " ### the words (features) and authors (labels), already largely preprocessed\n", " ### this preprocessing will be repeated in the text learning mini-project\n", " authors_file_handler = open(authors_file, \"r\")\n", " authors = pickle.load(authors_file_handler)\n", " authors_file_handler.close()\n", "\n", " words_file_handler = open(words_file, \"r\")\n", " word_data = cPickle.load(words_file_handler)\n", " words_file_handler.close()\n", "\n", " ### test_size is the percentage of events assigned to the test set\n", " ### (remainder go into training)\n", " features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(word_data, authors, test_size=0.1, random_state=42)\n", "\n", "\n", "\n", " ### text vectorization--go from strings to lists of numbers\n", " # Some feature selection here with (1) `stop_words=`english`' and\n", " # (2) max_df -> don't include terms that have a document frequency \n", " # strictly higher than the given thresholdts. \n", " vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,\n", " stop_words='english')\n", " features_train_transformed = vectorizer.fit_transform(features_train)\n", " features_test_transformed = vectorizer.transform(features_test)\n", "\n", "\n", "\n", " ### feature selection, because text is super high dimensional and \n", " ### can be really computationally chewy as a result\n", " # Select best 10% of features using classifier\n", " selector = SelectPercentile(f_classif, percentile=10)\n", " selector.fit(features_train_transformed, labels_train)\n", " features_train_transformed = selector.transform(features_train_transformed).toarray()\n", " features_test_transformed = selector.transform(features_test_transformed).toarray()\n", "\n", " ### info on the data\n", " print \"no. of Chris training emails:\", sum(labels_train)\n", " print \"no. of Sara training emails:\", len(labels_train)-sum(labels_train)\n", " \n", " return features_train_transformed, features_test_transformed, labels_train, labels_test\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "High dimensionality data -> many features\n", "\n", "## Bias-Variance Dilemma and Number of Features\n", "\n", "**High bias**: Pays little attention to data and is oversimplified\n", "- e.g. few features used\n", "- Low r^2, large SSE\n", "**High variance**: Pays too much attention to data, doesn't generalise well. Overfits.\n", "- e.g. carefully minimised SSE\n", "- Much higher error on test set than on training set\n", "\n", "Tradeoff between goodness of fit and the simplicity of fit.\n", "Want few features, low SSE, high r^2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regulatisation: Balancing error with no. of features\n", "- Method for automatically penalising extra features in your model\n", "Reverse-u plot (quality of model against no. of features)\n", "\n", "E.g. in regressions\n", "\n", "### Lasso Regression\n", "Minimise SSE + $\\lambda|\\beta|$, \n", "\n", "where $\\lambda$ is a penalty parameter and\n", "$\\beta$ is the coefficients of the regression (related to the number of features used)\n", "\n", "So gain of feature in minimising SSE has to outweigh the penalty of using that extra feature.\n", "\n", "$$y = \\sum m_ix_i + b$$\n", "\n", "**Process: **Lasso regression will try adding features one at a time. If it doesn't decrease SSE sufficiently, it won't add the feature. I.e. it sets the coefficients of those features to zero.\n", "\n", "Precisely, the **optimisation objective for Lasso is: ** $$(1 / (2 * \\text{n_samples})) * ||y - Xw||^2_2 + \\alpha * ||w||_1$$\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ " from sklearn.linear_model import Lasso\n", "features, labels = GetMyData()\n", "regression = Lasso()\n", "regression.fit(features, labels)\n", "regression.predict([2,4])\n", "print(\"Coefficients: \", regression.coef_, \"\\nIntercept: \", regression.intercept_)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Selection: Charles & Michael\n", "\n", "## Why?\n", "- Knowledge Discovery, Interpretability and Insight (Human)\n", " - Which features matter\n", "- Curse of Dimensionality (Machine)\n", " - The amount of data you need grows exponentially in the number of features you have\n", "\n", "### How hard is the problem\n", "of choosing m features out of n features? (Might not know what m is, m \\leq n.)\n", " - n choose m, or 2^n.\n", " - NP-hard.\n", "\n", "Two a\n", "## Alg approches: Filtering and Wrapping\n", "\n", "### Filtering:\n", "**Process**:\n", "- Have input features \n", "- Run feat through alg which maximises for some score\n", " - Criteria built in search with no reference to the learner\n", "- Passes features to some learning alg which will use it for classification/regression.\n", "\n", "**Adv**:\n", "- Faster: Don't need to worry about paying the cost of what the learner is going to do.\n", "- Flow forward\n", "\n", "**Disadv**:\n", "- No feedback. Ignores the learner.\n", "- (Speed ->) Tend to look at features is isolation\n", "\n", "**Examples of criteria**:\n", "- Information Gain (depends on labels)\n", " - E.G. Put a decision tree inside the search box. Then the top features that come out of a decision tree go into another learner e.g. KNN. (KNN suffers from Curse of Dim because it doesn't know what features are important.)\n", " - Another version: Neural net and pruning features that have low weight.\n", "> Nice\n", "- Entropy, Gini index (version of entropy), some form of variance (doesn't depend on the labels)\n", "- Linear Independence \n", "\n", "**Analogies within Supervised Learning**: Decision Trees (**Information Gain**).\n", "- Note you can look at labels for filtering in supervised learning.\n", "\n", "### Wrapping:\n", "**Process**:\n", "- Take features\n", "- Searches over features\n", "- Learning alg reports how well it does\n", " - Criteria built in learner\n", "- Use that score to search for better set of features\n", "\n", "**Adv**:\n", "- Allows for feedback\n", "- Takes into account model bias and the learner\n", "\n", "**Disadv**:\n", "- Much slower.\n", "\n", "**Examples of criteria**:\n", "- Kinds of local search or hill climbing (deterministic gradient search)\n", "- Randomised optimisation e.g. mimic or genetic algorithms\n", "> Don't know what this is.\n", "- Forward sequential selection (Polynomial) ~ Hill climbing where neighbourhood relation is adding one more feature.\n", " - Start with a a feature of your end features.\n", " - Look at your features in isolation.\n", " - Pass first, then second, then third...\n", " - Whichever feature is best you keep.\n", " - Then you look at each of remaining features and add them individually. You pick the best combination.\n", " - etc until the improvement is not significant enough.\n", "- Backward elimination \n", " - Hill climbing (Reverse of forward search)\n", "- (NOT exhaustive search cause that's exponential)\n", "\n", "\n", "Domain knowledge comes into choice of criteria." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Relevance and Usefulness\n", "- What if a feature doesn't provide any information?\n", "\n", "### Relevance\n", "**Relevance ~ Information**\n", "- A feature $x_i$ is strongly feature is **strongly relevant** if removing it degrades the **Bayes Optimal Classifier** (on a subset of features).\n", " - Weighted average of all the hypotheses. The best that you could do on average.\n", "- $x_i$ is **weakly relevant** if \n", " - not strongly relevant\n", " - There exists a subset of features S such that adding $x_i$ to S improves BOC.\n", " - e.g. for an AND (a,b), if e = not a, neither a or e is strongly relevant. But they are weakly relevant.\n", "- $x_i$ is otherwise irrelevant\n", "\n", "BOC is the gold standard.\n", "\n", "### Usefulness\n", "Usefulness measures the **effect (of minimising error) on a particular predictor**.\n", "- E.g. c = 1 for all features in and AND(a,b) dataset for an origin-constrained perceptron\n", "- E.g. relevance is useful wrt the BOC." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "- Feature Selection Definiton\n", "- Filtering (Faster? but ignoreos bias) vs Wrapping (Slow but useful)\n", "- Relevance (Info) vs usefulness (Reduce error for a particular model)\n", " - Strong and weak relevance\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/3.3.1 PCA-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PCA: Principal Component Analysis\n", "\n", "What is the dimensionality of data?\n", "- y = x is 1-dimensional. We can argue it is 1D even it has small deviations (think of those as noise).\n", "- But a cubic in PCA is 2D. (PCA only does shifts and rotations to create different coordinate systems. Probably does not include extra feature transformation)\n", "\n", "\n", "PCA: If you're given data of any shape, PCA finds a new coordinate system obtained from the old one by translation and rotation only and \n", "- it moves the centre of the coordinate system to the centre of the data.\n", "- it moves the x axis into the principal axis of variation relative to all other data points\n", "- it moves further axes orthogonal to the directions of variation\n", "\n", "So some data is 'PCA-ready', some is not (e.g. if it's a cubic). PCA can deal with vertical lines cause it's just vectors (vs regression uses functions).\n", "\n", "Questions\n", "- Is the data PCA-ready?\n", "- Does the major axis dominate? (Once you have spread captured in major axis, there's not much left in the minor axis(axes).\n", " - e.g. circle -> no. both eigenvalues of same magnitude, haven't gained much by running PCA.\n", "\n", "## Measurable vs Latent Features\n", "\n", "Q: Given the features of a house, what is its price?\n", "\n", "Measurable variables\n", "- Square footage\n", "- No. of rooms\n", "- School ranking\n", "- Neighbourhood safety\n", "\n", "-> Probing **latent variables**\n", "- Size\n", "- Neighbourhood\n", "\n", "### Preserving information: How best to condense our measurable features to k features (where there are e.g. 2 latent variables)? \n", "\n", "- Feature selection tools\n", " - Select k best (good if unknown no. of features)\n", " - Select percentile\n", "\n", "Process:\n", "- Have many features, but I hypothesise a smaller number of features actually drive the patterns.\n", "- Try to make a **composite feature** (principal component) that more directly probes the underlying phenomenon.\n", "\n", "Tool for dimensionality reduction, also a good independent unsupervised learning tool.\n", "\n", "PC vs Regression:\n", "- Regression: Predicting\n", "- PC: Trying to find direction we can project our data onto to lose the least amount of info.\n", "\n", "## How to determine the principal component\n", "\n", "**Variance (stats)** : The spread of a data distribution (vs ML the willingness or flexibility of an alg to learn)\n", "\n", "**Principal component** of a dataset is the direction that has the **largest variance** because projecting onto this direction **retains the maximum amount of info in the original data**.\n", "\n", "(This is a compression algorithm)\n", "\n", "### Maximal variance and informal loss\n", "Information loss: perpendicular distance between point and line we're projecting the point onto.\n", "\n", "Projection onto direction of maximal variances minimises distance from old (higher-dimensional) point to its new transformed value -> Minimises information loss\n", "\n", "## PCA as a general algorithm for feature transformation\n", "- So far, separating or grouping features by hand (square footage, no. of rooms -> size). But this is not scalable.\n", "\n", "- Instead, put all features into PCA and ask PCA to pick first, second PCs. \n", " - They'll likely be a mix of the intuitive latent variables, but it's a useful unsupervised learning technique.\n", "\n", "Max number of PCAs allowed by sklearn: min of no. of features and no. of training points\n", "\n", "\n", "## Working definition of PCA\n", "- PCA is a systematised way to transform input features into principal components\n", "- use principal components as new features\n", "- PCs are directions in data that maximise variance (min info loss) when you project or compress down onto them\n", "- The more variance of data along a PC, the hiher that PC is ranked.\n", "- Each PC is linearly independent with every other PC, so there is no overlap.\n", "- Max no. of PCs = min of no. of input features and no. of training points." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=2)\n", "pca.fit(data)\n", "\n", "# Print eigenvalues\n", "print(pca.explained_variance_ratio_)\n", "first_pc = pca.components_[0]\n", "socend_pc = pca.componentns_[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When to use PCA\n", "- Figure out latent features driving the patterns in data\n", "- Dimensionality reduction\n", " - Visualise high-dimensional data (scatterplot only have 2D available) -> Can visualise e.g. k means clustering\n", " - Reduce noise (Hope 1st and 2nd PCs capture info and other minor ones capture noise)\n", " - Preprocessing (reduce dim): Make other algs (regression, classification) work better b/c fewer inputs (e.g. Eigenfaces for facial identification -> feed into SVM)\n", "\n", "### PCA for Facial Recognition\n", "Good for PCA because\n", "- Pictures of faces generally have high input dimensionality (many pixels)\n", "- Faces have general patterns that could be captured in smaller number of dimensions (two eyes on top, moth/chin on bottom)\n", "\n", "### Selecting a number of PCs\n", "- Train on different number of PCs and choose optimal\n", "- Be v careful about throwing out features before you do PCA. Sometimes you might do it because PCA is computationally expensive, but be careful when you do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Train-test split\n", "\n", "# from 1850 features to 150\n", "n_components = 150 \n", "\n", "# Extracting the top 150 faces from >1200 faces\n", "pca = RandomizedPCA(n_components=n_components, whiten=True).fit(X_train)\n", "\n", "eigenfaces = pca.components_.reshape((n_components, h, w))\n", "`\n", "# Transform into PCA representation\n", "# i.e. project input data on the eigenfaces orthonormal basis\n", "X_train_pca = pca.transform(X_train)\n", "X_test_pca = pca.transform(X_test)\n", "\n", "# \n", "clf = GridSearchCV(...)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/Feature Transformation-checkpoint.ipynb ================================================ { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/More Clustering-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Clustering\n", "\n", "Each algorithm is its own problem because there are many definitions of clustering.\n", "\n", "## 1. Single Linkage Clustering\n", "(Hierarchical agglomorative clustering. SLIC HAC)\n", "- Consider each object a cluster (n o bjects)\n", "- Define intercluster distance as the distance between the closest two points in the two clusters\n", "- Merge two closest clusters\n", "- Repeat n-k times to make n clusters\n", "\n", "Interesting: **median** distances. A non-metric statistic. Only ordering matters.\n", "\n", "### Characteristics\n", "- Deterministic\n", "- If doing in space where distances are equal to edge lengths on a graph, SLC is the same as a **minimum spanning tree**.\n", "- Running time O(n^3).\n", " - Repeat k times (worst is n/2):\n", " - Find two closest points O(n^2)\n", " - Merge clusters together \n", "\n", "? Methods: Fibonacci heaps, hash tables.\n", "\n", "## 2. Soft Clustering\n", "- Allows for points to be shared -> Probabilitistically in certain clusters\n", "\n", "Assume the data was generated by\n", "1. Select one of K Gaussians (fixed known variance) uniformly\n", "2. Sample X_i from that Gaussian\n", "3. Repeat n times\n", "\n", "Task:\n", "Find a hypothesis h=<\\mu_1,...,\\mu_k> that maximises the probability of the data (ML -> maximum likelihood)\n", "\n", "ML mean of the Gaussian $\\mu$ is the mean of the data\n", "- Calculate mean of Gaussian by calculating sample mean\n", "\n", "What if there are k of them? -> Hidden Variables. \n", "$$ where $z_i$s indicate which cluster x is in.\n", "\n", "### **Expectation maximisation**\n", "$z_{ij}$ represents the likelihood element i comes from cluster j.\n", "Prop to p(el 1 was produced by cluster j).\n", "Pass that clustering info z to maximisation step\n", "Maximisation step: Compute means for clusters. if $z_{ij}$ is thought of as a {0,1} variable, it's like assigning elements to clusters. But because they are probabilities, we're soft assigning.\n", "\n", "\n", "- All points have some non-zero probability of being in each cluster.\n", " - Makes sense because Gaussians have infinite extent\n", "\n", "#### Properties of EM\n", "- Monotonically non-decreasing likelihood\n", " - i.e. generally goes in a good direction?\n", "- Does not converge (does in practice) (vs K Means does)\n", "- Will not diverge (bc working in probability space)\n", "- Can get stuck (Local optima problem) -> random restart\n", "- Works with any distribution (if E, M solvable). Usualy E (estimation) is harder. E-> probabilistic inference, Bayes stuff. M counting things.\n", "\n", "#### K-means arguments\n", "- Finite number of configurations\n", " - Not getting worse w.r.t. error metric\n", " -> As long as you have a way of breaking ties, you have to stop." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/.ipynb_checkpoints/Untitled-checkpoint.ipynb ================================================ { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/3.1.3 More Clustering.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Clustering\n", "\n", "Each algorithm is its own problem because there are many definitions of clustering.\n", "\n", "## 1. Single Linkage Clustering\n", "(Hierarchical agglomorative clustering. SLIC HAC)\n", "- Consider each object a cluster (n o bjects)\n", "- Define intercluster distance as the distance between the closest two points in the two clusters\n", "- Merge two closest clusters\n", "- Repeat n-k times to make n clusters\n", "\n", "Interesting: **median** distances. A non-metric statistic. Only ordering matters.\n", "\n", "### Characteristics\n", "- Deterministic\n", "- If doing in space where distances are equal to edge lengths on a graph, SLC is the same as a **minimum spanning tree**.\n", "- Running time O(n^3).\n", " - Repeat k times (worst is n/2):\n", " - Find two closest points O(n^2)\n", " - Merge clusters together \n", "\n", "? Methods: Fibonacci heaps, hash tables.\n", "\n", "## 2. Soft Clustering\n", "- Allows for points to be shared -> Probabilitistically in certain clusters\n", "\n", "Assume the data was generated by\n", "1. Select one of K Gaussians (fixed known variance) uniformly\n", "2. Sample X_i from that Gaussian\n", "3. Repeat n times\n", "\n", "Task:\n", "Find a hypothesis h=<\\mu_1,...,\\mu_k> that maximises the probability of the data (ML -> maximum likelihood)\n", "\n", "ML mean of the Gaussian $\\mu$ is the mean of the data\n", "- Calculate mean of Gaussian by calculating sample mean\n", "\n", "What if there are k of them? -> Hidden Variables. \n", "$$ where $z_i$s indicate which cluster x is in.\n", "\n", "### **Expectation maximisation**\n", "$z_{ij}$ represents the likelihood element i comes from cluster j.\n", "Prop to p(el 1 was produced by cluster j).\n", "Pass that clustering info z to maximisation step\n", "Maximisation step: Compute means for clusters. if $z_{ij}$ is thought of as a {0,1} variable, it's like assigning elements to clusters. But because they are probabilities, we're soft assigning.\n", "\n", "\n", "- All points have some non-zero probability of being in each cluster.\n", " - Makes sense because Gaussians have infinite extent\n", "\n", "#### Properties of EM\n", "- Monotonically non-decreasing likelihood\n", " - i.e. generally goes in a good direction?\n", "- Does not converge (does in practice) (vs K Means does)\n", "- Will not diverge (bc working in probability space)\n", "- Can get stuck (Local optima problem) -> random restart\n", "- Works with any distribution (if E, M solvable). Usualy E (estimation) is harder. E-> probabilistic inference, Bayes stuff. M counting things.\n", "\n", "#### K-means arguments\n", "- Finite number of configurations\n", " - Not getting worse w.r.t. error metric\n", " -> As long as you have a way of breaking ties, you have to stop." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering properties\n", "\n", "- Richness\n", " - For any assignment of objects to clusters, there is some distance matrix D such that P_0 returns that clustering $\\forall c \\exists D | P_0 = c$\n", " - Any clustering could be an output\n", "- Scale-invariance\n", " - Scaling distances by value (e.g. doubling everything or changing units) does not change the clustering $\\forall D \\forall K > 0 P_D = P_{KD}$\n", "- Consistency\n", " - Shrinking intracluster distances and expanding intercluster distances does not change the clustering $P_D=P_{D'}$\n", " - Use domain knowledge. & like making similar things more similar and different things more different.\n", "\n", "D -> Clusters partitions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Impossibility Theorem (Kleinberg)\n", "\n", "No clustering scheme can achieve all three of\n", "- Richness\n", "- Scale invariance\n", "- Consistency" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "- Clustering: the idea\n", "- Connection to compact description (?)\n", "- Algorithms\n", " - K means\n", " - SLC (terminates fast)\n", " - EM (soft clusters)\n", "- Clustering proprties and the Impossibility Theorem\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/3.2.2 Feature Selection.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Selection\n", "Minimal number of features it takes to capture trends in the data.\n", "- Select best features\n", "- Add new features\n", "\n", "**Process**\n", "- Use human intuition\n", " - POIs send emails to each other at a higher rate\n", "- Code up new feature\n", " - Int number of messages to this person from POI\n", "- Visualise\n", " - Does the new feature give discriminating power between POIs?\n", "- Repeat\n", " - Can we do better? E.g. scale featre by total number of messages to or from that person.\n", "\n", "Observe\n", "- Outliers\n", "- Mixture of labelled points: Are there chunks in your visualisation where there are only one category of labels? (e.g. if <20% of emails sent to POIs -> all not POIs." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#!/usr/bin/python\n", "\n", "###\n", "### in poiFlagEmail() below, write code that returns a boolean\n", "### indicating if a given email is from a POI\n", "###\n", "\n", "import sys\n", "import reader\n", "import poi_emails\n", "\n", "def getToFromStrings(f):\n", " '''\n", " The imported reader.py file contains functions that we've created to help\n", " parse e-mails from the corpus. .getAddresses() reads in the opening lines\n", " of an e-mail to find the To: From: and CC: strings, while the\n", " .parseAddresses() line takes each string and extracts the e-mail addresses\n", " as a list.\n", " '''\n", " f.seek(0)\n", " to_string, from_string, cc_string = reader.getAddresses(f)\n", " to_emails = reader.parseAddresses( to_string )\n", " from_emails = reader.parseAddresses( from_string )\n", " cc_emails = reader.parseAddresses( cc_string )\n", "\n", " return to_emails, from_emails, cc_emails\n", "\n", "\n", "### POI flag an email\n", "\n", "def poiFlagEmail(f):\n", " \"\"\" given an email file f,\n", " return a trio of booleans for whether that email is\n", " to, from, or cc'ing a poi \"\"\"\n", "\n", " to_emails, from_emails, cc_emails = getToFromStrings(f)\n", "\n", " ### poi_emails.poiEmails() returns a list of all POIs' email addresses.\n", " poi_email_list = poi_emails.poiEmails()\n", "\n", " to_poi = False\n", " from_poi = False\n", " cc_poi = False\n", "\n", " ### to_poi and cc_poi are related functions, which flag whether\n", " ### the email under inspection is addressed to a POI, or if a POI is in cc\n", " ### you don't have to change this code at all\n", "\n", " ### there can be many \"to\" emails, but only one \"from\", so the\n", " ### \"to\" processing needs to be a little more complicated\n", " if to_emails:\n", " ctr = 0\n", " while not to_poi and ctr < len(to_emails):\n", " if to_emails[ctr] in poi_email_list:\n", " to_poi = True\n", " ctr += 1\n", " if cc_emails:\n", " ctr = 0\n", " while not to_poi and ctr < len(cc_emails):\n", " if cc_emails[ctr] in poi_email_list:\n", " cc_poi = True\n", " ctr += 1\n", "\n", "\n", " #################################\n", " ######## your code below ########\n", " ### set from_poi to True if #####\n", " ### the email is from a POI #####\n", " #################################\n", "\n", " if from_emails:\n", " ctr = 0\n", " while not from_poi and ctr < len(from_emails):\n", " if from_emails[ctr] in poi_email_list:\n", " from_poi = True\n", " ctr += 1\n", " \n", " \n", "\n", " #################################\n", " return to_poi, from_poi, cc_poi" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Beware of bugs - be skeptical of classifiers with near 100% accuracy\n", "\n", "When Katie was working on the Enron POI identifier, she engineered a feature that identified when a given person was on the same email as a POI. So for example, if Ken Lay and Katie Malone are both recipients of the same email message, then Katie Malone should have her \"shared receipt\" feature incremented. If she shares lots of emails with POIs, maybe she's a POI herself.\n", "\n", "Here's the problem: there was a subtle bug, that Ken Lay's \"shared receipt\" counter would also be incremented when this happens. And of course, then Ken Lay always shares receipt with a POI, because he is a POI. So the \"shared receipt\" feature became extremely powerful in finding POIs, because it effectively was encoding the label for each person as a feature.\n", "\n", "We found this first by being suspicious of a classifier that was always returning 100% accuracy. Then we removed features one at a time, and found that this feature was driving all the performance. Then, digging back through the feature code, we found the bug outlined above. We changed the code so that a person's \"shared receipt\" feature was only incremented if there was a different POI who received the email, reran the code, and tried again. The accuracy dropped to a more reasonable level." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting rid of features\n", "Reasons\n", "- It's noisy\n", "- It causes overfitting\n", "- It is highly correlated with a feature that's already present\n", "- Additional features slow donw training/testing process\n", "\n", "## Features != Information.\n", "Features attempt to access information but are not info themselves. We want the info. // Quantity vs quality.\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#!/usr/bin/python\n", "\n", "import pickle\n", "import cPickle\n", "import numpy\n", "\n", "from sklearn import cross_validation\n", "from sklearn.feature_extraction.text import TfidfVectorizer\n", "from sklearn.feature_selection import SelectPercentile, f_classif\n", "\n", "\n", "\n", "def preprocess(words_file = \"../tools/word_data.pkl\", authors_file=\"../tools/email_authors.pkl\"):\n", " \"\"\" \n", " this function takes a pre-made list of email texts (by default word_data.pkl)\n", " and the corresponding authors (by default email_authors.pkl) and performs\n", " a number of preprocessing steps:\n", " -- splits into training/testing sets (10% testing)\n", " -- vectorizes into tfidf matrix\n", " -- selects/keeps most helpful features\n", "\n", " after this, the feaures and labels are put into numpy arrays, which play nice with sklearn functions\n", "\n", " 4 objects are returned:\n", " -- training/testing features\n", " -- training/testing labels\n", "\n", " \"\"\"\n", "\n", " ### the words (features) and authors (labels), already largely preprocessed\n", " ### this preprocessing will be repeated in the text learning mini-project\n", " authors_file_handler = open(authors_file, \"r\")\n", " authors = pickle.load(authors_file_handler)\n", " authors_file_handler.close()\n", "\n", " words_file_handler = open(words_file, \"r\")\n", " word_data = cPickle.load(words_file_handler)\n", " words_file_handler.close()\n", "\n", " ### test_size is the percentage of events assigned to the test set\n", " ### (remainder go into training)\n", " features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(word_data, authors, test_size=0.1, random_state=42)\n", "\n", "\n", "\n", " ### text vectorization--go from strings to lists of numbers\n", " # Some feature selection here with (1) `stop_words=`english`' and\n", " # (2) max_df -> don't include terms that have a document frequency \n", " # strictly higher than the given thresholdts. \n", " vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,\n", " stop_words='english')\n", " features_train_transformed = vectorizer.fit_transform(features_train)\n", " features_test_transformed = vectorizer.transform(features_test)\n", "\n", "\n", "\n", " ### feature selection, because text is super high dimensional and \n", " ### can be really computationally chewy as a result\n", " # Select best 10% of features using classifier\n", " selector = SelectPercentile(f_classif, percentile=10)\n", " selector.fit(features_train_transformed, labels_train)\n", " features_train_transformed = selector.transform(features_train_transformed).toarray()\n", " features_test_transformed = selector.transform(features_test_transformed).toarray()\n", "\n", " ### info on the data\n", " print \"no. of Chris training emails:\", sum(labels_train)\n", " print \"no. of Sara training emails:\", len(labels_train)-sum(labels_train)\n", " \n", " return features_train_transformed, features_test_transformed, labels_train, labels_test\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "High dimensionality data -> many features\n", "\n", "## Bias-Variance Dilemma and Number of Features\n", "\n", "**High bias**: Pays little attention to data and is oversimplified\n", "- e.g. few features used\n", "- Low r^2, large SSE\n", "**High variance**: Pays too much attention to data, doesn't generalise well. Overfits.\n", "- e.g. carefully minimised SSE\n", "- Much higher error on test set than on training set\n", "\n", "Tradeoff between goodness of fit and the simplicity of fit.\n", "Want few features, low SSE, high r^2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Regulatisation: Balancing error with no. of features\n", "- Method for automatically penalising extra features in your model\n", "Reverse-u plot (quality of model against no. of features)\n", "\n", "E.g. in regressions\n", "\n", "### Lasso Regression\n", "Minimise SSE + $\\lambda|\\beta|$, \n", "\n", "where $\\lambda$ is a penalty parameter and\n", "$\\beta$ is the coefficients of the regression (related to the number of features used)\n", "\n", "So gain of feature in minimising SSE has to outweigh the penalty of using that extra feature.\n", "\n", "$$y = \\sum m_ix_i + b$$\n", "\n", "**Process: **Lasso regression will try adding features one at a time. If it doesn't decrease SSE sufficiently, it won't add the feature. I.e. it sets the coefficients of those features to zero.\n", "\n", "Precisely, the **optimisation objective for Lasso is: ** $$(1 / (2 * \\text{n_samples})) * ||y - Xw||^2_2 + \\alpha * ||w||_1$$\n" ] }, { "cell_type": "raw", "metadata": {}, "source": [ " from sklearn.linear_model import Lasso\n", "features, labels = GetMyData()\n", "regression = Lasso()\n", "regression.fit(features, labels)\n", "regression.predict([2,4])\n", "print(\"Coefficients: \", regression.coef_, \"\\nIntercept: \", regression.intercept_)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Selection: Charles & Michael\n", "\n", "## Why?\n", "- Knowledge Discovery, Interpretability and Insight (Human)\n", " - Which features matter\n", "- Curse of Dimensionality (Machine)\n", " - The amount of data you need grows exponentially in the number of features you have\n", "\n", "### How hard is the problem\n", "of choosing m features out of n features? (Might not know what m is, m \\leq n.)\n", " - n choose m, or 2^n.\n", " - NP-hard.\n", "\n", "Two a\n", "## Alg approches: Filtering and Wrapping\n", "\n", "### Filtering:\n", "**Process**:\n", "- Have input features \n", "- Run feat through alg which maximises for some score\n", " - Criteria built in search with no reference to the learner\n", "- Passes features to some learning alg which will use it for classification/regression.\n", "\n", "**Adv**:\n", "- Faster: Don't need to worry about paying the cost of what the learner is going to do.\n", "- Flow forward\n", "\n", "**Disadv**:\n", "- No feedback. Ignores the learner.\n", "- (Speed ->) Tend to look at features is isolation\n", "\n", "**Examples of criteria**:\n", "- Information Gain (depends on labels)\n", " - E.G. Put a decision tree inside the search box. Then the top features that come out of a decision tree go into another learner e.g. KNN. (KNN suffers from Curse of Dim because it doesn't know what features are important.)\n", " - Another version: Neural net and pruning features that have low weight.\n", "> Nice\n", "- Entropy, Gini index (version of entropy), some form of variance (doesn't depend on the labels)\n", "- Linear Independence \n", "\n", "**Analogies within Supervised Learning**: Decision Trees (**Information Gain**).\n", "- Note you can look at labels for filtering in supervised learning.\n", "\n", "### Wrapping:\n", "**Process**:\n", "- Take features\n", "- Searches over features\n", "- Learning alg reports how well it does\n", " - Criteria built in learner\n", "- Use that score to search for better set of features\n", "\n", "**Adv**:\n", "- Allows for feedback\n", "- Takes into account model bias and the learner\n", "\n", "**Disadv**:\n", "- Much slower.\n", "\n", "**Examples of criteria**:\n", "- Kinds of local search or hill climbing (deterministic gradient search)\n", "- Randomised optimisation e.g. mimic or genetic algorithms\n", "> Don't know what this is.\n", "- Forward sequential selection (Polynomial) ~ Hill climbing where neighbourhood relation is adding one more feature.\n", " - Start with a a feature of your end features.\n", " - Look at your features in isolation.\n", " - Pass first, then second, then third...\n", " - Whichever feature is best you keep.\n", " - Then you look at each of remaining features and add them individually. You pick the best combination.\n", " - etc until the improvement is not significant enough.\n", "- Backward elimination \n", " - Hill climbing (Reverse of forward search)\n", "- (NOT exhaustive search cause that's exponential)\n", "\n", "\n", "Domain knowledge comes into choice of criteria." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Relevance and Usefulness\n", "- What if a feature doesn't provide any information?\n", "\n", "### Relevance\n", "**Relevance ~ Information**\n", "- A feature $x_i$ is strongly feature is **strongly relevant** if removing it degrades the **Bayes Optimal Classifier** (on a subset of features).\n", " - Weighted average of all the hypotheses. The best that you could do on average.\n", "- $x_i$ is **weakly relevant** if \n", " - not strongly relevant\n", " - There exists a subset of features S such that adding $x_i$ to S improves BOC.\n", " - e.g. for an AND (a,b), if e = not a, neither a or e is strongly relevant. But they are weakly relevant.\n", "- $x_i$ is otherwise irrelevant\n", "\n", "BOC is the gold standard.\n", "\n", "### Usefulness\n", "Usefulness measures the **effect (of minimising error) on a particular predictor**.\n", "- E.g. c = 1 for all features in and AND(a,b) dataset for an origin-constrained perceptron\n", "- E.g. relevance is useful wrt the BOC." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "- Feature Selection Definiton\n", "- Filtering (Faster? but ignoreos bias) vs Wrapping (Slow but useful)\n", "- Relevance (Info) vs usefulness (Reduce error for a particular model)\n", " - Strong and weak relevance\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/3.3.1 PCA.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PCA: Principal Component Analysis\n", "\n", "What is the dimensionality of data?\n", "- y = x is 1-dimensional. We can argue it is 1D even it has small deviations (think of those as noise).\n", "- But a cubic in PCA is 2D. (PCA only does shifts and rotations to create different coordinate systems. Probably does not include extra feature transformation)\n", "\n", "\n", "PCA: If you're given data of any shape, PCA finds a new coordinate system obtained from the old one by translation and rotation only and \n", "- it moves the centre of the coordinate system to the centre of the data.\n", "- it moves the x axis into the principal axis of variation relative to all other data points\n", "- it moves further axes orthogonal to the directions of variation\n", "\n", "So some data is 'PCA-ready', some is not (e.g. if it's a cubic). PCA can deal with vertical lines cause it's just vectors (vs regression uses functions).\n", "\n", "Questions\n", "- Is the data PCA-ready?\n", "- Does the major axis dominate? (Once you have spread captured in major axis, there's not much left in the minor axis(axes).\n", " - e.g. circle -> no. both eigenvalues of same magnitude, haven't gained much by running PCA.\n", "\n", "## Measurable vs Latent Features\n", "\n", "Q: Given the features of a house, what is its price?\n", "\n", "Measurable variables\n", "- Square footage\n", "- No. of rooms\n", "- School ranking\n", "- Neighbourhood safety\n", "\n", "-> Probing **latent variables**\n", "- Size\n", "- Neighbourhood\n", "\n", "### Preserving information: How best to condense our measurable features to k features (where there are e.g. 2 latent variables)? \n", "\n", "- Feature selection tools\n", " - Select k best (good if unknown no. of features)\n", " - Select percentile\n", "\n", "Process:\n", "- Have many features, but I hypothesise a smaller number of features actually drive the patterns.\n", "- Try to make a **composite feature** (principal component) that more directly probes the underlying phenomenon.\n", "\n", "Tool for dimensionality reduction, also a good independent unsupervised learning tool.\n", "\n", "PC vs Regression:\n", "- Regression: Predicting\n", "- PC: Trying to find direction we can project our data onto to lose the least amount of info.\n", "\n", "## How to determine the principal component\n", "\n", "**Variance (stats)** : The spread of a data distribution (vs ML the willingness or flexibility of an alg to learn)\n", "\n", "**Principal component** of a dataset is the direction that has the **largest variance** because projecting onto this direction **retains the maximum amount of info in the original data**.\n", "\n", "(This is a compression algorithm)\n", "\n", "### Maximal variance and informal loss\n", "Information loss: perpendicular distance between point and line we're projecting the point onto.\n", "\n", "Projection onto direction of maximal variances minimises distance from old (higher-dimensional) point to its new transformed value -> Minimises information loss\n", "\n", "## PCA as a general algorithm for feature transformation\n", "- So far, separating or grouping features by hand (square footage, no. of rooms -> size). But this is not scalable.\n", "\n", "- Instead, put all features into PCA and ask PCA to pick first, second PCs. \n", " - They'll likely be a mix of the intuitive latent variables, but it's a useful unsupervised learning technique.\n", "\n", "Max number of PCAs allowed by sklearn: min of no. of features and no. of training points\n", "\n", "\n", "## Working definition of PCA\n", "- PCA is a systematised way to transform input features into principal components\n", "- use principal components as new features\n", "- PCs are directions in data that maximise variance (min info loss) when you project or compress down onto them\n", "- The more variance of data along a PC, the hiher that PC is ranked.\n", "- Each PC is linearly independent with every other PC, so there is no overlap.\n", "- Max no. of PCs = min of no. of input features and no. of training points." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=2)\n", "pca.fit(data)\n", "\n", "# Print eigenvalues\n", "print(pca.explained_variance_ratio_)\n", "first_pc = pca.components_[0]\n", "socend_pc = pca.componentns_[1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## When to use PCA\n", "- Figure out latent features driving the patterns in data\n", "- Dimensionality reduction\n", " - Visualise high-dimensional data (scatterplot only have 2D available) -> Can visualise e.g. k means clustering\n", " - Reduce noise (Hope 1st and 2nd PCs capture info and other minor ones capture noise)\n", " - Preprocessing (reduce dim): Make other algs (regression, classification) work better b/c fewer inputs (e.g. Eigenfaces for facial identification -> feed into SVM)\n", "\n", "### PCA for Facial Recognition\n", "Good for PCA because\n", "- Pictures of faces generally have high input dimensionality (many pixels)\n", "- Faces have general patterns that could be captured in smaller number of dimensions (two eyes on top, moth/chin on bottom)\n", "\n", "### Selecting a number of PCs\n", "- Train on different number of PCs and choose optimal\n", "- Be v careful about throwing out features before you do PCA. Sometimes you might do it because PCA is computationally expensive, but be careful when you do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Train-test split\n", "\n", "# from 1850 features to 150\n", "n_components = 150 \n", "\n", "# Extracting the top 150 faces from >1200 faces\n", "pca = RandomizedPCA(n_components=n_components, whiten=True).fit(X_train)\n", "\n", "eigenfaces = pca.components_.reshape((n_components, h, w))\n", "`\n", "# Transform into PCA representation\n", "# i.e. project input data on the eigenfaces orthonormal basis\n", "X_train_pca = pca.transform(X_train)\n", "X_test_pca = pca.transform(X_test)\n", "\n", "# \n", "clf = GridSearchCV(...)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/3-unsupervised-learning/README.md ================================================ # 3 Unsupervised Learning ## Foci 1. How unsupervised learning fills in the model-building gap in the ML workflow 2. How to compare different models developed using unsupervised learning 3. Understand different kinds of conclusions unsupervised learning can generate and how they differ from supervised learning. ## Lessons 1. Clustering 2. Feature Engineering - Feature Scaling - Feature Selection 3. Dimensionality Reduction - PCA (Principle Component Analysis) - Feature Transformation ================================================ FILE: lesson-notes/4-reinforcement-learning/.ipynb_checkpoints/4.1.1 Markov Decision Processes-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Decision Making and Reinforcement Learning\n", "(RL is a mechanism for doing Decision Making)\n", "\n", "* Supervised Learning: y = f(x)\n", " * Function approximation\n", " * Given x,y pairs, aim is to find f to map x to y.\n", "* Unsupervised Learning: f(x)\n", " * Clustering description\n", " * Given bunch of xs and goal is to find some f that gives a compact description of x.\n", "* Reinforcement Learning: y = f(x)\n", " * Given string of x,z pairs of data and learn f that's going to generate ys.\n", " \n", "Grid world, 3x4 matrix.\n", "- Introduce uncertainty (stochasticity)\n", " - When you choose an action, it executes correctly with prob 0.8\n", " - Moves at a right angle P(0.1), P(0.1).\n", "- Q: What is reliability of previous sequence UURRR?\n", "\n", "Way of capturing these uncertainties directly:\n", "# Markov Decision Processes\n", "\n", "Problem:\n", "* States: S\n", " * Set of elements (one for every state you can be in).\n", " * Often have initial and goal states\n", "* **Model**: T(s,a,s') ~Pr(s'|s,a)\n", " * Rules of the game you're playing. Physics of the world. \n", " * T is a function of a state, an action and another state. (That other state s' can be the same as state s.)\n", " * Model is simple in a deterministic world.\n", "* **Actions**: A(s), A\n", " * E.g. Up, down, left, right. (No option not to move in this game.)\n", " * Generally we think of it as a function of states.\n", "* Reward: R(s), R(s,a), R(s,a,s')\n", " * Scalar value you get for being in a state. E.g. R(goal) = 1, R(red) = -1.\n", " * Reward encompasses our domain knowledge: The usefulness of entering into that state.\n", "Solution\n", "* Policy: $\\pi(s) -> a$\n", " * Action you should take in a state. Like a command.\n", " * $\\pi^*$ the optimal policy that maximises the long-term expected reward.\n", "\n", "### Markovian Property\n", "1. Only the present matters. You don't have to condition on anything past the most recent state.\n", " - Even if something isn't really Markovian, you can make your state remember everything from the past. -> But that makes it hard to learn cause you'll only ever see each state once\n", " - Could also fold action into state.\n", "\n", "Another property:\n", "2. The model is stationary: The model (rules) don't change. (Definition we use for now)\n", "\n", "Putting it into contex of RL:\n", "* We would like pairs to be the training set, with a being the action we SHOULD take.\n", "* But what we actually get is pairs and we need to work out what the optimal policy $\\pi^*$ is. And that's kind of our f.\n", " * s is x\n", " \n", " \n", "Policies that are more robust to underlying stochasticities vs plans\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rewards\n", "- Idea of sequences: Actions that set you up for other actions which then lead to rewards.\n", " - Don't know WHAT led to you ending up playing well or badly (reward +1 or -1) -> i.e. what was or what were the action(s) that led to you winning or losing? (Chess analogy) vs SL\n", "- **Delayed rewards**\n", "- Minor changes matter\n", "\n", "Temporal Credit Assignment Problem\n", "\n", "e.g. R(s) = -.04 \n", "- (for all states except determined goal state = +1, NO state = -1.)\n", "Can represent policy with arrows\n", "- End states: Absorbing states\n", "(img)\n", "- -> **Minor changes (to R(s), say) matter**\n", "\n", "Bottom right case: Minimise chances of slippage and delay. Encouraged to end the game no matter what vs to end the game on +1 for LHS.\n", "\n", "Reward // **teaching signal**\n", "or because rewards define MDP, rewards are **domain knowledge**.\n", "\n", "### Sequences of Rewards: Assumptions\n", "STATIONARY.\n", "\n", "1. **Infinite Horizons**\n", " - Assuming you can live forever. E.g. if grid world lasted 10 moves, you might choose to avoid -1 rather than risk -1 to go for +1. (Or you might choose to take more risk.)\n", " - -> Policy can change even if you're in the same state (different number of timesteps left). \n", " - i.e. $\\pi(s,t)$.\n", " - I suppose time could be part of the state.\n", "2. **Utility of Sequences** (Addition true based on Stationary Preferences because nothing else can be guaranteed to give this property)\n", " - if $U(S_0, S_1, S_2, ...) >$ $U(S_0, S_1^', S_2^')$\n", "then $U(S_1 S2 ...) >$ U(S_1^', S_2^')$\n", " - (Utility over sequence of states)\n", " \n", "$$U(S_0 S_1 S_2 ...) = \\sum_{t=0}^\\infty R(s_t)$$\n", "\n", "- With this rule, infinite accumulation of rewards (1 1 ...) vs (0.5 0.5 ...) no different -> Infty, infty example\n", "\n", "$$U(S_0 S_1 S_2 ...) = \\sum_{t=0}^\\infty \\gamma^t R(s_t), 0\\leq\\gamma < 1$$\n", "$$ \\leq \\sum_{t=0}^\\infty \\gamma^t R_{max} = \\frac{R_{max}}{1-\\gamma}$$\n", "\n", "Discounted sum. Allows us to go an infinite distance in finite time.\n", "\n", "**Singularity**: Limit to computer power growing faster is time it takes to design next computer. Computer can design next gen of computers etc. Next gen of computer design its successor twice as fast etc. Time between generations halves every time. So you will be able to do an infinite number of successors in finite time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Policies\n", "\n", "Optimal policy $\\pi^*$ is one that maximises long-term reward\n", "$$\\pi^* = \\text{argmax}_\\pi E[\\sum_{t=0}^{\\infty} \\gamma^tR(s_t)|\\pi]$$\n", "* Expected value of reward of sequence of states we'll see if we follow pi\n", "\n", "$$U^{\\pi}(s)=E[\\sum_{t=0}^{\\infty} \\gamma^tR(s_t)|\\pi, s_0=s]$$\n", "* How good being in a state given a policy is is exactly what we expect to see from that state on given that policy.\n", "* Manages ST-LT tradeoffs. Accounts for late rewards.\n", "* $U^{\\pi}(s) \\ne R(s)$\n", "\n", "$$\\pi^*(s) = \\text{argmax}_a\\sum_{s'}T(s,a,s')U(s')$$\n", "where $U(s') = U^{\\pi^*}(s)$\n", "\n", "Optimal policy maximises expected utility.\n", "\n", "**Bellman Equation**\n", "$$U(s) = R(s) + \\gamma max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "* Reward in this state + Discount of all reward you're going to get from the next states\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding Policies\n", "\n", "Suppose we have n states. Then we have n Bellman equations\n", "$$U(s) = R(s) + \\gamma \\max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "\n", "and n unknowns U of each s.\n", "BUT max makes the equations non-linear. \n", "- (Aside you can turn maxes into differentiable stuff that is sometimes useful)\n", "\n", "**Value Iteration**\n", "\n", "Algo:\n", "- Start with arbitrary utilities\n", "- Update utilities based on neighbours\n", " - Neighbours: States they can reach.\n", "- Repeat until convergence\n", "\n", "How to update:\n", "- Suppose every time you update is time t.\n", "$$\\hat U_{t+1}(s) = R(s) + \\gamma \\max_a \\sum_{s'} T(s,a,s')\\hat U_t(s')$$\n", "- $\\hat U(s')$ is an estimate of utility\n", "\n", "All n equations are tangled together.\n", "\n", "\n", "* Like a contraction proof. Helps that $\\gamma < 1$.\n", " * R(S) is truth. So 'adding more truth to wrong' so it'll overwhelm the original wrong (initialisation). So $\\hat U_{t+1}(s)$ converges.\n", "(Maybe rewatch vid 24 because I was super distracted.)\n", "\n", "So solving for utility (true value) of a state is the same thing as solving for the optimal policy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...\n", "(img) (vid 26)\n", "\n", "...next time utility for x state is greater than 0.\n", "So at some point it'll be worth it to try to go up instead of bashing your head against the wall.\n", "\n", "Value iteration works because eventually value **propagates out** from its neighbours.\n", "\n", "After more timesteps, you need to figure out the utilities of other states. \n", "\n", "Policy is a mapping from state to actions, NOT states to utilities. If we have U we can figure out \\pi, but U is more info than we need to figure out \\pi. If U has correct orderings it's sufficient.\n", " - U more like regression, \\pi more like classifier.\n", " \n", "\n", "#### Policy Iterations (vs value iterations)\n", "Emphasis on caring about policies > values.\n", "- Start with initial policy $\\pi_0$ <- a guess\n", "- Evaluate how good that policy is. Given $\\pi_t$ calculate $U_t = U^{\\pi}_t$.\n", "- Improve: $\\pi_{t+1} = \\text{arg}\\max_a\\sum T(s,a,s')U_t(s')$\n", "\n", "Allows us to change \\pi over time. E.g. suppose we found a great action in some state. Then all other states that can reach that state might end up taking a different action than they did before because the best action would be moving towards that state.\n", "- How do we calculate U_t? Bellman's equation. $$U_t(s)=R(s)+\\gamma \\sum_{s'} T(s,\\pi_t(s),s')U_t(s')$$\n", " - Instead of max, stick policy in cause we have the policy.\n", " - n equations in n unknowns but there is no max. Now they are **linear equations**.\n", "- Fewer iterations than value iteration. Apps.\n", "- Bigger jumps than value iterations. Making jumps in policy space rather than in value space.\n", "- Computational tricks e.g. do a step of value iteration to get an estimate of $U_t$.\n", "- Guaranteed to converge. Finite number of policies and you're always getting better.\n", "\n", "## Summary\n", "- Markov Decision Processes\n", "- States, Rewards, Actions, Transitions, (Discounts <- Parameter)\n", " - Capturing the underlying process you care about. Rewards & Discounts capture the nature of the task more than the underlying physics.\n", "- Policies\n", "- Value functions (Utilities) -> Factor in long-term aspects vs rewards don't.\n", "- Discounting: deal with infinite sequences in finite time(?)\n", "- Stationary\n", "- Bellman equation\n", " - Value iteration\n", " - Policy iteration\n", " - These can be mapped into linear programs and solved in polynomial time.\n", "\n", "Note: Haven't done any reinforcement learning. in RL you don't necessary know the rewards or transitions. Or indeed the actions or states.\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/4-reinforcement-learning/.ipynb_checkpoints/4.1.2 Reinforcement Learning-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reinforcement Learning\n", "\n", "Aside: Reinforcement Learning" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from IPython.display import Image\n", "Image(filename=\"images/rl-01.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### API\n", "API is kinda like a box.\n", "(img)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-02.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Planner\n", " - Last time Charles talked about the Planner box.\n", " - Transition fn T, reward function R\n", " - e.g. value or policy iteration\n", "\n", "2. Learner (Reinforcement learning)\n", " - Will see many transitions.\n", "\n", "3. Modeler\n", "\n", "4. Simulator\n", "\n", "### Ways of gluing these together:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-03.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(img)\n", "Planner with a learner inside vs a learner that uses a planner inside \n", "\n", "e.g.\n", "- Backgammon-playing RL used a RL-based planner." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Three Approaches to RL" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-04.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Policy search\n", " - Policies maps states to actions\n", " - Adv: Direct Use -> Learning quantity you directly need to use\n", " - Disadv: Indirect Learning (function). Data doesn't tell you what action to choose (Temporal credit assignment problem)\n", "\n", "2. Value-function based \n", " - Maps states to values\n", " - Adv: Direct learning\n", " - Disadv: Indirect use. Need to turn into policy. But it's an okay conversion with some types of value function (conversion) using argmax.\n", " - Adv: Simple if you do it right. Can be powerful.\n", "\n", "3. Model-based RL\n", " - Going from T,R to U: Value iteration to solve Bellman equations. Not nice to do but doable.\n", " - Adv: Direct learning.\n", " - Indirect use cause you have to do planning and optimising (translate)\n", "\n", "Focus on Value-function based approaches for now.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A new kind of value function\n", "\n", "$$U(s)=R(s) + \\gamma \\max_a \\sum_{s'}T(s,a,s')U(s')$$\n", "- Long-term value of being in a state is the reward for arriving in that state + the discounted reward of the future. (To leave the state we're going to choose an action and take the expectation ...)\n", "\n", "$$\\pi(s) = \\text{arg}\\max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "- Look at expected values: Iterate over all possible next states weightedby their probability of utility of landing in state.\n", "\n", "### **NEW value function** Q: \n", "$$Q(s,a) = R(s) + \\gamma \\sum_{s')T(s,a,s')\\max_{a'}Q(s',a')$$\n", "- Q cause Q is in the latter half of the alphabet and many other letters are taken\n", "- Value for arriving in S, leaving via a (landing in s' with T probability), proceeding optimally thereafter.\n", "\n", "**Using Q to define U and $\\pi$**\n", "- Observe U(s) returns a scalar, $\\pi$(s) returns an acition\n", "$$U(s) = \\max_a Q(s,a)$$\n", "$$\\pi(s) = \\text{arg}\\max_a Q(s,a)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Q-learning\n", "- Evaluating the Bellman equations from data\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-05.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Estimating Q from transitions\n", "\n", "$$Q(s,a) = R(s) + \\gamma \\sum_{s'}T(s,a,s)$$\n", "- Don't have R or T (vs MDP have R and T). It's polynomial to do if we have R and T\n", "- A transition is .\n", "$$\\hat Q(s,a) \\leftarrow^{\\alpha_t} r + \\gamma \\max_{a'} \\hat Q(s',a')$$\n", "where $\\alpha$ is the learning rate. 0 is no learning, 1 is full learning. 0.5 is averaging the previous and the new.\n", "\n", "\n", "- Don't have sum over transitions but have max a' and estimate of Q in next state.\n", "- Notation: e.g. $V\\leftarrow^\\alpha X$ means $V \\leftarrow V + \\alpha(X-V) = (1-\\alpha)V + \\alpha X$. Moving alpha of the way from X to V.\n", " - Converges to E(X)\n", " - Believe things less over time\n", " - Like an average\n", " - Adding things up and computing a weighted average with weightn decaying over time\n", "- Computing average value you'd get if you follow the optimal policy after taking a particular action.\n", "$$\\hat Q(s,a) \\leftarrow^{\\alpha_t} r + \\gamma \\max_{a'} \\hat Q(s',a')$$\n", "- Which we'll hand-wave and ignore that the above line is a moving target to get\n", "$$=E[r+\\gamma \\max_{a'} \\hat Q(s',a')]$$\n", "- from linearity of expectation\n", "$$=R(s) + \\gamma E_{s'}[\\max_{a'} \\hat Q(s',a')]$$\n", "$$=R(s) + \\gamma \\sum_{s'}T(s,a,s')\\hat Q(s',a')$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q-learning convergence\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-06.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "line 2: Update $\\hat Q$.\n", "Remarkable that it's one line of code.\n", "Important caveat, need to visit all states etc.\n", "\n", "Q-learning is actually a **family of algorithms**.\n", "Vary along following themes:\n", "- How initialise $\\hat Q$?\n", "- How decay $\\alpha_t$?\n", "- How choose actions?\n", " - Bad ways of choosing actions\n", " - Always choose $a_0$ -> Bad b/c doesn't visit all actions and doesn't learn anything.\n", " - Choose randomly -> May have learned Q, but we don't use it. Don't take advantage of anything you learn.\n", " - Use $\\hat Q$. \n", " - Can be bad (**Greedy action selection**): Only don't a_0 all the time if you update Q and get worse than terrible. Kind of a **local min**.\n", " - i.e. if you set up $\\hat Q$ that makes some local min look better than the optimal.\n", " - random restarts -> start it over over and over again.\n", " - Going to take an even longer time to get to an answer\n", " - Might help us get unstuck. (In random optimisation, we did this so if we got stuck we could throw out everything and get unstuck.)\n", " - Use simulated annealing-like approach \n", " -> Take uphill steps but randomly take a downhill step. Mixture of choosing randomly and using $\\hat Q$. So it's a random action.\n", " - Take a random action sometimes $\\hat \\pi (s) = \\text{arg}\\max_a \\hat Q(s,a)\\text{w. prob} 1-\\epsilon$, random action otherwise.\n", " - Chance of exploring whole space and learning true Q if you're stuck.\n", "\n", "## $\\epsilon$-greedy exploration" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"rl-07.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Decayed $\\epsilon$ -> Over time more greedy, less random.\n", "- $\\hat Q -> Q$ from standard Q-learning convergence result\n", "\n", "### Exploration-exploitation dilemma\n", "**Fundamental tradeoff in RL**\n", "- Exploration: Getting data you need so you learn\n", "- Exploitation: Using what you know\n", "- Tradeoff because there's only one agent acting in the world but there are two types of actions.\n", "- How modelling and planning interact with each other\n", "\n", "- **Optimism in the face of uncertainty** Can also do EE via initialising $\\hat Q$. \n", " - A*\n", "\n", "- Other approaches to EE: some in the model-based setting are more powerful because you can keep track of what you've learned in the environment where you haven't (Transfer?). Alg can then explore what it doesn't know and exploit what it does know.\n", "\n", "## Summary\n", "- Learn to solve an MDP not knowing T or R, but having the able to interact with the environment \n", "- Q-learning family: converges, Q function\n", "- Exploration-expolitation: learn and use\n", " - Optimisation in the face of uncertainty\n", "- Approaches to RL\n", "- Connection to planning\n", "\n", "Connection to function approximation: overfitting comes up in more generalised RL situations." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/4-reinforcement-learning/4.1.1 Markov Decision Processes.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Decision Making and Reinforcement Learning\n", "(RL is a mechanism for doing Decision Making)\n", "\n", "* Supervised Learning: y = f(x)\n", " * Function approximation\n", " * Given x,y pairs, aim is to find f to map x to y.\n", "* Unsupervised Learning: f(x)\n", " * Clustering description\n", " * Given bunch of xs and goal is to find some f that gives a compact description of x.\n", "* Reinforcement Learning: y = f(x)\n", " * Given string of x,z pairs of data and learn f that's going to generate ys.\n", " \n", "Grid world, 3x4 matrix.\n", "- Introduce uncertainty (stochasticity)\n", " - When you choose an action, it executes correctly with prob 0.8\n", " - Moves at a right angle P(0.1), P(0.1).\n", "- Q: What is reliability of previous sequence UURRR?\n", "\n", "Way of capturing these uncertainties directly:\n", "# Markov Decision Processes\n", "\n", "Problem:\n", "* States: S\n", " * Set of elements (one for every state you can be in).\n", " * Often have initial and goal states\n", "* **Model**: T(s,a,s') ~Pr(s'|s,a)\n", " * Rules of the game you're playing. Physics of the world. \n", " * T is a function of a state, an action and another state. (That other state s' can be the same as state s.)\n", " * Model is simple in a deterministic world.\n", "* **Actions**: A(s), A\n", " * E.g. Up, down, left, right. (No option not to move in this game.)\n", " * Generally we think of it as a function of states.\n", "* Reward: R(s), R(s,a), R(s,a,s')\n", " * Scalar value you get for being in a state. E.g. R(goal) = 1, R(red) = -1.\n", " * Reward encompasses our domain knowledge: The usefulness of entering into that state.\n", "Solution\n", "* Policy: $\\pi(s) -> a$\n", " * Action you should take in a state. Like a command.\n", " * $\\pi^*$ the optimal policy that maximises the long-term expected reward.\n", "\n", "### Markovian Property\n", "1. Only the present matters. You don't have to condition on anything past the most recent state.\n", " - Even if something isn't really Markovian, you can make your state remember everything from the past. -> But that makes it hard to learn cause you'll only ever see each state once\n", " - Could also fold action into state.\n", "\n", "Another property:\n", "2. The model is stationary: The model (rules) don't change. (Definition we use for now)\n", "\n", "Putting it into contex of RL:\n", "* We would like pairs to be the training set, with a being the action we SHOULD take.\n", "* But what we actually get is pairs and we need to work out what the optimal policy $\\pi^*$ is. And that's kind of our f.\n", " * s is x\n", " \n", " \n", "Policies that are more robust to underlying stochasticities vs plans\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Rewards\n", "- Idea of sequences: Actions that set you up for other actions which then lead to rewards.\n", " - Don't know WHAT led to you ending up playing well or badly (reward +1 or -1) -> i.e. what was or what were the action(s) that led to you winning or losing? (Chess analogy) vs SL\n", "- **Delayed rewards**\n", "- Minor changes matter\n", "\n", "Temporal Credit Assignment Problem\n", "\n", "e.g. R(s) = -.04 \n", "- (for all states except determined goal state = +1, NO state = -1.)\n", "Can represent policy with arrows\n", "- End states: Absorbing states\n", "(img)\n", "- -> **Minor changes (to R(s), say) matter**\n", "\n", "Bottom right case: Minimise chances of slippage and delay. Encouraged to end the game no matter what vs to end the game on +1 for LHS.\n", "\n", "Reward // **teaching signal**\n", "or because rewards define MDP, rewards are **domain knowledge**.\n", "\n", "### Sequences of Rewards: Assumptions\n", "STATIONARY.\n", "\n", "1. **Infinite Horizons**\n", " - Assuming you can live forever. E.g. if grid world lasted 10 moves, you might choose to avoid -1 rather than risk -1 to go for +1. (Or you might choose to take more risk.)\n", " - -> Policy can change even if you're in the same state (different number of timesteps left). \n", " - i.e. $\\pi(s,t)$.\n", " - I suppose time could be part of the state.\n", "2. **Utility of Sequences** (Addition true based on Stationary Preferences because nothing else can be guaranteed to give this property)\n", " - if $U(S_0, S_1, S_2, ...) >$ $U(S_0, S_1^', S_2^')$\n", "then $U(S_1 S2 ...) >$ U(S_1^', S_2^')$\n", " - (Utility over sequence of states)\n", " \n", "$$U(S_0 S_1 S_2 ...) = \\sum_{t=0}^\\infty R(s_t)$$\n", "\n", "- With this rule, infinite accumulation of rewards (1 1 ...) vs (0.5 0.5 ...) no different -> Infty, infty example\n", "\n", "$$U(S_0 S_1 S_2 ...) = \\sum_{t=0}^\\infty \\gamma^t R(s_t), 0\\leq\\gamma < 1$$\n", "$$ \\leq \\sum_{t=0}^\\infty \\gamma^t R_{max} = \\frac{R_{max}}{1-\\gamma}$$\n", "\n", "Discounted sum. Allows us to go an infinite distance in finite time.\n", "\n", "**Singularity**: Limit to computer power growing faster is time it takes to design next computer. Computer can design next gen of computers etc. Next gen of computer design its successor twice as fast etc. Time between generations halves every time. So you will be able to do an infinite number of successors in finite time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Policies\n", "\n", "Optimal policy $\\pi^*$ is one that maximises long-term reward\n", "$$\\pi^* = \\text{argmax}_\\pi E[\\sum_{t=0}^{\\infty} \\gamma^tR(s_t)|\\pi]$$\n", "* Expected value of reward of sequence of states we'll see if we follow pi\n", "\n", "$$U^{\\pi}(s)=E[\\sum_{t=0}^{\\infty} \\gamma^tR(s_t)|\\pi, s_0=s]$$\n", "* How good being in a state given a policy is is exactly what we expect to see from that state on given that policy.\n", "* Manages ST-LT tradeoffs. Accounts for late rewards.\n", "* $U^{\\pi}(s) \\ne R(s)$\n", "\n", "$$\\pi^*(s) = \\text{argmax}_a\\sum_{s'}T(s,a,s')U(s')$$\n", "where $U(s') = U^{\\pi^*}(s)$\n", "\n", "Optimal policy maximises expected utility.\n", "\n", "**Bellman Equation**\n", "$$U(s) = R(s) + \\gamma max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "* Reward in this state + Discount of all reward you're going to get from the next states\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding Policies\n", "\n", "Suppose we have n states. Then we have n Bellman equations\n", "$$U(s) = R(s) + \\gamma \\max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "\n", "and n unknowns U of each s.\n", "BUT max makes the equations non-linear. \n", "- (Aside you can turn maxes into differentiable stuff that is sometimes useful)\n", "\n", "**Value Iteration**\n", "\n", "Algo:\n", "- Start with arbitrary utilities\n", "- Update utilities based on neighbours\n", " - Neighbours: States they can reach.\n", "- Repeat until convergence\n", "\n", "How to update:\n", "- Suppose every time you update is time t.\n", "$$\\hat U_{t+1}(s) = R(s) + \\gamma \\max_a \\sum_{s'} T(s,a,s')\\hat U_t(s')$$\n", "- $\\hat U(s')$ is an estimate of utility\n", "\n", "All n equations are tangled together.\n", "\n", "\n", "* Like a contraction proof. Helps that $\\gamma < 1$.\n", " * R(S) is truth. So 'adding more truth to wrong' so it'll overwhelm the original wrong (initialisation). So $\\hat U_{t+1}(s)$ converges.\n", "(Maybe rewatch vid 24 because I was super distracted.)\n", "\n", "So solving for utility (true value) of a state is the same thing as solving for the optimal policy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "...\n", "(img) (vid 26)\n", "\n", "...next time utility for x state is greater than 0.\n", "So at some point it'll be worth it to try to go up instead of bashing your head against the wall.\n", "\n", "Value iteration works because eventually value **propagates out** from its neighbours.\n", "\n", "After more timesteps, you need to figure out the utilities of other states. \n", "\n", "Policy is a mapping from state to actions, NOT states to utilities. If we have U we can figure out \\pi, but U is more info than we need to figure out \\pi. If U has correct orderings it's sufficient.\n", " - U more like regression, \\pi more like classifier.\n", " \n", "\n", "#### Policy Iterations (vs value iterations)\n", "Emphasis on caring about policies > values.\n", "- Start with initial policy $\\pi_0$ <- a guess\n", "- Evaluate how good that policy is. Given $\\pi_t$ calculate $U_t = U^{\\pi}_t$.\n", "- Improve: $\\pi_{t+1} = \\text{arg}\\max_a\\sum T(s,a,s')U_t(s')$\n", "\n", "Allows us to change \\pi over time. E.g. suppose we found a great action in some state. Then all other states that can reach that state might end up taking a different action than they did before because the best action would be moving towards that state.\n", "- How do we calculate U_t? Bellman's equation. $$U_t(s)=R(s)+\\gamma \\sum_{s'} T(s,\\pi_t(s),s')U_t(s')$$\n", " - Instead of max, stick policy in cause we have the policy.\n", " - n equations in n unknowns but there is no max. Now they are **linear equations**.\n", "- Fewer iterations than value iteration. Apps.\n", "- Bigger jumps than value iterations. Making jumps in policy space rather than in value space.\n", "- Computational tricks e.g. do a step of value iteration to get an estimate of $U_t$.\n", "- Guaranteed to converge. Finite number of policies and you're always getting better.\n", "\n", "## Summary\n", "- Markov Decision Processes\n", "- States, Rewards, Actions, Transitions, (Discounts <- Parameter)\n", " - Capturing the underlying process you care about. Rewards & Discounts capture the nature of the task more than the underlying physics.\n", "- Policies\n", "- Value functions (Utilities) -> Factor in long-term aspects vs rewards don't.\n", "- Discounting: deal with infinite sequences in finite time(?)\n", "- Stationary\n", "- Bellman equation\n", " - Value iteration\n", " - Policy iteration\n", " - These can be mapped into linear programs and solved in polynomial time.\n", "\n", "Note: Haven't done any reinforcement learning. in RL you don't necessary know the rewards or transitions. Or indeed the actions or states.\n", "\n" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/4-reinforcement-learning/4.1.2 Reinforcement Learning.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Reinforcement Learning\n", "\n", "Aside: Reinforcement Learning" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from IPython.display import Image\n", "Image(filename=\"images/rl-01.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### API\n", "API is kinda like a box.\n", "(img)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-02.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Planner\n", " - Last time Charles talked about the Planner box.\n", " - Transition fn T, reward function R\n", " - e.g. value or policy iteration\n", "\n", "2. Learner (Reinforcement learning)\n", " - Will see many transitions.\n", "\n", "3. Modeler\n", "\n", "4. Simulator\n", "\n", "### Ways of gluing these together:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-03.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(img)\n", "Planner with a learner inside vs a learner that uses a planner inside \n", "\n", "e.g.\n", "- Backgammon-playing RL used a RL-based planner." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Three Approaches to RL" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-04.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Policy search\n", " - Policies maps states to actions\n", " - Adv: Direct Use -> Learning quantity you directly need to use\n", " - Disadv: Indirect Learning (function). Data doesn't tell you what action to choose (Temporal credit assignment problem)\n", "\n", "2. Value-function based \n", " - Maps states to values\n", " - Adv: Direct learning\n", " - Disadv: Indirect use. Need to turn into policy. But it's an okay conversion with some types of value function (conversion) using argmax.\n", " - Adv: Simple if you do it right. Can be powerful.\n", "\n", "3. Model-based RL\n", " - Going from T,R to U: Value iteration to solve Bellman equations. Not nice to do but doable.\n", " - Adv: Direct learning.\n", " - Indirect use cause you have to do planning and optimising (translate)\n", "\n", "Focus on Value-function based approaches for now.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A new kind of value function\n", "\n", "$$U(s)=R(s) + \\gamma \\max_a \\sum_{s'}T(s,a,s')U(s')$$\n", "- Long-term value of being in a state is the reward for arriving in that state + the discounted reward of the future. (To leave the state we're going to choose an action and take the expectation ...)\n", "\n", "$$\\pi(s) = \\text{arg}\\max_a \\sum_{s'} T(s,a,s')U(s')$$\n", "- Look at expected values: Iterate over all possible next states weightedby their probability of utility of landing in state.\n", "\n", "### **NEW value function** Q: \n", "$$Q(s,a) = R(s) + \\gamma \\sum_{s')T(s,a,s')\\max_{a'}Q(s',a')$$\n", "- Q cause Q is in the latter half of the alphabet and many other letters are taken\n", "- Value for arriving in S, leaving via a (landing in s' with T probability), proceeding optimally thereafter.\n", "\n", "**Using Q to define U and $\\pi$**\n", "- Observe U(s) returns a scalar, $\\pi$(s) returns an acition\n", "$$U(s) = \\max_a Q(s,a)$$\n", "$$\\pi(s) = \\text{arg}\\max_a Q(s,a)$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Q-learning\n", "- Evaluating the Bellman equations from data\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-05.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Estimating Q from transitions\n", "\n", "$$Q(s,a) = R(s) + \\gamma \\sum_{s'}T(s,a,s)$$\n", "- Don't have R or T (vs MDP have R and T). It's polynomial to do if we have R and T\n", "- A transition is .\n", "$$\\hat Q(s,a) \\leftarrow^{\\alpha_t} r + \\gamma \\max_{a'} \\hat Q(s',a')$$\n", "where $\\alpha$ is the learning rate. 0 is no learning, 1 is full learning. 0.5 is averaging the previous and the new.\n", "\n", "\n", "- Don't have sum over transitions but have max a' and estimate of Q in next state.\n", "- Notation: e.g. $V\\leftarrow^\\alpha X$ means $V \\leftarrow V + \\alpha(X-V) = (1-\\alpha)V + \\alpha X$. Moving alpha of the way from X to V.\n", " - Converges to E(X)\n", " - Believe things less over time\n", " - Like an average\n", " - Adding things up and computing a weighted average with weightn decaying over time\n", "- Computing average value you'd get if you follow the optimal policy after taking a particular action.\n", "$$\\hat Q(s,a) \\leftarrow^{\\alpha_t} r + \\gamma \\max_{a'} \\hat Q(s',a')$$\n", "- Which we'll hand-wave and ignore that the above line is a moving target to get\n", "$$=E[r+\\gamma \\max_{a'} \\hat Q(s',a')]$$\n", "- from linearity of expectation\n", "$$=R(s) + \\gamma E_{s'}[\\max_{a'} \\hat Q(s',a')]$$\n", "$$=R(s) + \\gamma \\sum_{s'}T(s,a,s')\\hat Q(s',a')$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q-learning convergence\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"images/rl-06.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "line 2: Update $\\hat Q$.\n", "Remarkable that it's one line of code.\n", "Important caveat, need to visit all states etc.\n", "\n", "Q-learning is actually a **family of algorithms**.\n", "Vary along following themes:\n", "- How initialise $\\hat Q$?\n", "- How decay $\\alpha_t$?\n", "- How choose actions?\n", " - Bad ways of choosing actions\n", " - Always choose $a_0$ -> Bad b/c doesn't visit all actions and doesn't learn anything.\n", " - Choose randomly -> May have learned Q, but we don't use it. Don't take advantage of anything you learn.\n", " - Use $\\hat Q$. \n", " - Can be bad (**Greedy action selection**): Only don't a_0 all the time if you update Q and get worse than terrible. Kind of a **local min**.\n", " - i.e. if you set up $\\hat Q$ that makes some local min look better than the optimal.\n", " - random restarts -> start it over over and over again.\n", " - Going to take an even longer time to get to an answer\n", " - Might help us get unstuck. (In random optimisation, we did this so if we got stuck we could throw out everything and get unstuck.)\n", " - Use simulated annealing-like approach \n", " -> Take uphill steps but randomly take a downhill step. Mixture of choosing randomly and using $\\hat Q$. So it's a random action.\n", " - Take a random action sometimes $\\hat \\pi (s) = \\text{arg}\\max_a \\hat Q(s,a)\\text{w. prob} 1-\\epsilon$, random action otherwise.\n", " - Chance of exploring whole space and learning true Q if you're stuck.\n", "\n", "## $\\epsilon$-greedy exploration" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"rl-07.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Decayed $\\epsilon$ -> Over time more greedy, less random.\n", "- $\\hat Q -> Q$ from standard Q-learning convergence result\n", "\n", "### Exploration-exploitation dilemma\n", "**Fundamental tradeoff in RL**\n", "- Exploration: Getting data you need so you learn\n", "- Exploitation: Using what you know\n", "- Tradeoff because there's only one agent acting in the world but there are two types of actions.\n", "- How modelling and planning interact with each other\n", "\n", "- **Optimism in the face of uncertainty** Can also do EE via initialising $\\hat Q$. \n", " - A*\n", "\n", "- Other approaches to EE: some in the model-based setting are more powerful because you can keep track of what you've learned in the environment where you haven't (Transfer?). Alg can then explore what it doesn't know and exploit what it does know.\n", "\n", "## Summary\n", "- Learn to solve an MDP not knowing T or R, but having the able to interact with the environment \n", "- Q-learning family: converges, Q function\n", "- Exploration-expolitation: learn and use\n", " - Optimisation in the face of uncertainty\n", "- Approaches to RL\n", "- Connection to planning\n", "\n", "Connection to function approximation: overfitting comes up in more generalised RL situations." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/4-reinforcement-learning/README.md ================================================ # Reinforcement Learning Teaching system to prioritise by giving it corresponding rewards and punishments ## Foci 1. How reinforcement learning fills in model-building phase of workflow 2. How to compare reinforcement learning models 3. How reinforcement learning differs in terms of the kinds of models it produces vs supervised or unsupervised learning. ## Lessons 1. Reinforcement Learning - Markov Decision Processes - Reinforcement Learning (Q-Learning) 2. Game Theory ================================================ FILE: lesson-notes/5-ml-for-trading/.ipynb_checkpoints/0. Course Outline-checkpoint.ipynb ================================================ { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/5-ml-for-trading/0. Course Outline.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning for Trading: Course Outline\n", "\n", "The course is split into three parts:\n", "1. Manipulating Financial Data in Python\n", "2. Computational Investing\n", " * Algorithms, methods and models\n", "3. Learning Algorithms for Trading\n", " * Qlearning and random forests\n", " \n", "End of course aim: Able to join a trading system development team\n", "\n", "Textbooks\n", "1. Python for Finance (O' Reilly)\n", "2. What Hedge Funds Really Do (Tucker Balch + author)\n", "3. Machine Learning (Mitchell)\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: lesson-notes/Healthcare - Christopher Thompson 1 Oct 2016.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Christopher Thompson: Applications of ML in Healthcare and Pharma\n", "\n", "Microbiologist at Imperial (Postdoc)\n", "\n", "1. Diagnosis DTs\n", "2. Imaging analysis MRI X ray Pathology 40 images per needle biopsy hours per processs\n", "3. Brug Discovery\n", " - nwe uses for existing drugs\n", " - combine 4 drgus into single therapy -> pill or injection -> 5 concentrations\n", " - fastest route? HUH HOW\n", " - off-target drug actions (IBS tuberculosis antibiotics) -> more DA, hmm\n", "4. Patient surveillance\n", "5. Personalised medicine or therapy\n", " - data sources\n", " - electronic health records: structured and unstructured (clinician notes), BoW no cancer vs cancer\n", " - epidem behaviour\n", " - dna (cookbook) -> rna (recipe) -> protein (meal)\n", " - rna as a market of prostate cancer mestasisis (moving)\n", " - diagnosis only by biopsy\n", " - survival rates vary by local vs distance\n", " - gen model predict P(metastasis), log loss -> penalises wrong confident preds a lot\n", " - vs current can only test if cancer has mestatisised\n", " - used anova, pca\n", " - F stat (take with max f stat) -> filter for genes that are diff in metastasis vs normal\n", " - NOTE dataset is live: what is classified as local might go to metastetic eventually. but no otehr way back.\n", " - features RNA 20k + 20 clinical features, 500 patients.\n", " - Gleason score :) 2 - 10 :( -> 0.3\n", " - RNA -> 0.7\n", " - Filter down to 20 genes\n", " -> Probablity in the next X years. makes sens.\n", "\n", "\n", "23me? - > what's that angelo\n", "\n", "gaddaga? oh so if you see they have BLAH they won't hire them.\n", "- esp if attach location and ethnicity to data\n", "$39bn per year US health institute\n", "\n", "OCR get capture?\n", "\n", "H l 7\n", "Electronic health records: there are 10 competing formats.\n", "\n", "Nature vs nurture -> DNA modification, molecular tagging\n", "\n", "Alzheimers depends on Epigenetics likely.\n", "Combo of epigenetic and genetic\n", "\n", "\n", "Climate patterns\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Baxter\n", "Myo\n", "Thync\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p0-titanic-survival-exploration/.ipynb_checkpoints/titanic_survival_exploration-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Introduction and Foundations\n", "## Project 0: Titanic Survival Exploration\n", "\n", "In 1912, the ship RMS Titanic struck an iceberg on its maiden voyage and sank, resulting in the deaths of most of its passengers and crew. In this introductory project, we will explore a subset of the RMS Titanic passenger manifest to determine which features best predict whether someone survived or did not survive. To complete this project, you will need to implement several conditional predictions and answer the questions below. Your project submission will be evaluated based on the completion of the code and your responses to the questions.\n", "> **Tip:** Quoted sections like this will provide helpful instructions on how to navigate and use an iPython notebook. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started\n", "To begin working with the RMS Titanic passenger data, we'll first need to `import` the functionality we need, and load our data into a `pandas` DataFrame. \n", "Run the code cell below to load our data and display the first few entries (passengers) for examination using the `.head()` function.\n", "> **Tip:** You can run a code cell by clicking on the cell and using the keyboard shortcut **Shift + Enter** or **Shift + Return**. Alternatively, a code cell can be executed using the **Play** button in the hotbar after selecting it. Markdown cells (text cells like this one) can be edited by double-clicking, and saved using these same shortcuts. [Markdown](http://daringfireball.net/projects/markdown/syntax) allows you to write easy-to-read plain text that can be converted to HTML." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 NaN S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 NaN S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 NaN S " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "# RMS Titanic data visualization code \n", "from titanic_visualizations import survival_stats\n", "from IPython.display import display\n", "%matplotlib inline\n", "\n", "# Load the dataset\n", "in_file = 'titanic_data.csv'\n", "full_data = pd.read_csv(in_file)\n", "\n", "# Print the first few entries of the RMS Titanic data\n", "display(full_data.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From a sample of the RMS Titanic data, we can see the various features present for each passenger on the ship:\n", "- **Survived**: Outcome of survival (0 = No; 1 = Yes)\n", "- **Pclass**: Socio-economic class (1 = Upper class; 2 = Middle class; 3 = Lower class)\n", "- **Name**: Name of passenger\n", "- **Sex**: Sex of the passenger\n", "- **Age**: Age of the passenger (Some entries contain `NaN`)\n", "- **SibSp**: Number of siblings and spouses of the passenger aboard\n", "- **Parch**: Number of parents and children of the passenger aboard\n", "- **Ticket**: Ticket number of the passenger\n", "- **Fare**: Fare paid by the passenger\n", "- **Cabin** Cabin number of the passenger (Some entries contain `NaN`)\n", "- **Embarked**: Port of embarkation of the passenger (C = Cherbourg; Q = Queenstown; S = Southampton)\n", "\n", "Since we're interested in the outcome of survival for each passenger or crew member, we can remove the **Survived** feature from this dataset and store it as its own separate variable `outcomes`. We will use these outcomes as our prediction targets. \n", "Run the code cell below to remove **Survived** as a feature of the dataset and store it in `outcomes`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
013Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
121Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
233Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
341Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
453Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", "
" ], "text/plain": [ " PassengerId Pclass Name \\\n", "0 1 3 Braund, Mr. Owen Harris \n", "1 2 1 Cumings, Mrs. John Bradley (Florence Briggs Th... \n", "2 3 3 Heikkinen, Miss. Laina \n", "3 4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) \n", "4 5 3 Allen, Mr. William Henry \n", "\n", " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", "0 male 22.0 1 0 A/5 21171 7.2500 NaN S \n", "1 female 38.0 1 0 PC 17599 71.2833 C85 C \n", "2 female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S \n", "3 female 35.0 1 0 113803 53.1000 C123 S \n", "4 male 35.0 0 0 373450 8.0500 NaN S " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Store the 'Survived' feature in a new variable and remove it from the dataset\n", "outcomes = full_data['Survived']\n", "data = full_data.drop('Survived', axis = 1)\n", "\n", "# Show the new dataset with 'Survived' removed\n", "display(data.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The very same sample of the RMS Titanic data now shows the **Survived** feature removed from the DataFrame. Note that `data` (the passenger data) and `outcomes` (the outcomes of survival) are now *paired*. That means for any passenger `data.loc[i]`, they have the survival outcome `outcome[i]`.\n", "\n", "To measure the performance of our predictions, we need a metric to score our predictions against the true outcomes of survival. Since we are interested in how *accurate* our predictions are, we will calculate the proportion of passengers where our prediction of their survival is correct. Run the code cell below to create our `accuracy_score` function and test a prediction on the first five passengers. \n", "\n", "**Think:** *Out of the first five passengers, if we predict that all of them survived, what would you expect the accuracy of our predictions to be?*" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 60.00%.\n" ] } ], "source": [ "def accuracy_score(truth, pred):\n", " \"\"\" Returns accuracy score for input truth and predictions. \"\"\"\n", " \n", " # Ensure that the number of predictions matches number of outcomes\n", " if len(truth) == len(pred): \n", " \n", " # Calculate and return the accuracy as a percent\n", " return \"Predictions have an accuracy of {:.2f}%.\".format((truth == pred).mean()*100)\n", " \n", " else:\n", " return \"Number of predictions does not match number of outcomes!\"\n", " \n", "# Test the 'accuracy_score' function\n", "predictions = pd.Series(np.ones(5, dtype = int))\n", "print accuracy_score(outcomes[:5], predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Tip:** If you save an iPython Notebook, the output from running code blocks will also be saved. However, the state of your workspace will be reset once a new session is started. Make sure that you run all of the code blocks from your previous session to reestablish variables and functions before picking up where you last left off.\n", "\n", "# Making Predictions\n", "\n", "If we were asked to make a prediction about any passenger aboard the RMS Titanic whom we knew nothing about, then the best prediction we could make would be that they did not survive. This is because we can assume that a majority of the passengers (more than 50%) did not survive the ship sinking. \n", "The `predictions_0` function below will always predict that a passenger did not survive." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_0(data):\n", " \"\"\" Model with no features. Always predicts a passenger did not survive. \"\"\"\n", "\n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Predict the survival of 'passenger'\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_0(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "*Using the RMS Titanic data, how accurate would a prediction be that none of the passengers survived?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 61.62%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:** 61.62% (Accuracy when we always predict `Survived=0`.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "Let's take a look at whether the feature **Sex** has any indication of survival rates among passengers using the `survival_stats` function. This function is defined in the `titanic_visualizations.py` Python script included with this project. The first two parameters passed to the function are the RMS Titanic data and passenger survival outcomes, respectively. The third parameter indicates which feature we want to plot survival statistics across. \n", "Run the code cell below to plot the survival outcomes of passengers based on their sex." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nzCCXJKnCDHJJUqd98pOf5Lzzzmtzeq9evfjHP/7RhSXqWgsXLqR///70hCuoDHJJ6iG2HzqUiGjY\nz/ZDh9ZXju23Z/PNN2fAgAEMGjSIvfbai8svv3yt0Lrssss444wz2lxHxDpXSW0QO+ywA7/+9a8b\nsu7OGDFiBE8//XTD9rMzDHJJ6iHmL11KQsN+5i9dWlc5IoLrrruOp556ivnz53PaaacxefJkPvrR\nj9a9Lz2hpvpKrF69uruLUDeDXJK0jqYg7tevH4cffjg/+clPmDp1KrNnzwbghBNO4Kyzzmqe/2tf\n+xrbbLMNw4cP5/vf/367NdX99tuPs846i7322ov+/ftzyCGH8MQTTzRPnzFjBm95y1sYNGgQ+++/\nP3PmzAHguOOOY8GCBYwdO5b+/fszZcqUdda9fPlyxo4dy8CBA9lqq63YZ599mqe1bO6v3YfbbruN\nESNGcOGFFzJs2DBOPPFERo0axfXXX988/+rVq9l666259957mT9/Pr169WLNmjVcffXVjBkzZq1y\nXHzxxYwbNw6AF154gVNOOYWRI0cybNgwTjrpJJ5//vkO/gL1M8glSR0aM2YMw4cP54477lhn2g03\n3MBFF13EzTffzLx587jppps6XN/06dOZOnUqy5Yt4/nnn28O5blz5zJx4kS++c1vsmzZMg499FAO\nP/xwXnrpJX74wx+y3Xbbce211/L0009zyimnrLPer3/964wYMYLly5fz2GOP8dWvfrV5WkfN4EuW\nLOHJJ59kwYIFXHHFFUycOJFp06attZ+DBw9mt912W2t9Y8eOZe7cufz9739fa/+OPfZYAL74xS/y\n0EMP8Ze//IWHHnqIRYsWcc4553T4HtXLIJck1WWbbbZZq+bc5JprruGEE07gzW9+M5tttlldjz09\n4YQT2HHHHdlkk00YP3489957LwBXX301hx9+OPvvvz+9e/fmlFNO4dlnn+W3v/1t87LtNdv37duX\nxYsX8/DDD9O7d2/23HPPupYD6N27N1/5ylfo27cvm2yyCRMmTGDGjBk899xzQBHOEyZMWGe5zTbb\njCOPPJLp06cDMG/ePObMmcMRRxwBwLe//W0uvvhiBgwYwBZbbMFpp53WPO+GYJBLkuqyaNEiBg0a\ntM74Rx99lBEjRjQPjxw5ssPQHFrT8W7zzTfnmWeeaV7XyJEjm6dFBCNGjGDRokV1lfELX/gCO+64\nIwcddBBveMMbmDx5cl3LAQwePJi+ffs2D++4446MGjWKmTNn8uyzzzJjxgwmTpzY6rITJkxoDudp\n06Yxbtw4NtlkE5YtW8aqVat4xzvewaBBgxg0aBCHHnooy5cvr7tcHfEWrZKkDt199908+uij7L33\n3utMGzZsGAsXLmwenj9//nr35t5mm224//771xq3cOFChg8fDnTcPL7FFlswZcoUpkyZwuzZs9lv\nv/3Yfffd2W+//dh8881ZtWpV87xLlixZ6wtIa+s+5phjmDZtGqtXr2aXXXbh9a9/favbPfDAA1m2\nbBn33XcfV111FZdccgkAr3vd69h888154IEHGDZsWH1vQidZI5cktWnlypVce+21TJgwgQ9/+MOM\nGjVqnXnGjx/PD37wAx588EFWrVr1is7/jh8/nuuuu45bbrmFl156iSlTprDpppuyxx57AEVNvr3r\n06+77rrmc9X9+vWjT58+9OpVRN1uu+3GtGnTWLNmDTfccAO33XZbh+U55phjmDVrFpdddtk6tfHa\nVoc+ffpw1FFHceqpp7JixQoOPPBAoPhy8LGPfYyTTz6ZZcuWAUXLxqxZszrxrrTPIJckrWPs2LEM\nGDCA7bbbjvPPP59TTjmF733ve83Ta2uvhxxyCCeffDL7778/O+20E+9973vbXXd7teqddtqJH//4\nx3z6059m8ODBXHfddcycOZM+fYoG5NNOO41zzz2XQYMGcdFFF62z/Lx58zjggAPo168fe+65J5/6\n1Keae65/4xvfYMaMGQwcOJDp06fz7//+7x2+D0OHDmWPPfbgrrvu4uijj253PyZMmMDNN9/M+PHj\nm788AEyePJk3vOENvOtd72LLLbfkoIMOYu7cuR1uu16VfR55d5dBLxs5ZAiPLFnS3cWQKmX06NHr\nPP1s+6FD677We314rFZDa58NeBU+j9wk7zmigf94pI2JIav1YdO6JEkVZpBLklRhBrkkSRVmkEuS\nVGEGuSRJFWaQS5JUYQa5JEkVZpBLkrrNJz/5Sc4777wNvt6vfOUrfPjDH97g6+2JDHJJ6iGGDh9K\nRDTsZ+jwoR0XonTnnXey5557suWWW/K6172Ovffemz/+8Y8bfJ8vu+wyzjjjjA2+Xuj4ASuvFpW9\ns5skvdosXbQUJjVw/ZPquwvjypUrGTt2LJdffjlHHXUUL7zwAnfccQebbLJJp7eZmRtNoHYXa+SS\npLXMnTuXiGD8+PFEBJtssgkHHHAAb3nLW9Zpsp4/fz69evVizZo1AOy3336ceeaZ7LXXXmyxxRZ8\n7WtfY8yYMWut/+KLL2bcuHEAnHDCCZx11lkAjBo1iuuvv755vtWrV7P11ltz7733AnDXXXex5557\nMnDgQN7+9rev9fSyRx55hH333ZcBAwZw8MEH8/jjjzfmzemBDHJJ0lp22mknevfuzUc+8hFuuOEG\nnnzyybWmt6xhtxz+8Y9/zHe+8x1WrlzJJz7xCebOndv8aFGA6dOnc+yxx66z3QkTJjBt2rTm4Rtu\nuIHBgwez2267sWjRIg4//HDOOussVqxYwZQpU/jABz7A8uXLAZg4cSJjxozh8ccf58wzz2Tq1Kmv\n+H2oCoNckrSWfv36ceedd9KrVy8+/vGPM3jwYMaNG8djjz1W1/If+chHeNOb3kSvXr3o378/Rx55\nJNOnTweKx4zOmTOHsWPHrrPcxIkTmTFjBs899xxQBP6ECRMAuPLKKznssMM4+OCDAXjve9/L6NGj\nuf7661m4cCH33HMP55xzDn379mXvvfdudf2vVga5JGkdO++8M9/73vdYsGABDzzwAI8++ignn3xy\nXcuOGDFireEJEyY0B/m0adMYN24cm2666TrL7bjjjowaNYqZM2fy7LPPMmPGjOaa+/z587n66qsZ\nNGgQgwYNYuDAgfzmN79h8eLFPProowwcOJDNNtuseV0jR45c312vHDu7SZLatdNOO3H88cdzxRVX\n8I53vINVq1Y1T1u8ePE687dsaj/wwANZtmwZ9913H1dddRWXXHJJm9s65phjmDZtGqtXr2aXXXZh\nhx12AIovB8cddxyXX375OsssWLCAFStW8OyzzzaH+YIFC+jVa+Ooq24ceylJqtucOXO46KKLWLRo\nEQALFy5k+vTp7LHHHrztbW/j9ttvZ+HChTz11FNccMEFHa6vT58+HHXUUZx66qmsWLGCAw88sM15\njznmGGbNmsVll13GxIkTm8d/6EMfYubMmcyaNYs1a9bw3HPPcdttt/Hoo4+y3XbbMXr0aM4++2xe\nfPFF7rzzTmbOnPnK34iKMMglSWvp168fv//973nnO99Jv379ePe7382uu+7KlClTOOCAAzj66KPZ\nddddGTNmzDrnotu61GzChAncfPPNjB8/fq2acsv5hw4dyh577MFdd93F0Ucf3Tx++PDh/OIXv+Cr\nX/0qgwcPZuTIkUyZMqW5t/yVV17JXXfdxVZbbcW5557L8ccfv6Hejh4vMrO7y9BpEVHBUr96BcW1\nopLqN3r0aO655561xg0dPrS4lrxBhmw7hCX/XNKw9WvDaO2zAcWXnsxc55uS58glqYcwZLU+bFqX\nJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzMvPJKkbDBs2jNGjR3d3MdQDDRs2rFPze0MY\nvWLeEEaSGq+tG8LYtC5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhB\nLklShRnkkiRVmEEuSVKFGeSSJFVYlwR5RPSKiD9FxIxyeGBEzIqIORFxY0QMqJn39IiYFxEPRsRB\nXVE+SZKqqqtq5J8DZtcMnwbclJk7A78GTgeIiFHAeODNwKHApRGxzpNeJElSoeFBHhHDgfcB36kZ\nfSQwtXw9FRhXvj4CuCozX8rMR4B5wO6NLqMkSVXVFTXyi4FTgdoHVg/JzKUAmbkE2Locvy2wsGa+\nReU4SZLUioYGeUQcBizNzHuB9prIs51pkiSpDX0avP49gSMi4n3AZkC/iPgRsCQihmTm0ogYCjxW\nzr8IGFGz/PBy3Dom1bzet/yRJOnV4tZbb+XWW2/tcL7I7JrKcETsA/zvzDwiIi4Elmfm5Ij4IjAw\nM08rO7tdCbyTokn9V8Abs0UhI6KLSq16BNBVnyNJ2lhFBJm5Tut2o2vkbbkAuDoiTgTmU/RUJzNn\nR8TVFD3cXwROahnikiTpZV1WI9+QrJH3LNbIJanx2qqRe2c3SZIqzCCXJKnCDHJJkirMIJckqcIM\nckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJ\nkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIq\nzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswg\nlySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKqzDII+ILSKiV/l6p4g4IiL6Nr5okiSpI/XU\nyG8HNo2IbYFZwIeBHzSyUJIkqT71BHlk5irg/cClmXkUsEtjiyVJkupRV5BHxB7AscB15bjejSuS\n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\nL2A08FzDSiRJkupWT6/12ueSv0TxULUjG1IaSZLUKfWcI98gzyWXJEkbXptBHhFntbNcZua5DSiP\nJEnqhPZq5P9qZdwWwEeBrQCDXJKkbtZmkGfm15teR0Q/4HPACcBVwNfbWk6SJHWdds+RR8Qg4PPA\nscBU4N8yc0VXFEySJHWsvXPkXwPeD1wBvDUzn+myUkmSpLpEZrY+IWINxdPOXuLlW7QCBEVnt267\nRWtEtFFqdYfyA9HdxZDUABEBk7q7FAJgEmRmtBzd3jnyTt31TZIkdT3DWpKkCjPIJUmqMINckqQK\nM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPI\nJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJ\nqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaow\ng1ySpAozyCVJqjCDXJKkCuvT3QXQq0BviIjuLoWAIdsOYck/l3R3MSR1oYYGeUR8FzgcWJqZu5bj\nBgI/AUYCjwDjM/OpctrpwInAS8DnMnNWI8unDWQ1MKm7CyGApZOWdncRJHWxRjetfx84uMW404Cb\nMnNn4NfA6QARMQoYD7wZOBS4NKzmSZLUroYGeWbeCaxoMfpIYGr5eiowrnx9BHBVZr6UmY8A84Dd\nG1k+SZKqrjs6u22dmUsBMnMJsHU5fltgYc18i8pxkiSpDT2h13p2dwEkSaqq7ui1vjQihmTm0ogY\nCjxWjl8EjKiZb3g5rlWTal7vW/5IkvSq8TBFl/AOdEWQR/nTZAbwEWAycDzwi5rxV0bExRRN6m8A\n/tDWSic1oKCSJPUYO5Q/TW5rfbZGX342jaKyvFVELADOBi4AromIE4H5FD3VyczZEXE1MBt4ETgp\nM212lySpHQ0N8syc2MakA9qY/3zg/MaVSJKkV5ee0NlNkiStJ4NckqQKM8glSaowg1ySpAozyCVJ\nqjCDXJKkCjPIJUmqMINckqQKM8glSaqw7nhoiiS1afuhQ5m/dGl3F0OqDINcUo8yf+lSn23cg0TH\ns6ib2bQuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIk\nVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWY\nQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEu\nSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklS\nhRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShfXIII+IQyLibxExNyK+2N3lkSSpp+px\nQR4RvYBvAQcDuwATIuJN3VsqSZJ6ph4X5MDuwLzMnJ+ZLwJXAUd2c5kkSeqRemKQbwssrBn+ZzlO\nkiS10BODXJIk1alPdxegFYuA7WqGh5fj1hJdVhzVZVJ3F0BNIqp/dFR/D15lJnV3AdSeyMzuLsNa\nIqI3MAd4L7AY+AMwITMf7NaCSZLUA/W4Gnlmro6ITwOzKJr+v2uIS5LUuh5XI5ckSfWzs5s2qIjY\nJyJmdnc5JBUi4rMRMTsiftSg9Z8dEZ9vxLpVnx7XtK5XBZt5pJ7jk8B7M/PR7i6IGsMaudYRESMj\n4sGI+H5EzImIH0fEeyPiznJ4dESMiYjfRsQfy/FvbGU9m0fEdyPirnK+sd2xP9LGKiIuA14P/DIi\nvtTa8RgRx0fEzyJiVkT8IyI+FRH/GRF/Ko/xLcv5/ldE/CEi/hwR10TEpq1s7/UR8cuIuDsibouI\nnbp2jzdOBrnasiPwtczcGXgTxZUDewGnAmcADwJ7ZeY7gLOB81tZxxnAzZn5LmB/YEpEbNYlpZdE\nZn6S4vLd/YAtaPt43AUYR3FnzfOAZzLz34C7gOPKef47M3fPzLcDfwM+2somrwA+nZljKP5XXNaY\nPVMtm9bVloczc3b5+gHg5vL1X4GRwJbAD8uaeNL6Z+kgYGxEnFoOv4biHgFzGlZqSW1p63gEuCUz\nVwGrIuJJ4Npy/F+Bt5avd42IcymO/S2AG2tXHhFbAO8GromXb2bQtyF7orUY5GrL8zWv19QMr6E4\nOM8Ffp2Z74+IkcAtrawjgA9k5ryGllRSPVo9HiPiXax9vCdrH+9NOfF94IjMvD8ijgf2abH+XsCK\nsiavLmTTutrS0c21+vPyHfdOaGOeG4HPNq8wYrcNUC5JndN0LL/S4/G1wJKI6Asc23JiZq4EHo6I\nD9ZsY9fOF1edZZCrLdnG66bhC4ELIuKPtP05OhfoGxF/iYi/Auds+GJK6kDT8Vt7PN5P28djW1ed\nnEVxp807KPrItOZDwEcj4t5yG0esZ5nVCd4QRpKkCrNGLklShRnkkiRVmEEuSVKFGeSSJFWYQS5J\nUoUZ5JIkVZhBLmktEXFGRNwfEfeVD84Y091lktQ2b9EqqVl5u873Abtl5ksRMYjintySeihr5JJq\nDQMez8yXADLzicxcEhH/FhG3lo+n/GVEDImI3uVjLd8DEBHnlw/VkNSFvLObpGblE6zuBDajeOLd\nT4DfArdRPDBjeUSMBw7OzI9GxCjgGop7eF8IvLPpS4CkrmHTuqRmmfmviPg3YG+KZ1ZfRfF86rcA\nvyofT9kLWFzOPzsifkzx2EtDXOoGBrmktWTRTHc7cHv5sJtPAfdn5p5tLPJWYAUwpIuKKKmG58gl\nNYuInSLiDTWjdgNmA4PLjnBERJ+ySZ2IeD8wEHgP8K2I6N/VZZY2dp4jl9SsbFb/v8AA4CXgIeDj\nwPCa8b2BS4CfA78B9s/MRyPi08A7MrOt59NLagCDXJKkCrNpXZKkCjPIJUmqMINckqQKM8glSaow\ng1ySpAozyCVJqjCDXJKkCjPIJUmqsP8PJwzygMM5sQ0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Sex')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Examining the survival statistics, a large majority of males did not survive the ship sinking. However, a majority of females *did* survive the ship sinking. Let's build on our previous prediction: If a passenger was female, then we will predict that they survived. Otherwise, we will predict the passenger did not survive. \n", "Fill in the missing code below so that the function will make this prediction. \n", "**Hint:** You can access the values of each feature for a passenger like a dictionary. For example, `passenger['Sex']` is the sex of the passenger." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_1(data):\n", " \"\"\" Model with one feature: \n", " - Predict a passenger survived if they are female. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['Sex'] == 'female':\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_1(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "*How accurate would a prediction be that all female passengers survived and the remaining passengers did not survive?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 78.68%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: 78.68% (Accuracy when we predict `Survived=1` if and only if passenger is female.) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "Using just the **Sex** feature for each passenger, we are able to increase the accuracy of our predictions by a significant margin. Now, let's consider using an additional feature to see if we can further improve our predictions. For example, consider all of the male passengers aboard the RMS Titanic: Can we find a subset of those passengers that had a higher rate of survival? Let's start by looking at the **Age** of each male, by again using the `survival_stats` function. This time, we'll use a fourth parameter to filter out the data so that only passengers with the **Sex** 'male' will be included. \n", "Run the code cell below to plot the survival outcomes of male passengers based on their age." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZ88GYMyYMVx66aXV619//fX07NmTXr16cdddd9Xbkh88eDCXXnophxxyCB07dmTo0KG8++671cun\nTp3K3nvvTZcuXRgyZAhz5swB4NRTT2XBggUMGzaMjh07MmHChE3KXrlyJcOGDaNz58507dqVww47\nrHpZzUMIuXWYOXMmvXv35rrrrqNHjx6cccYZDBgwgIceeqh6/crKSnbccUdefPFF5s+fT6tWrdiw\nYQP33nsvgwYN2iiOm266iREjRgDw6aefct5551FWVkaPHj0466yz+OSTTxp4BRqHk7yZmTVo0KBB\n9OrViyeeeGKTZdOnT+fGG2/k0Ucf5fXXX+eRRx5psLwpU6YwadIkVqxYwSeffFKdsOfOncvo0aP5\n2c9+xooVKzjmmGM47rjjWL9+Pb/61a/o06cPDzzwAB988AHnnXfeJuXecMMN9O7dm5UrV7J8+XKu\nuuqq6mUNHUJYunQp7733HgsWLOCOO+5g9OjRTJ48eaN6duvWjf3222+j8oYNG8bcuXN58803N6rf\nySefDMAFF1zAG2+8wcsvv8wbb7zBokWLuPzyyxt8jhqDk7yZmeWlZ8+eG7W4q9x3332MGTOGPffc\nk+22245x48Y1WNaYMWPYddddadeuHSNHjuTFF18E4N577+W4445jyJAhtG7dmvPOO4+1a9fy17/+\ntXrb+g4FtG3bliVLlvD222/TunVrDj744Ly2A2jdujXjx4+nbdu2tGvXjlGjRjF16lQ+/vhjIEnc\no0aN2mS77bbbjuHDhzNlyhQAXn/9debMmcPxxx8PwM9//nNuuukmOnXqRPv27bnwwgur1y02J3kz\nM8vLokWL6NKlyybzFy9eTO/evauny8rKGkyo3bt3r368/fbb8+GHH1aXVZYzLkESvXv3ZtGiRXnF\n+JOf/IRdd92Vo446it12241rr702r+0AunXrRtu2baund911VwYMGMC0adNYu3YtU6dOZfTo2m+u\nOmrUqOrEPXnyZEaMGEG7du1YsWIFa9asYf/996dLly506dKFY445hpUrV+YdVyE88M7MzBr07LPP\nsnjxYg499NBNlvXo0YOFCxdWT8+fP3+LR9f37NmTV155ZaN5CxcupFevXkDDXe7t27dnwoQJTJgw\ngdmzZzN48GAOOOAABg8ezPbbb8+aNWuq1126dOlGP05qK/ukk05i8uTJVFZWstdee7HLLrtssg7A\nkUceyYoVK3jppZe45557uPnmmwH4/Oc/z/bbb8+sWbPo0aNHfk9CI3JL3szM6rR69WoeeOABRo0a\nxSmnnMKAAQM2WWfkyJH87//+L6+++ipr1qwp6HjzyJEjefDBB3nsscdYv349EyZMYNttt+Wggw4C\nkh6A+s6/f/DBB6uPjXfo0IE2bdrQqlWS6vbbbz8mT57Mhg0bmD59OjNnzmwwnpNOOokZM2Zw2223\nbdKKz+2taNOmDSeccALnn38+q1at4sgjjwSSHw7f+c53OPfcc1mxYgWQ9IjMmDFjM56VLeckb2Zm\nmxg2bBidOnWiT58+XH311Zx33nkbnT6X2+odOnQo5557LkOGDKF///4cfvjh9ZZdX2u8f//+/OY3\nv+H73/8+3bp148EHH2TatGm0aZN0PF944YVcccUVdOnShRtvvHGT7V9//XWOOOIIOnTowMEHH8zZ\nZ59dPcL+lltuYerUqXTu3JkpU6bw7//+7w0+D927d+eggw7i6aef5sQTT6y3HqNGjeLRRx9l5MiR\n1T8sAK699lp22203DjzwQHbYYQeOOuoo5s6d2+C+G4PvJ29mVgIDBw7c5C50zeViOFZatb03wPeT\nNzNr0ZyArbG5u97MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTN\nzKxkvve973HllVc2ernjx4/nlFNOafRyWxpfDMfMrJk48z/PZN7ieUUrv2/Pvtx+U34X3HnyySe5\n4IILmDVrFm3atGHPPffk5ptvZv/992/UmG677bZGLS/Xlt4kJ0uc5M3Mmol5i+dR9q2yhlfc0vJ/\nMy+v9VavXs2wYcOYOHEiJ5xwAp9++ilPPPEE7dq12+x9RoSTbQm5u97MzDYyd+5cJDFy5Egk0a5d\nO4444gj23nvvTbrB58+fT6tWrdiwYQMAgwcP5pJLLuGQQw6hffv2XH/99QwaNGij8m+66SZGjBgB\nwJgxY7j00ksBGDBgAA899FD1epWVley44468+OKLADz99NMcfPDBdO7cmS9+8Ysb3UVu3rx5lJeX\n06lTJ44++mjeeeed4jw5LYyTvJmZbaR///60bt2a008/nenTp/Pee+9ttLxmy7zm9G9+8xt+8Ytf\nsHr1as4880zmzp1bfftXgClTpnDyySdvst9Ro0YxefLk6unp06fTrVs39ttvPxYtWsRxxx3HpZde\nyqpVq5gwYQLf+MY3WLlyJQCjR49m0KBBvPPOO1xyySVMmjSp4OchC5zkzcxsIx06dODJJ5+kVatW\nfPe736Vbt26MGDGC5cuX57X96aefzh577EGrVq3o2LEjw4cPZ8qUKUByK9g5c+YwbNiwTbYbPXo0\nU6dO5eOPPwaSHwOjRo0C4O677+bYY4/l6KOPBuDwww9n4MCBPPTQQyxcuJDnnnuOyy+/nLZt23Lo\noYfWWv7WyEnezMw2sfvuu/PLX/6SBQsWMGvWLBYvXsy5556b17a9e/feaHrUqFHVSX7y5MmMGDGC\nbbfddpPtdt11VwYMGMC0adNYu3YtU6dOrW7xz58/n3vvvZcuXbrQpUsXOnfuzFNPPcWSJUtYvHgx\nnTt3Zrvttqsuq6yseGMbWhIPvDMzs3r179+f0047jTvuuIP999+fNWvWVC9bsmTJJuvX7L4/8sgj\nWbFiBS+99BL33HMPN998c537Oumkk5g8eTKVlZXstdde9OvXD0h+OJx66qlMnDhxk20WLFjAqlWr\nWLt2bXWiX7BgAa1auR3rZ8DMzDYyZ84cbrzxRhYtWgTAwoULmTJlCgcddBD77rsvjz/+OAsXLuT9\n99/nmmuuabC8Nm3acMIJJ3D++eezatUqjjzyyDrXPemkk5gxYwa33XYbo0ePrp7/rW99i2nTpjFj\nxgw2bNjAxx9/zMyZM1m8eDF9+vRh4MCBXHbZZaxbt44nn3ySadOmFf5EZICTvJmZbaRDhw4888wz\nfPnLX6ZDhw585StfYZ999mHChAkcccQRnHjiieyzzz4MGjRok2PfdZ0uN2rUKB599FFGjhy5UQu7\n5vrdu3fnoIMO4umnn+bEE0+snt+rVy/uv/9+rrrqKrp160ZZWRkTJkyoHtV/99138/TTT9O1a1eu\nuOIKTjvttMZ6Olo0RUSpY9hskqIlxm1mVmXgwIE899xzG81rThfDsdKp7b0ByQ+iiNisiw74mLw1\nuYvPPJOV8+aVOoyi6dq3L1fd7i9S23xOwNbYnOStya2cN4+JGR75OjbDP2DMrGUp6jF5SXdKWibp\n5Zx510l6VdKLkn4vqWPOsoskvZ4uP6qYsZmZmWVdsQfe3QUcXWPeDGCviNgPeB24CEDSAGAksCdw\nDHCrfMFjMzOzLVbUJB8RTwKrasx7JCI2pJNPA73Sx8cD90TE+oiYR/ID4IBixmdmZpZlpT6F7gyg\n6m4EOwMLc5YtSueZmZnZFihZkpf0X8C6iJhSqhjMzMyyrCSj6yWdDnwNGJIzexGQe8HjXum8Wo0b\nN676cXl5OeXl5Y0ZoplZUfXo0YOBAweWOgxrhnr06AFARUUFFRUVBZVV9IvhSOoLTIuIL6TTQ4Eb\ngK9GxMqc9QYAdwNfJumm/zPwb7Vd9cYXw2nZxg4dmu1T6ObPZ+L06aUOw8wyptldDEfSZKAc6Cpp\nAXAZcDGwDfDndPD80xFxVkTMlnQvMBtYB5zlTG5mZrbliprkI2J0LbPvqmf9q4GrixeRmZnZ1qPU\no+vNzMysSJzkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szM\nLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTN\nzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ\n3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyj\nnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOKmuQl3SlpmaSXc+Z1ljRD0hxJD0vqlLPsIkmvS3pV\n0lHFjM3MzCzrit2Svws4usa8C4FHImJ34C/ARQCSBgAjgT2BY4BbJanI8ZmZmWVWUZN8RDwJrKox\nezgwKX08CRiRPj4euCci1kfEPOB14IBixmdmZpZlpTgmv2NELAOIiKXAjun8nYGFOestSueZmZnZ\nFmgOA++i1AGYmZllUZsS7HOZpJ0iYpmk7sDydP4ioHfOer3SebUaN25c9ePy8nLKy8sbP1IzM7MS\nqaiooKKioqAyFFHchrSkvsC0iPhCOn0t8G5EXCvpAqBzRFyYDry7G/gySTf9n4F/i1oClFTbbGsh\nxg4dysSyslKHUTRj589n4vTppQ7DzDJGEhGxWQPSi9qSlzQZKAe6SloAXAZcA9wn6QxgPsmIeiJi\ntqR7gdnAOuAsZ3IzM7MtV9QkHxGj61h0RB3rXw1cXbyIzMzMth7NYeCdmZmZFYGTvJmZWUY5yZuZ\nmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8\n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\nM1Znko+IG6oeS+oAnAOMAe4BbqhrOzMzM2se6j0mL6kL8CPgZGAS8KWIWNUUgZmZmVlh6jsmfz3w\ndeAO4AsR8WGTRWVmZmYFq+9iOD8GegKXAIslfZD+rZb0QdOEZ2ZmZluqvmPym3U1PDMzM2tenMjN\nzMwyyknezMwso/K5rK2ZWbVXZs1i7NChpQ6jKLr27ctVt99e6jDMGo2TvJltFq1dm9l7K4zN8I2h\nbOvk7nozM7OMcpI3MzPLKCd5MzOzjHKSNzMzyygneTMzs4wqaZKX1ErS85KmptOdJc2QNEfSw5I6\nlTI+MzOzlqzULflzgNk50xcCj0TE7sBfgItKEpWZmVkGlCzJS+oFfA34Rc7s4SS3tCX9P6Kp4zIz\nM8uKUrbkbwLOByJn3k4RsQwgIpYCO5YiMDMzsywoSZKXdCywLCJeBFTPqlHPMjMzM6tHqS5rezBw\nvKSvAdsBHST9GlgqaaeIWCapO7C8rgLGjRtX/bi8vJzy8vLiRmxmZtaEKioqqKioKKiMkiT5iLgY\nuBhA0mHAjyPiFEnXAacD1wKnAffXVUZukjczM8uamg3Y8ePHb3YZpR5dX9M1wJGS5gCHp9NmZma2\nBUp+F7qImAnMTB+/CxxR2ojMzMyyobm15M3MzKyROMmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5\nyZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZll\nlJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZ\nWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWVUm1IHYGbWXLwy\naxZjhw4tdRhF07VvX666/fZSh2FNyEnezCyltWuZWFZW6jCKZuy8eaUOwZqYk7w1uTcqP2ToUw+V\nOoyieaPyw1KHYGYGOMlbCXzSZgNlX/tcqcMommfuWlbqEMzMAA+8MzMzyywneTMzs4xykjczM8so\nH5M3a2RrKtd7YKGZNQtO8maNbENrPLDQzJqFknTXS+ol6S+SZkn6p6QfpvM7S5ohaY6khyV1KkV8\nZmZmWVCqY/LrgR9FxF7AQcDZkvYALgQeiYjdgb8AF5UoPjMzsxavJEk+IpZGxIvp4w+BV4FewHBg\n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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'male'\"])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Examining the survival statistics, the majority of males younger than 10 survived the ship sinking, whereas most males age 10 or older *did not survive* the ship sinking. Let's continue to build on our previous prediction: If a passenger was female, then we will predict they survive. If a passenger was male and younger than 10, then we will also predict they survive. Otherwise, we will predict they do not survive. \n", "Fill in the missing code below so that the function will make this prediction. \n", "**Hint:** You can start your implementation of this function using the prediction code you wrote earlier from `predictions_1`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_2(data):\n", " \"\"\" Model with two features: \n", " - Predict a passenger survived if they are female.\n", " - Predict a passenger survived if they are male and younger than 10. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['Sex'] == 'female' or passenger['Age'] < 10:\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_2(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "*How accurate would a prediction be that all female passengers and all male passengers younger than 10 survived?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 79.35%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: 79.35% (Accuracy when we predict a passenger survived if and only if they are female or if they are male and younger than 10.)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "***\n", "Adding the feature **Age** as a condition in conjunction with **Sex** improves the accuracy by a small margin more than with simply using the feature **Sex** alone. Now it's your turn: Find a series of features and conditions to split the data on to obtain an outcome prediction accuracy of at least 80%. This may require multiple features and multiple levels of conditional statements to succeed. You can use the same feature multiple times with different conditions. \n", "**Pclass**, **Sex**, **Age**, **SibSp**, and **Parch** are some suggested features to try.\n", "\n", "Use the `survival_stats` function below to to examine various survival statistics. \n", "**Hint:** To use mulitple filter conditions, put each condition in the list passed as the last argument. Example: `[\"Sex == 'male'\", \"Age < 18\"]`" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\nIJOp1pRd4pIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoAT+uSpAYaPnw4Y8aMaXYYWscM\nHz58tbcxYUtSA61Pl85UY9klLklSBTQ0YUfE9yNiUUTcWzNvcETMiIiHIuKXEbFpI2OQJKk3aHQL\n+zLgoDbzTgN+lZlvAX4NfKHBMUiSVHkNTdiZeRuwpM3sI4DLy8eXA0c2MgZJknqDZhzD3jIzFwFk\n5kJgyybEIElSpawLg868p6MkSV1oxmldiyJiq8xcFBHDgCc7W3nSpEmtj8eOHcvYsWMbG50kST1k\n5syZzJw5s651I7OxDdyI2AaYnplvK6fPB57JzPMj4lRgcGae1sG22ej4qioiYFI3FjgJfK4lqbki\ngsyM9pY1+rSuKcBvge0jYk5ETAS+ChwQEQ8B+5XTkiSpEw3tEs/MCR0s2r+R9UqS1NusC4POJElS\nF0zYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQK\nMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirA\nhC1JUgWYsCVJqgATtiRJFWDClnqBbYYNIyK67W+bYcOavUuS2ujX7AAkrb3ZixaR3VheLFrUjaVJ\n6g62sCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJ\nFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRV\ngAlbkqQKaFrCjoh/jYj7IuLeiLgyIjZoViySJK3rmpKwI2Jr4NPAOzNzZ6AfcGwzYpEkqQr6NbHu\nvsAmEbECGADMb2IskiSt05rSws7M+cA3gDnAPODZzPxVM2KRJKkKmtUlvhlwBDAa2Bp4Q0RMaEYs\nkiRVQZdd4hGxCfBiZq6IiO2BHYBfZOara1Hv/sBjmflMWcdPgD2AKW1XnDRpUuvjsWPHMnbs2LWo\nVpKkdcfMmTOZOXNmXetGZna+QsQfgL2BwcBvgDuBVzLzuDUNMCJ2A74P7Aq8DFwG3JmZ326zXnYV\n3/oqImBSNxY4CXyuqysi6M5XL/D9IDVDRJCZ0d6yerrEIzOXAf8IfCczjwJ2WpuAMvP3wLXAn4B7\nKL4fLl2bMiVJ6s3qGSUeEbE7cBzw4XJe37WtODPPBs5e23IkSVof1NPC/izwBeCnmXl/RLwJuKmx\nYUmSpFqdtrAjoi9weGYe3jIvMx8DPtPowCRJ0us6bWFn5nJgrx6KRZIkdaCeY9h/iohpwDXA31pm\nZuZPGhaVJElaST0JeyPgaWDfmnkJmLAlSeohXSbszJzYE4FIkqSOdTlKPCK2j4gbI+K+cnrniDij\n8aFJkqQW9ZzW9V2K07peBcjMe/FWmJIk9ah6EvaA8spktV5rRDCSJKl99STspyJiO4qBZkTEPwML\nGhqVJElaST2jxD9FcZ3vHSJiHvA48IGGRiVJklZSzyjxx4D9y9ts9snMpY0PS5Ik1arnftifazMN\n8Bzwh8y8u0FxSZKkGvUcwx4DfBx4Y/n3MeBg4LsR8fkGxiZJkkr1HMMeAbwzM18AiIizgOuA9wJ/\nAL7WuPAkSRLU18LeEni5ZvpVYKvMfLHNfEmS1CD1tLCvBO6IiJ+V0+OAKeUgtAcaFpkkSWpVzyjx\ncyPiBmCPctbHM/Ou8vFxDYtMkiS1qqeFDfBHYF7L+hExKjPnNCwqSZK0knpO6/o0cBawCFgOBMVV\nz3ZubGiSJKlFPS3szwJvycynGx2MJElqXz2jxOdSXChFkiQ1ST0t7MeAmRFxHTWncWXmBQ2LSpIk\nraSehD2n/Nug/JMkST2sntO6zgaIiAGZuazxIUmSpLa6PIYdEbtHxAPAX8rpt0fEdxoemSRJalXP\noLOLgIOApwEy8x6K64hLkqQeUk/CJjPntpm1vAGxSJKkDtQz6GxuROwBZET0pzgv+8HGhiVJkmrV\n08L+OPApinthzwN2KaclSVIPqWeU+FN4kw9JkpqqnlHiX4uIQRHRPyJujIjFEfGBnghOkiQV6ukS\nPzAznwcOA54A3gyc0sigJEnSyupJ2C3d5ocC12Sm1xWXJKmH1TNK/OcR8RfgReATETEUeKmxYUmS\npFpdtrAz8zRgD2BMZr4K/A04otGBSZKk19Uz6Owo4NXMXB4RZwA/ArZueGSSJKlVPcewv5SZSyNi\nL2B/4PvAxY0NS5Ik1aonYbdchvRQ4NLMvA5vsylJUo+qJ2HPi4hLgGOA6yNiwzq3kyRJ3aSexHs0\n8EvgoMx8FhiC52FLktSj6hklviwzfwI8FxGjgP6U98aWJEk9o55R4odHxMPA48DN5f9fNDowSZL0\nunq6xM8F3gPMysxtKUaK397QqCRJ0krqSdivZubTQJ+I6JOZNwFjGhyXJEmqUc+lSZ+NiDcAtwBX\nRsSTFFdr3OJCAAAPxUlEQVQ7kyRJPaSeFvYRwDLgX4EbgEeBcY0MSpIkrazTFnZEHElxO80/Z+Yv\ngcu7q+KI2BT4HvBWYAXwocy8o7vKlySpN+kwYUfEd4CdgN8C50bEbpl5bjfW/U3g+sw8KiL6AQO6\nsWxJknqVzlrY7wXeXt70YwBwK8WI8bUWEYOAvTPzgwCZ+RrwfHeULUlSb9TZMexXMnM5FBdPAaIb\n690WeCoiLouIP0bEpRGxcTeWL0lSr9JZC3uHiLi3fBzAduV0AJmZO69lve8EPpWZd0XERcBpwFlt\nV5w0aVLr47FjxzJ27Ng1rnTYiGEsmrdojbdvz1Zv3IqFf13YrWVKktYPM2fOZObMmXWtG5nZ/oKI\n0Z1tmJmzVzuy18veCvhdZr6pnN4LODUzx7VZLzuKbw3rhUndVlxhEnRnjPXq9n2Z1Jz9UPeICLrz\n1St/lXdjiZLqERFkZrs92h22sNcmIXclMxdFxNyI2D4zZwH7AQ80qj5JkqqungunNMpnKC7E0h94\nDJjYxFgkSVqnNS1hZ+Y9wK7Nql+SpCrpcJR4RNxY/j+/58KRJEnt6ayFPTwi9gAOj4iraHNaV2b+\nsaGRSZKkVp0l7DOBLwEjgAvaLEtg30YFJUmSVtbZKPFrgWsj4kvdfElSSZK0mrocdJaZ50bE4RSX\nKgWYmZk/b2xYkiSpVpe314yIrwCfpThP+gHgsxHx5UYHJkmSXlfPaV2HArtk5gqAiLgc+BPwxUYG\nJkmSXtdlC7u0Wc3jTRsRiCRJ6lg9LeyvAH+KiJsoTu16L8WNOiRJUg+pZ9DZ1IiYyetXJTs1M709\nlSRJPaiuS5Nm5gJgWoNjkSRJHaj3GLYkSWoiE7YkSRXQacKOiL4R8ZeeCkaSJLWv04SdmcuBhyJi\nVA/FI0mS2lHPoLPBwP0R8Xvgby0zM/PwhkUlSZJWUk/C/lLDo5AkSZ2q5zzsmyNiNPB3mfmriBgA\n9G18aJIkqUU9N//4CHAtcEk5643A/zYyKEmStLJ6Tuv6FLAn8DxAZj4MbNnIoCRJ0srqSdgvZ+Yr\nLRMR0Q/IxoUkSZLaqidh3xwRXwQ2jogDgGuA6Y0NS5Ik1aonYZ8GLAb+DHwMuB44o5FBSZKkldUz\nSnxFRFwO3EHRFf5QZtolLklSD+oyYUfEocB/AY9S3A9724j4WGb+otHBSZKkQj0XTvkGsE9mPgIQ\nEdsB1wEmbEmSekg9x7CXtiTr0mPA0gbFI0mS2tFhCzsi/rF8eFdEXA9cTXEM+yjgzh6ITZIklTrr\nEh9X83gR8L7y8WJg44ZFJEmSVtFhws7MiT0ZiCRJ6lg9o8S3BT4NbFO7vrfXlCSp59QzSvx/ge9T\nXN1sRWPDkSRJ7aknYb+Umd9qeCSSJKlD9STsb0bEWcAM4OWWmZn5x4ZFJUmSVlJPwn4bcDywL693\niWc5LUmSekA9Cfso4E21t9iUJEk9q54rnd0HbNboQCRJUsfqaWFvBvwlIu5k5WPYntYlSVIPqSdh\nn9XwKCRJUqfquR/2zT0RiCRJ6lg9VzpbSjEqHGADoD/wt8wc1MjAJEnS6+ppYQ9seRwRARwBvKeR\nQUmSpJXVM0q8VRb+FzioQfFIkqR21NMl/o81k32AMcBLDYtIkiStop5R4rX3xX4NeIKiW1ySJPWQ\neo5he19sSZKarMOEHRFndrJdZua5a1t5RPQB7gL+6oVYJEnqWGeDzv7Wzh/Ah4FTu6n+zwIPdFNZ\nkiT1Wh22sDPzGy2PI2IgRXKdCFwFfKOj7eoVESOA9wPnAZ9b2/IkSerNOj2tKyKGRMS/A/dSJPd3\nZuapmflkN9R9IXAKr1+URZIkdaDDhB0RXwfuBJYCb8vMSZm5pDsqjYhDgUWZeTcQ5Z8kSepAZ6PE\n/43i7lxnAKcXFzkDiuSaa3lp0j2BwyPi/cDGwMCIuCIzT2i74qRJk1ofjx07lrFjx65FtZIkrTtm\nzpzJzJkz61o3MpvbIx0R7wP+rb1R4hGR3RlfRMCkbiuuMAma8Rx2+75Mas5+qHtERLceWyp/lXdj\niZLqERFkZru9zqt1aVJJktQc9VzprKHK23d6C09JkjphC1uSpAowYUuSVAEmbEmSKsCELUlSBZiw\nJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKW\nJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuS\npAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmS\nKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmq\nABO2JEkVYMKWJKkCmpKwI2JERPw6Iu6PiD9HxGeaEYckSVXRr0n1vgZ8LjPvjog3AH+IiBmZ+Zcm\nxSNJ0jqtKS3szFyYmXeXj18AHgTe2IxYJEmqgqYfw46IbYBdgDuaG4kkSeuupibssjv8WuCzZUtb\nkiS1o1nHsImIfhTJ+oeZ+bOO1ps0aVLr47FjxzJ27NiGx6b1wzbDhjF70aJuK2/0VlvxxMKF3Vbe\n+srXReuTmTNnMnPmzLrWjcxsbDQdVRxxBfBUZn6uk3WyO+OLCJjUbcUVJkEznsNu35dJzdmPZooI\nunOPg+Y9h+5LJ+Wx/r23VV0RQWZGe8uadVrXnsBxwL4R8aeI+GNEHNyMWCRJqoKmdIln5m+Avs2o\nW5KkKmr6KHFJktQ1E7YkSRVgwpYkqQJM2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoA\nE7YkSRVgwpYkqQJM2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoAE7YkSRVgwpYkqQJM\n2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLDVdMNGDCMiuu1v2Ihhzd6l6uuLr4m0junX7ACk\nRfMWwaRuLG/Sou4rbH21HF8TaR1jC1uSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKW\nJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuS\npAowYUuSVAEmbEmSKsCELUlSBZiwJUmqgKYl7Ig4OCL+EhGzIuLUZsUhSVIVNCVhR0Qf4D+Bg4Cd\ngPERsUMzYpGkqpg5c2azQ+gWvWU/oGf3pVkt7N2AhzNzdma+ClwFHNGkWCSpEnpLoust+wHrR8J+\nIzC3Zvqv5TxJktQOB51JklQBkZk9X2nEe4BJmXlwOX0akJl5fpv1ej44SZKaKDOjvfnNSth9gYeA\n/YAFwO+B8Zn5YI8HI0lSBfRrRqWZuTwi/gWYQdEt/32TtSRJHWtKC1uSJK2e9WbQWW+5UEtEfD8i\nFkXEvc2OZW1ExIiI+HVE3B8Rf46IzzQ7pjUVERtGxB0R8adyX85qdkxrIyL6RMQfI2Jas2NZWxHx\nRETcU742v292PGsqIjaNiGsi4sHyM/PuZse0JiJi+/K1+GP5/7mqfvYj4l8j4r6IuDciroyIDRpe\n5/rQwi4v1DKL4pj5fOBO4NjM/EtTA1sDEbEX8AJwRWbu3Ox41lREDAOGZebdEfEG4A/AEVV8TQAi\nYkBmLivHZ/wG+ExmVjJBRMS/Au8CBmXm4c2OZ21ExGPAuzJzSbNjWRsR8d/AzZl5WUT0AwZk5vNN\nDmutlN/LfwXenZlzu1p/XRIRWwO3ATtk5isR8WPgusy8opH1ri8t7F5zoZbMvA2o9JcPQGYuzMy7\ny8cvAA9S4XPxM3NZ+XBDirEhlfwlHBEjgPcD32t2LN0kqPj3XEQMAvbOzMsAMvO1qifr0v7Ao1VL\n1jX6Apu0/ICiaAw2VKXfyKvBC7WswyJiG2AX4I7mRrLmym7kPwELgf/LzDubHdMauhA4hYr+4GhH\nAv8XEXdGxEeaHcwa2hZ4KiIuK7uSL42IjZsdVDc4Bpja7CDWRGbOB74BzAHmAc9m5q8aXe/6krC1\njiq7w68FPlu2tCspM1dk5juAEcC7I2LHZse0uiLiUGBR2fMR5V/V7ZmZ76ToNfhUeUipavoB7wS+\nXe7LMuC05oa0diKiP3A4cE2zY1kTEbEZRS/taGBr4A0RMaHR9a4vCXseMKpmekQ5T01UdiVdC/ww\nM3/W7Hi6Q9lVeRNwcLNjWQN7AoeXx32nAvtEREOPyTVaZi4o/y8GfkpxeKxq/grMzcy7yulrKRJ4\nlR0C/KF8Xapof+CxzHwmM5cDPwH2aHSl60vCvhN4c0SMLkfyHQtUeQRsb2n9/AB4IDO/2exA1kZE\nbBERm5aPNwYOACo3eC4zv5iZozLzTRSfkV9n5gnNjmtNRcSAsgeHiNgEOBC4r7lRrb7MXATMjYjt\ny1n7AQ80MaTuMJ6KdoeX5gDviYiNIiIoXpOGX0ukKRdO6Wm96UItETEFGAtsHhFzgLNaBqNUSUTs\nCRwH/Lk89pvAFzPzhuZGtkaGA5eXo177AD/OzOubHJNgK+Cn5SWO+wFXZuaMJse0pj4DXFl2JT8G\nTGxyPGssIgZQtFA/2uxY1lRm/j4irgX+BLxa/r+00fWuF6d1SZJUdetLl7gkSZVmwpYkqQJM2JIk\nVYAJW5KkCjBhS5JUASZsSZIqwIQtrQci4vTyVoD3lNej3q28JvUO5fKlHWz37oi4vbwV4v0RcWbP\nRi6pxXpx4RRpfRYR76G4lvYumflaRAwBNsjM2gtXdHRBhsuBf87M+8orOr2lweFK6oAtbKn3Gw48\nlZmvAZTXP14YETdFRMs1qSMiLihb4f8XEZuX84cCi8rtsuV+5RFxVkRcERG/jYiHIuL/9fROSesb\nE7bU+80ARkXEXyLi2xHx3nbW2QT4fWa+FbgFOKucfxHwUET8T0R8NCI2rNnmbRSXyd0DODMihjVu\nFySZsKVeLjP/RnF3p48Ci4GrIuLENqstB64uH/8I2Kvc9lzgXRRJfwLwi5ptfpaZr2Tm08Cvqead\nsKTK8Bi2tB7I4qYBtwC3RMSfgRPp+Lg1tcsy83Hgkoj4HrA4Iga3XYfi7nHemEBqIFvYUi8XEdtH\nxJtrZu0CPNFmtb7AP5ePjwNuK7d9f8062wOvAc+W00dExAbl8e73UdzGVlKD2MKWer83AP9R3rP7\nNeARiu7xa2vWeQHYLSK+RDHI7Jhy/vERcQGwrNx2QmZmMWCce4GZwObAOZm5sAf2RVpveXtNSast\nIs4ClmbmBc2ORVpf2CUuSVIF2MKWJKkCbGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSp\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nPSNGjGDjxo3ly2fOnMlhhx1Gp06dGDZsGEuXLgXg3HPPZeXKlYwcOZL27dszderUPcresGEDI0eO\npGPHjnTu3JkTTzyxfFnF7v7MOsyfP5+ePXty66230q1bNy644AL69+/PnDlzytcvKSlh//33Z9Gi\nRaxYsYIWLVpQWlrK448/zqBBg3aL484772TMmDEAfPnll1x++eXk5ubSrVs3fvCDH/DFF1/U8A7U\nnxK5iIiUGzRoED169OCll17aY9ncuXO54447eP7553n//fd57rnnaixvxowZTJ8+nXXr1vHFF1+U\nJ+Vly5YxceJEfv3rX7Nu3TpOO+00zjzzTHbt2sXDDz9Mr169eOaZZ/jss8+4/PLL9yj39ttvp2fP\nnmzYsIG1a9dy0003lS+rqbv/k08+4dNPP2XlypU88MADTJw4kYKCgt3q2aVLFwYMGLBbeSNHjmTZ\nsmV8+OGHu9Xv7LPPBuDKK6/kgw8+4O233+aDDz5g1apVXH/99TW+RvWlRC4iIrvp3r37bi3nMk88\n8QSTJk3ikEMOYZ999mHy5Mk1ljVp0iT69u1L69atGTduHIsWLQLg8ccf58wzz2TYsGHk5ORw+eWX\ns337dl555ZXybavrtm/VqhWrV6/m448/JicnhyFDhkTaDiAnJ4cpU6bQqlUrWrduTX5+PjNnzmTH\njh1AkJzz8/P32G6fffZh9OjRzJgxA4D333+fpUuXMmrUKAB++9vfcuedd9KhQwfatm3LVVddVb5u\nnJTIRURkN6tWraJTp057zC8uLqZnz57l07m5uTUmza5du5Y/b9OmDVu3bi0vKzdjrICZ0bNnT1at\nWhUpxp///Of07duXU045ha9+9avccsstkbYD6NKlC61atSqf7tu3L/3792fWrFls376dmTNnMnFi\n5TfvzM/PL0/OBQUFjBkzhtatW7Nu3Tq2bdvG0UcfTadOnejUqROnnXYaGzZsiBxXXWmwm4iIlHvt\ntdcoLi7mhBNO2GNZt27dKCoqKp9esWJFnUetd+/enXfeeWe3eUVFRfTo0QOouXu8bdu2TJ06lalT\np7JkyRKGDh3KMcccw9ChQ2nTpg3btm0rX/eTTz7Z7QdIZWVPmDCBgoICSkpKOPTQQznooIMq3e/w\n4cNZt24db731Fo899hh33XUXAF/5yldo06YNixcvplu3btFehAaiFrmIiLBlyxaeeeYZ8vPzOeec\nc+jfv/8e64wbN47f//73vPvuu2zbtq1ex3/HjRvH7NmzeeGFF9i1axdTp05l7733ZvDgwUDQkq/u\n/PTZs2eXH6tu164dLVu2pEWLIKUNGDCAgoICSktLmTt3LvPnz68xngkTJjBv3jzuvffePVrjmb0O\nLVu2ZOzYsVxxxRVs2rSJ4cOHA8GPg+9973tcdtllrFu3Dgh6NubNm1eLV6VulMhFRJqxkSNH0qFD\nB3r16sWvfvUrLr/88t1OPctsvY4YMYLLLruMYcOG0a9fP0466aRqy66uVd2vXz8eeeQRfvSjH9Gl\nSxdmz57NrFmzaNky6Ci+6qqruOGGG+jUqRN33HHHHtu///77nHzyybRr144hQ4bwwx/+sHzk+t13\n383MmTPp2LEjM2bM4N/+7d9qfB26du3K4MGDWbhwIePHj6+2Hvn5+Tz//POMGzeu/McDwC233MJX\nv/pVjj32WPbbbz9OOeUUli1bVuO+60v3IxeRPcR90ZKk1eaiKfU1cODA3e5+1pQuCCPJqfi5KKP7\nkYtIg4j7oiVJq81FUxqakqw0NHWti4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhI\niimRi4iIpJgSuYiIxO7iiy/mxhtvbPByp0yZwjnnnNPg5aaJLggjItKILvrJRSwvXh5b+b279+a+\nO6NfdGbBggVceeWVLF68mJYtW3LIIYdw1113cfTRRzdoXPfee2+DlpeprjduyRZK5CIijWh58XJy\nvxPfVfOWP7I88rpbtmxh5MiR3H///YwdO5Yvv/ySl156idatW9d6v+7e7BNqUtS1LiLSTC1btgwz\nY9y4cZgZrVu35uSTT+awww7bo8t6xYoVtGjRgtLSUgCGDh3KNddcw/HHH0/btm257bbbGDRo0G7l\n33nnnYwZMwaASZMmce211wLQv39/5syZU75eSUkJ+++/P4sWLQJg4cKFDBkyhI4dO3LkkUfudvey\n5cuXk5eXR4cOHTj11FNZv359PC9OiiiRi4g0U/369SMnJ4fzzz+fuXPn8umnn+62vGILu+L0I488\nwu9+9zu2bNnCRRddxLJly8pvLQowY8YMzj777D32m5+fT0FBQfn03Llz6dKlCwMGDGDVqlWceeaZ\nXHvttWzatImpU6fyrW99iw0bNgAwceJEBg0axPr167nmmmuYPn16vV+HtFMiFxFpptq1a8eCBQto\n0aIF3//+9+nSpQtjxoxh7dq1kbY///zz+drXvkaLFi1o3749o0ePZsaMGUBwm9GlS5cycuTIPbab\nOHEiM2fOZMeOHUCQ8PPz8wF49NFHOeOMMzj11FMBOOmkkxg4cCBz5syhqKiI119/neuvv55WrVpx\nwgknVFp+c6NELiLSjB188ME89NBDrFy5ksWLF1NcXMxll10WaduePXvuNp2fn1+eyAsKChgzZgx7\n7733Htv17duX/v37M2vWLLZv387MmTPLW+4rVqzg8ccfp1OnTnTq1ImOHTvy8ssvs3r1aoqLi+nY\nsSP77LNPeVm5WXyXvqhiTeRm9qCZrTGztytZ9jMzKzWzTnHGICIi0fTr14/zzjuPxYsXs++++7Jt\n27byZatXr95j/Ypd7cOHD2fdunW89dZbPPbYY0ycOLHKfU2YMIGCggKefvppDj30UPr06QMEPw7O\nPfdcNm7cyMaNG9m0aRNbtmzh5z//Od26dWPTpk1s3769vJyVK1fWt9qpF3eLfBpwasWZZtYDGA6s\niHn/IiJShaVLl3LHHXewatUqAIqKipgxYwaDBw/miCOO4MUXX6SoqIjNmzdz880311hey5YtGTt2\nLFdccQWbNm1i+PDhVa47YcIE5s2bx7333rtbwv/Od77DrFmzmDdvHqWlpezYsYP58+dTXFxMr169\nGDhwINdddx07d+5kwYIFzJo1q/4vRMrFmsjdfQGwqZJFdwJXxLlvERGpXrt27Xj11Vf5xje+Qbt2\n7TjuuOM4/PDDmTp1KieffDLjx4/n8MMPZ9CgQXsci67qVLP8/Hyef/55xo0bR4sWLapcv2vXrgwe\nPJiFCxcyfvz48vk9evTg6aef5qabbqJLly7k5uYyderU8tHyjz76KAsXLqRz587ccMMNnHfeeQ31\ncqSWuXu8OzDLBWa5++Hh9Cggz91/amYfA0e7+8YqtvW44xORPV04YgT3Z/GxxwtXrOD+uXMbZV8D\nBw7k9ddfL59uaheEkWRU/FyUMTPcvVYn5DfqBWHMbB/gaoJu9fLZjRmDiEiSlGSloTX2ld36Ar2B\ntyzoZ+kB/N3MjnH3Ss93mDx5cvnzvLw88vLy4o9SRESkERQWFlJYWFivMhojkVv4wN3fAbqWLwi6\n1o9y98qOowO7J3IREZFsUrGBOmXKlFqXEffpZwXAK0A/M1tpZpMqrOKoa11ERKTOYm2Ru3vVJxEG\nyw+Kc/8iIiLZTld2ExERSTElchERkRTT/chFRGLUrVs3Bg4cmHQY0sR069atwcpSIhcRiZEuISpx\nU9e6iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgSuYiI\nSIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGL\niIikmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgS\nuYiISIopkYuIiKSYErmIiEiKxZrIzexBM1tjZm9nzLvVzN41s0Vm9iczax9nDCIiItks7hb5NODU\nCvPmAYe6+wDgfeAXMccgIiKStWJN5O6+ANhUYd5z7l4aTi4EesQZg4iISDZL+hj5BcCzCccgIiKS\nWoklcjP7D2CnuxckFYOIiEjatUxip2Z2PnA6MKymdSdPnlz+PC8vj7y8vLjCEonsop9cxPLi5UmH\nEZsVHy2G3NykwxDJeoWFhRQWFtarDHP3hommqh2Y9QZmufvXw+kRwO3AN919Qw3betzxidTFiPEj\nyP1O9ia6OT/5E0UnfSvpMGJz4YoV3D93btJhiOzBzHB3q802cZ9+VgC8AvQzs5VmNgn4L2Bf4H/N\n7A0zuyfOGERERLJZrF3r7j6xktnT4tyniIhIc5L0qHURERGpByVyERGRFFMiFxERSTElchERkRRT\nIhcREUkxJXIREZEUUyIXERFJMSVyERGRFFMiFxERSTElchERkRRTIhcREUkxJXIREZEUUyIXERFJ\nMSVyERGRFFMiFxERSTElchERkRRTIhcREUmxlkkHIJJGy5YsZsWzi5MOIzafb92adAixemfxYi4c\nMSLpMGLTuXdvbrrvvqTDkEaiRC5SBzu3b2f4vl2SDiM2j5esSTqEWNn27dyfm5t0GLG5cPnypEOQ\nRqSudRERkRRTIhcREUkxJXIREZEUUyIXERFJMSVyERGRFKsxkZtZWzNrET7vZ2ajzKxV/KGJiIhI\nTaK0yF8E9jazA4F5wDnA7+MMSkRERKKJksjN3bcBZwH3uPtY4NB4wxIREZEoIiVyMxsMnA3MDufl\nxBeSiIiIRBUlkV8K/AL4H3dfbGYHAS/EG5aIiIhEUe0lWs0sBxjl7qPK5rn7R8AlcQcmIiIiNau2\n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\nIiIppkQuIiKSYkrkIiIiKaZELiIikmJK5CIiIimmRC4iIpJiSuQiIiIppkQuIiKSYkrkIiIiKaZE\nLiIikmJK5CIiIimmRC4iIpJiSuQiIiIppkQuIiKSYkrkIiIiKaZELiIikmJK5CIiIimmRC4iIpJi\nSuQiIiIppkQuIiKSYokmcjNrYWZvmNnMJOMQERFJq6Rb5JcCSxKOQUREJLUSS+Rm1gM4HfhdUjGI\niIikXZIt8juBKwBPMAYREZFUSySRm9kZwBp3XwRY+BAREZFaapnQfocAo8zsdGAfoJ2ZPezu51Zc\ncfLkyeXP8/LyyMvLa6wYRSRLbSvZxYiX5yQdRmw+KNmadAgSUWFhIYWFhfUqI5FE7u5XA1cDmNmJ\nwM8qS+KweyIXEWkIpTmQe/q+SYcRm1enrUk6BImoYgN1ypQptS4j6VHrIiIiUg9Jda2Xc/f5wPyk\n4xAREUkjtchFRERSTIlcREQkxZTIRUREUkyJXEREJMWUyEVERFJMiVxERCTFlMhFRERSTIlcREQk\nxZTIRUREUkyJXEREJMWUyEVERFJMiVxERCTFlMhFRERSTIlcREQkxZTIRUREUkyJXEREJMWUyEVE\nRFKsZdIBNGdXX3QRG5YvTzqM2Hy+dSvQJekwRCTLvLN4MReOGJF0GE2GEnmCNixfzv25uUmHEZvH\n/16adAgikoVs+/as/d/5QB22Ude6iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIik\nmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpFgiidzM\nepjZX81ssZn9w8wuSSIOERGRtEvqfuS7gJ+6+yIz2xf4u5nNc/f3EopHREQklRJpkbv7J+6+KHy+\nFXgXODCJWERERNIs8WPkZtYbGAC8mmwkIiIi6ZNU1zoAYbf6k8ClYct8D48+9mjjBtVIWu/VmpLS\n0qTDEBGRlEsskZtZS4Ik/gd3f7qq9SbfP7n8eefenencp3P8wTWCLz78go8/WMyI4neTDiU223xX\n0iGIiDRphcXFFBYX16uMJFvkDwFL3P3u6lYa9tNhjRRO4ypeV8w230Hu6V2TDiU2pdOSjkBEpGnL\n696dvO7dy6envPFGrctI6vSzIcDZwDAze9PM3jCzEUnEIiIikmaJtMjd/WUgJ4l9i4iIZJPER62L\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'male'\", \"Pclass == 1\"])" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nh7Fa7FqXpF6sJREPGDCAAw88kCuvvJJLL72U+++/H4BjjjmGb33rW63rf+9732PLLbdk6NChXHLJ\nJR22yPfYYw++9a1v8aEPfYiNNtqIMWPG8Nxzz7Uunzp1Ku9+97sZNGgQe+65J7NnzwbgyCOPZO7c\nuYwdO5aNNtqIs88+e4Wyn332WcaOHcvAgQPZdNNN+chHPtK6rG13f20dbrrpJoYNG8Z3v/tdhgwZ\nwic+8Ql22GEHrr/++tb1ly5dymabbcY999zDE088QZ8+fVi2bBlXXXUVO++883JxnHvuuRxyyCEA\nvP766xx//PEMHz6cIUOG8LnPfY7XXnutk3dg9ZnIJUmtdt55Z4YOHcott9yywrLp06dzzjnncMMN\nN/Dwww/z+9//vtPypkyZwqWXXsqiRYt47bXXWpPyQw89xKRJk/jhD3/IokWL2H///TnwwAN58803\n+dnPfsZWW23Ftddey4svvsjxxx+/Qrnf//73GTZsGM8++yxPP/00Z555Zuuyzrr7n3rqKf7+978z\nd+5cLrroIiZNmsTkyZOXq+fgwYMZMWLEcuWNHTuWhx56iEcffXS5+h122GEAnHjiiTzyyCPcd999\nPPLIIzz55JOcdtppnb5Gq8tELklazpZbbrlcy7nF1VdfzTHHHMO73vUu1l9/fU455ZROyzrmmGPY\ndtttWXfddRk3bhz33HMPAFdddRUHHngge+65J3379uX4449nyZIl/OlPf2rdtqNu+/79+7NgwQIe\nf/xx+vbty6hRo+raDqBv376ceuqp9O/fn3XXXZeJEycydepUXn31VaBIzhMnTlxhu/XXX5+DDz6Y\nKVOmAPDwww8ze/ZsDjroIAB+/OMfc+6557Lxxhuz4YYbctJJJ7Wu20gmcknScp588kkGDRq0wvz5\n8+czbNiw1unhw4d3mjS32GKL1ucbbLABL7/8cmtZw2vGCkQEw4YN48knn6wrxq9+9atsu+227Lvv\nvrzjHe/grLPOqms7gMGDB9O/f//W6W233ZYddtiBadOmsWTJEqZOncqkSZPa3XbixImtyXny5Mkc\ncsghrLvuuixatIjFixfzgQ98gEGDBjFo0CD2339/nn322brjWlUOdpMktbrjjjuYP38+u++++wrL\nhgwZwrx581qnn3jiiVUetb7lllvy17/+dbl58+bNY+jQoUDn3eMbbrghZ599NmeffTb3338/e+yx\nB7vssgt77LEHG2ywAYsXL25d96mnnlruB0h7ZU+YMIHJkyezdOlSdtxxR97+9re3u9999tmHRYsW\nce+993LFFVdw3nnnAfDWt76VDTbYgFmzZjFkyJD6XoQ1xBa5JImXXnqJa6+9lokTJ3LEEUewww47\nrLDOuHHj+K//+i8eeOABFi9evFrHf8eNG8d1113HjTfeyJtvvsnZZ5/Neuutx2677QYULfmOzk+/\n7rrrWo9VDxgwgH79+tGnT5HSRowYweTJk1m2bBnTp0/npptu6jSeCRMmMGPGDC644IIVWuO1vQ79\n+vXj0EMP5YQTTuD5559nn332AYofB5/61Kc47rjjWLRoEVD0bMyYMaMLr8qqMZFLUi82duxYNt54\nY7baaiu+/e1vc/zxxy936llt63XMmDEcd9xx7Lnnnmy33XbstddeHZbdUat6u+2247LLLuMLX/gC\ngwcP5rrrrmPatGn061d0FJ900kmcfvrpDBo0iHPOOWeF7R9++GH23ntvBgwYwKhRo/j85z/fOnL9\nBz/4AVOnTmXgwIFMmTKFf/7nf+70ddhiiy3YbbfduO222xg/fnyH9Zg4cSI33HAD48aNa/3xAHDW\nWWfxjne8g1133ZVNNtmEfffdl4ceeqjTfa8u70cuSQ00cuTI5e5+1pMuCKPmafu5aOH9yCWphzPJ\nak2za12SpAozkUuSVGEmckmSKsxELklShZnIJUmqMBO5JEkVZiKXJKnCTOSSpIb77Gc/yxlnnLHG\nyz311FM54ogj1ni5VeIFYSSpGx37b8cyZ/6chpW/9ZZb86Nz67/ozK233sqJJ57IrFmz6NevH+96\n17s477zz+MAHPrBG47rgggvWaHm1VvXGLWsLE7kkdaM58+cw/PDhna+4quVfNqfudV966SXGjh3L\nhRdeyKGHHsrrr7/OLbfcwrrrrtvl/WZmr0+ozWIil3qgRrfaerqutiq1ah566CEignHjxgGw7rrr\nsvfeewNFl/UjjzzCz3/+c6C4Zek222zDm2++SZ8+fdhjjz0YNWoUM2fO5O677+bkk0/m6quv5o47\n7mgt/9xzz+Wmm27i17/+NccccwzDhg3jtNNOY4cdduDss8/mox/9KABLly5lyJAhzJgxgxEjRnDb\nbbfxla98hfvvv5+tt96a8847r/WGKHPmzOHoo4/m7rvvZtddd2W77bbrzpesRzKRSz1Qo1ttPV1X\nWpVaddtttx19+/bl6KOPZsKECa137WrRtoXddvqyyy5j+vTpbLfddrz88succcYZPProo2y77bYA\nTJkyhRNOOGGF/U6cOJHJkye3JvLp06czePBgRowYwZNPPsmBBx7I5Zdfzn777ccNN9zAxz/+cWbP\nns2mm27KpEmTGDVqFL/73e+47bbbOOCAAzjkkEPW9EtTKQ52k6ReasCAAdx666306dOHT3/60wwe\nPJhDDjmEp59+uq7tjz76aN75znfSp08fNtpoIw4++GCmTJkCFLcZnT17NmPHjl1hu0mTJjF16lRe\nffVVoEj4EydOBODyyy/ngAMOYL/99gNgr732YuTIkVx//fXMmzePO++8k9NOO43+/fuz++67t1t+\nb2Mil6RebPvtt+enP/0pc+fOZdasWcyfP5/jjjuurm2HDRu23PTEiRNbE/nkyZM55JBDWG+99VbY\nbtttt2WHHXZg2rRpLFmyhKlTp3LYYYcBRRf+VVddxaBBgxg0aBADBw7kj3/8IwsWLGD+/PkMHDiQ\n9ddfv7Ws4cN7b89VC7vWJUlA0dV+1FFHcdFFF/GBD3yAxYsXty5bsGDBCuu37WrfZ599WLRoEffe\ney9XXHEF55133kr3NWHCBCZPnszSpUvZcccd2WabbYDix8GRRx7JhRdeuMI2c+fO5fnnn2fJkiWt\nyXzu3Ln06dO726S9u/aS1IvNnj2bc845hyeffBKAefPmMWXKFHbbbTfe+973cvPNNzNv3jxeeOEF\nvvOd73RaXr9+/Tj00EM54YQTeP7559lnn31Wuu6ECROYMWMGF1xwAZMmTWqdf/jhhzNt2jRmzJjB\nsmXLePXVV7npppuYP38+W221FSNHjuTkk0/mjTfe4NZbb2XatGmr/0JUnIlcknqpAQMGcPvtt/NP\n//RPDBgwgA9+8IPstNNOnH322ey9996MHz+enXbaiZ133nmFY9ErO9Vs4sSJ3HDDDYwbN265lnLb\n9bfYYgt22203brvtNsaPH986f+jQoVxzzTWceeaZDB48mOHDh3P22WezbNkyoDiGftttt7Hpppty\n+umnc9RRR62pl6OyIjObHcNKRUT25PikRhkzfkyvHrX+xGVPMP3K6c0OY40YOXIkd955Z+t0T7sg\njJqj7eeiRUSQmV06Id9j5JLUjUyyWtPsWpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKF\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\", \"Pclass == 1\"])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nHXeka9eu9OzZk969e3PwwQdzww03bJS0rr/+ei688MJ6y6h1d8uC2WmnnXjkkUeKUnZTDBgwgHff\nfbdox9kUTuRmZm3EgqoqAor2t6Aqv064krjvvvt45513WLBgARMnTmTy5Ml87Wtfy/tY2kJNtSXW\nr19f6hDy5kRuZmabqE7E3bt354QTTuCOO+5g6tSpzJ07F4AJEyZw8cUX16x/5ZVXsv3229O/f39u\nvvnmBmuqhx12GBdffDEHH3wwPXr04Nhjj+Wtt96qWT5jxgz23HNPevfuzeGHH868efMAOPXUU1m4\ncCEjRoygR48eTJkyZZOyV65cyYgRI+jVqxfbbLMNhx56aM2y2s39ucfw2GOPMWDAAK644gr69evH\nGWecwdChQ7n//vtr1l+/fj3bbbcdzz77LAsWLKBDhw5s2LCBO++8k+HDh28UxzXXXMPo0aMB+Pjj\njznnnHMYNGgQ/fr14zvf+Q4fffRRI69A/pzIzcysUcOHD6d///488cQTmyx74IEHuPrqq3n44Yd5\n+eWXeeihhxotb/r06UydOpXly5fz0Ucf1STl+fPnM378eH72s5+xfPlyjjvuOE444QTWrVvHLbfc\nwsCBA7n33nt59913OeecczYp96qrrmLAgAGsXLmSN998k8svv7xmWWPN4MuWLePtt99m4cKF3Hjj\njYwfP55p06ZtdJx9+vRh77333qi8ESNGMH/+fF599dWNju/kk08G4LzzzuOVV17h+eef55VXXmHx\n4sVccskljT5H+XIiNzOzvGy//fYb1Zyr3XXXXUyYMIHdd9+drbbaioqKikbLmjBhAoMHD6ZLly6M\nGTOGZ599FoA777yTE044gcMPP5yOHTtyzjnn8MEHH/CXv/ylZtuGmu07d+7M0qVLef311+nYsSMH\nHXRQXtsBdOzYkR/96Ed07tyZLl26MG7cOGbMmMGHH34IJMl53Lhxm2y31VZbMWrUKKZPnw7Ayy+/\nzLx58xg5ciQAv/jFL7jmmmvo2bMn3bp1Y+LEiTXrFoITuZmZ5WXx4sX07t17k/lLlixhwIABNdOD\nBg1qNGmW5XS869q1K++9915NWYMGDapZJokBAwawePHivGL8wQ9+wODBgzn66KPZZZddmDx5cl7b\nAfTp04fOnTvXTA8ePJihQ4cyc+ZMPvjgA2bMmMH48XXf1HPcuHE1yXnatGmMHj2aLl26sHz5ctas\nWcM+++xD79696d27N8cddxwrV67MO67GeGQ3MzNr1FNPPcWSJUs45JBDNlnWr18/Fi1aVDO9YMGC\nZvfm3n777XnhhRc2mrdo0SL69+8PNN483q1bN6ZMmcKUKVOYO3cuhx12GPvuuy+HHXYYXbt2Zc2a\nNTXrLlu2bKMfIHWVPXbsWKZNm8b69evZY4892HnnnTdZB+Coo45i+fLlPPfcc9x+++1ce+21AGy7\n7bZ07dqVF198kX79+uX3JDSRa+RmZlav1atXc++99zJu3DhOOeUUhg4dusk6Y8aM4de//jUvvfQS\na9asadH53zFjxnDffffx6KOPsm7dOqZMmcKWW27JAQccACQ1+YauT7/vvvtqzlV3796dTp060aFD\nkur23ntvpk2bxoYNG3jggQd47LHHGo1n7NixzJo1i+uvv36T2nhuq0OnTp048cQTOffcc1m1ahVH\nHXUUkPw4+PrXv87ZZ5/N8uXLgaRlY9asWU14VhrmRG5mZpsYMWIEPXv2ZODAgfz4xz/mnHPO4Ve/\n+lXN8tza67HHHsvZZ5/N4YcfzpAhQzjiiCMaLLuhWvWQIUO49dZb+c///E/69OnDfffdx8yZM+nU\nKWlAnjhxIpdeeim9e/fm6quv3mT7l19+mSOPPJLu3btz0EEHceaZZ9b0XP/pT3/KjBkz6NWrF9On\nT+c//uM/Gn0eysrKOOCAA5gzZw4nnXRSg8cxbtw4Hn74YcaMGVPz4wFg8uTJ7LLLLuy///5svfXW\nHH300cyfP7/RfefL9yP/pMyC3jSFiuxfR2lmxTNs2LBN7n62Y1lZ3td6N8egvn15Y5nvytjW1fXe\nAN+P3MyszXOSteZw07qZmVmGOZGbmZllmBO5mZlZhjmRm5mZZZgTuZmZWYY5kZuZmWWYE7mZmVmG\nOZGbmVnJfPvb3+ayyy4reLk/+tGPOOWUUwpeblvkRG5m1kaU9S9DUtH+yvqXNR5Eavbs2Rx00EFs\nvfXWbLvtthxyyCH8/e9/L/gxX3/99Vx44YUFLxcav8HK5sIju5mZtRFVi6sKO1R07fIr8hv+dfXq\n1YwYMYIbbriBE088kY8//pgnnniCLl26NHmfEdFuEmqpuEZuZmYbmT9/PpIYM2YMkujSpQtHHnkk\ne+655yZN1gsWLKBDhw5s2LABgMMOO4yLLrqIgw8+mG7dunHllVcyfPjwjcq/5pprGD16NAATJkzg\n4osvBmDo0KHcf//9NeutX7+e7bbbjmeffRaAOXPmcNBBB9GrVy8+97nPbXT3sjfeeIPy8nJ69uzJ\nMcccw4oVK4rz5LRBTuRmZraRIUOG0LFjR04//XQeeOAB3n777Y2W165h156+9dZbuemmm1i9ejXf\n+ta3mD9/fs2tRQGmT5/OySefvMl+x40bx7Rp02qmH3jgAfr06cPee+/N4sWLOeGEE7j44otZtWoV\nU6ZM4ctf/jIrV64EYPz48QwfPpwVK1Zw0UUXMXXq1BY/D1nhRG5mZhvp3r07s2fPpkOHDnzjG9+g\nT58+jB49mjfffDOv7U8//XR22203OnToQI8ePRg1ahTTp08HktuMzps3jxEjRmyy3fjx45kxYwYf\nfvghkCT8cePGAXDbbbdx/PHHc8wxxwBwxBFHMGzYMO6//34WLVrE008/zSWXXELnzp055JBD6ix/\nc+VEbmZmm9h111351a9+xcKFC3nxxRdZsmQJZ599dl7bDhgwYKPpcePG1STyadOmMXr0aLbccstN\nths8eDBDhw5l5syZfPDBB8yYMaOm5r5gwQLuvPNOevfuTe/evenVqxd//vOfWbp0KUuWLKFXr15s\ntdVWNWUNGjSouYeeOe7sZmZmDRoyZAinnXYaN954I/vssw9r1qypWbZ06dJN1q/d1H7UUUexfPly\nnnvuOW6//Xauvfbaevc1duxYpk2bxvr169ljjz3YaaedgOTHwamnnsoNN9ywyTYLFy5k1apVfPDB\nBzXJfOHChXTo0D7qqu3jKM3MLG/z5s3j6quvZvHixQAsWrSI6dOnc8ABB/DZz36Wxx9/nEWLFvHO\nO+/wk5/8pNHyOnXqxIknnsi5557LqlWrOOqoo+pdd+zYscyaNYvrr7+e8ePH18z/6le/ysyZM5k1\naxYbNmzgww8/5LHHHmPJkiUMHDiQYcOGMWnSJNauXcvs2bOZOXNmy5+IjHAiNzOzjXTv3p0nn3yS\n/fbbj+7du3PggQey1157MWXKFI488khOOukk9tprL4YPH77Juej6LjUbN24cDz/8MGPGjNmoplx7\n/bKyMg444ADmzJnDSSedVDO/f//+3HPPPVx++eX06dOHQYMGMWXKlJre8rfddhtz5sxhm2224dJL\nL+W0004r1NPR5ikiSh1Dk0mKQsctqbDXb1Yk10+amdVl2LBhPP300xvNK+tfllxLXiR9d+jLsn8v\n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\nM8tPPr3Wa0TiD8AxRYrHzMzMmiCfpvUv5Ux2AIYBHxYtIjMzM8tbPr3Wc+9Lvg54g6R53czMzEos\nn3Pkvi+5mZlZG1VvIpd0cQPbRURcWoR4zMzMrAkaqpG/X8e8bsDXgG0AJ3IzM7MSqzeRR8RV1Y8l\ndQfOAiYAtwNX1bedmZmZtZ4Gz5FL6g18HzgZmAp8PiJWtUZgZmZm1riGzpFfCXwJuBH4TES812pR\nmZmZWV4aGhDmv4HtgYuAJZLeTf9WS3q3dcIzMzOzhjR0jrxJo76ZmZlZ63OyNjMzyzAncjMzswxz\nIjczM8swJ3IzM7MMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8uwkiZySR0k/UPSjHS6\nl6RZkuZJelBSz1LGZ2Zm1taVukZ+FjA3Z3oi8FBE7Ao8ApxfkqjMzMwyomSJXFJ/4IvATTmzR5Hc\nLpX0/+jWjsvMzCxLSlkjvwY4F4iceX0jogogIpYB25UiMDMzs6woSSKXdDxQFRHPAmpg1WhgmZmZ\nWbtX721Mi+wgYKSkLwJbAd0l/QZYJqlvRFRJKgPerK+AioqKmsfl5eWUl5cXN2IzM7NWVFlZSWVl\nZaPrKaK0lV5JhwL/HREjJV0BrIyIyZLOA3pFxMQ6tolCxy0JKgpYYAWU4rkt+HFAyY7FzMw+IYmI\n2KQVu9S91mv7CXCUpHnAEem0mZmZ1aNUTes1IuIx4LH08VvAkaWNyMzMLDvaWo3czMzMmsCJ3MzM\nLMOcyM3MzDKs5OfIm0tq6PJzMzOz9iGzibzQF0P5Z4GZmWWRm9bNzMwyzInczMwsw5zIzczMMsyJ\n3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzInczMwsw5zIzczMMsyJ3MzMLMOcyM3MzDLMidzMzCzD\nnMjNzMwyzInczMwsw5zIzczMMsyJ3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzInczMwsw5zIzczM\nMsyJ3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzIm8xHYsK0NSwf7MzKx96VTqANq7BVVVRAHLcyo3\nM2tfXCM3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3IzM7MMcyI3MzPLsJIkckn9JT0i\n6UVJ/5T0vXR+L0mzJM2T9KCknqWIz8zMLCtKVSNfB3w/IvYADgDOlLQbMBF4KCJ2BR4Bzi9RfGZm\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Sex == 'female'\"])" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nie9MqC8ZVc2zs2dz9bDGXSPhE534kRAR3HTTTRx00EEsWbKEmTNn8pnPfIa7776bH/7wh3WV0Z1b\nqvVYsWIFvXv3bnYY68VELnVDy5Yv69EXxJl9zexmh9BjtCTi/v37c/TRR7Pddtuxzz77cNZZZ7H7\n7rtz+umnM3ToUL785S8DcPnllzNhwgR69erFJZdc0m6L/KCDDuKAAw7gtttu44EHHmC//fZj0qRJ\nDBxYXLlwypQpnHfeecyfP58999yTq666it12241TTjmFuXPnMmrUKHr37s0FF1zAWWedtUrZzz77\nLKeddhp33nknvXr14u1vfzszZ84Eiu7+Rx99lDe/+c0Aq9Rh5syZnHTSSXz6059mwoQJHH744dxz\nzz2MHz+eD3zgA0CR3AcPHsz06dMZMGAAO++8M8uXL+fnP/85l19+Offcc09rHBMmTGDmzJnccMMN\nvPrqq5x33nlcf/31vPrqq3zwgx9kwoQJ9OvXbwO9WmvmMXJJUqu99tqLHXbYgTvuuGO1ZdOmTeOK\nK67g1ltv5ZFHHuGWW27psLzJkyczceJEFi1axCuvvML48eMBePjhhxk3bhzf+ta3WLRoEUceeSRH\nH300y5cv58c//jE77rgjv/rVr3jxxRdXS+IA3/jGNxg6dCjPPvssTz/9NF/96ldbl3XU3f/UU0/x\n/PPPM3fuXL773e8ybtw4Jk2atEo9Bw0axJ577rlKeaNGjeLhhx/mscceW6V+H/7whwE455xzePTR\nR3nggQd49NFHefLJJ1t/ADWSiVyStIohQ4bw3HPPrTb/+uuv5/TTT+dtb3sbm222WV23Gj399NPZ\nZZdd6NevH6NHj+a+++4D4LrrruPoo4/m4IMPpnfv3px11lksW7aM3//+963rttdt37dvXxYsWMAT\nTzxB79692X///etaD6B3795cfPHF9O3bl379+jF27FimTJnCyy+/DBTJeezYsautt9lmm3Hssccy\nefJkAB555BEeeughjjnmGAC+973vMWHCBLbeemu22GILzj333NbnNpKJXJK0iieffLK1+7vW/Pnz\nGTp0aOv0sGHDOkya22+/fevjzTffnJdeeqm1rGE1YwUigqFDh/Lkk0/WFeMXvvAFdtllFw4//HDe\n8pa3cNlll9W1HsCgQYPo27dv6/Quu+zC7rvvztSpU1m2bBlTpkxh3Lhxa1x37Nixrcl50qRJHHfc\ncfTr149FixaxdOlS3vve9zJw4EAGDhzIkUceybPPPlt3XOvKY+SSpFb33HMP8+fP54ADDlht2eDB\ng5k3b17r9Jw5c9Z51PqQIUP485//vMq8efPmscMOOwAdd49vscUWjB8/nvHjx/Pggw9y0EEHsffe\ne3PQQQex+eabs3Tp0tbnPvXUU6v8AFlT2SeeeCKTJk1ixYoV7LHHHq3H19s67LDDWLRoEffffz/X\nXnstV155JQBvfOMb2XzzzZk1axaDBw+ubydsILbIJUksWbKEX/3qV4wdO5aTTz6Z3XfffbXnjB49\nmv/4j//gL3/5C0uXLl2v47+jR4/mpptu4re//S3Lly9n/PjxbLrppuy7775A0ZJv7/z0m266qfVY\ndf/+/enTpw+9ehUpbc8992TSpEmsXLmSadOmtQ6Ca8+JJ57I9OnTueqqq1Zrjdf2OvTp04cTTjiB\ns88+m8WLF3PYYYcBxY+Dj33sY5x55pksWrQIKHo2pk+f3om9sm5M5JLUg40aNYqtt96aHXfcka99\n7WucddZZq5x6Vtt6HTlyJGeeeSYHH3wwu+66K4cccki7ZbfXqt5111255ppr+Od//mcGDRrETTfd\nxNSpU+nTp+goPvfcc7nkkksYOHAgV1xxxWrrP/LIIxx66KH079+f/fffn0996lMceOCBAHzzm99k\nypQpDBgwgMmTJ/PBD36ww/2w/fbbs++++3LXXXcxZsyYdusxduxYbr31VkaPHt364wHgsssu4y1v\neQv77LMPb3jDGzj88MN5+OGHO9z2+vJ+5OqWevr9yH9x9i84/vLjmx1G02xM92MfPnz4Knc/604X\nhFHztH1ftPB+5JLUzZlktaHZtS5JUoWZyCVJqjATuSRJFWYilySpwkzkkiRVmIlckqQKM5FLklRh\nJnJJUsN98pOf5Ctf+coGL/fiiy/m5JNP3uDlVokXhJGkLnTGv5zB7PmzG1b+TkN24jsT6r/ozJ13\n3sk555zDrFmz6NOnD29729u48soree9737tB47rqqqs2aHm11vXGLRsLE7kkdaHZ82c39PLDs6+Z\nXfdzlyxZwqhRo7j66qs54YQTePXVV7njjjvo169fp7ebmT0+oTaLXeuS1EM9/PDDRASjR48mIujX\nrx+HHnoob3/721frsp4zZw69evVi5cqVABx00EGcf/75vO9972OLLbbg8ssvZ6+99lql/AkTJnDc\ncccBcPrpp3PBBRcAsPvuu3PzzTe3Pm/FihVsu+223HfffQDcdddd7L///gwYMIB3v/vdq9y9bPbs\n2YwYMYKtt96aI444gmeeeaYxO6dCTOSS1EPtuuuu9O7dm9NOO41p06bx/PPPr7K8bQu77fQ111zD\n97//fZYsWcIZZ5zBww8/3HprUYDJkyfz4Q9/eLXtjh07lkmTJrVOT5s2jUGDBrHnnnvy5JNPcvTR\nR3PBBRewePFixo8fz/HHH8+zzz4LwLhx49hrr7145plnOP/885k4ceJ674eqM5FLUg/Vv39/7rzz\nTnr16sXHP/5xBg0axHHHHcfTTz9d1/qnnXYab33rW+nVqxdbbbUVxx57LJMnTwaK24w+9NBDjBo1\narX1xo0bx5QpU3j55ZeBIuGPHTsWgJ/+9KccddRRHHHEEQAccsghDB8+nJtvvpl58+Zx77338uUv\nf5m+fftywAEHrLH8nsZELkk92G677cYPf/hD5s6dy6xZs5g/fz5nnnlmXesOHTp0lemxY8e2JvJJ\nkyZx3HHHsemmm6623i677MLuu+/O1KlTWbZsGVOmTGltuc+ZM4frrruOgQMHMnDgQAYMGMDvfvc7\nFixYwPz58xkwYACbbbZZa1nDhvXc2x23cLCbJAkoutpPPfVUvvvd7/Le976XpUuXti5bsGDBas9v\n29V+2GGHsWjRIu6//36uvfZarrzyyrVu68QTT2TSpEmsWLGCPfbYg5133hkofhyccsopXH311aut\nM3fuXBYvXsyyZctak/ncuXPp1atnt0l7du0lqQd76KGHuOKKK3jyyScBmDdvHpMnT2bfffflXe96\nF7fffjvz5s3jhRde4NJLL+2wvD59+nDCCSdw9tlns3jxYg477LC1PvfEE09k+vTpXHXVVYwbN651\n/kknncTUqVOZPn06K1eu5OWXX2bmzJnMnz+fHXfckeHDh3PhhRfy2muvceeddzJ16tT13xEVZyKX\npB6qf//+3H333fzDP/wD/fv3Z7/99uOd73wn48eP59BDD2XMmDG8853vZK+99lrtWPTaTjUbO3Ys\nt956K6NHj16lpdz2+dtvvz377rsvd911F2PGjGmdv8MOO3DjjTfy1a9+lUGDBjFs2DDGjx/fOlr+\npz/9KXfddRfbbLMNl1xyCaeeeuqG2h2VFZnZ7BjWKiKyO8enxhk5ZmRDz7Xt7n5x9i84/vLjmx1G\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\", \"SibSp < 3\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After exploring the survival statistics visualization, fill in the missing code below so that the function will make your prediction. \n", "Make sure to keep track of the various features and conditions you tried before arriving at your final prediction model. \n", "**Hint:** You can start your implementation of this function using the prediction code you wrote earlier from `predictions_2`." ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 81.71%.\n" ] } ], "source": [ "def predictions_3(data):\n", " \"\"\" Model with multiple features. Makes a prediction with an accuracy of at least 80%. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['SibSp'] > 4:\n", " predictions.append(0)\n", " elif passenger['Sex'] == 'female' and passenger['Parch'] < 4:\n", " predictions.append(1)\n", " # This one didn't improve accuracy (2)\n", " elif passenger['Sex'] == 'female' and passenger['Pclass'] == 1 and passenger['Age'] > 10:\n", " predictions.append(1)\n", " # Removing this one didn't change accuracy (1)\n", " elif passenger['Sex'] == 'female' and passenger['Age'] > 50:\n", " predictions.append(1)\n", " elif passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male':\n", " predictions.append(1)\n", " elif passenger['Age'] < 10 and passenger['Pclass'] == 2:\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_3(data)\n", "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4\n", "*Describe the steps you took to implement the final prediction model so that it got an accuracy of at least 80%. What features did you look at? Were certain features more informative than others? Which conditions did you use to split the survival outcomes in the data? How accurate are your predictions?* \n", "**Hint:** Run the code cell below to see the accuracy of your predictions." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 81.71%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: \n", "\n", "### Steps:\n", "1. **Think about what features might matter.** \n", " - E.g. women and children may have been given priority to go on lifeboats. People with family members (`Parch`, `SibSp` > 0) might be more likely to survive if they are children because there are people taking care of them. They might be less likely to survive if they are parents trying to make sure their children are rescued.\n", "2. **Visualise the features** using the `survival_stats` function provided. See if the features are informative. They can be informative if (1) they show that almost all people of a certain group survive or if (2) they show that almost all people of a certain group don't survive.\n", " - See above for visualisations of informative features.\n", "3. **Choose filters and add them to the model.** \n", "4. **Run the model and see if it produces a higher accuracy**.\n", " - If it doesn't, ditch the filter.\n", "5. **Repeat with different features or filters**.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Features I looked at\n", "- SibSp\n", "- Age\n", "- Parch\n", "- Sex\n", "- Pclass\n", "\n", "Certain features were more informative than others. For example, looking at `SibSp` for males under the age of 10 was more useful than looking at `Age` for females because \n", "* the former told me that all males under the age of 10 with `SibSp` < 3 survived, whereas \n", "* for most age groups, there were a significant number of females that survived and a significant number of females that did not survive so it did not provide me with much information I could use to make splits." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\n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\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n+vfv3+ww1old65LUwtoS8aBBgzj88MO55pprmDRpEg888AAAJ598MmeffXb7+hdddBHbbbcdw4cP\n5wc/+EGXLfL999+fs88+m3322YctttiCsWPH8uyzz7Yvnzp1KrvvvjtDhgzhgAMO4OGHHwbghBNO\n4Mknn2TcuHFsscUWXHzxxauVvWjRIsaNG8fgwYPZaqut2G+//dqXdezur63DbbfdxogRI/jqV7/K\nsGHD+NCHPsSuu+7KjTfe2L7+ihUr2HrrrbnvvvuYPXs2/fr1Y+XKlVx77bXsueeqdxy/9NJLOeqo\nowB45ZVXOPXUUxk5ciTDhg3j4x//OC+//HI3f4F1ZyKXJLXbc889GT58OHfcccdqy26++WYuueQS\nbr31Vh599FFuueWWbsubMmUKkyZNYuHChbz88svtSfmRRx5h4sSJfP3rX2fhwoUceuihHH744Sxf\nvpwf/vCHbL/99vz85z/nhRde4NRTT12t3K997WuMGDGCRYsW8fTTT/PlL3+5fVl33f1PPfUUzz33\nHE8++STf/va3mThxIpMnT16lnkOHDmWPPfZYpbxx48bxyCOP8Je//GWV+n3wgx8E4PTTT+exxx7j\nj3/8I4899hhz587l/PPP7/YYrSsTuSRpFdttt90qLec21113HSeffDJvfvOb2WSTTTj33HO7Levk\nk09mp512YqONNmL8+PHcd999AFx77bUcfvjhHHDAAfTv359TTz2VZcuW8dvf/rZ926667QcOHMj8\n+fN54okn6N+/P6NHj65rO4D+/ftz3nnnMXDgQDbaaCMmTJjA1KlTeemll4AiOU+YMGG17TbZZBOO\nPPJIpkyZAsCjjz7Kww8/zBFHHAHAd77zHS699FK23HJLNttsM84444z2dRvJRC5JWsXcuXMZMmTI\navPnzZvHiBEj2qdHjhzZbdLcdttt219vuummvPjii+1ljawZKxARjBgxgrlz59YV4+c+9zl22mkn\n3vve9/LGN76RCy+8sK7tAIYOHcrAgQPbp3faaSd23XVXpk2bxrJly5g6dSoTJ05c47YTJkxoT86T\nJ0/mqKOOYqONNmLhwoUsXbqUd77znQwZMoQhQ4Zw6KGHsmjRorrjWlsOdpMktbvnnnuYN28e++67\n72rLhg0bxpw5c9qnZ8+evdaj1rfbbjv+/Oc/rzJvzpw5DB8+HOi+e3yzzTbj4osv5uKLL+aBBx5g\n//33Z6+99mL//fdn0003ZenSpe3rPvXUU6t8AVlT2cceeyyTJ09mxYoV7LbbbrzhDW9Y434PPvhg\nFi5cyP3338/VV1/NZZddBsDrXvc6Nt10U2bOnMmwYcPqOwjriS1ySRJLlizh5z//ORMmTOD4449n\n1113XW2d8ePH81//9V88+OCDLF26dJ3O/44fP54bbriBX//61yxfvpyLL76YjTfemL333hsoWvJd\nXZ9+ww03tJ+rHjRoEAMGDKBfvyKl7bHHHkyePJmVK1dy8803c9ttt3Ubz7HHHsv06dO54oorVmuN\n1/Y6DBgwgKOPPprTTjuNxYsXc/DBBwPFl4MPf/jDfOYzn2HhwoVA0bMxffr0HhyVtWMil6QWNm7c\nOLbccku23357vvKVr3DqqaeuculZbet17NixfOYzn+GAAw5g55135sADD+yy7K5a1TvvvDNXXnkl\n//qv/8rQoUO54YYbmDZtGgMGFB3FZ5xxBl/84hcZMmQIl1xyyWrbP/rooxx00EEMGjSI0aNH84lP\nfKJ95Prll1/O1KlTGTx4MFOmTOEf//Efuz0O2267LXvvvTd33XUXxxxzTJf1mDBhArfeeivjx49v\n//IAcOGFF/LGN76Rd73rXbz2ta/lve99L4888ki3+15XPo9ckhpo1KhRqzz9rC/dEEbN0/F90cbn\nkUtSH2eS1fpm17okSRVmIpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKFmcglSQ33sY99\njC996UvrvdzzzjuP448/fr2XWyXeEEaSetEp//cUZs2b1bDyd9huB755af03nbnzzjs5/fTTmTlz\nJgMGDODNb34zl112Ge985zvXa1xXXHHFei2v1to+uGVDYSKXpF40a94sRh43svsV17b8K2fVve6S\nJUsYN24c3/rWtzj66KN55ZVXuOOOO9hoo416vN/MbPmE2ix2rUtSi3rkkUeICMaPH09EsNFGG3HQ\nQQex++67r9ZlPXv2bPr168fKlSsB2H///TnrrLPYZ5992GyzzbjooovYc889Vyn/0ksv5aijjgLg\n5JNP5uyzzwZg11135cYbb2xfb8WKFWy99dbcd999ANx1112MHj2awYMH8/a3v32Vp5fNmjWLMWPG\nsOWWW3LIIYfwzDPPNObgVIiJXJJa1M4770z//v056aSTuPnmm3nuuedWWd6xhd1x+sorr+S73/0u\nS5Ys4ZRTTuGRRx5pf7QowJQpU/jgBz+42n4nTJjA5MmT26dvvvlmhg4dyh577MHcuXM5/PDDOfvs\ns1m8eDEXX3wxH/jAB1i0aBEAEydOZM899+SZZ57hrLPOYtKkSet8HKrORC5JLWrQoEHceeed9OvX\nj4985CMMHTqUo446iqeffrqu7U866STe9KY30a9fP7bYYguOPPJIpkyZAhSPGX344YcZN27cattN\nnDiRqVOn8tJLLwFFwp8wYQIAV111FYcddhiHHHIIAAceeCCjRo3ixhtvZM6cOdx7772cf/75DBw4\nkH333XeN5bcaE7kktbBddtmF73//+zz55JPMnDmTefPm8ZnPfKaubUeMGLHK9IQJE9oT+eTJkznq\nqKPYeOONV9tup512Ytddd2XatGksW7aMqVOntrfcZ8+ezbXXXsuQIUMYMmQIgwcP5je/+Q3z589n\n3rx5DB48mE022aS9rJEjGzfeoCoc7CZJAoqu9hNPPJFvf/vbvPOd72Tp0qXty+bPn7/a+h272g8+\n+GAWLlzI/fffz9VXX81ll13W6b6OPfZYJk+ezIoVK9htt93YcccdgeLLwQknnMC3vvWt1bZ58skn\nWbx4McuWLWtP5k8++ST9+rV2m7S1ay9JLezhhx/mkksuYe7cuQDMmTOHKVOmsPfee/O2t72N22+/\nnTlz5vD8889zwQUXdFvegAEDOProoznttNNYvHgxBx98cKfrHnvssUyfPp0rrriCiRMnts8/7rjj\nmDZtGtOnT2flypW89NJL3HbbbcybN4/tt9+eUaNGcc455/Dqq69y5513Mm3atHU/EBVnIpekFjVo\n0CDuvvtu/uEf/oFBgwbx7ne/m7e+9a1cfPHFHHTQQRxzzDG89a1vZc8991ztXHRnl5pNmDCBW2+9\nlfHjx6/SUu64/rbbbsvee+/NXXfdxTHHHNM+f/jw4Vx//fV8+ctfZujQoYwcOZKLL764fbT8VVdd\nxV133cVWW23FF7/4RU488cT1dTgqKzKz2TF0KiKyL8cnSd0ZNWoU9957b/t0X7shjJqj4/uiTUSQ\nmT26IN9z5JLUi0yyWt/sWpckqcJM5JIkVZiJXJKkCvMcufqkRg8I6uscsCSpXiZy9UmNfkJUX9eT\nJ1hJam12rUuSVGG2yCWpgYYNG8aoUaOaHYb6mGHDhq23skzkktRA3kJUjWbXuiRJFdbwFnlEzAKe\n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\nzEQuSVKF/T/SWc9tOWWciwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Splits\n", "\n", "1) If passenger['SibSp'] > 4, they are less likely to survive." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n06FDhyZxtZMTuZlZE7FXSQmSCvbYq6Qkvzj22ou2bdvSsWNHOnfuzOGHH85NN920RdK68cYb+eEP\nf1htGQ09+ma5vffem0ceeaQgZddFjx49ePfddwt2nHXhRG5m1kQsLCsjoGCPhWVlecUhiXvvvZc1\na9awcOFCxo4dy4QJE/jqV7+a97E0hZrqtti4cWOxQ8ibE7mZmW2lPBG3b9+ek08+mTvuuIPJkycz\nZ84cAM4++2wuv/zyivWvu+469thjD7p3786tt95aY011yJAhXH755Rx++OF06NCBE044gVWrVlUs\nnzlzJgcddBCdO3fmqKOOYu7cuQCcccYZLFq0iKFDh9KhQwcmTpy4VdkrV65k6NChdOrUiV133ZUj\njzyyYlnl5v7cY3jsscfo0aMHP/nJT+jWrRvnnHMOffv25b777qtYf+PGjey+++48//zzLFy4kBYt\nWrBp0yZmzJjBgAEDtojj+uuvZ8SIEQB8/PHHXHjhhfTq1Ytu3bpx7rnn8tFHH9XyDuTPidzMzGo1\nYMAAunfvzhNPPLHVsvvvv59Jkybx8MMPM3/+fB566KFay5s2bRqTJ09mxYoVfPTRRxVJed68eYwZ\nM4Zf/OIXrFixghNPPJGTTz6ZDRs2cNttt9GzZ0/uuece3n33XS688MKtyv3pT39Kjx49WLlyJW+9\n9RZXX311xbLamsGXL1/OO++8w6JFi7j55psZM2YMU6dO3eI4u3TpQr9+/bYob+jQocybN4/XXntt\ni+M77bTTALj44ot59dVXefHFF3n11VdZsmQJV1xxRa2vUb6cyM3MLC977LHHFjXncnfeeSdnn302\nBxxwADvttFNed5I8++yz6d27N23atGHkyJE8//zzAMyYMYOTTz6Zo446ipYtW3LhhRfywQcf8Le/\n/a1i25qa7Vu3bs2yZct44403aNmyJYMGDcprO4CWLVvy4x//mNatW9OmTRtGjx7NzJkz+fDDD4Ek\nOY8ePXqr7XbaaSeGDx/OtGnTAJg/fz5z585l2LBhAPz617/m+uuvp2PHjrRr146xY8dWrNsQnMjN\nzCwvS5YsoXPnzlvNX7p0KT169KiY7tWrV61JsySn413btm157733Ksrq1atXxTJJ9OjRgyVLluQV\n4w9+8AN69+7Ncccdx7777suECRPy2g6gS5cutG7dumK6d+/e9O3bl1mzZvHBBx8wc+ZMxowZU+W2\no0ePrkjOU6dOZcSIEbRp04YVK1awbt06PvvZz9K5c2c6d+7MiSeeyMqVK/OOqzYeotXMzGr1zDPP\nsHTpUo444oitlnXr1o3FixdXTC9cuLDevbn32GMP/v3vf28xb/HixXTv3h2ovXm8Xbt2TJw4kYkT\nJzJnzhyGDBnCwIEDGTJkCG3btmXdunUV6y5fvnyLHyBVlT1q1CimTp3Kxo0bOfDAA9lnn32q3O+x\nxx7LihUreOGFF5g+fTo/+9nPANhtt91o27YtL7/8Mt26dcvvRagj18jNzKxaa9eu5Z577mH06NGc\nfvrp9O3bd6t1Ro4cye9+9zteeeUV1q1bt03nf0eOHMm9997Lo48+yoYNG5g4cSI77rgjhx56KJDU\n5Gu6Pv3ee++tOFfdvn17WrVqRYsWSarr168fU6dOZdOmTdx///089thjtcYzatQoZs+ezY033rhV\nbTy31aFVq1accsopXHTRRaxevZpjjz0WSH4cfO1rX+OCCy5gxYoVQNKyMXv27Dq8KjVzIjczs60M\nHTqUjh070rNnT6655houvPBCfvvb31Ysz629nnDCCVxwwQUcddRR9OnTh6OPPrrGsmuqVffp04fb\nb7+db3/723Tp0oV7772XWbNm0apV0oA8duxYrrzySjp37sykSZO22n7+/Pkcc8wxtG/fnkGDBnHe\needV9Fz/+c9/zsyZM+nUqRPTpk3jv/7rv2p9HUpKSjj00EN56qmnOPXUU2s8jtGjR/Pwww8zcuTI\nih8PABMmTGDfffflc5/7HLvssgvHHXcc8+bNq3Xf+fL9yMvLJPvXPZpZdvTv33+ru5/tVVKS97Xe\n9dGra1cWLF9esPKtYVT12QDfj9zMrMlzkrX6cNO6mZlZhjmRm5mZZZgTuZmZWYY5kZuZmWWYE7mZ\nmVmGOZGbmZllmBO5mZlZhjmRm5lZ0XzrW9/iqquuavByf/zjH3P66ac3eLlNkRO5mVkTUdK9BEkF\ne5R0L6k9iNSTTz7JoEGD2GWXXdhtt9044ogj+Oc//9ngx3zjjTfywx/+sMHLhdpvsLK98MhuZmZN\nRNmSMhhfwPLH5zf869q1axk6dCg33XQTp5xyCh9//DFPPPEEbdq0qfM+I6LZJNRicY3czMy2MG/e\nPCQxcuRIJNGmTRuOOeYYDjrooK2arBcuXEiLFi3YtGkTAEOGDOGyyy7j8MMPp127dlx33XUMGDBg\ni/Kvv/56RowYAcDZZ5/N5ZdfDkDfvn257777KtbbuHEju+++O88//zwATz31FIMGDaJTp058+tOf\n3uLuZQsWLGDw4MF07NiR448/nrfffrswL04T5ERuZmZb6NOnDy1btuSss87i/vvv55133tlieeUa\nduXp22+/nVtuuYW1a9fyzW9+k3nz5lXcWhRg2rRpnHbaaVvtd/To0UydOrVi+v7776dLly7069eP\nJUuWcPLJJ3P55ZezevVqJk6cyJe+9CVWrlwJwJgxYxgwYABvv/02l112GZMnT97m1yErnMjNzGwL\n7du358knn6RFixZ8/etfp0uXLowYMYK33norr+3POuss9t9/f1q0aEGHDh0YPnw406ZNA5LbjM6d\nO5ehQ4dutd2YMWOYOXMmH374IZAk/NGjRwMwZcoUTjrpJI4//ngAjj76aPr37899993H4sWLefbZ\nZ7niiito3bo1RxxxRJXlb6+cyM3MbCv77bcfv/3tb1m0aBEvv/wyS5cu5YILLshr2x49emwxPXr0\n6IpEPnXqVEaMGMGOO+641Xa9e/emb9++zJo1iw8++ICZM2dW1NwXLlzIjBkz6Ny5M507d6ZTp078\n9a9/ZdmyZSxdupROnTqx0047VZTVq1ev+h565hQ0kUtqI+lpSc9JeknSuHT+OElvSvpX+jghZ5tL\nJM2X9Iqk4woZn5mZ1a5Pnz6ceeaZvPzyy+y8886sW7euYtmyZcu2Wr9yU/uxxx7LihUreOGFF5g+\nfTpjxoypdl+jRo1i6tSp3H333Rx44IHsvffeQPLj4IwzzmDVqlWsWrWK1atXs3btWn7wgx/QrVs3\nVq9ezQcffFBRzqJFi7b1sDOjoIk8Ij4ChkTEp4F+wImSBqaLJ0XEZ9LH/QCSDgBGAgcAJwI3yN0d\nzcwa1dy5c5k0aRJLliwBYPHixUybNo1DDz2UT33qUzz++OMsXryYNWvWcO2119ZaXqtWrTjllFO4\n6KKLWL16Nccee2y1644aNYrZs2dz4403bpHwv/KVrzBr1ixmz57Npk2b+PDDD3nsscdYunQpPXv2\npH///owbN47169fz5JNPMmvWrG1/ITKi4E3rEVH+060NyeVukU5XlaCHA9MjYkNELADmAwOrWM/M\nzAqkffv2PP300xxyyCG0b9+eww47jIMPPpiJEydyzDHHcOqpp3LwwQczYMCArc5FV1f3Gj16NA8/\n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\nM8swJ3IzM7MMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3IzM7MMcyI3MzPLMCdy\nMzOzDHMiNzMzyzAncjMzswxzIrcGs1dJCZIa7LFXSUmxDynzGvo98fti1vS0KnYAtv1YWFZGNGB5\nKitrwNKap4Z+T8Dvi1lT4xq5NV0tadCaZEl31yTNbPvjGrk1XRuB8Q1XXNn4/GuSe5WUsLABa569\nunZlwfLlDVaemVk5J3KzKvg0gZllhZvWzczMMsyJ3MzMLMOcyM3MrNnL8uWzTTKRSzpB0n8kzZN0\ncbHjMTOz7Vt5v5iGejRkZ9naNLlELqkF8L/A8cCBwGhJ+xc3KrNt1MKX0m2rhq4xlXTuXOxDajCl\npaXFDqHBbE/H0liaYq/1gcD8iFgIIGk6MBz4T1GjMtsWmyjapXQNTsmPkobSdc+uLH+z9kvzGvxK\ngtWrG7C04iotLWXw4MHFDqNBbE/H0liaYiLfE1icM/0mSXI3s6Yg2H5+lJhtB5pc07qZmZnlTxEN\nPRLztpH0OWB8RJyQTo8FIiIm5KzTtII2MzNrBBGx1XmtppjIWwJzgaOBZcA/gNER8UpRAzMzM2uC\nmtw58ojYKOnbwGySpv/fOImbmZlVrcnVyM3MzCx/zb6z2/Yy+Iyk30gqk/RisWPZVpK6S3pE0suS\nXpL03WLHVB+S2kh6WtJz6XGMK3ZM20pSC0n/kjSz2LFsC0kLJL2Qvjf/KHY820JSR0l3Snol/c4c\nUuyY6kpSn/S9+Ff6d01Wv/cAkr4n6d+SXpQ0RdIOBd1fc66Rp4PPzCM5H78UeAYYFRGZu2Zd0uHA\ne8BtEXFwsePZFpJKgJKIeF7SzsA/geEZfV/aRsS6tO/HX4HvRkRmE4ek7wGfBTpExLBix1Nfkl4H\nPhsRmb+YXNLvgMci4lZJrYC2EfFukcOqt/T/8pvAIRGxuLb1mxpJewBPAvtHxMeS7gDujYjbCrXP\n5l4jrxh8JiLWA+WDz2RORDwJZP6fEkBELI+I59Pn7wGvkIwvkDkRsS592oakT0pmfzlL6g58Abil\n2LE0ALEd/P+T1AE4IiJuBYiIDVlO4qljgNeymMRztATalf+wIqkoFkzmP8jbqKrBZzKZMLZXkvYC\n+gFPFzeS+kmbop8DlgMPRsQzxY5pG1wPXESGf4zkCOBBSc9I+lqxg9kGewNvS7o1bZa+WdJOxQ5q\nG50KTCt2EPUVEUuBnwKLgCXAOxHxUCH32dwTuTVhabP6XcD5ac08cyJiU0R8GugOHCKpb7Fjqg9J\nJwFlaUuJ0keWDYqIz5C0MJyXnprKolbAZ4BfpcezDhhb3JDqT1JrYBhwZ7FjqS9Ju5C07PYC9gB2\nljSmkPts7ol8CdAzZ7p7Os+KLG2Sugv4fUTcXex4tlXa3PkocEKxY6mnQcCw9NzyNGCIpIKd8yu0\niFiW/l0B/InsDgP9JrA4Ip5Np+8iSexZdSLwz/R9yapjgNcjYlVEbAT+CBxWyB0290T+DLCvpF5p\nr8JRQJZ7424PNaVyvwXmRMTPix1IfUnaTVLH9PlOwLFk9OY/EXFpRPSMiH1IviePRMQZxY6rPiS1\nTVt7kNQOOA74d3Gjqp+IKAMWS+qTzjoamFPEkLbVaDLcrJ5aBHxO0o5K7i50NEk/n4JpcgPCNKbt\nafAZSVOBwcCukhYB48o7wGSNpEHAacBL6fnlAC6NiPuLG1mddQMmp71wWwB3RMR9RY7JoCvwp3So\n51bAlIiYXeSYtsV3gSlps/TrwNlFjqdeJLUlqc1+vdixbIuI+Ieku4DngPXp35sLuc9mffmZmZlZ\n1jX3pnUzM7NMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3KzZkzSD9PbLb6QjtU9\nMB2ve/90+dpqtjtE0lPpLSdflnR540ZuZuWa9YAwZs2ZpM+RjDXeLyI2SOoM7BARuQNyVDfQxGTg\nyxHx73T0qv0KHK6ZVcM1crPmqxvwdkRsAEjHhl4u6VFJ5eN1S9KktNb+oKRd0/ldgLJ0uyi/V7yk\ncZJuk/Q3SXMl/XdjH5RZc+NEbtZ8zQZ6SvqPpF9J+nwV67QD/hERBwGPA+PS+T8D5kr6g6SvS2qT\ns80nSYYLPgy4XFJJ4Q7BzJzIzZqpiHif5E5ZXwdWANMlnVlptY3AjPT57cDh6bZXAp8l+TEwBvhL\nzjZ3R8THEbESeITs3lnMLBN8jtysGYvkZguPA49Legk4k+rPi5O7LCLeAG6SdAuwQlKnyuuQ3I3P\nN3QwKyDXyM2aKUl9JO2bM6sfsKDSai2BL6fPTwOeTLf9Qs46fYANwDvp9HBJO6Tn048kuV2wmRWI\na+RmzdfOwC/Te6ZvAF4laWa/K2ed94CBkn5E0rnt1HT+6ZImAevSbcdERCQd2HkRKAV2Ba6IiOWN\ncCxmzZZvY2pmDUbSOGBtREwqdixmzYWb1s3MzDLMNXIzM7MMc43czMwsw5zIzczMMsyJ3MzMLMOc\nyM3MzDLMidzMzCzDnMjNzMwy7P8DGdQiBOtrj5wAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2) If passenger['Sex'] == 'female' and passenger['Parch'] < 4, they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZmb11CTibt26ceqpp3LvvfcyefJk5s+fD8D48eO58sora5f/3ve+x5577kl5eTl33313kzXVo48+\nmiuvvJLDDz+c7t27c9JJJ7FmzZra+TNmzOCAAw6gV69eHHPMMSxYsACAs88+m8WLFzNixAi6d+/O\npEmT6m179erVjBgxgp49e7Lrrrty1FFH1c6r29xfuA9z586lb9++fPe736VPnz6cd955DB48mNmz\nZ9cuv3HjRnbffXeeeeYZFi1aRKdOndi0aRPTp09n6NChm8Vx0003MXr0aAA++OADLrroIvr370+f\nPn04//zzef/995v5D2TnRN6MsvLiNnXVvMrKszV5mZmVwtChQykvL+fxxx+vN+/BBx/kxhtv5OGH\nH+all17ioYceanZ7U6dOZfLkyaxcuZL333+/NikvXLiQcePG8f3vf5+VK1dy8sknc+qpp7JhwwZ+\n8pOf0K9fP371q1/x1ltvcdFFF9Xb7g033EDfvn1ZvXo1r7/+Otdee23tvOaawVesWMEbb7zB4sWL\nueOOOxg3bhxTpkzZbD979+7NQQcdtNn2RowYwcKFC/n73/++2f6deeaZAFx66aW8/PLLPPfcc7z8\n8sssXbqUq6++utljlJVvCNOM6qXVUNkG5VRma/IyMyuVPffcc7Oac4377ruP8ePHs99++wFQWVnJ\ntGnTmtzW+PHjGThwIABjxoypvZPZ9OnTOfXUUznmmGMAuOiii7jlllv43e9+x5FHHgk03Wy/3Xbb\nsXz5cl599VUGDhzI8OHDa+c119zfuXNnvv3tb7PddtsBMHbsWD7zmc/w3nvvseOOOzJ16lTGjh1b\nb72ddtqJUaNGMXXqVK644gpeeuklFixYwMiRIwH44Q9/yPPPP0+PHj0AmDBhAmeeeWaTnQVbwjVy\nMzPLZOnSpfTq1ave9GXLltG3b9/a8f79+zebNMsKOt517dqVt99+u3Zb/fv3r50nib59+7J06dJM\nMV5yySUMHDiQE044gX322YeJEydmWg+gd+/etUkcYODAgQwePJiZM2fy7rvvMmPGDMaNa/ihnmPH\njmXq1KkATJkyhdGjR7PDDjuwcuVK1q9fz2c/+1l69epFr169OPnkk1m9enXmuJrjGrmZmTXrqaee\nYtmyZRxxxBH15vXp04clS5bUji9atGiLe3Pvueee/PWvf91s2pIlSygvLweabx7feeedmTRpEpMm\nTWL+/PkcffTRHHLIIRx99NF07dqV9evX1y67YsWKzX6ANLTtM844gylTprBx40b2339/Pv7xjzdY\n7vHHH8/KlSt59tlnmTZtGjfffDMAu+22G127duWFF16gT58+2Q5CC7lGbmZmjVq3bh2/+tWvGDt2\nLGeddRaDBw+ut8yYMWP48Y9/zIsvvsj69eu36vzvmDFjmDVrFo8++igbNmxg0qRJ7LjjjgwbNgxI\navJNXZ8+a9as2nPV3bp1o0uXLnTqlKS6gw46iClTprBp0yYefPBB5s6d22w8Z5xxBnPmzOG2226r\nVxsvbHXo0qULp512GhdffDFr167l+OOPB5IfB1/84he58MILWblyJZC0bMyZM6cFR6VpTuRmZlbP\niBEj6NGjB/369eO6667joosu4q677qqdX1h7Pemkk7jwwgs55phjGDRoEMcee2yT226qVj1o0CB+\n9rOf8R//8R/07t2bWbNmMXPmTLp0SRqQJ0yYwDXXXEOvXr248cYb663/0ksvcdxxx9GtWzeGDx/O\nV7/61dqe67fccgszZsygZ8+eTJ06lX/+539u9jiUlZUxbNgw5s2bx+mnn97kfowdO5aHH36YMWPG\n1P54AJg4cSL77LMPhx12GLvssgsnnHACCxcubLbsrPw88ubLapPOblTm/7pLM8tuyJAh9Z5+NqCs\nLPO13lui/x578NqKFUXbvrWOht4b4OeRm5m1e06ytiXctG5mZpZjTuRmZmY55kRuZmaWY07kZmZm\nOeZEbmZmlmNO5GZmZjnmRG5mZpZjTuRmZlYyX/nKV1rtKWCFvv3tb3PWWWe1+nbbIydyM7N2oqy8\nDElFe5WVlzUfROqJJ55g+PDh7LLLLuy2224cccQR/OlPf2r1fb7tttv45je/2erbheYfsLKt8J3d\nzMzaieql1UW9JXR1Zbbbv65bt44RI0Zw++23c9ppp/HBBx/w+OOPs8MOO7S4zIjoMAm1VFwjNzOz\nzSxcuBBJjBkzBknssMMOHHfccRxwwAH1mqwXLVpEp06d2LRpEwBHH300V1xxBYcffjg777wz3/ve\n9xg6dOhm27/pppsYPXo0AOPHj+fKK68EYPDgwcyePbt2uY0bN7L77rvzzDPPADBv3jyGDx9Oz549\n+cxnPrPZ08tee+01Kioq6NGjByeeeCKrVq0qzsFph5zIzcxsM4MGDaJz586ce+65PPjgg7zxxhub\nza9bw647/rOf/Ywf/ehHrFu3ji9/+cssXLiw9tGiAFOnTuXMM8+sV+7YsWOZMmVK7fiDDz5I7969\nOeigg1i6dCmnnnoqV155JWvXrmXSpEn867/+K6tXrwZg3LhxDB06lFWrVnHFFVcwefLkrT4OeeFE\nbmZmm+nWrRtPPPEEnTp14ktf+hK9e/dm9OjRvP7665nWP/fcc/nkJz9Jp06d6N69O6NGjWLq1KlA\n8pjRBQsWMGLEiHrrjRs3jhkzZvDee+8BScIfO3YsAPfccw+nnHIKJ554IgDHHnssQ4YMYfbs2SxZ\nsoSnn36aq6++mu22244jjjiiwe1vq5zIzcysnn333Ze77rqLxYsX88ILL7Bs2TIuvPDCTOv27dt3\ns/GxY8fWJvIpU6YwevRodtxxx3rrDRw4kMGDBzNz5kzeffddZsyYUVtzX7RoEdOnT6dXr1706tWL\nnj178uSTT7J8+XKWLVtGz5492WmnnWq31b9//y3d9dwpaiKXdKekaknPNTDvvyRtktSrYNplkl6S\n9KKkE4oZm5mZZTNo0CDOOeccXnjhBT72sY+xfv362nnLly+vt3zdpvbjjz+elStX8uyzzzJt2jTG\njRvXaFlnnHEGU6ZM4YEHHmD//fdn7733BpIfB2effTZr1qxhzZo1rF27lnXr1nHJJZfQp08f1q5d\ny7vvvlu7ncWLF2/tbudGsWvkdwMn1p0oqRw4HlhUMG0/YAywH3AycKvc1dHMrM0tWLCAG2+8kaVL\nlwKwZMkSpk6dyrBhw/j0pz/NY489xpIlS3jzzTe5/vrrm91ely5dOO2007j44otZu3Ytxx9/fKPL\nnnHGGcyZM4fbbrtts4T/+c9/npkzZzJnzhw2bdrEe++9x9y5c1m2bBn9+vVjyJAhXHXVVXz44Yc8\n8cQTzJw5c+sPRE4UNZFHxBPA2gZm3QRcXGfaKGBaRGyIiNeAl4BDihmfmZnV161bN/7whz9w6KGH\n0q1bNz73uc9x4IEHMmnSJI477jhOP/10DjzwQIYOHVrvXHRj9a+xY8fy8MMPM2bMGDp16tTo8mVl\nZQwbNox58+Zx+umn104vLy/ngQce4Nprr6V3797079+fSZMm1faWv+eee5g3bx677ror11xzDeec\nc05rHY52TxFR3AKk/sDMiDgwHR8JVETENyS9Cnw2ItZI+m/g9xExJV3uR8DsiPh5A9uMYsddUFZR\nr+usVZlcb2lmHcOQIUN4+umnN5tWVl6WXEteJHvstQcr/rGiaNu31tHQewOSfBQR9X4ptekNYSTt\nBFxO0qxuZmYFnGRtS7T1nd0GAgOAZ9Pz3+XAnyUdAiwF+hUsW55Oa1BlZWXtcEVFBRUVFa0frZmZ\nWYlUVVVRVVXV7HJt0bQ+gKRp/VMNzHsVODgi1koaDNwDHArsBfwW+ERDbehuWjezvGus+dSspU3r\nxb78bArwO2CQpMWSxtdZJAABRMR8YDowH5gNnN9m2drMzCynitq0HhGNXyyYzP94nfHrgOuKGZOZ\nmdm2xHd2MzMzyzEncjMzsxzz88jNzEqgT58+DBkypNRhWDvUp0+fFi3vRG5mVgId6RaiVlxuWjcz\nM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdy\nMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxz\nIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPL\nMSdyMzOzHHMiNzMzy7GiJnJJd0qqlvRcwbTvSnpR0jOS/ldS94J5l0l6KZ1/QjFjMzMz2xYUu0Z+\nN3BinWlzgP0j4iDgJeAyAEmDgTHAfsDJwK2SVOT4zMzMcq2oiTwingDW1pn2UERsSkfnAeXp8Ehg\nWkRsiIjXSJL8IcWMz8zMLO9KfY78PGB2OrwXsKRg3tJ0mpmZmTWiZIlc0jeBDyNiaqliMDMzy7su\npShU0rnAPwHHFExeCvQtGC9PpzWosrKydriiooKKiorWDNHMzKykqqqqqKqqanY5RURRA5E0AJgZ\nEZ9Kx08CbgCOjIjVBcsNBu4BDiVpUv8t8IloIEBJDU0uCklQ2QYFVUJb7ZOZmeWPJCKiXifwotbI\nJU0BKoBdJS0GrgIuB7YHfpt2Sp8XEedHxHxJ04H5wIfA+W2Wrc3MzHKq6DXyYnCN3MzMOprGauSl\n7rVuZmZmW8GJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3M\nzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInc\n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\n26CgSvDTYc3MrDGSiAjVnZ7leeRblbCb8HXgHknbkTyIZTzQGZgu6TxgETCmSGWbmZltE7Lc2W0d\nH52r3h7YDngnIrpvTcER8SwwtIFZx23Nds3MzDqSLDXybjXDkgSMAg4rZlBmZmaWTZZe67Ui8Uvg\nxCLFY2ZmZi2QpWn9XwpGOwFDgPeKFpGZmZllluXys8Lnkm8guQf6qKJEY2ZmZi2S5Ry5n0tuZmbW\nTjWayCVd2cR6ERHXFCEeMzMza4GmauTvNDBtZ+ALwK6AE7mZmVmJNZrII+KGmmFJ3YALSG7aMg24\nobH1zMzMrO00eY5cUi/gG8CZJI8VPTgi1rZFYGZmZta8ps6Rfw/4F+AO4FMR8XabRWVmZmaZNPrQ\nFEmbSJ52toHNHycqks5uW3WL1q3hh6aYmVlH0+KHpkREi+76ZmZmZm3PydrMzCzHnMjNzMxyzInc\nzMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMec\nyM3MzHLMidzMzCzHnMjNzMxyzIncmlVWXoakor/KystKvatmZrnT6PPIzWpUL62GyjYop7K6+IWY\nmW1jXCM3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8uxkiZySZ0k/VnSjHS8p6Q5khZI+o2k\nHqWMz8zMrL0rdY38AmB+wfgE4KGI2Bd4BLisJFGZmZnlRMkSuaRy4J+AHxVMHgVMTocnA6PbOi4z\nM7M8KeUNYW4CLgYKm8/3iIhqgIhYIWn3xlaWVOTwzMzM2r+S1MglnQJUR8QzQFMZOZqa0RYvMzOz\n9qxUNfLhwEhJ/wTsBHST9FNghaQ9IqJaUhnwemMbqCwYrkhfZmZm24qqqiqqqqqaXU4Rpa13SjoK\n+K+IGCnpu8DqiJgo6VKgZ0RMaGCdNota0Cb3GacSSv2/aIykDn8MzMxKTRIRUa8Vu9S91uu6Hjhe\n0gLg2HTczMzMGlHyp59FxFxgbjq8BjiutBGZmZnlR3urkZuZmVkLOJGbmZnlmBO5mZlZjjmRm5mZ\n5ZgTuZmZWY45kZuZmeWYE7mZmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTuZmZWY45kZuZmeWYE7mZ\nmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTuZmZWY45kZtlVFZehqSiv8rKy0q9q2aWI11KHYBZXlQv\nrYbKNiinsrr4hZjZNsM1cjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMz\nsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8uxkiRySeWSHpH0\ngqTnJX09nd5T0hxJCyT9RlKPUsRnZmaWF6WqkW8AvhER+wPDgK9K+iQwAXgoIvYFHgEuK1F8ZmZm\nuVCSRB4RKyLimXT4beBFoBwYBUxOF5sMjC5FfGZmZnlR8nPkkgYABwHzgD0iohqSZA/sXrrIzMzM\n2r+SJnJJHwPuBy5Ia+ZRZ5G642ZmZlagS6kKltSFJIn/NCIeSCdXS9ojIqollQGvN7Z+ZcFwRfoy\nMzPbVlRVVVFVVdXscoooTaVX0k+AVRHxjYJpE4E1ETFR0qVAz4iY0MC6bRa1YPNfDcVSCaX6XzRH\nUoc/BuDjYGalJYmIUN3pJamRSxoOnAk8L+kvJE3olwMTgemSzgMWAWNKEZ/ly4CyMhZVV5c6DDOz\nkihJIo+IJ4HOjcw+ri1jsfxbVF3dJp0p6v0MNjNrB0rea93MzMy2nBO5mZlZjjmRm5mZ5ZgTuZmZ\nWY45kZuZmeWYE7mZmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTeY4NKCtDUtFfZmbWfpXs6We29Xxr\nUjMzc43czMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ\n3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzH\nnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM2sRcrKy5BU9FdZeVmpdzW3BpS1zf9oQJn/R+1B\nl1IH0BBJJwE3k/zQuDMiJpY4JDNLVS+thso2KKeyuviFbKMWVVcTbVCOqv0/ag/aXY1cUifgf4AT\ngf2BsZI+WdqozCwP2qomWtarV6l31dqJqqqqUofQ/hI5cAjwUkQsiogPgWnAqBLHZGY5UFMTLfar\neu3aNtsna9+cyBu2F7CkYPwf6TQza0Rb1UQllXpXrT0R7ba/RFt9Jm6eNKkIB7Zl2uU5cjNrmbY6\nJwrgVG61gnbbX6LN+gm8804blNJMDBFt9fHPRtJhQGVEnJSOTwCisMObpPYVtJmZWRuIiHq/pdtj\nIu8MLACOBZYDfwTGRsSLJQ3MzMysHWp3TesRsVHSfwBz+OjyMydxMzOzBrS7GrmZmZll1x57rbcL\nkk6S9DdJCyVdWup4SkHSnZKqJT1X6lhKRVK5pEckvSDpeUlfL3VMpSBpB0l/kPSX9DhcVeqYSkVS\nJ0l/ljSj1LGUiqTXJD2bvh/+WOp4SkVSD0n3SXox/Y44tCRxuEZen5Kb0iwkOU+/DHgKOCMi/lbS\nwNqYpMOBt4GfRMSBpY6nFCSVAWUR8YykjwF/AkZ1tPcCgKSuEbE+7cfyJPD1iOhwX+KS/hP4LNA9\nIkaWOp5SkPQK8NmI6NAX1Ev6MTA3Iu6W1AXoGhFvtXUcrpE3zDelASLiCaBDf1AjYkVEPJMOvw28\nSAe9r0FErE8HdyDpX9PhagGSyoF/An5U6lhKTHTw/CGpO3BERNwNEBEbSpHEoYP/I5rgm9JYPZIG\nAAcBfyhtJKWRNin/BVgB/DYinip1TCVwE3AxHfBHTB0B/FbSU5K+WOpgSmRvYJWku9NTLXdI2qkU\ngTiRm2WQNqvfD1yQ1sw7nIjYFBGfAcqBQyUNLnVMbUnSKUB12kIjOva9cYZHxMEkrRNfTU/DdTRd\ngIOBH6THYj0woRSBOJE3bCnQr2C8PJ1mHVB67ut+4KcR8UCp4ym1tPnwUeCkUsfSxoYDI9Pzw1OB\noyX9pMQxlURELE//rgR+QXI6sqP5B7AkIp5Ox+8nSextzom8YU8B+0jqL2l74Aygo/ZQ7eg1D4C7\ngPkRcUupAykVSbtJ6pEO7wQcD3SoDn8RcXlE9IuIj5N8JzwSEWeXOq62Jqlr2kKFpJ2BE4C/ljaq\nthcR1cASSYPSSccC80sRS7u7IUx74JvSJCRNASqAXSUtBq6q6djRUUgaDpwJPJ+eHw7g8oh4sLSR\ntbk+wOT0io5OwL0RMbvEMVlp7AH8Ir1VdhfgnoiYU+KYSuXrwD2StgNeAcaXIghffmZmZpZjblo3\nMzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI366AkbUzvEf28pHsl7dgK2zxH\n0n+3Rnxmlo0TuVnH9U5EHBwRnwI+BL6cdcX0xjCN8c0pzNqQE7mZATwO7AMg6RfpU62el/R/ahaQ\ntE7SpPQOd4dJGiLpSUnPSJqX3q4TYC9Jv5a0QNLEEuyLWYfiW7SadVyC2ofCnAz8Op0+PiLeSJva\nn5L0vxGxFtgZ+H1EXJTekvJvwGkR8ef03tvvpet/muRxrx8CCyR9PyL80CGzInGN3Kzj2knSn4E/\nAouAO9PpF0p6BphH8uS/T6TTNwA/T4f3BZZFxJ8BIuLtiNiYzns4HX+f5CES/Yu/K2Ydl2vkZh3X\n+vQ5yrUkHQUcAxwaEe9LehSo6QT3Xmz+cIbGnor3fsHwRvw9Y1ZUrpGbdVwNJeIewNo0iX8SOKyR\n5RcAZZI+CyDpY5I6Fy9UM2uMfymbdVwN9S5/EPiypBdIkvXvG1o+Ij6UdDrwP+nzydcDx2Usw8xa\nkR9jamZmlmNuWjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3Iz\nM7Mc+/+RC0tGUupuygAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Parch', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3) If passenger['Sex'] == 'female' and passenger['Age'] > 50, they are more likely to survive. " ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n+vfv3+ww1old65LUwtoS8aBBgzj88MO55pprmDRpEg888AAAJ598MmeffXb7+hdddBHbbbcdw4cP\n5wc/+EGXLfL999+fs88+m3322YctttiCsWPH8uyzz7Yvnzp1KrvvvjtDhgzhgAMO4OGHHwbghBNO\n4Mknn2TcuHFsscUWXHzxxauVvWjRIsaNG8fgwYPZaqut2G+//dqXdezur63DbbfdxogRI/jqV7/K\nsGHD+NCHPsSuu+7KjTfe2L7+ihUr2HrrrbnvvvuYPXs2/fr1Y+XKlVx77bXsueeqdxy/9NJLOeqo\nowB45ZVXOPXUUxk5ciTDhg3j4x//OC+//HI3f4F1ZyKXJLXbc889GT58OHfcccdqy26++WYuueQS\nbr31Vh599FFuueWWbsubMmUKkyZNYuHChbz88svtSfmRRx5h4sSJfP3rX2fhwoUceuihHH744Sxf\nvpwf/vCHbL/99vz85z/nhRde4NRTT12t3K997WuMGDGCRYsW8fTTT/PlL3+5fVl33f1PPfUUzz33\nHE8++STf/va3mThxIpMnT16lnkOHDmWPPfZYpbxx48bxyCOP8Je//GWV+n3wgx8E4PTTT+exxx7j\nj3/8I4899hhz587l/PPP7/YYrSsTuSRpFdttt90qLec21113HSeffDJvfvOb2WSTTTj33HO7Levk\nk09mp512YqONNmL8+PHcd999AFx77bUcfvjhHHDAAfTv359TTz2VZcuW8dvf/rZ926667QcOHMj8\n+fN54okn6N+/P6NHj65rO4D+/ftz3nnnMXDgQDbaaCMmTJjA1KlTeemll4AiOU+YMGG17TbZZBOO\nPPJIpkyZAsCjjz7Kww8/zBFHHAHAd77zHS699FK23HJLNttsM84444z2dRvJRC5JWsXcuXMZMmTI\navPnzZvHiBEj2qdHjhzZbdLcdttt219vuummvPjii+1ljawZKxARjBgxgrlz59YV4+c+9zl22mkn\n3vve9/LGN76RCy+8sK7tAIYOHcrAgQPbp3faaSd23XVXpk2bxrJly5g6dSoTJ05c47YTJkxoT86T\nJ0/mqKOOYqONNmLhwoUsXbqUd77znQwZMoQhQ4Zw6KGHsmjRorrjWlsOdpMktbvnnnuYN28e++67\n72rLhg0bxpw5c9qnZ8+evdaj1rfbbjv+/Oc/rzJvzpw5DB8+HOi+e3yzzTbj4osv5uKLL+aBBx5g\n//33Z6+99mL//fdn0003ZenSpe3rPvXUU6t8AVlT2cceeyyTJ09mxYoV7LbbbrzhDW9Y434PPvhg\nFi5cyP3338/VV1/NZZddBsDrXvc6Nt10U2bOnMmwYcPqOwjriS1ySRJLlizh5z//ORMmTOD4449n\n1113XW2d8ePH81//9V88+OCDLF26dJ3O/44fP54bbriBX//61yxfvpyLL76YjTfemL333hsoWvJd\nXZ9+ww03tJ+rHjRoEAMGDKBfvyKl7bHHHkyePJmVK1dy8803c9ttt3Ubz7HHHsv06dO54oorVmuN\n1/Y6DBgwgKOPPprTTjuNxYsXc/DBBwPFl4MPf/jDfOYzn2HhwoVA0bMxffr0HhyVtWMil6QWNm7c\nOLbccku23357vvKVr3DqqaeuculZbet17NixfOYzn+GAAw5g55135sADD+yy7K5a1TvvvDNXXnkl\n//qv/8rQoUO54YYbmDZtGgMGFB3FZ5xxBl/84hcZMmQIl1xyyWrbP/rooxx00EEMGjSI0aNH84lP\nfKJ95Prll1/O1KlTGTx4MFOmTOEf//Efuz0O2267LXvvvTd33XUXxxxzTJf1mDBhArfeeivjx49v\n//IAcOGFF/LGN76Rd73rXbz2ta/lve99L4888ki3+15XPo9ckhpo1KhRqzz9rC/dEEbN0/F90cbn\nkUtSH2eS1fpm17okSRVmIpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKFmcglSQ33sY99\njC996UvrvdzzzjuP448/fr2XWyXeEEaSetEp//cUZs2b1bDyd9huB755af03nbnzzjs5/fTTmTlz\nJgMGDODNb34zl112Ge985zvXa1xXXHHFei2v1to+uGVDYSKXpF40a94sRh43svsV17b8K2fVve6S\nJUsYN24c3/rWtzj66KN55ZVXuOOOO9hoo416vN/MbPmE2ix2rUtSi3rkkUeICMaPH09EsNFGG3HQ\nQQex++67r9ZlPXv2bPr168fKlSsB2H///TnrrLPYZ5992GyzzbjooovYc889Vyn/0ksv5aijjgLg\n5JNP5uyzzwZg11135cYbb2xfb8WKFWy99dbcd999ANx1112MHj2awYMH8/a3v32Vp5fNmjWLMWPG\nsOWWW3LIIYfwzDPPNObgVIiJXJJa1M4770z//v056aSTuPnmm3nuuedWWd6xhd1x+sorr+S73/0u\nS5Ys4ZRTTuGRRx5pf7QowJQpU/jgBz+42n4nTJjA5MmT26dvvvlmhg4dyh577MHcuXM5/PDDOfvs\ns1m8eDEXX3wxH/jAB1i0aBEAEydOZM899+SZZ57hrLPOYtKkSet8HKrORC5JLWrQoEHceeed9OvX\nj4985CMMHTqUo446iqeffrqu7U866STe9KY30a9fP7bYYguOPPJIpkyZAhSPGX344YcZN27cattN\nnDiRqVOn8tJLLwFFwp8wYQIAV111FYcddhiHHHIIAAceeCCjRo3ixhtvZM6cOdx7772cf/75DBw4\nkH333XeN5bcaE7kktbBddtmF73//+zz55JPMnDmTefPm8ZnPfKaubUeMGLHK9IQJE9oT+eTJkznq\nqKPYeOONV9tup512Ytddd2XatGksW7aMqVOntrfcZ8+ezbXXXsuQIUMYMmQIgwcP5je/+Q3z589n\n3rx5DB48mE022aS9rJEjGzfeoCoc7CZJAoqu9hNPPJFvf/vbvPOd72Tp0qXty+bPn7/a+h272g8+\n+GAWLlzI/fffz9VXX81ll13W6b6OPfZYJk+ezIoVK9htt93YcccdgeLLwQknnMC3vvWt1bZ58skn\nWbx4McuWLWtP5k8++ST9+rV2m7S1ay9JLezhhx/mkksuYe7cuQDMmTOHKVOmsPfee/O2t72N22+/\nnTlz5vD8889zwQUXdFvegAEDOProoznttNNYvHgxBx98cKfrHnvssUyfPp0rrriCiRMnts8/7rjj\nmDZtGtOnT2flypW89NJL3HbbbcybN4/tt9+eUaNGcc455/Dqq69y5513Mm3atHU/EBVnIpekFjVo\n0CDuvvtu/uEf/oFBgwbx7ne/m7e+9a1cfPHFHHTQQRxzzDG89a1vZc8991ztXHRnl5pNmDCBW2+9\nlfHjx6/SUu64/rbbbsvee+/NXXfdxTHHHNM+f/jw4Vx//fV8+ctfZujQoYwcOZKLL764fbT8VVdd\nxV133cVWW23FF7/4RU488cT1dTgqKzKz2TF0KiKyL8cnSd0ZNWoU9957b/t0X7shjJqj4/uiTUSQ\nmT26IN9z5JLUi0yyWt/sWpckqcJM5JIkVZiJXJKkCvMcufqkRg8I6uscsCSpXiZy9UmNfkJUX9eT\nJ1hJam12rUuSVGG2yCWpgYYNG8aoUaOaHYb6mGHDhq23skzkktRA3kJUjWbXuiRJFdbwFnlEzAKe\n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\nzEQuSVKF/T/SWc9tOWWciwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4) If passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male', they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\nIJOp1pRd4pIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoAT+uSpAYaPnw4Y8aMaXYYWscM\nHz58tbcxYUtSA61Pl85UY9klLklSBTQ0YUfE9yNiUUTcWzNvcETMiIiHIuKXEbFpI2OQJKk3aHQL\n+zLgoDbzTgN+lZlvAX4NfKHBMUiSVHkNTdiZeRuwpM3sI4DLy8eXA0c2MgZJknqDZhzD3jIzFwFk\n5kJgyybEIElSpawLg868p6MkSV1oxmldiyJiq8xcFBHDgCc7W3nSpEmtj8eOHcvYsWMbG50kST1k\n5syZzJw5s651I7OxDdyI2AaYnplvK6fPB57JzPMj4lRgcGae1sG22ej4qioiYFI3FjgJfK4lqbki\ngsyM9pY1+rSuKcBvge0jYk5ETAS+ChwQEQ8B+5XTkiSpEw3tEs/MCR0s2r+R9UqS1NusC4POJElS\nF0zYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQK\nMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirA\nhC1JUgWYsCVJqgATtiRJFWDClnqBbYYNIyK67W+bYcOavUuS2ujX7AAkrb3ZixaR3VheLFrUjaVJ\n6g62sCVJqgATtiRJFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJ\nFWDCliSpAkzYkiRVgAlbkqQKMGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSpAkzYkiRV\ngAlbkqQKaFrCjoh/jYj7IuLeiLgyIjZoViySJK3rmpKwI2Jr4NPAOzNzZ6AfcGwzYpEkqQr6NbHu\nvsAmEbECGADMb2IskiSt05rSws7M+cA3gDnAPODZzPxVM2KRJKkKmtUlvhlwBDAa2Bp4Q0RMaEYs\nkiRVQZdd4hGxCfBiZq6IiO2BHYBfZOara1Hv/sBjmflMWcdPgD2AKW1XnDRpUuvjsWPHMnbs2LWo\nVpKkdcfMmTOZOXNmXetGZna+QsQfgL2BwcBvgDuBVzLzuDUNMCJ2A74P7Aq8DFwG3JmZ326zXnYV\n3/oqImBSNxY4CXyuqysi6M5XL/D9IDVDRJCZ0d6yerrEIzOXAf8IfCczjwJ2WpuAMvP3wLXAn4B7\nKL4fLl2bMiVJ6s3qGSUeEbE7cBzw4XJe37WtODPPBs5e23IkSVof1NPC/izwBeCnmXl/RLwJuKmx\nYUmSpFqdtrAjoi9weGYe3jIvMx8DPtPowCRJ0us6bWFn5nJgrx6KRZIkdaCeY9h/iohpwDXA31pm\nZuZPGhaVJElaST0JeyPgaWDfmnkJmLAlSeohXSbszJzYE4FIkqSOdTlKPCK2j4gbI+K+cnrniDij\n8aFJkqQW9ZzW9V2K07peBcjMe/FWmJIk9ah6EvaA8spktV5rRDCSJKl99STspyJiO4qBZkTEPwML\nGhqVJElaST2jxD9FcZ3vHSJiHvA48IGGRiVJklZSzyjxx4D9y9ts9snMpY0PS5Ik1arnftifazMN\n8Bzwh8y8u0FxSZKkGvUcwx4DfBx4Y/n3MeBg4LsR8fkGxiZJkkr1HMMeAbwzM18AiIizgOuA9wJ/\nAL7WuPAkSRLU18LeEni5ZvpVYKvMfLHNfEmS1CD1tLCvBO6IiJ+V0+OAKeUgtAcaFpkkSWpVzyjx\ncyPiBmCPctbHM/Ou8vFxDYtMkiS1qqeFDfBHYF7L+hExKjPnNCwqSZK0knpO6/o0cBawCFgOBMVV\nz3ZubGiSJKlFPS3szwJvycynGx2MJElqXz2jxOdSXChFkiQ1ST0t7MeAmRFxHTWncWXmBQ2LSpIk\nraSehD2n/Nug/JMkST2sntO6zgaIiAGZuazxIUmSpLa6PIYdEbtHxAPAX8rpt0fEdxoemSRJalXP\noLOLgIOApwEy8x6K64hLkqQeUk/CJjPntpm1vAGxSJKkDtQz6GxuROwBZET0pzgv+8HGhiVJkmrV\n08L+OPApinthzwN2KaclSVIPqWeU+FN4kw9JkpqqnlHiX4uIQRHRPyJujIjFEfGBnghOkiQV6ukS\nPzAznwcOA54A3gyc0sigJEnSyupJ2C3d5ocC12Sm1xWXJKmH1TNK/OcR8RfgReATETEUeKmxYUmS\npFpdtrAz8zRgD2BMZr4K/A04otGBSZKk19Uz6Owo4NXMXB4RZwA/ArZueGSSJKlVPcewv5SZSyNi\nL2B/4PvAxY0NS5Ik1aonYbdchvRQ4NLMvA5vsylJUo+qJ2HPi4hLgGOA6yNiwzq3kyRJ3aSexHs0\n8EvgoMx8FhiC52FLktSj6hklviwzfwI8FxGjgP6U98aWJEk9o55R4odHxMPA48DN5f9fNDowSZL0\nunq6xM8F3gPMysxtKUaK397QqCRJ0krqSdivZubTQJ+I6JOZNwFjGhyXJEmqUc+lSZ+NiDcAtwBX\nRsSTFFdr3OJCAAAPxUlEQVQ7kyRJPaSeFvYRwDLgX4EbgEeBcY0MSpIkrazTFnZEHElxO80/Z+Yv\ngcu7q+KI2BT4HvBWYAXwocy8o7vKlySpN+kwYUfEd4CdgN8C50bEbpl5bjfW/U3g+sw8KiL6AQO6\nsWxJknqVzlrY7wXeXt70YwBwK8WI8bUWEYOAvTPzgwCZ+RrwfHeULUlSb9TZMexXMnM5FBdPAaIb\n690WeCoiLouIP0bEpRGxcTeWL0lSr9JZC3uHiLi3fBzAduV0AJmZO69lve8EPpWZd0XERcBpwFlt\nV5w0aVLr47FjxzJ27Ng1rnTYiGEsmrdojbdvz1Zv3IqFf13YrWVKktYPM2fOZObMmXWtG5nZ/oKI\n0Z1tmJmzVzuy18veCvhdZr6pnN4LODUzx7VZLzuKbw3rhUndVlxhEnRnjPXq9n2Z1Jz9UPeICLrz\n1St/lXdjiZLqERFkZrs92h22sNcmIXclMxdFxNyI2D4zZwH7AQ80qj5JkqqungunNMpnKC7E0h94\nDJjYxFgkSVqnNS1hZ+Y9wK7Nql+SpCrpcJR4RNxY/j+/58KRJEnt6ayFPTwi9gAOj4iraHNaV2b+\nsaGRSZKkVp0l7DOBLwEjgAvaLEtg30YFJUmSVtbZKPFrgWsj4kvdfElSSZK0mrocdJaZ50bE4RSX\nKgWYmZk/b2xYkiSpVpe314yIrwCfpThP+gHgsxHx5UYHJkmSXlfPaV2HArtk5gqAiLgc+BPwxUYG\nJkmSXtdlC7u0Wc3jTRsRiCRJ6lg9LeyvAH+KiJsoTu16L8WNOiRJUg+pZ9DZ1IiYyetXJTs1M709\nlSRJPaiuS5Nm5gJgWoNjkSRJHaj3GLYkSWoiE7YkSRXQacKOiL4R8ZeeCkaSJLWv04SdmcuBhyJi\nVA/FI0mS2lHPoLPBwP0R8Xvgby0zM/PwhkUlSZJWUk/C/lLDo5AkSZ2q5zzsmyNiNPB3mfmriBgA\n9G18aJIkqUU9N//4CHAtcEk5643A/zYyKEmStLJ6Tuv6FLAn8DxAZj4MbNnIoCRJ0srqSdgvZ+Yr\nLRMR0Q/IxoUkSZLaqidh3xwRXwQ2jogDgGuA6Y0NS5Ik1aonYZ8GLAb+DHwMuB44o5FBSZKkldUz\nSnxFRFwO3EHRFf5QZtolLklSD+oyYUfEocB/AY9S3A9724j4WGb+otHBSZKkQj0XTvkGsE9mPgIQ\nEdsB1wEmbEmSekg9x7CXtiTr0mPA0gbFI0mS2tFhCzsi/rF8eFdEXA9cTXEM+yjgzh6ITZIklTrr\nEh9X83gR8L7y8WJg44ZFJEmSVtFhws7MiT0ZiCRJ6lg9o8S3BT4NbFO7vrfXlCSp59QzSvx/ge9T\nXN1sRWPDkSRJ7aknYb+Umd9qeCSSJKlD9STsb0bEWcAM4OWWmZn5x4ZFJUmSVlJPwn4bcDywL693\niWc5LUmSekA9Cfso4E21t9iUJEk9q54rnd0HbNboQCRJUsfqaWFvBvwlIu5k5WPYntYlSVIPqSdh\nn9XwKCRJUqfquR/2zT0RiCRJ6lg9VzpbSjEqHGADoD/wt8wc1MjAJEnS6+ppYQ9seRwRARwBvKeR\nQUmSpJXVM0q8VRb+FzioQfFIkqR21NMl/o81k32AMcBLDYtIkiStop5R4rX3xX4NeIKiW1ySJPWQ\neo5he19sSZKarMOEHRFndrJdZua5a1t5RPQB7gL+6oVYJEnqWGeDzv7Wzh/Ah4FTu6n+zwIPdFNZ\nkiT1Wh22sDPzGy2PI2IgRXKdCFwFfKOj7eoVESOA9wPnAZ9b2/IkSerNOj2tKyKGRMS/A/dSJPd3\nZuapmflkN9R9IXAKr1+URZIkdaDDhB0RXwfuBJYCb8vMSZm5pDsqjYhDgUWZeTcQ5Z8kSepAZ6PE\n/43i7lxnAKcXFzkDiuSaa3lp0j2BwyPi/cDGwMCIuCIzT2i74qRJk1ofjx07lrFjx65FtZIkrTtm\nzpzJzJkz61o3MpvbIx0R7wP+rb1R4hGR3RlfRMCkbiuuMAma8Rx2+75Mas5+qHtERLceWyp/lXdj\niZLqERFkZru9zqt1aVJJktQc9VzprKHK23d6C09JkjphC1uSpAowYUuSVAEmbEmSKsCELUlSBZiw\nJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKW\nJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuS\npAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmS\nKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmq\nABO2JEkVYMKWJKkCmpKwI2JERPw6Iu6PiD9HxGeaEYckSVXRr0n1vgZ8LjPvjog3AH+IiBmZ+Zcm\nxSNJ0jqtKS3szFyYmXeXj18AHgTe2IxYJEmqgqYfw46IbYBdgDuaG4kkSeuupibssjv8WuCzZUtb\nkiS1o1nHsImIfhTJ+oeZ+bOO1ps0aVLr47FjxzJ27NiGx6b1wzbDhjF70aJuK2/0VlvxxMKF3Vbe\n+srXReuTmTNnMnPmzLrWjcxsbDQdVRxxBfBUZn6uk3WyO+OLCJjUbcUVJkEznsNu35dJzdmPZooI\nunOPg+Y9h+5LJ+Wx/r23VV0RQWZGe8uadVrXnsBxwL4R8aeI+GNEHNyMWCRJqoKmdIln5m+Avs2o\nW5KkKmr6KHFJktQ1E7YkSRVgwpYkqQJM2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoA\nE7YkSRVgwpYkqQJM2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLAlSaoAE7YkSRVgwpYkqQJM\n2JIkVYAJW5KkCjBhS5JUASZsSZIqwIQtSVIFmLDVdMNGDCMiuu1v2Ihhzd6l6uuLr4m0junX7ACk\nRfMWwaRuLG/Sou4rbH21HF8TaR1jC1uSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKW\nJKkCTNiSJFWACVuSpAowYUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKWJKkCTNiSJFWACVuS\npAowYUuSVAEmbEmSKsCELUlSBZiwJUmqgKYl7Ig4OCL+EhGzIuLUZsUhSVIVNCVhR0Qf4D+Bg4Cd\ngPERsUMzYpGkqpg5c2azQ+gWvWU/oGf3pVkt7N2AhzNzdma+ClwFHNGkWCSpEnpLoust+wHrR8J+\nIzC3Zvqv5TxJktQOB51JklQBkZk9X2nEe4BJmXlwOX0akJl5fpv1ej44SZKaKDOjvfnNSth9gYeA\n/YAFwO+B8Zn5YI8HI0lSBfRrRqWZuTwi/gWYQdEt/32TtSRJHWtKC1uSJK2e9WbQWW+5UEtEfD8i\nFkXEvc2OZW1ExIiI+HVE3B8Rf46IzzQ7pjUVERtGxB0R8adyX85qdkxrIyL6RMQfI2Jas2NZWxHx\nRETcU742v292PGsqIjaNiGsi4sHyM/PuZse0JiJi+/K1+GP5/7mqfvYj4l8j4r6IuDciroyIDRpe\n5/rQwi4v1DKL4pj5fOBO4NjM/EtTA1sDEbEX8AJwRWbu3Ox41lREDAOGZebdEfEG4A/AEVV8TQAi\nYkBmLivHZ/wG+ExmVjJBRMS/Au8CBmXm4c2OZ21ExGPAuzJzSbNjWRsR8d/AzZl5WUT0AwZk5vNN\nDmutlN/LfwXenZlzu1p/XRIRWwO3ATtk5isR8WPgusy8opH1ri8t7F5zoZbMvA2o9JcPQGYuzMy7\ny8cvAA9S4XPxM3NZ+XBDirEhlfwlHBEjgPcD32t2LN0kqPj3XEQMAvbOzMsAMvO1qifr0v7Ao1VL\n1jX6Apu0/ICiaAw2VKXfyKvBC7WswyJiG2AX4I7mRrLmym7kPwELgf/LzDubHdMauhA4hYr+4GhH\nAv8XEXdGxEeaHcwa2hZ4KiIuK7uSL42IjZsdVDc4Bpja7CDWRGbOB74BzAHmAc9m5q8aXe/6krC1\njiq7w68FPlu2tCspM1dk5juAEcC7I2LHZse0uiLiUGBR2fMR5V/V7ZmZ76ToNfhUeUipavoB7wS+\nXe7LMuC05oa0diKiP3A4cE2zY1kTEbEZRS/taGBr4A0RMaHR9a4vCXseMKpmekQ5T01UdiVdC/ww\nM3/W7Hi6Q9lVeRNwcLNjWQN7AoeXx32nAvtEREOPyTVaZi4o/y8GfkpxeKxq/grMzcy7yulrKRJ4\nlR0C/KF8Xapof+CxzHwmM5cDPwH2aHSl60vCvhN4c0SMLkfyHQtUeQRsb2n9/AB4IDO/2exA1kZE\nbBERm5aPNwYOACo3eC4zv5iZozLzTRSfkV9n5gnNjmtNRcSAsgeHiNgEOBC4r7lRrb7MXATMjYjt\ny1n7AQ80MaTuMJ6KdoeX5gDviYiNIiIoXpOGX0ukKRdO6Wm96UItETEFGAtsHhFzgLNaBqNUSUTs\nCRwH/Lk89pvAFzPzhuZGtkaGA5eXo177AD/OzOubHJNgK+Cn5SWO+wFXZuaMJse0pj4DXFl2JT8G\nTGxyPGssIgZQtFA/2uxY1lRm/j4irgX+BLxa/r+00fWuF6d1SZJUdetLl7gkSZVmwpYkqQJM2JIk\nVYAJW5KkCjBhS5JUASZsSZIqwIQtrQci4vTyVoD3lNej3q28JvUO5fKlHWz37oi4vbwV4v0RcWbP\nRi6pxXpx4RRpfRYR76G4lvYumflaRAwBNsjM2gtXdHRBhsuBf87M+8orOr2lweFK6oAtbKn3Gw48\nlZmvAZTXP14YETdFRMs1qSMiLihb4f8XEZuX84cCi8rtsuV+5RFxVkRcERG/jYiHIuL/9fROSesb\nE7bU+80ARkXEXyLi2xHx3nbW2QT4fWa+FbgFOKucfxHwUET8T0R8NCI2rNnmbRSXyd0DODMihjVu\nFySZsKVeLjP/RnF3p48Ci4GrIuLENqstB64uH/8I2Kvc9lzgXRRJfwLwi5ptfpaZr2Tm08Cvqead\nsKTK8Bi2tB7I4qYBtwC3RMSfgRPp+Lg1tcsy83Hgkoj4HrA4Iga3XYfi7nHemEBqIFvYUi8XEdtH\nxJtrZu0CPNFmtb7AP5ePjwNuK7d9f8062wOvAc+W00dExAbl8e73UdzGVlKD2MKWer83AP9R3rP7\nNeARiu7xa2vWeQHYLSK+RDHI7Jhy/vERcQGwrNx2QmZmMWCce4GZwObAOZm5sAf2RVpveXtNSast\nIs4ClmbmBc2ORVpf2CUuSVIF2MKWJKkCbGFLklQBJmxJkirAhC1JUgWYsCVJqgATtiRJFWDCliSp\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5) If passenger['Age'] < 10 and passenger['Pclass'] == 2, they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhv3NWrCg7loigssvv5znnnuOWbNmceKJJ3LWWWfx8Y9/vO519IaW5xuxbNmyZpdQNwNbkvqwlsBd\nd911Ofjgg/nVr37F1KlTuffeewE45phjOPnkk1vn/853vsMmm2zCiBEj+NnPftZly3Pvvffm5JNP\nZo899mC99dbjgAMO4Jlnnmmdfumll/LOd76TIUOGsM8++3D//fcD8JGPfITZs2czfvx41ltvPaZM\nmbLCup9++mnGjx/P4MGD2XDDDdlrr71ap7XfTV/7HGbOnMnIkSP59re/zfDhw/nYxz7GdtttxxVX\nXNE6/7Jly9h44425/fbbmTVrFv369WP58uVcdNFF7Lzzzm3q+N73vsdhhx0GwCuvvMLxxx/PqFGj\nGD58OJ/97Gd5+eWXu/kfqJ+BLUlqtfPOOzNixAhuuOGGFaZdeeWVnH322VxzzTU8+OCDXH311d2u\n74ILLmDq1KksXLiQl19+uTV8H3jgASZNmsQPf/hDFi5cyIEHHsjBBx/Ma6+9xs9//nM222wzLrvs\nMhYvXszxxx+/wnq/+93vMnLkSJ5++mmefPJJzjzzzNZp3e2+nj9/Ps8++yyzZ8/mxz/+MZMmTWLa\ntGltnudGG23ETjvt1GZ948eP54EHHuDhhx9u8/w+9KEPAXDCCSfw0EMPceedd/LQQw8xd+5cTjvt\ntG5fo3oZ2JKkNjbZZJM2LeEWF198Mccccwzbbrsta6+9dl23wDzmmGPYaqutWHPNNZkwYQK33347\nABdddBEHH3ww++yzD/379+f444/nxRdf5E9/+lPrsl3tbh84cCDz5s3j0UcfpX///uy+++51LQfQ\nv39/Tj31VAYOHMiaa67JxIkTufTSS3nppZeAIoQnTpy4wnJrr702hx56KBdccAEADz74IPfffz+H\nHHIIAOeddx7f+973WH/99VlnnXU48cQTW+ddHQxsSVIbc+fOZciQISuMf+KJJxg5cmTr8KhRo7oN\nx2E1neAGDRrE888/37quUaNGtU6LCEaOHMncuXPrqvErX/kKW221FePGjWPrrbfmrLPOqms5gI02\n2oiBAwe2Dm+11VZst912TJ8+nRdffJFLL72USZMmdbjsxIkTW0N42rRpHHbYYay55posXLiQpUuX\n8t73vpchQ4YwZMgQDjzwQJ5++um66+qOlyaVJLW65ZZbeOKJJ9hzzz1XmDZ8+HDmzJnTOjxr1qxV\n7j29ySabcPfdd7cZN2fOHEaMGAF0v1t7nXXWYcqUKUyZMoV7772Xvffem1122YW9996bQYMGsXTp\n0tZ558+f3+aHRkfrPvLII5k2bRrLli1j++23Z8stt+xwu2PHjmXhwoXccccdXHjhhXz/+98H4K1v\nfSuDBg3innvuYfjw4fW9CCvJFrYkiSVLlnDZZZcxceJEjjrqKLbbbrsV5pkwYQL/+7//y3333cfS\npUvf0PHZCRMmcPnll3Pttdfy2muvMWXKFNZaay122203oGiZd3V+9+WXX956LHnddddlwIAB9OtX\nRNpOO+3EtGnTWL58OVdeeSUzZ87stp4jjzySGTNmcO65567Quq7dizBgwACOOOIIvvzlL7No0SLG\njh0LFD8CPvnJT/LFL36RhQsXAsWeihkzZqzEq9I1A1uS+rDx48ez/vrrs9lmm/HNb36T448/np/+\n9Ket02tbowcccABf/OIX2Weffdhmm23Yd999u1x3V63kbbbZhl/+8pd8/vOfZ6ONNuLyyy9n+vTp\nDBhQ7Pg98cQTOf300xkyZAhnn332Css/+OCD7Lfffqy77rrsvvvufO5zn2vtKf6DH/yASy+9lMGD\nB3PBBRfwz//8z92+DsOGDWO33Xbj5ptv5oMf/GCXz2PixIlcc801TJgwofVHAsBZZ53F1ltvzfve\n9z422GADxo0bxwMPPNDttuvl/bAlqYFGjx7d5m5dmw8btlLnSq+sUUOH8tj8+Q1bv1aP9u+LFt4P\nW5J6CcNUq8pd4pIkVYCBLUlSBRjYkiRVgIEtSVIF2OlMknqZO++4g1defbXZZTTNGgMHsuO73tXs\nMnodA1uSeplXXn2V0c0uoolu7cM/VrriLnFJkirAwJYkNdxnvvUtzqi5gtrqcuqpp3LUUUet9vX2\nRu4Sl6QeNGzEMBbMbdyVzoZuPIT5l19V9/w33n47J/znf3LPI48woH9/tt1iC75/3HG8d9ttV2td\n55544mpdX61VvQFJ1RjYktSDFsxdAJMbuP7JK97HujNLXniB8ccdx4+++lWO2G8/Xnn1VW647TbW\nrLn1ZL0ys88EZ7O4S1yS+qgHZs8mIpgwdiwRwZprrMF+u+7KO7femlPPO4+jTj65dd5Z8+bRb5dd\nWL58OQB7f/rTnHTuuezxiU+wzp578p1f/IKdP/KRNuv/3rRpHHb88QAcc+qpnPw//wPAdhMmcMVN\nN7XOt2zZMjYeN47b778fgLvuuovdd9+dwYMH8+53v7vN3bYee+wxxowZw/rrr8/+++/PU0891ZgX\npxcysCWpj9pms83o368fH508mSv/9CeeXbKkzfT2Leb2w7/8/e/5vyedxJKZM/n04YfzwOzZPPz4\n463TL7jqKj50wAErbHfiuHFMu/LK1uEr//xnNtpgA3Z6+9uZ++ST/Md//Acnn3wyixYtYsqUKfzL\nv/wLTz/9NACTJk1i55135qmnnuKkk05i6tSpb/h1qAoDW5L6qHXXWYcbzzuPfv368W9nnslGY8dy\n2PHH8+Qz9e1W/+jBB/OOzTenX79+rPeWt3DoXntxwVXF8fMHZ8/m/lmzGL/nnissN+mAA7j0hht4\n6eWXgSLYJ+6/PwDnX3kle+yxB/uXw/vuuy+jR4/miiuuYM6cOdx6662cdtppDBw4kD333JPx48ev\njpeiEgxsSerD3r755vz05JOZfdll3POrX/HEwoV8sYP7T3dk5NChbYYnjhvXGtjTrrqKw8aMYa01\n11xhua1GjGC7LbZg+g038OJLL3HpDTe0tsRnzZvH1VdfzZAhQxgyZAiDBw/mpptuYt68eTzxxBMM\nHjyYtddeu3Vdo0aNWtWnXjl2OpMkAbDNqFEcfdBB/Pi3v+W973gHS196qXXavA6OFbffRT52111Z\n+Oyz3PHAA1w4YwbfP+64Trd15NixTLvqKpYtX872W27JFptuChQ/Aj7wgQ/w61//eoVlZs+ezaJF\ni3jxxRdbQ3v27Nn069c32p5941lKklZw/2OPcfb55zP3yScBmDN/PhfMmMFuO+zAu972Nq6/7Tbm\nzJ/Pc88/z7fqOFY8YMAAjth3X778wx+yaPFixu66a6fzHjluHDNuvplzL7mESeXub4APH3ggN9xw\nAzNmzGD58uW89NJLzJw5kyeeeILNNtuM0aNHc8opp/Dqq69y4403Mn369Df+QlSEgS1JfdS666zD\nX+6+m12POYZ199qL93/84+y49dZMOfZY9tt1Vz44diw7TprEzkcfvcKx6M5O4Zq4//5cc8stTBg7\ntk3Lt/38w976VnbbYQduvvtuPjh2bOv4EUOHMmXKFM4880w22mgjRo0axZQpU1p7p59//vncfPPN\nbLjhhpx++ukcffTRq+vl6PUiM5tdQ6ciIntzfZLUndGjR3Prrbe2Dve2C6f0RrdSvG5vZu3fFy0i\n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\nklQB/x/DUF1sByf4KwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Pclass', [\"Age < 10\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Accuracy\n", "81.71% on the data itself. \n", "\n", "This is kind of cheating because I can see that all males under the age of 10 who have 0-1 siblings (or spouses) survived. So theoretically I could get 100% accuracy by specifying one category (combination of filters)-outcome pair for every single datapoint." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "After several iterations of exploring and conditioning on the data, you have built a useful algorithm for predicting the survival of each passenger aboard the RMS Titanic. The technique applied in this project is a manual implementation of a simple machine learning model, the *decision tree*. A decision tree splits a set of data into smaller and smaller groups (called *nodes*), by one feature at a time. Each time a subset of the data is split, our predictions become more accurate if each of the resulting subgroups are more homogeneous (contain similar labels) than before. The advantage of having a computer do things for us is that it will be more exhaustive and more precise than our manual exploration above. [This link](http://www.r2d3.us/visual-intro-to-machine-learning-part-1/) provides another introduction into machine learning using a decision tree.\n", "\n", "A decision tree is just one of many models that come from *supervised learning*. In supervised learning, we attempt to use features of the data to predict or model things with objective outcome labels. That is to say, each of our data points has a known outcome value, such as a categorical, discrete label like `'Survived'`, or a numerical, continuous value like predicting the price of a house.\n", "\n", "### Question 5\n", "*Think of a real-world scenario where supervised learning could be applied. What would be the outcome variable that you are trying to predict? Name two features about the data used in this scenario that might be helpful for making the predictions.* " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "**Answer**: *Replace this text with your answer to the question above.*\n", "\n", "**Scenario**: A bank issuing loans.\n", "\n", "**Outcome variable**: Whether or not someone will return a loan.\n", "\n", "**Features that may be useful**: (1) Person's annual income, (2) whether that person has a criminal record." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p0-titanic-survival-exploration/README.md ================================================ # Project 0: Introduction and Fundamentals ## Titanic Survival Exploration ### Install This project requires **Python 2.7** and the following Python libraries installed: - [NumPy](http://www.numpy.org/) - [Pandas](http://pandas.pydata.org) - [matplotlib](http://matplotlib.org/) - [scikit-learn](http://scikit-learn.org/stable/) You will also need to have software installed to run and execute an [iPython Notebook](http://ipython.org/notebook.html) Udacity recommends our students install [Anaconda](https://www.continuum.io/downloads), a pre-packaged Python distribution that contains all of the necessary libraries and software for this project. ### Code Template code is provided in the notebook `titanic_survival_exploration.ipynb` notebook file. Additional supporting code can be found in `titanic_visualizations.py`. While some code has already been implemented to get you started, you will need to implement additional functionality when requested to successfully complete the project. ### Run In a terminal or command window, navigate to the top-level project directory `titanic_survival_exploration/` (that contains this README) and run **one** of the following commands: ```bash jupyter notebook titanic_survival_exploration.ipynb ``` or ```bash ipython notebook titanic_survival_exploration.ipynb ``` This will open the iPython Notebook software and project file in your web browser. ## Data The dataset used in this project is included as `titanic_data.csv`. This dataset is provided by Udacity and contains the following attributes: - `survival` : Survival (0 = No; 1 = Yes) - `pclass` : Passenger Class (1 = 1st; 2 = 2nd; 3 = 3rd) - `name` : Name - `sex` : Sex - `age` : Age - `sibsp` : Number of Siblings/Spouses Aboard - `parch` : Number of Parents/Children Aboard - `ticket` : Ticket Number - `fare` : Passenger Fare - `cabin` : Cabin - `embarked` : Port of Embarkation (C = Cherbourg; Q = Queenstown; S = Southampton) ================================================ FILE: p0-titanic-survival-exploration/report.html ================================================ titanic_survival_exploration

Machine Learning Engineer Nanodegree

Introduction and Foundations

Project 0: Titanic Survival Exploration

In 1912, the ship RMS Titanic struck an iceberg on its maiden voyage and sank, resulting in the deaths of most of its passengers and crew. In this introductory project, we will explore a subset of the RMS Titanic passenger manifest to determine which features best predict whether someone survived or did not survive. To complete this project, you will need to implement several conditional predictions and answer the questions below. Your project submission will be evaluated based on the completion of the code and your responses to the questions.

Tip: Quoted sections like this will provide helpful instructions on how to navigate and use an iPython notebook.

Getting Started

To begin working with the RMS Titanic passenger data, we'll first need to import the functionality we need, and load our data into a pandas DataFrame.
Run the code cell below to load our data and display the first few entries (passengers) for examination using the .head() function.

Tip: You can run a code cell by clicking on the cell and using the keyboard shortcut Shift + Enter or Shift + Return. Alternatively, a code cell can be executed using the Play button in the hotbar after selecting it. Markdown cells (text cells like this one) can be edited by double-clicking, and saved using these same shortcuts. Markdown allows you to write easy-to-read plain text that can be converted to HTML.

In [1]:
import numpy as np
import pandas as pd

# RMS Titanic data visualization code 
from titanic_visualizations import survival_stats
from IPython.display import display
%matplotlib inline

# Load the dataset
in_file = 'titanic_data.csv'
full_data = pd.read_csv(in_file)

# Print the first few entries of the RMS Titanic data
display(full_data.head())
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

From a sample of the RMS Titanic data, we can see the various features present for each passenger on the ship:

  • Survived: Outcome of survival (0 = No; 1 = Yes)
  • Pclass: Socio-economic class (1 = Upper class; 2 = Middle class; 3 = Lower class)
  • Name: Name of passenger
  • Sex: Sex of the passenger
  • Age: Age of the passenger (Some entries contain NaN)
  • SibSp: Number of siblings and spouses of the passenger aboard
  • Parch: Number of parents and children of the passenger aboard
  • Ticket: Ticket number of the passenger
  • Fare: Fare paid by the passenger
  • Cabin Cabin number of the passenger (Some entries contain NaN)
  • Embarked: Port of embarkation of the passenger (C = Cherbourg; Q = Queenstown; S = Southampton)

Since we're interested in the outcome of survival for each passenger or crew member, we can remove the Survived feature from this dataset and store it as its own separate variable outcomes. We will use these outcomes as our prediction targets.
Run the code cell below to remove Survived as a feature of the dataset and store it in outcomes.

In [2]:
# Store the 'Survived' feature in a new variable and remove it from the dataset
outcomes = full_data['Survived']
data = full_data.drop('Survived', axis = 1)

# Show the new dataset with 'Survived' removed
display(data.head())
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S

The very same sample of the RMS Titanic data now shows the Survived feature removed from the DataFrame. Note that data (the passenger data) and outcomes (the outcomes of survival) are now paired. That means for any passenger data.loc[i], they have the survival outcome outcome[i].

To measure the performance of our predictions, we need a metric to score our predictions against the true outcomes of survival. Since we are interested in how accurate our predictions are, we will calculate the proportion of passengers where our prediction of their survival is correct. Run the code cell below to create our accuracy_score function and test a prediction on the first five passengers.

Think: Out of the first five passengers, if we predict that all of them survived, what would you expect the accuracy of our predictions to be?

In [3]:
def accuracy_score(truth, pred):
    """ Returns accuracy score for input truth and predictions. """
    
    # Ensure that the number of predictions matches number of outcomes
    if len(truth) == len(pred): 
        
        # Calculate and return the accuracy as a percent
        return "Predictions have an accuracy of {:.2f}%.".format((truth == pred).mean()*100)
    
    else:
        return "Number of predictions does not match number of outcomes!"
    
# Test the 'accuracy_score' function
predictions = pd.Series(np.ones(5, dtype = int))
print accuracy_score(outcomes[:5], predictions)
Predictions have an accuracy of 60.00%.

Tip: If you save an iPython Notebook, the output from running code blocks will also be saved. However, the state of your workspace will be reset once a new session is started. Make sure that you run all of the code blocks from your previous session to reestablish variables and functions before picking up where you last left off.

Making Predictions

If we were asked to make a prediction about any passenger aboard the RMS Titanic whom we knew nothing about, then the best prediction we could make would be that they did not survive. This is because we can assume that a majority of the passengers (more than 50%) did not survive the ship sinking.
The predictions_0 function below will always predict that a passenger did not survive.

In [4]:
def predictions_0(data):
    """ Model with no features. Always predicts a passenger did not survive. """

    predictions = []
    for _, passenger in data.iterrows():
        
        # Predict the survival of 'passenger'
        predictions.append(0)
    
    # Return our predictions
    return pd.Series(predictions)

# Make the predictions
predictions = predictions_0(data)

Question 1

Using the RMS Titanic data, how accurate would a prediction be that none of the passengers survived?
Hint: Run the code cell below to see the accuracy of this prediction.

In [5]:
print accuracy_score(outcomes, predictions)
Predictions have an accuracy of 61.62%.

Answer: 61.62% (Accuracy when we always predict Survived=0.)


Let's take a look at whether the feature Sex has any indication of survival rates among passengers using the survival_stats function. This function is defined in the titanic_visualizations.py Python script included with this project. The first two parameters passed to the function are the RMS Titanic data and passenger survival outcomes, respectively. The third parameter indicates which feature we want to plot survival statistics across.
Run the code cell below to plot the survival outcomes of passengers based on their sex.

In [6]:
survival_stats(data, outcomes, 'Sex')

Examining the survival statistics, a large majority of males did not survive the ship sinking. However, a majority of females did survive the ship sinking. Let's build on our previous prediction: If a passenger was female, then we will predict that they survived. Otherwise, we will predict the passenger did not survive.
Fill in the missing code below so that the function will make this prediction.
Hint: You can access the values of each feature for a passenger like a dictionary. For example, passenger['Sex'] is the sex of the passenger.

In [7]:
def predictions_1(data):
    """ Model with one feature: 
            - Predict a passenger survived if they are female. """
    
    predictions = []
    for _, passenger in data.iterrows():
        
        # Remove the 'pass' statement below 
        # and write your prediction conditions here
        if passenger['Sex'] == 'female':
            predictions.append(1)
        else:
            predictions.append(0)
    
    # Return our predictions
    return pd.Series(predictions)

# Make the predictions
predictions = predictions_1(data)

Question 2

How accurate would a prediction be that all female passengers survived and the remaining passengers did not survive?
Hint: Run the code cell below to see the accuracy of this prediction.

In [8]:
print accuracy_score(outcomes, predictions)
Predictions have an accuracy of 78.68%.

Answer: 78.68% (Accuracy when we predict Survived=1 if and only if passenger is female.)


Using just the Sex feature for each passenger, we are able to increase the accuracy of our predictions by a significant margin. Now, let's consider using an additional feature to see if we can further improve our predictions. For example, consider all of the male passengers aboard the RMS Titanic: Can we find a subset of those passengers that had a higher rate of survival? Let's start by looking at the Age of each male, by again using the survival_stats function. This time, we'll use a fourth parameter to filter out the data so that only passengers with the Sex 'male' will be included.
Run the code cell below to plot the survival outcomes of male passengers based on their age.

In [9]:
survival_stats(data, outcomes, 'Age', ["Sex == 'male'"])

Examining the survival statistics, the majority of males younger than 10 survived the ship sinking, whereas most males age 10 or older did not survive the ship sinking. Let's continue to build on our previous prediction: If a passenger was female, then we will predict they survive. If a passenger was male and younger than 10, then we will also predict they survive. Otherwise, we will predict they do not survive.
Fill in the missing code below so that the function will make this prediction.
Hint: You can start your implementation of this function using the prediction code you wrote earlier from predictions_1.

In [10]:
def predictions_2(data):
    """ Model with two features: 
            - Predict a passenger survived if they are female.
            - Predict a passenger survived if they are male and younger than 10. """
    
    predictions = []
    for _, passenger in data.iterrows():
        
        # Remove the 'pass' statement below 
        # and write your prediction conditions here
        if passenger['Sex'] == 'female' or passenger['Age'] < 10:
            predictions.append(1)
        else:
            predictions.append(0)
    
    # Return our predictions
    return pd.Series(predictions)

# Make the predictions
predictions = predictions_2(data)

Question 3

How accurate would a prediction be that all female passengers and all male passengers younger than 10 survived?
Hint: Run the code cell below to see the accuracy of this prediction.

In [11]:
print accuracy_score(outcomes, predictions)
Predictions have an accuracy of 79.35%.

Answer: 79.35% (Accuracy when we predict a passenger survived if and only if they are female or if they are male and younger than 10.)


Adding the feature Age as a condition in conjunction with Sex improves the accuracy by a small margin more than with simply using the feature Sex alone. Now it's your turn: Find a series of features and conditions to split the data on to obtain an outcome prediction accuracy of at least 80%. This may require multiple features and multiple levels of conditional statements to succeed. You can use the same feature multiple times with different conditions.
Pclass, Sex, Age, SibSp, and Parch are some suggested features to try.

Use the survival_stats function below to to examine various survival statistics.
Hint: To use mulitple filter conditions, put each condition in the list passed as the last argument. Example: ["Sex == 'male'", "Age < 18"]

In [21]:
survival_stats(data, outcomes, 'SibSp', ["Age < 10", "Sex == 'male'"])
In [31]:
survival_stats(data, outcomes, 'Age', ["Sex == 'male'", "Pclass == 1"])
In [61]:
survival_stats(data, outcomes, 'Age', ["Sex == 'female'", "Pclass == 1"])
In [51]:
survival_stats(data, outcomes, 'SibSp', ["Sex == 'female'"])
In [52]:
survival_stats(data, outcomes, 'Age', ["Sex == 'female'", "SibSp < 3"])

After exploring the survival statistics visualization, fill in the missing code below so that the function will make your prediction.
Make sure to keep track of the various features and conditions you tried before arriving at your final prediction model.
Hint: You can start your implementation of this function using the prediction code you wrote earlier from predictions_2.

In [89]:
def predictions_3(data):
    """ Model with multiple features. Makes a prediction with an accuracy of at least 80%. """
    
    predictions = []
    for _, passenger in data.iterrows():
        
        # Remove the 'pass' statement below 
        # and write your prediction conditions here
        if passenger['SibSp'] > 4:
            predictions.append(0)
        elif passenger['Sex'] == 'female' and passenger['Parch'] < 4:
            predictions.append(1)
        # This one didn't improve accuracy (2)
        elif passenger['Sex'] == 'female' and passenger['Pclass'] == 1 and passenger['Age'] > 10:
            predictions.append(1)
        # Removing this one didn't change accuracy (1)
        elif passenger['Sex'] == 'female' and passenger['Age'] > 50:
            predictions.append(1)
        elif passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male':
            predictions.append(1)
        elif passenger['Age'] < 10 and passenger['Pclass'] == 2:
            predictions.append(1)
        else:
            predictions.append(0)
    
    # Return our predictions
    return pd.Series(predictions)

# Make the predictions
predictions = predictions_3(data)
print accuracy_score(outcomes, predictions)
Predictions have an accuracy of 81.71%.

Question 4

Describe the steps you took to implement the final prediction model so that it got an accuracy of at least 80%. What features did you look at? Were certain features more informative than others? Which conditions did you use to split the survival outcomes in the data? How accurate are your predictions?
Hint: Run the code cell below to see the accuracy of your predictions.

In [72]:
print accuracy_score(outcomes, predictions)
Predictions have an accuracy of 81.71%.

Answer:

Steps:

  1. Think about what features might matter.
    • E.g. women and children may have been given priority to go on lifeboats. People with family members (Parch, SibSp > 0) might be more likely to survive if they are children because there are people taking care of them. They might be less likely to survive if they are parents trying to make sure their children are rescued.
  2. Visualise the features using the survival_stats function provided. See if the features are informative. They can be informative if (1) they show that almost all people of a certain group survive or if (2) they show that almost all people of a certain group don't survive.
    • See above for visualisations of informative features.
  3. Choose filters and add them to the model.
  4. Run the model and see if it produces a higher accuracy.
    • If it doesn't, ditch the filter.
  5. Repeat with different features or filters.

Features I looked at

  • SibSp
  • Age
  • Parch
  • Sex
  • Pclass

Certain features were more informative than others. For example, looking at SibSp for males under the age of 10 was more useful than looking at Age for females because

  • the former told me that all males under the age of 10 with SibSp < 3 survived, whereas
  • for most age groups, there were a significant number of females that survived and a significant number of females that did not survive so it did not provide me with much information I could use to make splits.
In [59]:
survival_stats(data, outcomes, 'SibSp', ["Age < 10", "Sex == 'male'"])
In [91]:
survival_stats(data, outcomes, 'Age', ["Sex == 'female'"])

Splits

1) If passenger['SibSp'] > 4, they are less likely to survive.

In [65]:
survival_stats(data, outcomes, 'SibSp')

2) If passenger['Sex'] == 'female' and passenger['Parch'] < 4, they are more likely to survive.

In [45]:
survival_stats(data, outcomes, 'Parch', ["Sex == 'female'"])

3) If passenger['Sex'] == 'female' and passenger['Age'] > 50, they are more likely to survive.

In [75]:
survival_stats(data, outcomes, 'Age', ["Sex == 'female'"])

4) If passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male', they are more likely to survive.

In [80]:
survival_stats(data, outcomes, 'SibSp', ["Age < 10", "Sex == 'male'"])

5) If passenger['Age'] < 10 and passenger['Pclass'] == 2, they are more likely to survive.

In [90]:
survival_stats(data, outcomes, 'Pclass', ["Age < 10"])

Accuracy

81.71% on the data itself.

This is kind of cheating because I can see that all males under the age of 10 who have 0-1 siblings (or spouses) survived. So theoretically I could get 100% accuracy by specifying one category (combination of filters)-outcome pair for every single datapoint.

Conclusion

After several iterations of exploring and conditioning on the data, you have built a useful algorithm for predicting the survival of each passenger aboard the RMS Titanic. The technique applied in this project is a manual implementation of a simple machine learning model, the decision tree. A decision tree splits a set of data into smaller and smaller groups (called nodes), by one feature at a time. Each time a subset of the data is split, our predictions become more accurate if each of the resulting subgroups are more homogeneous (contain similar labels) than before. The advantage of having a computer do things for us is that it will be more exhaustive and more precise than our manual exploration above. This link provides another introduction into machine learning using a decision tree.

A decision tree is just one of many models that come from supervised learning. In supervised learning, we attempt to use features of the data to predict or model things with objective outcome labels. That is to say, each of our data points has a known outcome value, such as a categorical, discrete label like 'Survived', or a numerical, continuous value like predicting the price of a house.

Question 5

Think of a real-world scenario where supervised learning could be applied. What would be the outcome variable that you are trying to predict? Name two features about the data used in this scenario that might be helpful for making the predictions.

Answer: Replace this text with your answer to the question above.

Scenario: A bank issuing loans.

Outcome variable: Whether or not someone will return a loan.

Features that may be useful: (1) Person's annual income, (2) whether that person has a criminal record.

Note: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to
File -> Download as -> HTML (.html). Include the finished document along with this notebook as your submission.

================================================ FILE: p0-titanic-survival-exploration/titanic_data.csv ================================================ PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked 1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S 2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C 3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S 4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S 5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S 6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q 7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S 8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S 9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S 10,1,2,"Nasser, Mrs. Nicholas (Adele Achem)",female,14,1,0,237736,30.0708,,C 11,1,3,"Sandstrom, Miss. Marguerite Rut",female,4,1,1,PP 9549,16.7,G6,S 12,1,1,"Bonnell, Miss. Elizabeth",female,58,0,0,113783,26.55,C103,S 13,0,3,"Saundercock, Mr. William Henry",male,20,0,0,A/5. 2151,8.05,,S 14,0,3,"Andersson, Mr. Anders Johan",male,39,1,5,347082,31.275,,S 15,0,3,"Vestrom, Miss. Hulda Amanda Adolfina",female,14,0,0,350406,7.8542,,S 16,1,2,"Hewlett, Mrs. (Mary D Kingcome) ",female,55,0,0,248706,16,,S 17,0,3,"Rice, Master. Eugene",male,2,4,1,382652,29.125,,Q 18,1,2,"Williams, Mr. Charles Eugene",male,,0,0,244373,13,,S 19,0,3,"Vander Planke, Mrs. Julius (Emelia Maria Vandemoortele)",female,31,1,0,345763,18,,S 20,1,3,"Masselmani, Mrs. Fatima",female,,0,0,2649,7.225,,C 21,0,2,"Fynney, Mr. Joseph J",male,35,0,0,239865,26,,S 22,1,2,"Beesley, Mr. Lawrence",male,34,0,0,248698,13,D56,S 23,1,3,"McGowan, Miss. Anna ""Annie""",female,15,0,0,330923,8.0292,,Q 24,1,1,"Sloper, Mr. William Thompson",male,28,0,0,113788,35.5,A6,S 25,0,3,"Palsson, Miss. Torborg Danira",female,8,3,1,349909,21.075,,S 26,1,3,"Asplund, Mrs. Carl Oscar (Selma Augusta Emilia Johansson)",female,38,1,5,347077,31.3875,,S 27,0,3,"Emir, Mr. Farred Chehab",male,,0,0,2631,7.225,,C 28,0,1,"Fortune, Mr. Charles Alexander",male,19,3,2,19950,263,C23 C25 C27,S 29,1,3,"O'Dwyer, Miss. Ellen ""Nellie""",female,,0,0,330959,7.8792,,Q 30,0,3,"Todoroff, Mr. Lalio",male,,0,0,349216,7.8958,,S 31,0,1,"Uruchurtu, Don. Manuel E",male,40,0,0,PC 17601,27.7208,,C 32,1,1,"Spencer, Mrs. William Augustus (Marie Eugenie)",female,,1,0,PC 17569,146.5208,B78,C 33,1,3,"Glynn, Miss. Mary Agatha",female,,0,0,335677,7.75,,Q 34,0,2,"Wheadon, Mr. Edward H",male,66,0,0,C.A. 24579,10.5,,S 35,0,1,"Meyer, Mr. Edgar Joseph",male,28,1,0,PC 17604,82.1708,,C 36,0,1,"Holverson, Mr. Alexander Oskar",male,42,1,0,113789,52,,S 37,1,3,"Mamee, Mr. Hanna",male,,0,0,2677,7.2292,,C 38,0,3,"Cann, Mr. Ernest Charles",male,21,0,0,A./5. 2152,8.05,,S 39,0,3,"Vander Planke, Miss. Augusta Maria",female,18,2,0,345764,18,,S 40,1,3,"Nicola-Yarred, Miss. Jamila",female,14,1,0,2651,11.2417,,C 41,0,3,"Ahlin, Mrs. Johan (Johanna Persdotter Larsson)",female,40,1,0,7546,9.475,,S 42,0,2,"Turpin, Mrs. William John Robert (Dorothy Ann Wonnacott)",female,27,1,0,11668,21,,S 43,0,3,"Kraeff, Mr. Theodor",male,,0,0,349253,7.8958,,C 44,1,2,"Laroche, Miss. Simonne Marie Anne Andree",female,3,1,2,SC/Paris 2123,41.5792,,C 45,1,3,"Devaney, Miss. Margaret Delia",female,19,0,0,330958,7.8792,,Q 46,0,3,"Rogers, Mr. William John",male,,0,0,S.C./A.4. 23567,8.05,,S 47,0,3,"Lennon, Mr. Denis",male,,1,0,370371,15.5,,Q 48,1,3,"O'Driscoll, Miss. Bridget",female,,0,0,14311,7.75,,Q 49,0,3,"Samaan, Mr. Youssef",male,,2,0,2662,21.6792,,C 50,0,3,"Arnold-Franchi, Mrs. Josef (Josefine Franchi)",female,18,1,0,349237,17.8,,S 51,0,3,"Panula, Master. Juha Niilo",male,7,4,1,3101295,39.6875,,S 52,0,3,"Nosworthy, Mr. Richard Cater",male,21,0,0,A/4. 39886,7.8,,S 53,1,1,"Harper, Mrs. Henry Sleeper (Myna Haxtun)",female,49,1,0,PC 17572,76.7292,D33,C 54,1,2,"Faunthorpe, Mrs. Lizzie (Elizabeth Anne Wilkinson)",female,29,1,0,2926,26,,S 55,0,1,"Ostby, Mr. Engelhart Cornelius",male,65,0,1,113509,61.9792,B30,C 56,1,1,"Woolner, Mr. Hugh",male,,0,0,19947,35.5,C52,S 57,1,2,"Rugg, Miss. Emily",female,21,0,0,C.A. 31026,10.5,,S 58,0,3,"Novel, Mr. Mansouer",male,28.5,0,0,2697,7.2292,,C 59,1,2,"West, Miss. Constance Mirium",female,5,1,2,C.A. 34651,27.75,,S 60,0,3,"Goodwin, Master. William Frederick",male,11,5,2,CA 2144,46.9,,S 61,0,3,"Sirayanian, Mr. Orsen",male,22,0,0,2669,7.2292,,C 62,1,1,"Icard, Miss. Amelie",female,38,0,0,113572,80,B28, 63,0,1,"Harris, Mr. Henry Birkhardt",male,45,1,0,36973,83.475,C83,S 64,0,3,"Skoog, Master. Harald",male,4,3,2,347088,27.9,,S 65,0,1,"Stewart, Mr. Albert A",male,,0,0,PC 17605,27.7208,,C 66,1,3,"Moubarek, Master. Gerios",male,,1,1,2661,15.2458,,C 67,1,2,"Nye, Mrs. (Elizabeth Ramell)",female,29,0,0,C.A. 29395,10.5,F33,S 68,0,3,"Crease, Mr. Ernest James",male,19,0,0,S.P. 3464,8.1583,,S 69,1,3,"Andersson, Miss. Erna Alexandra",female,17,4,2,3101281,7.925,,S 70,0,3,"Kink, Mr. Vincenz",male,26,2,0,315151,8.6625,,S 71,0,2,"Jenkin, Mr. Stephen Curnow",male,32,0,0,C.A. 33111,10.5,,S 72,0,3,"Goodwin, Miss. Lillian Amy",female,16,5,2,CA 2144,46.9,,S 73,0,2,"Hood, Mr. Ambrose Jr",male,21,0,0,S.O.C. 14879,73.5,,S 74,0,3,"Chronopoulos, Mr. Apostolos",male,26,1,0,2680,14.4542,,C 75,1,3,"Bing, Mr. Lee",male,32,0,0,1601,56.4958,,S 76,0,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S 77,0,3,"Staneff, Mr. Ivan",male,,0,0,349208,7.8958,,S 78,0,3,"Moutal, Mr. Rahamin Haim",male,,0,0,374746,8.05,,S 79,1,2,"Caldwell, Master. Alden Gates",male,0.83,0,2,248738,29,,S 80,1,3,"Dowdell, Miss. Elizabeth",female,30,0,0,364516,12.475,,S 81,0,3,"Waelens, Mr. Achille",male,22,0,0,345767,9,,S 82,1,3,"Sheerlinck, Mr. Jan Baptist",male,29,0,0,345779,9.5,,S 83,1,3,"McDermott, Miss. Brigdet Delia",female,,0,0,330932,7.7875,,Q 84,0,1,"Carrau, Mr. Francisco M",male,28,0,0,113059,47.1,,S 85,1,2,"Ilett, Miss. Bertha",female,17,0,0,SO/C 14885,10.5,,S 86,1,3,"Backstrom, Mrs. Karl Alfred (Maria Mathilda Gustafsson)",female,33,3,0,3101278,15.85,,S 87,0,3,"Ford, Mr. William Neal",male,16,1,3,W./C. 6608,34.375,,S 88,0,3,"Slocovski, Mr. Selman Francis",male,,0,0,SOTON/OQ 392086,8.05,,S 89,1,1,"Fortune, Miss. Mabel Helen",female,23,3,2,19950,263,C23 C25 C27,S 90,0,3,"Celotti, Mr. Francesco",male,24,0,0,343275,8.05,,S 91,0,3,"Christmann, Mr. Emil",male,29,0,0,343276,8.05,,S 92,0,3,"Andreasson, Mr. Paul Edvin",male,20,0,0,347466,7.8542,,S 93,0,1,"Chaffee, Mr. Herbert Fuller",male,46,1,0,W.E.P. 5734,61.175,E31,S 94,0,3,"Dean, Mr. Bertram Frank",male,26,1,2,C.A. 2315,20.575,,S 95,0,3,"Coxon, Mr. Daniel",male,59,0,0,364500,7.25,,S 96,0,3,"Shorney, Mr. Charles Joseph",male,,0,0,374910,8.05,,S 97,0,1,"Goldschmidt, Mr. George B",male,71,0,0,PC 17754,34.6542,A5,C 98,1,1,"Greenfield, Mr. William Bertram",male,23,0,1,PC 17759,63.3583,D10 D12,C 99,1,2,"Doling, Mrs. John T (Ada Julia Bone)",female,34,0,1,231919,23,,S 100,0,2,"Kantor, Mr. Sinai",male,34,1,0,244367,26,,S 101,0,3,"Petranec, Miss. Matilda",female,28,0,0,349245,7.8958,,S 102,0,3,"Petroff, Mr. Pastcho (""Pentcho"")",male,,0,0,349215,7.8958,,S 103,0,1,"White, Mr. Richard Frasar",male,21,0,1,35281,77.2875,D26,S 104,0,3,"Johansson, Mr. Gustaf Joel",male,33,0,0,7540,8.6542,,S 105,0,3,"Gustafsson, Mr. Anders Vilhelm",male,37,2,0,3101276,7.925,,S 106,0,3,"Mionoff, Mr. Stoytcho",male,28,0,0,349207,7.8958,,S 107,1,3,"Salkjelsvik, Miss. Anna Kristine",female,21,0,0,343120,7.65,,S 108,1,3,"Moss, Mr. Albert Johan",male,,0,0,312991,7.775,,S 109,0,3,"Rekic, Mr. Tido",male,38,0,0,349249,7.8958,,S 110,1,3,"Moran, Miss. Bertha",female,,1,0,371110,24.15,,Q 111,0,1,"Porter, Mr. Walter Chamberlain",male,47,0,0,110465,52,C110,S 112,0,3,"Zabour, Miss. Hileni",female,14.5,1,0,2665,14.4542,,C 113,0,3,"Barton, Mr. David John",male,22,0,0,324669,8.05,,S 114,0,3,"Jussila, Miss. Katriina",female,20,1,0,4136,9.825,,S 115,0,3,"Attalah, Miss. Malake",female,17,0,0,2627,14.4583,,C 116,0,3,"Pekoniemi, Mr. Edvard",male,21,0,0,STON/O 2. 3101294,7.925,,S 117,0,3,"Connors, Mr. Patrick",male,70.5,0,0,370369,7.75,,Q 118,0,2,"Turpin, Mr. William John Robert",male,29,1,0,11668,21,,S 119,0,1,"Baxter, Mr. Quigg Edmond",male,24,0,1,PC 17558,247.5208,B58 B60,C 120,0,3,"Andersson, Miss. Ellis Anna Maria",female,2,4,2,347082,31.275,,S 121,0,2,"Hickman, Mr. Stanley George",male,21,2,0,S.O.C. 14879,73.5,,S 122,0,3,"Moore, Mr. Leonard Charles",male,,0,0,A4. 54510,8.05,,S 123,0,2,"Nasser, Mr. Nicholas",male,32.5,1,0,237736,30.0708,,C 124,1,2,"Webber, Miss. Susan",female,32.5,0,0,27267,13,E101,S 125,0,1,"White, Mr. Percival Wayland",male,54,0,1,35281,77.2875,D26,S 126,1,3,"Nicola-Yarred, Master. Elias",male,12,1,0,2651,11.2417,,C 127,0,3,"McMahon, Mr. Martin",male,,0,0,370372,7.75,,Q 128,1,3,"Madsen, Mr. Fridtjof Arne",male,24,0,0,C 17369,7.1417,,S 129,1,3,"Peter, Miss. Anna",female,,1,1,2668,22.3583,F E69,C 130,0,3,"Ekstrom, Mr. Johan",male,45,0,0,347061,6.975,,S 131,0,3,"Drazenoic, Mr. Jozef",male,33,0,0,349241,7.8958,,C 132,0,3,"Coelho, Mr. Domingos Fernandeo",male,20,0,0,SOTON/O.Q. 3101307,7.05,,S 133,0,3,"Robins, Mrs. Alexander A (Grace Charity Laury)",female,47,1,0,A/5. 3337,14.5,,S 134,1,2,"Weisz, Mrs. Leopold (Mathilde Francoise Pede)",female,29,1,0,228414,26,,S 135,0,2,"Sobey, Mr. Samuel James Hayden",male,25,0,0,C.A. 29178,13,,S 136,0,2,"Richard, Mr. Emile",male,23,0,0,SC/PARIS 2133,15.0458,,C 137,1,1,"Newsom, Miss. Helen Monypeny",female,19,0,2,11752,26.2833,D47,S 138,0,1,"Futrelle, Mr. Jacques Heath",male,37,1,0,113803,53.1,C123,S 139,0,3,"Osen, Mr. Olaf Elon",male,16,0,0,7534,9.2167,,S 140,0,1,"Giglio, Mr. Victor",male,24,0,0,PC 17593,79.2,B86,C 141,0,3,"Boulos, Mrs. Joseph (Sultana)",female,,0,2,2678,15.2458,,C 142,1,3,"Nysten, Miss. Anna Sofia",female,22,0,0,347081,7.75,,S 143,1,3,"Hakkarainen, Mrs. Pekka Pietari (Elin Matilda Dolck)",female,24,1,0,STON/O2. 3101279,15.85,,S 144,0,3,"Burke, Mr. Jeremiah",male,19,0,0,365222,6.75,,Q 145,0,2,"Andrew, Mr. Edgardo Samuel",male,18,0,0,231945,11.5,,S 146,0,2,"Nicholls, Mr. Joseph Charles",male,19,1,1,C.A. 33112,36.75,,S 147,1,3,"Andersson, Mr. August Edvard (""Wennerstrom"")",male,27,0,0,350043,7.7958,,S 148,0,3,"Ford, Miss. Robina Maggie ""Ruby""",female,9,2,2,W./C. 6608,34.375,,S 149,0,2,"Navratil, Mr. Michel (""Louis M Hoffman"")",male,36.5,0,2,230080,26,F2,S 150,0,2,"Byles, Rev. Thomas Roussel Davids",male,42,0,0,244310,13,,S 151,0,2,"Bateman, Rev. Robert James",male,51,0,0,S.O.P. 1166,12.525,,S 152,1,1,"Pears, Mrs. Thomas (Edith Wearne)",female,22,1,0,113776,66.6,C2,S 153,0,3,"Meo, Mr. Alfonzo",male,55.5,0,0,A.5. 11206,8.05,,S 154,0,3,"van Billiard, Mr. Austin Blyler",male,40.5,0,2,A/5. 851,14.5,,S 155,0,3,"Olsen, Mr. Ole Martin",male,,0,0,Fa 265302,7.3125,,S 156,0,1,"Williams, Mr. Charles Duane",male,51,0,1,PC 17597,61.3792,,C 157,1,3,"Gilnagh, Miss. Katherine ""Katie""",female,16,0,0,35851,7.7333,,Q 158,0,3,"Corn, Mr. Harry",male,30,0,0,SOTON/OQ 392090,8.05,,S 159,0,3,"Smiljanic, Mr. Mile",male,,0,0,315037,8.6625,,S 160,0,3,"Sage, Master. Thomas Henry",male,,8,2,CA. 2343,69.55,,S 161,0,3,"Cribb, Mr. John Hatfield",male,44,0,1,371362,16.1,,S 162,1,2,"Watt, Mrs. James (Elizabeth ""Bessie"" Inglis Milne)",female,40,0,0,C.A. 33595,15.75,,S 163,0,3,"Bengtsson, Mr. John Viktor",male,26,0,0,347068,7.775,,S 164,0,3,"Calic, Mr. Jovo",male,17,0,0,315093,8.6625,,S 165,0,3,"Panula, Master. Eino Viljami",male,1,4,1,3101295,39.6875,,S 166,1,3,"Goldsmith, Master. Frank John William ""Frankie""",male,9,0,2,363291,20.525,,S 167,1,1,"Chibnall, Mrs. (Edith Martha Bowerman)",female,,0,1,113505,55,E33,S 168,0,3,"Skoog, Mrs. William (Anna Bernhardina Karlsson)",female,45,1,4,347088,27.9,,S 169,0,1,"Baumann, Mr. John D",male,,0,0,PC 17318,25.925,,S 170,0,3,"Ling, Mr. Lee",male,28,0,0,1601,56.4958,,S 171,0,1,"Van der hoef, Mr. Wyckoff",male,61,0,0,111240,33.5,B19,S 172,0,3,"Rice, Master. Arthur",male,4,4,1,382652,29.125,,Q 173,1,3,"Johnson, Miss. Eleanor Ileen",female,1,1,1,347742,11.1333,,S 174,0,3,"Sivola, Mr. Antti Wilhelm",male,21,0,0,STON/O 2. 3101280,7.925,,S 175,0,1,"Smith, Mr. James Clinch",male,56,0,0,17764,30.6958,A7,C 176,0,3,"Klasen, Mr. Klas Albin",male,18,1,1,350404,7.8542,,S 177,0,3,"Lefebre, Master. Henry Forbes",male,,3,1,4133,25.4667,,S 178,0,1,"Isham, Miss. Ann Elizabeth",female,50,0,0,PC 17595,28.7125,C49,C 179,0,2,"Hale, Mr. Reginald",male,30,0,0,250653,13,,S 180,0,3,"Leonard, Mr. Lionel",male,36,0,0,LINE,0,,S 181,0,3,"Sage, Miss. Constance Gladys",female,,8,2,CA. 2343,69.55,,S 182,0,2,"Pernot, Mr. Rene",male,,0,0,SC/PARIS 2131,15.05,,C 183,0,3,"Asplund, Master. Clarence Gustaf Hugo",male,9,4,2,347077,31.3875,,S 184,1,2,"Becker, Master. Richard F",male,1,2,1,230136,39,F4,S 185,1,3,"Kink-Heilmann, Miss. Luise Gretchen",female,4,0,2,315153,22.025,,S 186,0,1,"Rood, Mr. Hugh Roscoe",male,,0,0,113767,50,A32,S 187,1,3,"O'Brien, Mrs. Thomas (Johanna ""Hannah"" Godfrey)",female,,1,0,370365,15.5,,Q 188,1,1,"Romaine, Mr. Charles Hallace (""Mr C Rolmane"")",male,45,0,0,111428,26.55,,S 189,0,3,"Bourke, Mr. John",male,40,1,1,364849,15.5,,Q 190,0,3,"Turcin, Mr. Stjepan",male,36,0,0,349247,7.8958,,S 191,1,2,"Pinsky, Mrs. (Rosa)",female,32,0,0,234604,13,,S 192,0,2,"Carbines, Mr. William",male,19,0,0,28424,13,,S 193,1,3,"Andersen-Jensen, Miss. Carla Christine Nielsine",female,19,1,0,350046,7.8542,,S 194,1,2,"Navratil, Master. Michel M",male,3,1,1,230080,26,F2,S 195,1,1,"Brown, Mrs. James Joseph (Margaret Tobin)",female,44,0,0,PC 17610,27.7208,B4,C 196,1,1,"Lurette, Miss. Elise",female,58,0,0,PC 17569,146.5208,B80,C 197,0,3,"Mernagh, Mr. Robert",male,,0,0,368703,7.75,,Q 198,0,3,"Olsen, Mr. Karl Siegwart Andreas",male,42,0,1,4579,8.4042,,S 199,1,3,"Madigan, Miss. Margaret ""Maggie""",female,,0,0,370370,7.75,,Q 200,0,2,"Yrois, Miss. Henriette (""Mrs Harbeck"")",female,24,0,0,248747,13,,S 201,0,3,"Vande Walle, Mr. Nestor Cyriel",male,28,0,0,345770,9.5,,S 202,0,3,"Sage, Mr. Frederick",male,,8,2,CA. 2343,69.55,,S 203,0,3,"Johanson, Mr. Jakob Alfred",male,34,0,0,3101264,6.4958,,S 204,0,3,"Youseff, Mr. Gerious",male,45.5,0,0,2628,7.225,,C 205,1,3,"Cohen, Mr. Gurshon ""Gus""",male,18,0,0,A/5 3540,8.05,,S 206,0,3,"Strom, Miss. Telma Matilda",female,2,0,1,347054,10.4625,G6,S 207,0,3,"Backstrom, Mr. Karl Alfred",male,32,1,0,3101278,15.85,,S 208,1,3,"Albimona, Mr. Nassef Cassem",male,26,0,0,2699,18.7875,,C 209,1,3,"Carr, Miss. Helen ""Ellen""",female,16,0,0,367231,7.75,,Q 210,1,1,"Blank, Mr. Henry",male,40,0,0,112277,31,A31,C 211,0,3,"Ali, Mr. Ahmed",male,24,0,0,SOTON/O.Q. 3101311,7.05,,S 212,1,2,"Cameron, Miss. Clear Annie",female,35,0,0,F.C.C. 13528,21,,S 213,0,3,"Perkin, Mr. John Henry",male,22,0,0,A/5 21174,7.25,,S 214,0,2,"Givard, Mr. Hans Kristensen",male,30,0,0,250646,13,,S 215,0,3,"Kiernan, Mr. Philip",male,,1,0,367229,7.75,,Q 216,1,1,"Newell, Miss. Madeleine",female,31,1,0,35273,113.275,D36,C 217,1,3,"Honkanen, Miss. Eliina",female,27,0,0,STON/O2. 3101283,7.925,,S 218,0,2,"Jacobsohn, Mr. Sidney Samuel",male,42,1,0,243847,27,,S 219,1,1,"Bazzani, Miss. Albina",female,32,0,0,11813,76.2917,D15,C 220,0,2,"Harris, Mr. Walter",male,30,0,0,W/C 14208,10.5,,S 221,1,3,"Sunderland, Mr. Victor Francis",male,16,0,0,SOTON/OQ 392089,8.05,,S 222,0,2,"Bracken, Mr. James H",male,27,0,0,220367,13,,S 223,0,3,"Green, Mr. George Henry",male,51,0,0,21440,8.05,,S 224,0,3,"Nenkoff, Mr. Christo",male,,0,0,349234,7.8958,,S 225,1,1,"Hoyt, Mr. Frederick Maxfield",male,38,1,0,19943,90,C93,S 226,0,3,"Berglund, Mr. Karl Ivar Sven",male,22,0,0,PP 4348,9.35,,S 227,1,2,"Mellors, Mr. William John",male,19,0,0,SW/PP 751,10.5,,S 228,0,3,"Lovell, Mr. John Hall (""Henry"")",male,20.5,0,0,A/5 21173,7.25,,S 229,0,2,"Fahlstrom, Mr. Arne Jonas",male,18,0,0,236171,13,,S 230,0,3,"Lefebre, Miss. Mathilde",female,,3,1,4133,25.4667,,S 231,1,1,"Harris, Mrs. Henry Birkhardt (Irene Wallach)",female,35,1,0,36973,83.475,C83,S 232,0,3,"Larsson, Mr. Bengt Edvin",male,29,0,0,347067,7.775,,S 233,0,2,"Sjostedt, Mr. Ernst Adolf",male,59,0,0,237442,13.5,,S 234,1,3,"Asplund, Miss. Lillian Gertrud",female,5,4,2,347077,31.3875,,S 235,0,2,"Leyson, Mr. Robert William Norman",male,24,0,0,C.A. 29566,10.5,,S 236,0,3,"Harknett, Miss. Alice Phoebe",female,,0,0,W./C. 6609,7.55,,S 237,0,2,"Hold, Mr. Stephen",male,44,1,0,26707,26,,S 238,1,2,"Collyer, Miss. Marjorie ""Lottie""",female,8,0,2,C.A. 31921,26.25,,S 239,0,2,"Pengelly, Mr. Frederick William",male,19,0,0,28665,10.5,,S 240,0,2,"Hunt, Mr. George Henry",male,33,0,0,SCO/W 1585,12.275,,S 241,0,3,"Zabour, Miss. Thamine",female,,1,0,2665,14.4542,,C 242,1,3,"Murphy, Miss. Katherine ""Kate""",female,,1,0,367230,15.5,,Q 243,0,2,"Coleridge, Mr. Reginald Charles",male,29,0,0,W./C. 14263,10.5,,S 244,0,3,"Maenpaa, Mr. Matti Alexanteri",male,22,0,0,STON/O 2. 3101275,7.125,,S 245,0,3,"Attalah, Mr. Sleiman",male,30,0,0,2694,7.225,,C 246,0,1,"Minahan, Dr. William Edward",male,44,2,0,19928,90,C78,Q 247,0,3,"Lindahl, Miss. Agda Thorilda Viktoria",female,25,0,0,347071,7.775,,S 248,1,2,"Hamalainen, Mrs. William (Anna)",female,24,0,2,250649,14.5,,S 249,1,1,"Beckwith, Mr. Richard Leonard",male,37,1,1,11751,52.5542,D35,S 250,0,2,"Carter, Rev. Ernest Courtenay",male,54,1,0,244252,26,,S 251,0,3,"Reed, Mr. James George",male,,0,0,362316,7.25,,S 252,0,3,"Strom, Mrs. Wilhelm (Elna Matilda Persson)",female,29,1,1,347054,10.4625,G6,S 253,0,1,"Stead, Mr. William Thomas",male,62,0,0,113514,26.55,C87,S 254,0,3,"Lobb, Mr. William Arthur",male,30,1,0,A/5. 3336,16.1,,S 255,0,3,"Rosblom, Mrs. Viktor (Helena Wilhelmina)",female,41,0,2,370129,20.2125,,S 256,1,3,"Touma, Mrs. Darwis (Hanne Youssef Razi)",female,29,0,2,2650,15.2458,,C 257,1,1,"Thorne, Mrs. Gertrude Maybelle",female,,0,0,PC 17585,79.2,,C 258,1,1,"Cherry, Miss. Gladys",female,30,0,0,110152,86.5,B77,S 259,1,1,"Ward, Miss. Anna",female,35,0,0,PC 17755,512.3292,,C 260,1,2,"Parrish, Mrs. (Lutie Davis)",female,50,0,1,230433,26,,S 261,0,3,"Smith, Mr. Thomas",male,,0,0,384461,7.75,,Q 262,1,3,"Asplund, Master. Edvin Rojj Felix",male,3,4,2,347077,31.3875,,S 263,0,1,"Taussig, Mr. Emil",male,52,1,1,110413,79.65,E67,S 264,0,1,"Harrison, Mr. William",male,40,0,0,112059,0,B94,S 265,0,3,"Henry, Miss. Delia",female,,0,0,382649,7.75,,Q 266,0,2,"Reeves, Mr. David",male,36,0,0,C.A. 17248,10.5,,S 267,0,3,"Panula, Mr. Ernesti Arvid",male,16,4,1,3101295,39.6875,,S 268,1,3,"Persson, Mr. Ernst Ulrik",male,25,1,0,347083,7.775,,S 269,1,1,"Graham, Mrs. William Thompson (Edith Junkins)",female,58,0,1,PC 17582,153.4625,C125,S 270,1,1,"Bissette, Miss. Amelia",female,35,0,0,PC 17760,135.6333,C99,S 271,0,1,"Cairns, Mr. Alexander",male,,0,0,113798,31,,S 272,1,3,"Tornquist, Mr. William Henry",male,25,0,0,LINE,0,,S 273,1,2,"Mellinger, Mrs. (Elizabeth Anne Maidment)",female,41,0,1,250644,19.5,,S 274,0,1,"Natsch, Mr. Charles H",male,37,0,1,PC 17596,29.7,C118,C 275,1,3,"Healy, Miss. Hanora ""Nora""",female,,0,0,370375,7.75,,Q 276,1,1,"Andrews, Miss. Kornelia Theodosia",female,63,1,0,13502,77.9583,D7,S 277,0,3,"Lindblom, Miss. Augusta Charlotta",female,45,0,0,347073,7.75,,S 278,0,2,"Parkes, Mr. Francis ""Frank""",male,,0,0,239853,0,,S 279,0,3,"Rice, Master. Eric",male,7,4,1,382652,29.125,,Q 280,1,3,"Abbott, Mrs. Stanton (Rosa Hunt)",female,35,1,1,C.A. 2673,20.25,,S 281,0,3,"Duane, Mr. Frank",male,65,0,0,336439,7.75,,Q 282,0,3,"Olsson, Mr. Nils Johan Goransson",male,28,0,0,347464,7.8542,,S 283,0,3,"de Pelsmaeker, Mr. Alfons",male,16,0,0,345778,9.5,,S 284,1,3,"Dorking, Mr. Edward Arthur",male,19,0,0,A/5. 10482,8.05,,S 285,0,1,"Smith, Mr. Richard William",male,,0,0,113056,26,A19,S 286,0,3,"Stankovic, Mr. Ivan",male,33,0,0,349239,8.6625,,C 287,1,3,"de Mulder, Mr. Theodore",male,30,0,0,345774,9.5,,S 288,0,3,"Naidenoff, Mr. Penko",male,22,0,0,349206,7.8958,,S 289,1,2,"Hosono, Mr. Masabumi",male,42,0,0,237798,13,,S 290,1,3,"Connolly, Miss. Kate",female,22,0,0,370373,7.75,,Q 291,1,1,"Barber, Miss. Ellen ""Nellie""",female,26,0,0,19877,78.85,,S 292,1,1,"Bishop, Mrs. Dickinson H (Helen Walton)",female,19,1,0,11967,91.0792,B49,C 293,0,2,"Levy, Mr. Rene Jacques",male,36,0,0,SC/Paris 2163,12.875,D,C 294,0,3,"Haas, Miss. Aloisia",female,24,0,0,349236,8.85,,S 295,0,3,"Mineff, Mr. Ivan",male,24,0,0,349233,7.8958,,S 296,0,1,"Lewy, Mr. Ervin G",male,,0,0,PC 17612,27.7208,,C 297,0,3,"Hanna, Mr. Mansour",male,23.5,0,0,2693,7.2292,,C 298,0,1,"Allison, Miss. Helen Loraine",female,2,1,2,113781,151.55,C22 C26,S 299,1,1,"Saalfeld, Mr. Adolphe",male,,0,0,19988,30.5,C106,S 300,1,1,"Baxter, Mrs. James (Helene DeLaudeniere Chaput)",female,50,0,1,PC 17558,247.5208,B58 B60,C 301,1,3,"Kelly, Miss. Anna Katherine ""Annie Kate""",female,,0,0,9234,7.75,,Q 302,1,3,"McCoy, Mr. Bernard",male,,2,0,367226,23.25,,Q 303,0,3,"Johnson, Mr. William Cahoone Jr",male,19,0,0,LINE,0,,S 304,1,2,"Keane, Miss. Nora A",female,,0,0,226593,12.35,E101,Q 305,0,3,"Williams, Mr. Howard Hugh ""Harry""",male,,0,0,A/5 2466,8.05,,S 306,1,1,"Allison, Master. Hudson Trevor",male,0.92,1,2,113781,151.55,C22 C26,S 307,1,1,"Fleming, Miss. Margaret",female,,0,0,17421,110.8833,,C 308,1,1,"Penasco y Castellana, Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo)",female,17,1,0,PC 17758,108.9,C65,C 309,0,2,"Abelson, Mr. Samuel",male,30,1,0,P/PP 3381,24,,C 310,1,1,"Francatelli, Miss. Laura Mabel",female,30,0,0,PC 17485,56.9292,E36,C 311,1,1,"Hays, Miss. Margaret Bechstein",female,24,0,0,11767,83.1583,C54,C 312,1,1,"Ryerson, Miss. Emily Borie",female,18,2,2,PC 17608,262.375,B57 B59 B63 B66,C 313,0,2,"Lahtinen, Mrs. William (Anna Sylfven)",female,26,1,1,250651,26,,S 314,0,3,"Hendekovic, Mr. Ignjac",male,28,0,0,349243,7.8958,,S 315,0,2,"Hart, Mr. Benjamin",male,43,1,1,F.C.C. 13529,26.25,,S 316,1,3,"Nilsson, Miss. Helmina Josefina",female,26,0,0,347470,7.8542,,S 317,1,2,"Kantor, Mrs. Sinai (Miriam Sternin)",female,24,1,0,244367,26,,S 318,0,2,"Moraweck, Dr. Ernest",male,54,0,0,29011,14,,S 319,1,1,"Wick, Miss. Mary Natalie",female,31,0,2,36928,164.8667,C7,S 320,1,1,"Spedden, Mrs. Frederic Oakley (Margaretta Corning Stone)",female,40,1,1,16966,134.5,E34,C 321,0,3,"Dennis, Mr. Samuel",male,22,0,0,A/5 21172,7.25,,S 322,0,3,"Danoff, Mr. Yoto",male,27,0,0,349219,7.8958,,S 323,1,2,"Slayter, Miss. Hilda Mary",female,30,0,0,234818,12.35,,Q 324,1,2,"Caldwell, Mrs. Albert Francis (Sylvia Mae Harbaugh)",female,22,1,1,248738,29,,S 325,0,3,"Sage, Mr. George John Jr",male,,8,2,CA. 2343,69.55,,S 326,1,1,"Young, Miss. Marie Grice",female,36,0,0,PC 17760,135.6333,C32,C 327,0,3,"Nysveen, Mr. Johan Hansen",male,61,0,0,345364,6.2375,,S 328,1,2,"Ball, Mrs. (Ada E Hall)",female,36,0,0,28551,13,D,S 329,1,3,"Goldsmith, Mrs. Frank John (Emily Alice Brown)",female,31,1,1,363291,20.525,,S 330,1,1,"Hippach, Miss. Jean Gertrude",female,16,0,1,111361,57.9792,B18,C 331,1,3,"McCoy, Miss. Agnes",female,,2,0,367226,23.25,,Q 332,0,1,"Partner, Mr. Austen",male,45.5,0,0,113043,28.5,C124,S 333,0,1,"Graham, Mr. George Edward",male,38,0,1,PC 17582,153.4625,C91,S 334,0,3,"Vander Planke, Mr. Leo Edmondus",male,16,2,0,345764,18,,S 335,1,1,"Frauenthal, Mrs. Henry William (Clara Heinsheimer)",female,,1,0,PC 17611,133.65,,S 336,0,3,"Denkoff, Mr. Mitto",male,,0,0,349225,7.8958,,S 337,0,1,"Pears, Mr. Thomas Clinton",male,29,1,0,113776,66.6,C2,S 338,1,1,"Burns, Miss. Elizabeth Margaret",female,41,0,0,16966,134.5,E40,C 339,1,3,"Dahl, Mr. Karl Edwart",male,45,0,0,7598,8.05,,S 340,0,1,"Blackwell, Mr. Stephen Weart",male,45,0,0,113784,35.5,T,S 341,1,2,"Navratil, Master. Edmond Roger",male,2,1,1,230080,26,F2,S 342,1,1,"Fortune, Miss. Alice Elizabeth",female,24,3,2,19950,263,C23 C25 C27,S 343,0,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13,,S 344,0,2,"Sedgwick, Mr. Charles Frederick Waddington",male,25,0,0,244361,13,,S 345,0,2,"Fox, Mr. Stanley Hubert",male,36,0,0,229236,13,,S 346,1,2,"Brown, Miss. Amelia ""Mildred""",female,24,0,0,248733,13,F33,S 347,1,2,"Smith, Miss. Marion Elsie",female,40,0,0,31418,13,,S 348,1,3,"Davison, Mrs. Thomas Henry (Mary E Finck)",female,,1,0,386525,16.1,,S 349,1,3,"Coutts, Master. William Loch ""William""",male,3,1,1,C.A. 37671,15.9,,S 350,0,3,"Dimic, Mr. Jovan",male,42,0,0,315088,8.6625,,S 351,0,3,"Odahl, Mr. Nils Martin",male,23,0,0,7267,9.225,,S 352,0,1,"Williams-Lambert, Mr. Fletcher Fellows",male,,0,0,113510,35,C128,S 353,0,3,"Elias, Mr. Tannous",male,15,1,1,2695,7.2292,,C 354,0,3,"Arnold-Franchi, Mr. Josef",male,25,1,0,349237,17.8,,S 355,0,3,"Yousif, Mr. Wazli",male,,0,0,2647,7.225,,C 356,0,3,"Vanden Steen, Mr. Leo Peter",male,28,0,0,345783,9.5,,S 357,1,1,"Bowerman, Miss. Elsie Edith",female,22,0,1,113505,55,E33,S 358,0,2,"Funk, Miss. Annie Clemmer",female,38,0,0,237671,13,,S 359,1,3,"McGovern, Miss. Mary",female,,0,0,330931,7.8792,,Q 360,1,3,"Mockler, Miss. Helen Mary ""Ellie""",female,,0,0,330980,7.8792,,Q 361,0,3,"Skoog, Mr. Wilhelm",male,40,1,4,347088,27.9,,S 362,0,2,"del Carlo, Mr. Sebastiano",male,29,1,0,SC/PARIS 2167,27.7208,,C 363,0,3,"Barbara, Mrs. (Catherine David)",female,45,0,1,2691,14.4542,,C 364,0,3,"Asim, Mr. Adola",male,35,0,0,SOTON/O.Q. 3101310,7.05,,S 365,0,3,"O'Brien, Mr. Thomas",male,,1,0,370365,15.5,,Q 366,0,3,"Adahl, Mr. Mauritz Nils Martin",male,30,0,0,C 7076,7.25,,S 367,1,1,"Warren, Mrs. Frank Manley (Anna Sophia Atkinson)",female,60,1,0,110813,75.25,D37,C 368,1,3,"Moussa, Mrs. (Mantoura Boulos)",female,,0,0,2626,7.2292,,C 369,1,3,"Jermyn, Miss. Annie",female,,0,0,14313,7.75,,Q 370,1,1,"Aubart, Mme. Leontine Pauline",female,24,0,0,PC 17477,69.3,B35,C 371,1,1,"Harder, Mr. George Achilles",male,25,1,0,11765,55.4417,E50,C 372,0,3,"Wiklund, Mr. Jakob Alfred",male,18,1,0,3101267,6.4958,,S 373,0,3,"Beavan, Mr. William Thomas",male,19,0,0,323951,8.05,,S 374,0,1,"Ringhini, Mr. Sante",male,22,0,0,PC 17760,135.6333,,C 375,0,3,"Palsson, Miss. Stina Viola",female,3,3,1,349909,21.075,,S 376,1,1,"Meyer, Mrs. Edgar Joseph (Leila Saks)",female,,1,0,PC 17604,82.1708,,C 377,1,3,"Landergren, Miss. Aurora Adelia",female,22,0,0,C 7077,7.25,,S 378,0,1,"Widener, Mr. Harry Elkins",male,27,0,2,113503,211.5,C82,C 379,0,3,"Betros, Mr. Tannous",male,20,0,0,2648,4.0125,,C 380,0,3,"Gustafsson, Mr. Karl Gideon",male,19,0,0,347069,7.775,,S 381,1,1,"Bidois, Miss. Rosalie",female,42,0,0,PC 17757,227.525,,C 382,1,3,"Nakid, Miss. Maria (""Mary"")",female,1,0,2,2653,15.7417,,C 383,0,3,"Tikkanen, Mr. Juho",male,32,0,0,STON/O 2. 3101293,7.925,,S 384,1,1,"Holverson, Mrs. Alexander Oskar (Mary Aline Towner)",female,35,1,0,113789,52,,S 385,0,3,"Plotcharsky, Mr. Vasil",male,,0,0,349227,7.8958,,S 386,0,2,"Davies, Mr. Charles Henry",male,18,0,0,S.O.C. 14879,73.5,,S 387,0,3,"Goodwin, Master. Sidney Leonard",male,1,5,2,CA 2144,46.9,,S 388,1,2,"Buss, Miss. Kate",female,36,0,0,27849,13,,S 389,0,3,"Sadlier, Mr. Matthew",male,,0,0,367655,7.7292,,Q 390,1,2,"Lehmann, Miss. Bertha",female,17,0,0,SC 1748,12,,C 391,1,1,"Carter, Mr. William Ernest",male,36,1,2,113760,120,B96 B98,S 392,1,3,"Jansson, Mr. Carl Olof",male,21,0,0,350034,7.7958,,S 393,0,3,"Gustafsson, Mr. Johan Birger",male,28,2,0,3101277,7.925,,S 394,1,1,"Newell, Miss. Marjorie",female,23,1,0,35273,113.275,D36,C 395,1,3,"Sandstrom, Mrs. Hjalmar (Agnes Charlotta Bengtsson)",female,24,0,2,PP 9549,16.7,G6,S 396,0,3,"Johansson, Mr. Erik",male,22,0,0,350052,7.7958,,S 397,0,3,"Olsson, Miss. Elina",female,31,0,0,350407,7.8542,,S 398,0,2,"McKane, Mr. Peter David",male,46,0,0,28403,26,,S 399,0,2,"Pain, Dr. Alfred",male,23,0,0,244278,10.5,,S 400,1,2,"Trout, Mrs. William H (Jessie L)",female,28,0,0,240929,12.65,,S 401,1,3,"Niskanen, Mr. Juha",male,39,0,0,STON/O 2. 3101289,7.925,,S 402,0,3,"Adams, Mr. John",male,26,0,0,341826,8.05,,S 403,0,3,"Jussila, Miss. Mari Aina",female,21,1,0,4137,9.825,,S 404,0,3,"Hakkarainen, Mr. Pekka Pietari",male,28,1,0,STON/O2. 3101279,15.85,,S 405,0,3,"Oreskovic, Miss. Marija",female,20,0,0,315096,8.6625,,S 406,0,2,"Gale, Mr. Shadrach",male,34,1,0,28664,21,,S 407,0,3,"Widegren, Mr. Carl/Charles Peter",male,51,0,0,347064,7.75,,S 408,1,2,"Richards, Master. William Rowe",male,3,1,1,29106,18.75,,S 409,0,3,"Birkeland, Mr. Hans Martin Monsen",male,21,0,0,312992,7.775,,S 410,0,3,"Lefebre, Miss. Ida",female,,3,1,4133,25.4667,,S 411,0,3,"Sdycoff, Mr. Todor",male,,0,0,349222,7.8958,,S 412,0,3,"Hart, Mr. Henry",male,,0,0,394140,6.8583,,Q 413,1,1,"Minahan, Miss. Daisy E",female,33,1,0,19928,90,C78,Q 414,0,2,"Cunningham, Mr. Alfred Fleming",male,,0,0,239853,0,,S 415,1,3,"Sundman, Mr. Johan Julian",male,44,0,0,STON/O 2. 3101269,7.925,,S 416,0,3,"Meek, Mrs. Thomas (Annie Louise Rowley)",female,,0,0,343095,8.05,,S 417,1,2,"Drew, Mrs. James Vivian (Lulu Thorne Christian)",female,34,1,1,28220,32.5,,S 418,1,2,"Silven, Miss. Lyyli Karoliina",female,18,0,2,250652,13,,S 419,0,2,"Matthews, Mr. William John",male,30,0,0,28228,13,,S 420,0,3,"Van Impe, Miss. Catharina",female,10,0,2,345773,24.15,,S 421,0,3,"Gheorgheff, Mr. Stanio",male,,0,0,349254,7.8958,,C 422,0,3,"Charters, Mr. David",male,21,0,0,A/5. 13032,7.7333,,Q 423,0,3,"Zimmerman, Mr. Leo",male,29,0,0,315082,7.875,,S 424,0,3,"Danbom, Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren)",female,28,1,1,347080,14.4,,S 425,0,3,"Rosblom, Mr. Viktor Richard",male,18,1,1,370129,20.2125,,S 426,0,3,"Wiseman, Mr. Phillippe",male,,0,0,A/4. 34244,7.25,,S 427,1,2,"Clarke, Mrs. Charles V (Ada Maria Winfield)",female,28,1,0,2003,26,,S 428,1,2,"Phillips, Miss. Kate Florence (""Mrs Kate Louise Phillips Marshall"")",female,19,0,0,250655,26,,S 429,0,3,"Flynn, Mr. James",male,,0,0,364851,7.75,,Q 430,1,3,"Pickard, Mr. Berk (Berk Trembisky)",male,32,0,0,SOTON/O.Q. 392078,8.05,E10,S 431,1,1,"Bjornstrom-Steffansson, Mr. Mauritz Hakan",male,28,0,0,110564,26.55,C52,S 432,1,3,"Thorneycroft, Mrs. Percival (Florence Kate White)",female,,1,0,376564,16.1,,S 433,1,2,"Louch, Mrs. Charles Alexander (Alice Adelaide Slow)",female,42,1,0,SC/AH 3085,26,,S 434,0,3,"Kallio, Mr. Nikolai Erland",male,17,0,0,STON/O 2. 3101274,7.125,,S 435,0,1,"Silvey, Mr. William Baird",male,50,1,0,13507,55.9,E44,S 436,1,1,"Carter, Miss. Lucile Polk",female,14,1,2,113760,120,B96 B98,S 437,0,3,"Ford, Miss. Doolina Margaret ""Daisy""",female,21,2,2,W./C. 6608,34.375,,S 438,1,2,"Richards, Mrs. Sidney (Emily Hocking)",female,24,2,3,29106,18.75,,S 439,0,1,"Fortune, Mr. Mark",male,64,1,4,19950,263,C23 C25 C27,S 440,0,2,"Kvillner, Mr. Johan Henrik Johannesson",male,31,0,0,C.A. 18723,10.5,,S 441,1,2,"Hart, Mrs. Benjamin (Esther Ada Bloomfield)",female,45,1,1,F.C.C. 13529,26.25,,S 442,0,3,"Hampe, Mr. Leon",male,20,0,0,345769,9.5,,S 443,0,3,"Petterson, Mr. Johan Emil",male,25,1,0,347076,7.775,,S 444,1,2,"Reynaldo, Ms. Encarnacion",female,28,0,0,230434,13,,S 445,1,3,"Johannesen-Bratthammer, Mr. Bernt",male,,0,0,65306,8.1125,,S 446,1,1,"Dodge, Master. Washington",male,4,0,2,33638,81.8583,A34,S 447,1,2,"Mellinger, Miss. Madeleine Violet",female,13,0,1,250644,19.5,,S 448,1,1,"Seward, Mr. Frederic Kimber",male,34,0,0,113794,26.55,,S 449,1,3,"Baclini, Miss. Marie Catherine",female,5,2,1,2666,19.2583,,C 450,1,1,"Peuchen, Major. Arthur Godfrey",male,52,0,0,113786,30.5,C104,S 451,0,2,"West, Mr. Edwy Arthur",male,36,1,2,C.A. 34651,27.75,,S 452,0,3,"Hagland, Mr. Ingvald Olai Olsen",male,,1,0,65303,19.9667,,S 453,0,1,"Foreman, Mr. Benjamin Laventall",male,30,0,0,113051,27.75,C111,C 454,1,1,"Goldenberg, Mr. Samuel L",male,49,1,0,17453,89.1042,C92,C 455,0,3,"Peduzzi, Mr. Joseph",male,,0,0,A/5 2817,8.05,,S 456,1,3,"Jalsevac, Mr. Ivan",male,29,0,0,349240,7.8958,,C 457,0,1,"Millet, Mr. Francis Davis",male,65,0,0,13509,26.55,E38,S 458,1,1,"Kenyon, Mrs. Frederick R (Marion)",female,,1,0,17464,51.8625,D21,S 459,1,2,"Toomey, Miss. Ellen",female,50,0,0,F.C.C. 13531,10.5,,S 460,0,3,"O'Connor, Mr. Maurice",male,,0,0,371060,7.75,,Q 461,1,1,"Anderson, Mr. Harry",male,48,0,0,19952,26.55,E12,S 462,0,3,"Morley, Mr. William",male,34,0,0,364506,8.05,,S 463,0,1,"Gee, Mr. Arthur H",male,47,0,0,111320,38.5,E63,S 464,0,2,"Milling, Mr. Jacob Christian",male,48,0,0,234360,13,,S 465,0,3,"Maisner, Mr. Simon",male,,0,0,A/S 2816,8.05,,S 466,0,3,"Goncalves, Mr. Manuel Estanslas",male,38,0,0,SOTON/O.Q. 3101306,7.05,,S 467,0,2,"Campbell, Mr. William",male,,0,0,239853,0,,S 468,0,1,"Smart, Mr. John Montgomery",male,56,0,0,113792,26.55,,S 469,0,3,"Scanlan, Mr. James",male,,0,0,36209,7.725,,Q 470,1,3,"Baclini, Miss. Helene Barbara",female,0.75,2,1,2666,19.2583,,C 471,0,3,"Keefe, Mr. Arthur",male,,0,0,323592,7.25,,S 472,0,3,"Cacic, Mr. Luka",male,38,0,0,315089,8.6625,,S 473,1,2,"West, Mrs. Edwy Arthur (Ada Mary Worth)",female,33,1,2,C.A. 34651,27.75,,S 474,1,2,"Jerwan, Mrs. Amin S (Marie Marthe Thuillard)",female,23,0,0,SC/AH Basle 541,13.7917,D,C 475,0,3,"Strandberg, Miss. Ida Sofia",female,22,0,0,7553,9.8375,,S 476,0,1,"Clifford, Mr. George Quincy",male,,0,0,110465,52,A14,S 477,0,2,"Renouf, Mr. Peter Henry",male,34,1,0,31027,21,,S 478,0,3,"Braund, Mr. Lewis Richard",male,29,1,0,3460,7.0458,,S 479,0,3,"Karlsson, Mr. Nils August",male,22,0,0,350060,7.5208,,S 480,1,3,"Hirvonen, Miss. Hildur E",female,2,0,1,3101298,12.2875,,S 481,0,3,"Goodwin, Master. Harold Victor",male,9,5,2,CA 2144,46.9,,S 482,0,2,"Frost, Mr. Anthony Wood ""Archie""",male,,0,0,239854,0,,S 483,0,3,"Rouse, Mr. Richard Henry",male,50,0,0,A/5 3594,8.05,,S 484,1,3,"Turkula, Mrs. (Hedwig)",female,63,0,0,4134,9.5875,,S 485,1,1,"Bishop, Mr. Dickinson H",male,25,1,0,11967,91.0792,B49,C 486,0,3,"Lefebre, Miss. Jeannie",female,,3,1,4133,25.4667,,S 487,1,1,"Hoyt, Mrs. Frederick Maxfield (Jane Anne Forby)",female,35,1,0,19943,90,C93,S 488,0,1,"Kent, Mr. Edward Austin",male,58,0,0,11771,29.7,B37,C 489,0,3,"Somerton, Mr. Francis William",male,30,0,0,A.5. 18509,8.05,,S 490,1,3,"Coutts, Master. Eden Leslie ""Neville""",male,9,1,1,C.A. 37671,15.9,,S 491,0,3,"Hagland, Mr. Konrad Mathias Reiersen",male,,1,0,65304,19.9667,,S 492,0,3,"Windelov, Mr. Einar",male,21,0,0,SOTON/OQ 3101317,7.25,,S 493,0,1,"Molson, Mr. Harry Markland",male,55,0,0,113787,30.5,C30,S 494,0,1,"Artagaveytia, Mr. Ramon",male,71,0,0,PC 17609,49.5042,,C 495,0,3,"Stanley, Mr. Edward Roland",male,21,0,0,A/4 45380,8.05,,S 496,0,3,"Yousseff, Mr. Gerious",male,,0,0,2627,14.4583,,C 497,1,1,"Eustis, Miss. Elizabeth Mussey",female,54,1,0,36947,78.2667,D20,C 498,0,3,"Shellard, Mr. Frederick William",male,,0,0,C.A. 6212,15.1,,S 499,0,1,"Allison, Mrs. Hudson J C (Bessie Waldo Daniels)",female,25,1,2,113781,151.55,C22 C26,S 500,0,3,"Svensson, Mr. Olof",male,24,0,0,350035,7.7958,,S 501,0,3,"Calic, Mr. Petar",male,17,0,0,315086,8.6625,,S 502,0,3,"Canavan, Miss. Mary",female,21,0,0,364846,7.75,,Q 503,0,3,"O'Sullivan, Miss. Bridget Mary",female,,0,0,330909,7.6292,,Q 504,0,3,"Laitinen, Miss. Kristina Sofia",female,37,0,0,4135,9.5875,,S 505,1,1,"Maioni, Miss. Roberta",female,16,0,0,110152,86.5,B79,S 506,0,1,"Penasco y Castellana, Mr. Victor de Satode",male,18,1,0,PC 17758,108.9,C65,C 507,1,2,"Quick, Mrs. Frederick Charles (Jane Richards)",female,33,0,2,26360,26,,S 508,1,1,"Bradley, Mr. George (""George Arthur Brayton"")",male,,0,0,111427,26.55,,S 509,0,3,"Olsen, Mr. Henry Margido",male,28,0,0,C 4001,22.525,,S 510,1,3,"Lang, Mr. Fang",male,26,0,0,1601,56.4958,,S 511,1,3,"Daly, Mr. Eugene Patrick",male,29,0,0,382651,7.75,,Q 512,0,3,"Webber, Mr. James",male,,0,0,SOTON/OQ 3101316,8.05,,S 513,1,1,"McGough, Mr. James Robert",male,36,0,0,PC 17473,26.2875,E25,S 514,1,1,"Rothschild, Mrs. Martin (Elizabeth L. Barrett)",female,54,1,0,PC 17603,59.4,,C 515,0,3,"Coleff, Mr. Satio",male,24,0,0,349209,7.4958,,S 516,0,1,"Walker, Mr. William Anderson",male,47,0,0,36967,34.0208,D46,S 517,1,2,"Lemore, Mrs. (Amelia Milley)",female,34,0,0,C.A. 34260,10.5,F33,S 518,0,3,"Ryan, Mr. Patrick",male,,0,0,371110,24.15,,Q 519,1,2,"Angle, Mrs. William A (Florence ""Mary"" Agnes Hughes)",female,36,1,0,226875,26,,S 520,0,3,"Pavlovic, Mr. Stefo",male,32,0,0,349242,7.8958,,S 521,1,1,"Perreault, Miss. Anne",female,30,0,0,12749,93.5,B73,S 522,0,3,"Vovk, Mr. Janko",male,22,0,0,349252,7.8958,,S 523,0,3,"Lahoud, Mr. Sarkis",male,,0,0,2624,7.225,,C 524,1,1,"Hippach, Mrs. Louis Albert (Ida Sophia Fischer)",female,44,0,1,111361,57.9792,B18,C 525,0,3,"Kassem, Mr. Fared",male,,0,0,2700,7.2292,,C 526,0,3,"Farrell, Mr. James",male,40.5,0,0,367232,7.75,,Q 527,1,2,"Ridsdale, Miss. Lucy",female,50,0,0,W./C. 14258,10.5,,S 528,0,1,"Farthing, Mr. John",male,,0,0,PC 17483,221.7792,C95,S 529,0,3,"Salonen, Mr. Johan Werner",male,39,0,0,3101296,7.925,,S 530,0,2,"Hocking, Mr. Richard George",male,23,2,1,29104,11.5,,S 531,1,2,"Quick, Miss. Phyllis May",female,2,1,1,26360,26,,S 532,0,3,"Toufik, Mr. Nakli",male,,0,0,2641,7.2292,,C 533,0,3,"Elias, Mr. Joseph Jr",male,17,1,1,2690,7.2292,,C 534,1,3,"Peter, Mrs. Catherine (Catherine Rizk)",female,,0,2,2668,22.3583,,C 535,0,3,"Cacic, Miss. Marija",female,30,0,0,315084,8.6625,,S 536,1,2,"Hart, Miss. Eva Miriam",female,7,0,2,F.C.C. 13529,26.25,,S 537,0,1,"Butt, Major. Archibald Willingham",male,45,0,0,113050,26.55,B38,S 538,1,1,"LeRoy, Miss. Bertha",female,30,0,0,PC 17761,106.425,,C 539,0,3,"Risien, Mr. Samuel Beard",male,,0,0,364498,14.5,,S 540,1,1,"Frolicher, Miss. Hedwig Margaritha",female,22,0,2,13568,49.5,B39,C 541,1,1,"Crosby, Miss. Harriet R",female,36,0,2,WE/P 5735,71,B22,S 542,0,3,"Andersson, Miss. Ingeborg Constanzia",female,9,4,2,347082,31.275,,S 543,0,3,"Andersson, Miss. Sigrid Elisabeth",female,11,4,2,347082,31.275,,S 544,1,2,"Beane, Mr. Edward",male,32,1,0,2908,26,,S 545,0,1,"Douglas, Mr. Walter Donald",male,50,1,0,PC 17761,106.425,C86,C 546,0,1,"Nicholson, Mr. Arthur Ernest",male,64,0,0,693,26,,S 547,1,2,"Beane, Mrs. Edward (Ethel Clarke)",female,19,1,0,2908,26,,S 548,1,2,"Padro y Manent, Mr. Julian",male,,0,0,SC/PARIS 2146,13.8625,,C 549,0,3,"Goldsmith, Mr. Frank John",male,33,1,1,363291,20.525,,S 550,1,2,"Davies, Master. John Morgan Jr",male,8,1,1,C.A. 33112,36.75,,S 551,1,1,"Thayer, Mr. John Borland Jr",male,17,0,2,17421,110.8833,C70,C 552,0,2,"Sharp, Mr. Percival James R",male,27,0,0,244358,26,,S 553,0,3,"O'Brien, Mr. Timothy",male,,0,0,330979,7.8292,,Q 554,1,3,"Leeni, Mr. Fahim (""Philip Zenni"")",male,22,0,0,2620,7.225,,C 555,1,3,"Ohman, Miss. Velin",female,22,0,0,347085,7.775,,S 556,0,1,"Wright, Mr. George",male,62,0,0,113807,26.55,,S 557,1,1,"Duff Gordon, Lady. (Lucille Christiana Sutherland) (""Mrs Morgan"")",female,48,1,0,11755,39.6,A16,C 558,0,1,"Robbins, Mr. Victor",male,,0,0,PC 17757,227.525,,C 559,1,1,"Taussig, Mrs. Emil (Tillie Mandelbaum)",female,39,1,1,110413,79.65,E67,S 560,1,3,"de Messemaeker, Mrs. Guillaume Joseph (Emma)",female,36,1,0,345572,17.4,,S 561,0,3,"Morrow, Mr. Thomas Rowan",male,,0,0,372622,7.75,,Q 562,0,3,"Sivic, Mr. Husein",male,40,0,0,349251,7.8958,,S 563,0,2,"Norman, Mr. Robert Douglas",male,28,0,0,218629,13.5,,S 564,0,3,"Simmons, Mr. John",male,,0,0,SOTON/OQ 392082,8.05,,S 565,0,3,"Meanwell, Miss. (Marion Ogden)",female,,0,0,SOTON/O.Q. 392087,8.05,,S 566,0,3,"Davies, Mr. Alfred J",male,24,2,0,A/4 48871,24.15,,S 567,0,3,"Stoytcheff, Mr. Ilia",male,19,0,0,349205,7.8958,,S 568,0,3,"Palsson, Mrs. Nils (Alma Cornelia Berglund)",female,29,0,4,349909,21.075,,S 569,0,3,"Doharr, Mr. Tannous",male,,0,0,2686,7.2292,,C 570,1,3,"Jonsson, Mr. Carl",male,32,0,0,350417,7.8542,,S 571,1,2,"Harris, Mr. George",male,62,0,0,S.W./PP 752,10.5,,S 572,1,1,"Appleton, Mrs. Edward Dale (Charlotte Lamson)",female,53,2,0,11769,51.4792,C101,S 573,1,1,"Flynn, Mr. John Irwin (""Irving"")",male,36,0,0,PC 17474,26.3875,E25,S 574,1,3,"Kelly, Miss. Mary",female,,0,0,14312,7.75,,Q 575,0,3,"Rush, Mr. Alfred George John",male,16,0,0,A/4. 20589,8.05,,S 576,0,3,"Patchett, Mr. George",male,19,0,0,358585,14.5,,S 577,1,2,"Garside, Miss. Ethel",female,34,0,0,243880,13,,S 578,1,1,"Silvey, Mrs. William Baird (Alice Munger)",female,39,1,0,13507,55.9,E44,S 579,0,3,"Caram, Mrs. Joseph (Maria Elias)",female,,1,0,2689,14.4583,,C 580,1,3,"Jussila, Mr. Eiriik",male,32,0,0,STON/O 2. 3101286,7.925,,S 581,1,2,"Christy, Miss. Julie Rachel",female,25,1,1,237789,30,,S 582,1,1,"Thayer, Mrs. John Borland (Marian Longstreth Morris)",female,39,1,1,17421,110.8833,C68,C 583,0,2,"Downton, Mr. William James",male,54,0,0,28403,26,,S 584,0,1,"Ross, Mr. John Hugo",male,36,0,0,13049,40.125,A10,C 585,0,3,"Paulner, Mr. Uscher",male,,0,0,3411,8.7125,,C 586,1,1,"Taussig, Miss. Ruth",female,18,0,2,110413,79.65,E68,S 587,0,2,"Jarvis, Mr. John Denzil",male,47,0,0,237565,15,,S 588,1,1,"Frolicher-Stehli, Mr. Maxmillian",male,60,1,1,13567,79.2,B41,C 589,0,3,"Gilinski, Mr. Eliezer",male,22,0,0,14973,8.05,,S 590,0,3,"Murdlin, Mr. Joseph",male,,0,0,A./5. 3235,8.05,,S 591,0,3,"Rintamaki, Mr. Matti",male,35,0,0,STON/O 2. 3101273,7.125,,S 592,1,1,"Stephenson, Mrs. Walter Bertram (Martha Eustis)",female,52,1,0,36947,78.2667,D20,C 593,0,3,"Elsbury, Mr. William James",male,47,0,0,A/5 3902,7.25,,S 594,0,3,"Bourke, Miss. Mary",female,,0,2,364848,7.75,,Q 595,0,2,"Chapman, Mr. John Henry",male,37,1,0,SC/AH 29037,26,,S 596,0,3,"Van Impe, Mr. Jean Baptiste",male,36,1,1,345773,24.15,,S 597,1,2,"Leitch, Miss. Jessie Wills",female,,0,0,248727,33,,S 598,0,3,"Johnson, Mr. Alfred",male,49,0,0,LINE,0,,S 599,0,3,"Boulos, Mr. Hanna",male,,0,0,2664,7.225,,C 600,1,1,"Duff Gordon, Sir. Cosmo Edmund (""Mr Morgan"")",male,49,1,0,PC 17485,56.9292,A20,C 601,1,2,"Jacobsohn, Mrs. Sidney Samuel (Amy Frances Christy)",female,24,2,1,243847,27,,S 602,0,3,"Slabenoff, Mr. Petco",male,,0,0,349214,7.8958,,S 603,0,1,"Harrington, Mr. Charles H",male,,0,0,113796,42.4,,S 604,0,3,"Torber, Mr. Ernst William",male,44,0,0,364511,8.05,,S 605,1,1,"Homer, Mr. Harry (""Mr E Haven"")",male,35,0,0,111426,26.55,,C 606,0,3,"Lindell, Mr. Edvard Bengtsson",male,36,1,0,349910,15.55,,S 607,0,3,"Karaic, Mr. Milan",male,30,0,0,349246,7.8958,,S 608,1,1,"Daniel, Mr. Robert Williams",male,27,0,0,113804,30.5,,S 609,1,2,"Laroche, Mrs. Joseph (Juliette Marie Louise Lafargue)",female,22,1,2,SC/Paris 2123,41.5792,,C 610,1,1,"Shutes, Miss. Elizabeth W",female,40,0,0,PC 17582,153.4625,C125,S 611,0,3,"Andersson, Mrs. Anders Johan (Alfrida Konstantia Brogren)",female,39,1,5,347082,31.275,,S 612,0,3,"Jardin, Mr. Jose Neto",male,,0,0,SOTON/O.Q. 3101305,7.05,,S 613,1,3,"Murphy, Miss. Margaret Jane",female,,1,0,367230,15.5,,Q 614,0,3,"Horgan, Mr. John",male,,0,0,370377,7.75,,Q 615,0,3,"Brocklebank, Mr. William Alfred",male,35,0,0,364512,8.05,,S 616,1,2,"Herman, Miss. Alice",female,24,1,2,220845,65,,S 617,0,3,"Danbom, Mr. Ernst Gilbert",male,34,1,1,347080,14.4,,S 618,0,3,"Lobb, Mrs. William Arthur (Cordelia K Stanlick)",female,26,1,0,A/5. 3336,16.1,,S 619,1,2,"Becker, Miss. Marion Louise",female,4,2,1,230136,39,F4,S 620,0,2,"Gavey, Mr. Lawrence",male,26,0,0,31028,10.5,,S 621,0,3,"Yasbeck, Mr. Antoni",male,27,1,0,2659,14.4542,,C 622,1,1,"Kimball, Mr. Edwin Nelson Jr",male,42,1,0,11753,52.5542,D19,S 623,1,3,"Nakid, Mr. Sahid",male,20,1,1,2653,15.7417,,C 624,0,3,"Hansen, Mr. Henry Damsgaard",male,21,0,0,350029,7.8542,,S 625,0,3,"Bowen, Mr. David John ""Dai""",male,21,0,0,54636,16.1,,S 626,0,1,"Sutton, Mr. Frederick",male,61,0,0,36963,32.3208,D50,S 627,0,2,"Kirkland, Rev. Charles Leonard",male,57,0,0,219533,12.35,,Q 628,1,1,"Longley, Miss. Gretchen Fiske",female,21,0,0,13502,77.9583,D9,S 629,0,3,"Bostandyeff, Mr. Guentcho",male,26,0,0,349224,7.8958,,S 630,0,3,"O'Connell, Mr. Patrick D",male,,0,0,334912,7.7333,,Q 631,1,1,"Barkworth, Mr. Algernon Henry Wilson",male,80,0,0,27042,30,A23,S 632,0,3,"Lundahl, Mr. Johan Svensson",male,51,0,0,347743,7.0542,,S 633,1,1,"Stahelin-Maeglin, Dr. Max",male,32,0,0,13214,30.5,B50,C 634,0,1,"Parr, Mr. William Henry Marsh",male,,0,0,112052,0,,S 635,0,3,"Skoog, Miss. Mabel",female,9,3,2,347088,27.9,,S 636,1,2,"Davis, Miss. Mary",female,28,0,0,237668,13,,S 637,0,3,"Leinonen, Mr. Antti Gustaf",male,32,0,0,STON/O 2. 3101292,7.925,,S 638,0,2,"Collyer, Mr. Harvey",male,31,1,1,C.A. 31921,26.25,,S 639,0,3,"Panula, Mrs. Juha (Maria Emilia Ojala)",female,41,0,5,3101295,39.6875,,S 640,0,3,"Thorneycroft, Mr. Percival",male,,1,0,376564,16.1,,S 641,0,3,"Jensen, Mr. Hans Peder",male,20,0,0,350050,7.8542,,S 642,1,1,"Sagesser, Mlle. Emma",female,24,0,0,PC 17477,69.3,B35,C 643,0,3,"Skoog, Miss. Margit Elizabeth",female,2,3,2,347088,27.9,,S 644,1,3,"Foo, Mr. Choong",male,,0,0,1601,56.4958,,S 645,1,3,"Baclini, Miss. Eugenie",female,0.75,2,1,2666,19.2583,,C 646,1,1,"Harper, Mr. Henry Sleeper",male,48,1,0,PC 17572,76.7292,D33,C 647,0,3,"Cor, Mr. Liudevit",male,19,0,0,349231,7.8958,,S 648,1,1,"Simonius-Blumer, Col. Oberst Alfons",male,56,0,0,13213,35.5,A26,C 649,0,3,"Willey, Mr. Edward",male,,0,0,S.O./P.P. 751,7.55,,S 650,1,3,"Stanley, Miss. Amy Zillah Elsie",female,23,0,0,CA. 2314,7.55,,S 651,0,3,"Mitkoff, Mr. Mito",male,,0,0,349221,7.8958,,S 652,1,2,"Doling, Miss. Elsie",female,18,0,1,231919,23,,S 653,0,3,"Kalvik, Mr. Johannes Halvorsen",male,21,0,0,8475,8.4333,,S 654,1,3,"O'Leary, Miss. Hanora ""Norah""",female,,0,0,330919,7.8292,,Q 655,0,3,"Hegarty, Miss. Hanora ""Nora""",female,18,0,0,365226,6.75,,Q 656,0,2,"Hickman, Mr. Leonard Mark",male,24,2,0,S.O.C. 14879,73.5,,S 657,0,3,"Radeff, Mr. Alexander",male,,0,0,349223,7.8958,,S 658,0,3,"Bourke, Mrs. John (Catherine)",female,32,1,1,364849,15.5,,Q 659,0,2,"Eitemiller, Mr. George Floyd",male,23,0,0,29751,13,,S 660,0,1,"Newell, Mr. Arthur Webster",male,58,0,2,35273,113.275,D48,C 661,1,1,"Frauenthal, Dr. Henry William",male,50,2,0,PC 17611,133.65,,S 662,0,3,"Badt, Mr. Mohamed",male,40,0,0,2623,7.225,,C 663,0,1,"Colley, Mr. Edward Pomeroy",male,47,0,0,5727,25.5875,E58,S 664,0,3,"Coleff, Mr. Peju",male,36,0,0,349210,7.4958,,S 665,1,3,"Lindqvist, Mr. Eino William",male,20,1,0,STON/O 2. 3101285,7.925,,S 666,0,2,"Hickman, Mr. Lewis",male,32,2,0,S.O.C. 14879,73.5,,S 667,0,2,"Butler, Mr. Reginald Fenton",male,25,0,0,234686,13,,S 668,0,3,"Rommetvedt, Mr. Knud Paust",male,,0,0,312993,7.775,,S 669,0,3,"Cook, Mr. Jacob",male,43,0,0,A/5 3536,8.05,,S 670,1,1,"Taylor, Mrs. Elmer Zebley (Juliet Cummins Wright)",female,,1,0,19996,52,C126,S 671,1,2,"Brown, Mrs. Thomas William Solomon (Elizabeth Catherine Ford)",female,40,1,1,29750,39,,S 672,0,1,"Davidson, Mr. Thornton",male,31,1,0,F.C. 12750,52,B71,S 673,0,2,"Mitchell, Mr. Henry Michael",male,70,0,0,C.A. 24580,10.5,,S 674,1,2,"Wilhelms, Mr. Charles",male,31,0,0,244270,13,,S 675,0,2,"Watson, Mr. Ennis Hastings",male,,0,0,239856,0,,S 676,0,3,"Edvardsson, Mr. Gustaf Hjalmar",male,18,0,0,349912,7.775,,S 677,0,3,"Sawyer, Mr. Frederick Charles",male,24.5,0,0,342826,8.05,,S 678,1,3,"Turja, Miss. Anna Sofia",female,18,0,0,4138,9.8417,,S 679,0,3,"Goodwin, Mrs. Frederick (Augusta Tyler)",female,43,1,6,CA 2144,46.9,,S 680,1,1,"Cardeza, Mr. Thomas Drake Martinez",male,36,0,1,PC 17755,512.3292,B51 B53 B55,C 681,0,3,"Peters, Miss. Katie",female,,0,0,330935,8.1375,,Q 682,1,1,"Hassab, Mr. Hammad",male,27,0,0,PC 17572,76.7292,D49,C 683,0,3,"Olsvigen, Mr. Thor Anderson",male,20,0,0,6563,9.225,,S 684,0,3,"Goodwin, Mr. Charles Edward",male,14,5,2,CA 2144,46.9,,S 685,0,2,"Brown, Mr. Thomas William Solomon",male,60,1,1,29750,39,,S 686,0,2,"Laroche, Mr. Joseph Philippe Lemercier",male,25,1,2,SC/Paris 2123,41.5792,,C 687,0,3,"Panula, Mr. Jaako Arnold",male,14,4,1,3101295,39.6875,,S 688,0,3,"Dakic, Mr. Branko",male,19,0,0,349228,10.1708,,S 689,0,3,"Fischer, Mr. Eberhard Thelander",male,18,0,0,350036,7.7958,,S 690,1,1,"Madill, Miss. Georgette Alexandra",female,15,0,1,24160,211.3375,B5,S 691,1,1,"Dick, Mr. Albert Adrian",male,31,1,0,17474,57,B20,S 692,1,3,"Karun, Miss. Manca",female,4,0,1,349256,13.4167,,C 693,1,3,"Lam, Mr. Ali",male,,0,0,1601,56.4958,,S 694,0,3,"Saad, Mr. Khalil",male,25,0,0,2672,7.225,,C 695,0,1,"Weir, Col. John",male,60,0,0,113800,26.55,,S 696,0,2,"Chapman, Mr. Charles Henry",male,52,0,0,248731,13.5,,S 697,0,3,"Kelly, Mr. James",male,44,0,0,363592,8.05,,S 698,1,3,"Mullens, Miss. Katherine ""Katie""",female,,0,0,35852,7.7333,,Q 699,0,1,"Thayer, Mr. John Borland",male,49,1,1,17421,110.8833,C68,C 700,0,3,"Humblen, Mr. Adolf Mathias Nicolai Olsen",male,42,0,0,348121,7.65,F G63,S 701,1,1,"Astor, Mrs. John Jacob (Madeleine Talmadge Force)",female,18,1,0,PC 17757,227.525,C62 C64,C 702,1,1,"Silverthorne, Mr. Spencer Victor",male,35,0,0,PC 17475,26.2875,E24,S 703,0,3,"Barbara, Miss. Saiide",female,18,0,1,2691,14.4542,,C 704,0,3,"Gallagher, Mr. Martin",male,25,0,0,36864,7.7417,,Q 705,0,3,"Hansen, Mr. Henrik Juul",male,26,1,0,350025,7.8542,,S 706,0,2,"Morley, Mr. Henry Samuel (""Mr Henry Marshall"")",male,39,0,0,250655,26,,S 707,1,2,"Kelly, Mrs. Florence ""Fannie""",female,45,0,0,223596,13.5,,S 708,1,1,"Calderhead, Mr. Edward Pennington",male,42,0,0,PC 17476,26.2875,E24,S 709,1,1,"Cleaver, Miss. Alice",female,22,0,0,113781,151.55,,S 710,1,3,"Moubarek, Master. Halim Gonios (""William George"")",male,,1,1,2661,15.2458,,C 711,1,1,"Mayne, Mlle. Berthe Antonine (""Mrs de Villiers"")",female,24,0,0,PC 17482,49.5042,C90,C 712,0,1,"Klaber, Mr. Herman",male,,0,0,113028,26.55,C124,S 713,1,1,"Taylor, Mr. Elmer Zebley",male,48,1,0,19996,52,C126,S 714,0,3,"Larsson, Mr. August Viktor",male,29,0,0,7545,9.4833,,S 715,0,2,"Greenberg, Mr. Samuel",male,52,0,0,250647,13,,S 716,0,3,"Soholt, Mr. Peter Andreas Lauritz Andersen",male,19,0,0,348124,7.65,F G73,S 717,1,1,"Endres, Miss. Caroline Louise",female,38,0,0,PC 17757,227.525,C45,C 718,1,2,"Troutt, Miss. Edwina Celia ""Winnie""",female,27,0,0,34218,10.5,E101,S 719,0,3,"McEvoy, Mr. Michael",male,,0,0,36568,15.5,,Q 720,0,3,"Johnson, Mr. Malkolm Joackim",male,33,0,0,347062,7.775,,S 721,1,2,"Harper, Miss. Annie Jessie ""Nina""",female,6,0,1,248727,33,,S 722,0,3,"Jensen, Mr. Svend Lauritz",male,17,1,0,350048,7.0542,,S 723,0,2,"Gillespie, Mr. William Henry",male,34,0,0,12233,13,,S 724,0,2,"Hodges, Mr. Henry Price",male,50,0,0,250643,13,,S 725,1,1,"Chambers, Mr. Norman Campbell",male,27,1,0,113806,53.1,E8,S 726,0,3,"Oreskovic, Mr. Luka",male,20,0,0,315094,8.6625,,S 727,1,2,"Renouf, Mrs. Peter Henry (Lillian Jefferys)",female,30,3,0,31027,21,,S 728,1,3,"Mannion, Miss. Margareth",female,,0,0,36866,7.7375,,Q 729,0,2,"Bryhl, Mr. Kurt Arnold Gottfrid",male,25,1,0,236853,26,,S 730,0,3,"Ilmakangas, Miss. Pieta Sofia",female,25,1,0,STON/O2. 3101271,7.925,,S 731,1,1,"Allen, Miss. Elisabeth Walton",female,29,0,0,24160,211.3375,B5,S 732,0,3,"Hassan, Mr. Houssein G N",male,11,0,0,2699,18.7875,,C 733,0,2,"Knight, Mr. Robert J",male,,0,0,239855,0,,S 734,0,2,"Berriman, Mr. William John",male,23,0,0,28425,13,,S 735,0,2,"Troupiansky, Mr. Moses Aaron",male,23,0,0,233639,13,,S 736,0,3,"Williams, Mr. Leslie",male,28.5,0,0,54636,16.1,,S 737,0,3,"Ford, Mrs. Edward (Margaret Ann Watson)",female,48,1,3,W./C. 6608,34.375,,S 738,1,1,"Lesurer, Mr. Gustave J",male,35,0,0,PC 17755,512.3292,B101,C 739,0,3,"Ivanoff, Mr. Kanio",male,,0,0,349201,7.8958,,S 740,0,3,"Nankoff, Mr. Minko",male,,0,0,349218,7.8958,,S 741,1,1,"Hawksford, Mr. Walter James",male,,0,0,16988,30,D45,S 742,0,1,"Cavendish, Mr. Tyrell William",male,36,1,0,19877,78.85,C46,S 743,1,1,"Ryerson, Miss. Susan Parker ""Suzette""",female,21,2,2,PC 17608,262.375,B57 B59 B63 B66,C 744,0,3,"McNamee, Mr. Neal",male,24,1,0,376566,16.1,,S 745,1,3,"Stranden, Mr. Juho",male,31,0,0,STON/O 2. 3101288,7.925,,S 746,0,1,"Crosby, Capt. Edward Gifford",male,70,1,1,WE/P 5735,71,B22,S 747,0,3,"Abbott, Mr. Rossmore Edward",male,16,1,1,C.A. 2673,20.25,,S 748,1,2,"Sinkkonen, Miss. Anna",female,30,0,0,250648,13,,S 749,0,1,"Marvin, Mr. Daniel Warner",male,19,1,0,113773,53.1,D30,S 750,0,3,"Connaghton, Mr. Michael",male,31,0,0,335097,7.75,,Q 751,1,2,"Wells, Miss. Joan",female,4,1,1,29103,23,,S 752,1,3,"Moor, Master. Meier",male,6,0,1,392096,12.475,E121,S 753,0,3,"Vande Velde, Mr. Johannes Joseph",male,33,0,0,345780,9.5,,S 754,0,3,"Jonkoff, Mr. Lalio",male,23,0,0,349204,7.8958,,S 755,1,2,"Herman, Mrs. Samuel (Jane Laver)",female,48,1,2,220845,65,,S 756,1,2,"Hamalainen, Master. Viljo",male,0.67,1,1,250649,14.5,,S 757,0,3,"Carlsson, Mr. August Sigfrid",male,28,0,0,350042,7.7958,,S 758,0,2,"Bailey, Mr. Percy Andrew",male,18,0,0,29108,11.5,,S 759,0,3,"Theobald, Mr. Thomas Leonard",male,34,0,0,363294,8.05,,S 760,1,1,"Rothes, the Countess. of (Lucy Noel Martha Dyer-Edwards)",female,33,0,0,110152,86.5,B77,S 761,0,3,"Garfirth, Mr. John",male,,0,0,358585,14.5,,S 762,0,3,"Nirva, Mr. Iisakki Antino Aijo",male,41,0,0,SOTON/O2 3101272,7.125,,S 763,1,3,"Barah, Mr. Hanna Assi",male,20,0,0,2663,7.2292,,C 764,1,1,"Carter, Mrs. William Ernest (Lucile Polk)",female,36,1,2,113760,120,B96 B98,S 765,0,3,"Eklund, Mr. Hans Linus",male,16,0,0,347074,7.775,,S 766,1,1,"Hogeboom, Mrs. John C (Anna Andrews)",female,51,1,0,13502,77.9583,D11,S 767,0,1,"Brewe, Dr. Arthur Jackson",male,,0,0,112379,39.6,,C 768,0,3,"Mangan, Miss. Mary",female,30.5,0,0,364850,7.75,,Q 769,0,3,"Moran, Mr. Daniel J",male,,1,0,371110,24.15,,Q 770,0,3,"Gronnestad, Mr. Daniel Danielsen",male,32,0,0,8471,8.3625,,S 771,0,3,"Lievens, Mr. Rene Aime",male,24,0,0,345781,9.5,,S 772,0,3,"Jensen, Mr. Niels Peder",male,48,0,0,350047,7.8542,,S 773,0,2,"Mack, Mrs. (Mary)",female,57,0,0,S.O./P.P. 3,10.5,E77,S 774,0,3,"Elias, Mr. Dibo",male,,0,0,2674,7.225,,C 775,1,2,"Hocking, Mrs. Elizabeth (Eliza Needs)",female,54,1,3,29105,23,,S 776,0,3,"Myhrman, Mr. Pehr Fabian Oliver Malkolm",male,18,0,0,347078,7.75,,S 777,0,3,"Tobin, Mr. Roger",male,,0,0,383121,7.75,F38,Q 778,1,3,"Emanuel, Miss. Virginia Ethel",female,5,0,0,364516,12.475,,S 779,0,3,"Kilgannon, Mr. Thomas J",male,,0,0,36865,7.7375,,Q 780,1,1,"Robert, Mrs. Edward Scott (Elisabeth Walton McMillan)",female,43,0,1,24160,211.3375,B3,S 781,1,3,"Ayoub, Miss. Banoura",female,13,0,0,2687,7.2292,,C 782,1,1,"Dick, Mrs. Albert Adrian (Vera Gillespie)",female,17,1,0,17474,57,B20,S 783,0,1,"Long, Mr. Milton Clyde",male,29,0,0,113501,30,D6,S 784,0,3,"Johnston, Mr. Andrew G",male,,1,2,W./C. 6607,23.45,,S 785,0,3,"Ali, Mr. William",male,25,0,0,SOTON/O.Q. 3101312,7.05,,S 786,0,3,"Harmer, Mr. Abraham (David Lishin)",male,25,0,0,374887,7.25,,S 787,1,3,"Sjoblom, Miss. Anna Sofia",female,18,0,0,3101265,7.4958,,S 788,0,3,"Rice, Master. George Hugh",male,8,4,1,382652,29.125,,Q 789,1,3,"Dean, Master. Bertram Vere",male,1,1,2,C.A. 2315,20.575,,S 790,0,1,"Guggenheim, Mr. Benjamin",male,46,0,0,PC 17593,79.2,B82 B84,C 791,0,3,"Keane, Mr. Andrew ""Andy""",male,,0,0,12460,7.75,,Q 792,0,2,"Gaskell, Mr. Alfred",male,16,0,0,239865,26,,S 793,0,3,"Sage, Miss. Stella Anna",female,,8,2,CA. 2343,69.55,,S 794,0,1,"Hoyt, Mr. William Fisher",male,,0,0,PC 17600,30.6958,,C 795,0,3,"Dantcheff, Mr. Ristiu",male,25,0,0,349203,7.8958,,S 796,0,2,"Otter, Mr. Richard",male,39,0,0,28213,13,,S 797,1,1,"Leader, Dr. Alice (Farnham)",female,49,0,0,17465,25.9292,D17,S 798,1,3,"Osman, Mrs. Mara",female,31,0,0,349244,8.6833,,S 799,0,3,"Ibrahim Shawah, Mr. Yousseff",male,30,0,0,2685,7.2292,,C 800,0,3,"Van Impe, Mrs. Jean Baptiste (Rosalie Paula Govaert)",female,30,1,1,345773,24.15,,S 801,0,2,"Ponesell, Mr. Martin",male,34,0,0,250647,13,,S 802,1,2,"Collyer, Mrs. Harvey (Charlotte Annie Tate)",female,31,1,1,C.A. 31921,26.25,,S 803,1,1,"Carter, Master. William Thornton II",male,11,1,2,113760,120,B96 B98,S 804,1,3,"Thomas, Master. Assad Alexander",male,0.42,0,1,2625,8.5167,,C 805,1,3,"Hedman, Mr. Oskar Arvid",male,27,0,0,347089,6.975,,S 806,0,3,"Johansson, Mr. Karl Johan",male,31,0,0,347063,7.775,,S 807,0,1,"Andrews, Mr. Thomas Jr",male,39,0,0,112050,0,A36,S 808,0,3,"Pettersson, Miss. Ellen Natalia",female,18,0,0,347087,7.775,,S 809,0,2,"Meyer, Mr. August",male,39,0,0,248723,13,,S 810,1,1,"Chambers, Mrs. Norman Campbell (Bertha Griggs)",female,33,1,0,113806,53.1,E8,S 811,0,3,"Alexander, Mr. William",male,26,0,0,3474,7.8875,,S 812,0,3,"Lester, Mr. James",male,39,0,0,A/4 48871,24.15,,S 813,0,2,"Slemen, Mr. Richard James",male,35,0,0,28206,10.5,,S 814,0,3,"Andersson, Miss. Ebba Iris Alfrida",female,6,4,2,347082,31.275,,S 815,0,3,"Tomlin, Mr. Ernest Portage",male,30.5,0,0,364499,8.05,,S 816,0,1,"Fry, Mr. Richard",male,,0,0,112058,0,B102,S 817,0,3,"Heininen, Miss. Wendla Maria",female,23,0,0,STON/O2. 3101290,7.925,,S 818,0,2,"Mallet, Mr. Albert",male,31,1,1,S.C./PARIS 2079,37.0042,,C 819,0,3,"Holm, Mr. John Fredrik Alexander",male,43,0,0,C 7075,6.45,,S 820,0,3,"Skoog, Master. Karl Thorsten",male,10,3,2,347088,27.9,,S 821,1,1,"Hays, Mrs. Charles Melville (Clara Jennings Gregg)",female,52,1,1,12749,93.5,B69,S 822,1,3,"Lulic, Mr. Nikola",male,27,0,0,315098,8.6625,,S 823,0,1,"Reuchlin, Jonkheer. John George",male,38,0,0,19972,0,,S 824,1,3,"Moor, Mrs. (Beila)",female,27,0,1,392096,12.475,E121,S 825,0,3,"Panula, Master. Urho Abraham",male,2,4,1,3101295,39.6875,,S 826,0,3,"Flynn, Mr. John",male,,0,0,368323,6.95,,Q 827,0,3,"Lam, Mr. Len",male,,0,0,1601,56.4958,,S 828,1,2,"Mallet, Master. Andre",male,1,0,2,S.C./PARIS 2079,37.0042,,C 829,1,3,"McCormack, Mr. Thomas Joseph",male,,0,0,367228,7.75,,Q 830,1,1,"Stone, Mrs. George Nelson (Martha Evelyn)",female,62,0,0,113572,80,B28, 831,1,3,"Yasbeck, Mrs. Antoni (Selini Alexander)",female,15,1,0,2659,14.4542,,C 832,1,2,"Richards, Master. George Sibley",male,0.83,1,1,29106,18.75,,S 833,0,3,"Saad, Mr. Amin",male,,0,0,2671,7.2292,,C 834,0,3,"Augustsson, Mr. Albert",male,23,0,0,347468,7.8542,,S 835,0,3,"Allum, Mr. Owen George",male,18,0,0,2223,8.3,,S 836,1,1,"Compton, Miss. Sara Rebecca",female,39,1,1,PC 17756,83.1583,E49,C 837,0,3,"Pasic, Mr. Jakob",male,21,0,0,315097,8.6625,,S 838,0,3,"Sirota, Mr. Maurice",male,,0,0,392092,8.05,,S 839,1,3,"Chip, Mr. Chang",male,32,0,0,1601,56.4958,,S 840,1,1,"Marechal, Mr. Pierre",male,,0,0,11774,29.7,C47,C 841,0,3,"Alhomaki, Mr. Ilmari Rudolf",male,20,0,0,SOTON/O2 3101287,7.925,,S 842,0,2,"Mudd, Mr. Thomas Charles",male,16,0,0,S.O./P.P. 3,10.5,,S 843,1,1,"Serepeca, Miss. Augusta",female,30,0,0,113798,31,,C 844,0,3,"Lemberopolous, Mr. Peter L",male,34.5,0,0,2683,6.4375,,C 845,0,3,"Culumovic, Mr. Jeso",male,17,0,0,315090,8.6625,,S 846,0,3,"Abbing, Mr. Anthony",male,42,0,0,C.A. 5547,7.55,,S 847,0,3,"Sage, Mr. Douglas Bullen",male,,8,2,CA. 2343,69.55,,S 848,0,3,"Markoff, Mr. Marin",male,35,0,0,349213,7.8958,,C 849,0,2,"Harper, Rev. John",male,28,0,1,248727,33,,S 850,1,1,"Goldenberg, Mrs. Samuel L (Edwiga Grabowska)",female,,1,0,17453,89.1042,C92,C 851,0,3,"Andersson, Master. Sigvard Harald Elias",male,4,4,2,347082,31.275,,S 852,0,3,"Svensson, Mr. Johan",male,74,0,0,347060,7.775,,S 853,0,3,"Boulos, Miss. Nourelain",female,9,1,1,2678,15.2458,,C 854,1,1,"Lines, Miss. Mary Conover",female,16,0,1,PC 17592,39.4,D28,S 855,0,2,"Carter, Mrs. Ernest Courtenay (Lilian Hughes)",female,44,1,0,244252,26,,S 856,1,3,"Aks, Mrs. Sam (Leah Rosen)",female,18,0,1,392091,9.35,,S 857,1,1,"Wick, Mrs. George Dennick (Mary Hitchcock)",female,45,1,1,36928,164.8667,,S 858,1,1,"Daly, Mr. Peter Denis ",male,51,0,0,113055,26.55,E17,S 859,1,3,"Baclini, Mrs. Solomon (Latifa Qurban)",female,24,0,3,2666,19.2583,,C 860,0,3,"Razi, Mr. Raihed",male,,0,0,2629,7.2292,,C 861,0,3,"Hansen, Mr. Claus Peter",male,41,2,0,350026,14.1083,,S 862,0,2,"Giles, Mr. Frederick Edward",male,21,1,0,28134,11.5,,S 863,1,1,"Swift, Mrs. Frederick Joel (Margaret Welles Barron)",female,48,0,0,17466,25.9292,D17,S 864,0,3,"Sage, Miss. Dorothy Edith ""Dolly""",female,,8,2,CA. 2343,69.55,,S 865,0,2,"Gill, Mr. John William",male,24,0,0,233866,13,,S 866,1,2,"Bystrom, Mrs. (Karolina)",female,42,0,0,236852,13,,S 867,1,2,"Duran y More, Miss. Asuncion",female,27,1,0,SC/PARIS 2149,13.8583,,C 868,0,1,"Roebling, Mr. Washington Augustus II",male,31,0,0,PC 17590,50.4958,A24,S 869,0,3,"van Melkebeke, Mr. Philemon",male,,0,0,345777,9.5,,S 870,1,3,"Johnson, Master. Harold Theodor",male,4,1,1,347742,11.1333,,S 871,0,3,"Balkic, Mr. Cerin",male,26,0,0,349248,7.8958,,S 872,1,1,"Beckwith, Mrs. Richard Leonard (Sallie Monypeny)",female,47,1,1,11751,52.5542,D35,S 873,0,1,"Carlsson, Mr. Frans Olof",male,33,0,0,695,5,B51 B53 B55,S 874,0,3,"Vander Cruyssen, Mr. Victor",male,47,0,0,345765,9,,S 875,1,2,"Abelson, Mrs. Samuel (Hannah Wizosky)",female,28,1,0,P/PP 3381,24,,C 876,1,3,"Najib, Miss. Adele Kiamie ""Jane""",female,15,0,0,2667,7.225,,C 877,0,3,"Gustafsson, Mr. Alfred Ossian",male,20,0,0,7534,9.8458,,S 878,0,3,"Petroff, Mr. Nedelio",male,19,0,0,349212,7.8958,,S 879,0,3,"Laleff, Mr. Kristo",male,,0,0,349217,7.8958,,S 880,1,1,"Potter, Mrs. Thomas Jr (Lily Alexenia Wilson)",female,56,0,1,11767,83.1583,C50,C 881,1,2,"Shelley, Mrs. William (Imanita Parrish Hall)",female,25,0,1,230433,26,,S 882,0,3,"Markun, Mr. Johann",male,33,0,0,349257,7.8958,,S 883,0,3,"Dahlberg, Miss. Gerda Ulrika",female,22,0,0,7552,10.5167,,S 884,0,2,"Banfield, Mr. Frederick James",male,28,0,0,C.A./SOTON 34068,10.5,,S 885,0,3,"Sutehall, Mr. Henry Jr",male,25,0,0,SOTON/OQ 392076,7.05,,S 886,0,3,"Rice, Mrs. William (Margaret Norton)",female,39,0,5,382652,29.125,,Q 887,0,2,"Montvila, Rev. Juozas",male,27,0,0,211536,13,,S 888,1,1,"Graham, Miss. Margaret Edith",female,19,0,0,112053,30,B42,S 889,0,3,"Johnston, Miss. Catherine Helen ""Carrie""",female,,1,2,W./C. 6607,23.45,,S 890,1,1,"Behr, Mr. Karl Howell",male,26,0,0,111369,30,C148,C 891,0,3,"Dooley, Mr. Patrick",male,32,0,0,370376,7.75,,Q ================================================ FILE: p0-titanic-survival-exploration/titanic_survival_exploration.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Introduction and Foundations\n", "## Project 0: Titanic Survival Exploration\n", "\n", "In 1912, the ship RMS Titanic struck an iceberg on its maiden voyage and sank, resulting in the deaths of most of its passengers and crew. In this introductory project, we will explore a subset of the RMS Titanic passenger manifest to determine which features best predict whether someone survived or did not survive. To complete this project, you will need to implement several conditional predictions and answer the questions below. Your project submission will be evaluated based on the completion of the code and your responses to the questions.\n", "> **Tip:** Quoted sections like this will provide helpful instructions on how to navigate and use an iPython notebook. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting Started\n", "To begin working with the RMS Titanic passenger data, we'll first need to `import` the functionality we need, and load our data into a `pandas` DataFrame. \n", "Run the code cell below to load our data and display the first few entries (passengers) for examination using the `.head()` function.\n", "> **Tip:** You can run a code cell by clicking on the cell and using the keyboard shortcut **Shift + Enter** or **Shift + Return**. Alternatively, a code cell can be executed using the **Play** button in the hotbar after selecting it. Markdown cells (text cells like this one) can be edited by double-clicking, and saved using these same shortcuts. [Markdown](http://daringfireball.net/projects/markdown/syntax) allows you to write easy-to-read plain text that can be converted to HTML." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
3411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
4503Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", "
" ], "text/plain": [ " PassengerId Survived Pclass \\\n", "0 1 0 3 \n", "1 2 1 1 \n", "2 3 1 3 \n", "3 4 1 1 \n", "4 5 0 3 \n", "\n", " Name Sex Age SibSp \\\n", "0 Braund, Mr. Owen Harris male 22.0 1 \n", "1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n", "2 Heikkinen, Miss. Laina female 26.0 0 \n", "3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n", "4 Allen, Mr. William Henry male 35.0 0 \n", "\n", " Parch Ticket Fare Cabin Embarked \n", "0 0 A/5 21171 7.2500 NaN S \n", "1 0 PC 17599 71.2833 C85 C \n", "2 0 STON/O2. 3101282 7.9250 NaN S \n", "3 0 113803 53.1000 C123 S \n", "4 0 373450 8.0500 NaN S " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "# RMS Titanic data visualization code \n", "from titanic_visualizations import survival_stats\n", "from IPython.display import display\n", "%matplotlib inline\n", "\n", "# Load the dataset\n", "in_file = 'titanic_data.csv'\n", "full_data = pd.read_csv(in_file)\n", "\n", "# Print the first few entries of the RMS Titanic data\n", "display(full_data.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From a sample of the RMS Titanic data, we can see the various features present for each passenger on the ship:\n", "- **Survived**: Outcome of survival (0 = No; 1 = Yes)\n", "- **Pclass**: Socio-economic class (1 = Upper class; 2 = Middle class; 3 = Lower class)\n", "- **Name**: Name of passenger\n", "- **Sex**: Sex of the passenger\n", "- **Age**: Age of the passenger (Some entries contain `NaN`)\n", "- **SibSp**: Number of siblings and spouses of the passenger aboard\n", "- **Parch**: Number of parents and children of the passenger aboard\n", "- **Ticket**: Ticket number of the passenger\n", "- **Fare**: Fare paid by the passenger\n", "- **Cabin** Cabin number of the passenger (Some entries contain `NaN`)\n", "- **Embarked**: Port of embarkation of the passenger (C = Cherbourg; Q = Queenstown; S = Southampton)\n", "\n", "Since we're interested in the outcome of survival for each passenger or crew member, we can remove the **Survived** feature from this dataset and store it as its own separate variable `outcomes`. We will use these outcomes as our prediction targets. \n", "Run the code cell below to remove **Survived** as a feature of the dataset and store it in `outcomes`." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
PassengerIdPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
013Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
121Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
233Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
341Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
453Allen, Mr. William Henrymale35.0003734508.0500NaNS
\n", "
" ], "text/plain": [ " PassengerId Pclass Name \\\n", "0 1 3 Braund, Mr. Owen Harris \n", "1 2 1 Cumings, Mrs. John Bradley (Florence Briggs Th... \n", "2 3 3 Heikkinen, Miss. Laina \n", "3 4 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) \n", "4 5 3 Allen, Mr. William Henry \n", "\n", " Sex Age SibSp Parch Ticket Fare Cabin Embarked \n", "0 male 22.0 1 0 A/5 21171 7.2500 NaN S \n", "1 female 38.0 1 0 PC 17599 71.2833 C85 C \n", "2 female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S \n", "3 female 35.0 1 0 113803 53.1000 C123 S \n", "4 male 35.0 0 0 373450 8.0500 NaN S " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Store the 'Survived' feature in a new variable and remove it from the dataset\n", "outcomes = full_data['Survived']\n", "data = full_data.drop('Survived', axis = 1)\n", "\n", "# Show the new dataset with 'Survived' removed\n", "display(data.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The very same sample of the RMS Titanic data now shows the **Survived** feature removed from the DataFrame. Note that `data` (the passenger data) and `outcomes` (the outcomes of survival) are now *paired*. That means for any passenger `data.loc[i]`, they have the survival outcome `outcome[i]`.\n", "\n", "To measure the performance of our predictions, we need a metric to score our predictions against the true outcomes of survival. Since we are interested in how *accurate* our predictions are, we will calculate the proportion of passengers where our prediction of their survival is correct. Run the code cell below to create our `accuracy_score` function and test a prediction on the first five passengers. \n", "\n", "**Think:** *Out of the first five passengers, if we predict that all of them survived, what would you expect the accuracy of our predictions to be?*" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 60.00%.\n" ] } ], "source": [ "def accuracy_score(truth, pred):\n", " \"\"\" Returns accuracy score for input truth and predictions. \"\"\"\n", " \n", " # Ensure that the number of predictions matches number of outcomes\n", " if len(truth) == len(pred): \n", " \n", " # Calculate and return the accuracy as a percent\n", " return \"Predictions have an accuracy of {:.2f}%.\".format((truth == pred).mean()*100)\n", " \n", " else:\n", " return \"Number of predictions does not match number of outcomes!\"\n", " \n", "# Test the 'accuracy_score' function\n", "predictions = pd.Series(np.ones(5, dtype = int))\n", "print accuracy_score(outcomes[:5], predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Tip:** If you save an iPython Notebook, the output from running code blocks will also be saved. However, the state of your workspace will be reset once a new session is started. Make sure that you run all of the code blocks from your previous session to reestablish variables and functions before picking up where you last left off.\n", "\n", "# Making Predictions\n", "\n", "If we were asked to make a prediction about any passenger aboard the RMS Titanic whom we knew nothing about, then the best prediction we could make would be that they did not survive. This is because we can assume that a majority of the passengers (more than 50%) did not survive the ship sinking. \n", "The `predictions_0` function below will always predict that a passenger did not survive." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_0(data):\n", " \"\"\" Model with no features. Always predicts a passenger did not survive. \"\"\"\n", "\n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Predict the survival of 'passenger'\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_0(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "*Using the RMS Titanic data, how accurate would a prediction be that none of the passengers survived?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 61.62%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:** 61.62% (Accuracy when we always predict `Survived=0`.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "Let's take a look at whether the feature **Sex** has any indication of survival rates among passengers using the `survival_stats` function. This function is defined in the `titanic_visualizations.py` Python script included with this project. The first two parameters passed to the function are the RMS Titanic data and passenger survival outcomes, respectively. The third parameter indicates which feature we want to plot survival statistics across. \n", "Run the code cell below to plot the survival outcomes of passengers based on their sex." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nzCCXJKnCDHJJUqd98pOf5Lzzzmtzeq9evfjHP/7RhSXqWgsXLqR///70hCuoDHJJ6iG2HzqUiGjY\nz/ZDh9ZXju23Z/PNN2fAgAEMGjSIvfbai8svv3yt0Lrssss444wz2lxHxDpXSW0QO+ywA7/+9a8b\nsu7OGDFiBE8//XTD9rMzDHJJ6iHmL11KQsN+5i9dWlc5IoLrrruOp556ivnz53PaaacxefJkPvrR\nj9a9Lz2hpvpKrF69uruLUDeDXJK0jqYg7tevH4cffjg/+clPmDp1KrNnzwbghBNO4Kyzzmqe/2tf\n+xrbbLMNw4cP5/vf/367NdX99tuPs846i7322ov+/ftzyCGH8MQTTzRPnzFjBm95y1sYNGgQ+++/\nP3PmzAHguOOOY8GCBYwdO5b+/fszZcqUdda9fPlyxo4dy8CBA9lqq63YZ599mqe1bO6v3YfbbruN\nESNGcOGFFzJs2DBOPPFERo0axfXXX988/+rVq9l666259957mT9/Pr169WLNmjVcffXVjBkzZq1y\nXHzxxYwbNw6AF154gVNOOYWRI0cybNgwTjrpJJ5//vkO/gL1M8glSR0aM2YMw4cP54477lhn2g03\n3MBFF13EzTffzLx587jppps6XN/06dOZOnUqy5Yt4/nnn28O5blz5zJx4kS++c1vsmzZMg499FAO\nP/xwXnrpJX74wx+y3Xbbce211/L0009zyimnrLPer3/964wYMYLly5fz2GOP8dWvfrV5WkfN4EuW\nLOHJJ59kwYIFXHHFFUycOJFp06attZ+DBw9mt912W2t9Y8eOZe7cufz9739fa/+OPfZYAL74xS/y\n0EMP8Ze//IWHHnqIRYsWcc4553T4HtXLIJck1WWbbbZZq+bc5JprruGEE07gzW9+M5tttlldjz09\n4YQT2HHHHdlkk00YP3489957LwBXX301hx9+OPvvvz+9e/fmlFNO4dlnn+W3v/1t87LtNdv37duX\nxYsX8/DDD9O7d2/23HPPupYD6N27N1/5ylfo27cvm2yyCRMmTGDGjBk899xzQBHOEyZMWGe5zTbb\njCOPPJLp06cDMG/ePObMmcMRRxwBwLe//W0uvvhiBgwYwBZbbMFpp53WPO+GYJBLkuqyaNEiBg0a\ntM74Rx99lBEjRjQPjxw5ssPQHFrT8W7zzTfnmWeeaV7XyJEjm6dFBCNGjGDRokV1lfELX/gCO+64\nIwcddBBveMMbmDx5cl3LAQwePJi+ffs2D++4446MGjWKmTNn8uyzzzJjxgwmTpzY6rITJkxoDudp\n06Yxbtw4NtlkE5YtW8aqVat4xzvewaBBgxg0aBCHHnooy5cvr7tcHfEWrZKkDt199908+uij7L33\n3utMGzZsGAsXLmwenj9//nr35t5mm224//771xq3cOFChg8fDnTcPL7FFlswZcoUpkyZwuzZs9lv\nv/3Yfffd2W+//dh8881ZtWpV87xLlixZ6wtIa+s+5phjmDZtGqtXr2aXXXbh9a9/favbPfDAA1m2\nbBn33XcfV111FZdccgkAr3vd69h888154IEHGDZsWH1vQidZI5cktWnlypVce+21TJgwgQ9/+MOM\nGjVqnXnGjx/PD37wAx588EFWrVr1is7/jh8/nuuuu45bbrmFl156iSlTprDpppuyxx57AEVNvr3r\n06+77rrmc9X9+vWjT58+9OpVRN1uu+3GtGnTWLNmDTfccAO33XZbh+U55phjmDVrFpdddtk6tfHa\nVoc+ffpw1FFHceqpp7JixQoOPPBAoPhy8LGPfYyTTz6ZZcuWAUXLxqxZszrxrrTPIJckrWPs2LEM\nGDCA7bbbjvPPP59TTjmF733ve83Ta2uvhxxyCCeffDL7778/O+20E+9973vbXXd7teqddtqJH//4\nx3z6059m8ODBXHfddcycOZM+fYoG5NNOO41zzz2XQYMGcdFFF62z/Lx58zjggAPo168fe+65J5/6\n1Keae65/4xvfYMaMGQwcOJDp06fz7//+7x2+D0OHDmWPPfbgrrvu4uijj253PyZMmMDNN9/M+PHj\nm788AEyePJk3vOENvOtd72LLLbfkoIMOYu7cuR1uu16VfR55d5dBLxs5ZAiPLFnS3cWQKmX06NHr\nPP1s+6FD677We314rFZDa58NeBU+j9wk7zmigf94pI2JIav1YdO6JEkVZpBLklRhBrkkSRVmkEuS\nVGEGuSRJFWaQS5JUYQa5JEkVZpBLkrrNJz/5Sc4777wNvt6vfOUrfPjDH97g6+2JDHJJ6iGGDh9K\nRDTsZ+jwoR0XonTnnXey5557suWWW/K6172Ovffemz/+8Y8bfJ8vu+wyzjjjjA2+Xuj4ASuvFpW9\ns5skvdosXbQUJjVw/ZPquwvjypUrGTt2LJdffjlHHXUUL7zwAnfccQebbLJJp7eZmRtNoHYXa+SS\npLXMnTuXiGD8+PFEBJtssgkHHHAAb3nLW9Zpsp4/fz69evVizZo1AOy3336ceeaZ7LXXXmyxxRZ8\n7WtfY8yYMWut/+KLL2bcuHEAnHDCCZx11lkAjBo1iuuvv755vtWrV7P11ltz7733AnDXXXex5557\nMnDgQN7+9rev9fSyRx55hH333ZcBAwZw8MEH8/jjjzfmzemBDHJJ0lp22mknevfuzUc+8hFuuOEG\nnnzyybWmt6xhtxz+8Y9/zHe+8x1WrlzJJz7xCebOndv8aFGA6dOnc+yxx66z3QkTJjBt2rTm4Rtu\nuIHBgwez2267sWjRIg4//HDOOussVqxYwZQpU/jABz7A8uXLAZg4cSJjxozh8ccf58wzz2Tq1Kmv\n+H2oCoNckrSWfv36ceedd9KrVy8+/vGPM3jwYMaNG8djjz1W1/If+chHeNOb3kSvXr3o378/Rx55\nJNOnTweKx4zOmTOHsWPHrrPcxIkTmTFjBs899xxQBP6ECRMAuPLKKznssMM4+OCDAXjve9/L6NGj\nuf7661m4cCH33HMP55xzDn379mXvvfdudf2vVga5JGkdO++8M9/73vdYsGABDzzwAI8++ignn3xy\nXcuOGDFireEJEyY0B/m0adMYN24cm2666TrL7bjjjowaNYqZM2fy7LPPMmPGjOaa+/z587n66qsZ\nNGgQgwYNYuDAgfzmN79h8eLFPProowwcOJDNNtuseV0jR45c312vHDu7SZLatdNOO3H88cdzxRVX\n8I53vINVq1Y1T1u8ePE687dsaj/wwANZtmwZ9913H1dddRWXXHJJm9s65phjmDZtGqtXr2aXXXZh\nhx12AIovB8cddxyXX375OsssWLCAFStW8OyzzzaH+YIFC+jVa+Ooq24ceylJqtucOXO46KKLWLRo\nEQALFy5k+vTp7LHHHrztbW/j9ttvZ+HChTz11FNccMEFHa6vT58+HHXUUZx66qmsWLGCAw88sM15\njznmGGbNmsVll13GxIkTm8d/6EMfYubMmcyaNYs1a9bw3HPPcdttt/Hoo4+y3XbbMXr0aM4++2xe\nfPFF7rzzTmbOnPnK34iKMMglSWvp168fv//973nnO99Jv379ePe7382uu+7KlClTOOCAAzj66KPZ\nddddGTNmzDrnotu61GzChAncfPPNjB8/fq2acsv5hw4dyh577MFdd93F0Ucf3Tx++PDh/OIXv+Cr\nX/0qgwcPZuTIkUyZMqW5t/yVV17JXXfdxVZbbcW5557L8ccfv6Hejh4vMrO7y9BpEVHBUr96BcW1\nopLqN3r0aO655561xg0dPrS4lrxBhmw7hCX/XNKw9WvDaO2zAcWXnsxc55uS58glqYcwZLU+bFqX\nJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzMvPJKkbDBs2jNGjR3d3MdQDDRs2rFPze0MY\nvWLeEEaSGq+tG8LYtC5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhB\nLklShRnkkiRVmEEuSVKFGeSSJFVYlwR5RPSKiD9FxIxyeGBEzIqIORFxY0QMqJn39IiYFxEPRsRB\nXVE+SZKqqqtq5J8DZtcMnwbclJk7A78GTgeIiFHAeODNwKHApRGxzpNeJElSoeFBHhHDgfcB36kZ\nfSQwtXw9FRhXvj4CuCozX8rMR4B5wO6NLqMkSVXVFTXyi4FTgdoHVg/JzKUAmbkE2Locvy2wsGa+\nReU4SZLUioYGeUQcBizNzHuB9prIs51pkiSpDX0avP49gSMi4n3AZkC/iPgRsCQihmTm0ogYCjxW\nzr8IGFGz/PBy3Dom1bzet/yRJOnV4tZbb+XWW2/tcL7I7JrKcETsA/zvzDwiIi4Elmfm5Ij4IjAw\nM08rO7tdCbyTokn9V8Abs0UhI6KLSq16BNBVnyNJ2lhFBJm5Tut2o2vkbbkAuDoiTgTmU/RUJzNn\nR8TVFD3cXwROahnikiTpZV1WI9+QrJH3LNbIJanx2qqRe2c3SZIqzCCXJKnCDHJJkirMIJckqcIM\nckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJ\nkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIq\nzCCXJKnCDHJJkirMIJckqcIMckmSKswglySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKswg\nlySpwgxySZIqzCCXJKnCDHJJkirMIJckqcIMckmSKqzDII+ILSKiV/l6p4g4IiL6Nr5okiSpI/XU\nyG8HNo2IbYFZwIeBHzSyUJIkqT71BHlk5irg/cClmXkUsEtjiyVJkupRV5BHxB7AscB15bjejSuS\n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\nL2A08FzDSiRJkupWT6/12ueSv0TxULUjG1IaSZLUKfWcI98gzyWXJEkbXptBHhFntbNcZua5DSiP\nJEnqhPZq5P9qZdwWwEeBrQCDXJKkbtZmkGfm15teR0Q/4HPACcBVwNfbWk6SJHWdds+RR8Qg4PPA\nscBU4N8yc0VXFEySJHWsvXPkXwPeD1wBvDUzn+myUkmSpLpEZrY+IWINxdPOXuLlW7QCBEVnt267\nRWtEtFFqdYfyA9HdxZDUABEBk7q7FAJgEmRmtBzd3jnyTt31TZIkdT3DWpKkCjPIJUmqMINckqQK\nM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPI\nJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJ\nqjCDXJKkCjPIJUmqMINckqQKM8glSaowg1ySpAozyCVJqjCDXJKkCjPIJUmqMINckqQKM8glSaow\ng1ySpAozyCVJqjCDXJKkCuvT3QXQq0BviIjuLoWAIdsOYck/l3R3MSR1oYYGeUR8FzgcWJqZu5bj\nBgI/AUYCjwDjM/OpctrpwInAS8DnMnNWI8unDWQ1MKm7CyGApZOWdncRJHWxRjetfx84uMW404Cb\nMnNn4NfA6QARMQoYD7wZOBS4NKzmSZLUroYGeWbeCaxoMfpIYGr5eiowrnx9BHBVZr6UmY8A84Dd\nG1k+SZKqrjs6u22dmUsBMnMJsHU5fltgYc18i8pxkiSpDT2h13p2dwEkSaqq7ui1vjQihmTm0ogY\nCjxWjl8EjKiZb3g5rlWTal7vW/5IkvSq8TBFl/AOdEWQR/nTZAbwEWAycDzwi5rxV0bExRRN6m8A\n/tDWSic1oKCSJPUYO5Q/TW5rfbZGX342jaKyvFVELADOBi4AromIE4H5FD3VyczZEXE1MBt4ETgp\nM212lySpHQ0N8syc2MakA9qY/3zg/MaVSJKkV5ee0NlNkiStJ4NckqQKM8glSaowg1ySpAozyCVJ\nqjCDXJKkCjPIJUmqMINckqQKM8glSaqw7nhoiiS1afuhQ5m/dGl3F0OqDINcUo8yf+lSn23cg0TH\ns6ib2bQuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIk\nVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWY\nQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEu\nSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklS\nhRnkkiRVmEEuSVKFGeSSJFWYQS5JUoUZ5JIkVZhBLklShfXIII+IQyLibxExNyK+2N3lkSSpp+px\nQR4RvYBvAQcDuwATIuJN3VsqSZJ6ph4X5MDuwLzMnJ+ZLwJXAUd2c5kkSeqRemKQbwssrBn+ZzlO\nkiS10BODXJIk1alPdxegFYuA7WqGh5fj1hJdVhzVZVJ3F0BNIqp/dFR/D15lJnV3AdSeyMzuLsNa\nIqI3MAd4L7AY+AMwITMf7NaCSZLUA/W4Gnlmro6ITwOzKJr+v2uIS5LUuh5XI5ckSfWzs5s2qIjY\nJyJmdnc5JBUi4rMRMTsiftSg9Z8dEZ9vxLpVnx7XtK5XBZt5pJ7jk8B7M/PR7i6IGsMaudYRESMj\n4sGI+H5EzImIH0fEeyPiznJ4dESMiYjfRsQfy/FvbGU9m0fEdyPirnK+sd2xP9LGKiIuA14P/DIi\nvtTa8RgRx0fEzyJiVkT8IyI+FRH/GRF/Ko/xLcv5/ldE/CEi/hwR10TEpq1s7/UR8cuIuDsibouI\nnbp2jzdOBrnasiPwtczcGXgTxZUDewGnAmcADwJ7ZeY7gLOB81tZxxnAzZn5LmB/YEpEbNYlpZdE\nZn6S4vLd/YAtaPt43AUYR3FnzfOAZzLz34C7gOPKef47M3fPzLcDfwM+2somrwA+nZljKP5XXNaY\nPVMtm9bVloczc3b5+gHg5vL1X4GRwJbAD8uaeNL6Z+kgYGxEnFoOv4biHgFzGlZqSW1p63gEuCUz\nVwGrIuJJ4Npy/F+Bt5avd42IcymO/S2AG2tXHhFbAO8GromXb2bQtyF7orUY5GrL8zWv19QMr6E4\nOM8Ffp2Z74+IkcAtrawjgA9k5ryGllRSPVo9HiPiXax9vCdrH+9NOfF94IjMvD8ijgf2abH+XsCK\nsiavLmTTutrS0c21+vPyHfdOaGOeG4HPNq8wYrcNUC5JndN0LL/S4/G1wJKI6Asc23JiZq4EHo6I\nD9ZsY9fOF1edZZCrLdnG66bhC4ELIuKPtP05OhfoGxF/iYi/Auds+GJK6kDT8Vt7PN5P28djW1ed\nnEVxp807KPrItOZDwEcj4t5yG0esZ5nVCd4QRpKkCrNGLklShRnkkiRVmEEuSVKFGeSSJFWYQS5J\nUoUZ5JIkVZhBLmktEXFGRNwfEfeVD84Y091lktQ2b9EqqVl5u873Abtl5ksRMYjintySeihr5JJq\nDQMez8yXADLzicxcEhH/FhG3lo+n/GVEDImI3uVjLd8DEBHnlw/VkNSFvLObpGblE6zuBDajeOLd\nT4DfArdRPDBjeUSMBw7OzI9GxCjgGop7eF8IvLPpS4CkrmHTuqRmmfmviPg3YG+KZ1ZfRfF86rcA\nvyofT9kLWFzOPzsifkzx2EtDXOoGBrmktWTRTHc7cHv5sJtPAfdn5p5tLPJWYAUwpIuKKKmG58gl\nNYuInSLiDTWjdgNmA4PLjnBERJ+ySZ2IeD8wEHgP8K2I6N/VZZY2dp4jl9SsbFb/v8AA4CXgIeDj\nwPCa8b2BS4CfA78B9s/MRyPi08A7MrOt59NLagCDXJKkCrNpXZKkCjPIJUmqMINckqQKM8glSaow\ng1ySpAozyCVJqjCDXJKkCjPIJUmqsP8PJwzygMM5sQ0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Sex')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Examining the survival statistics, a large majority of males did not survive the ship sinking. However, a majority of females *did* survive the ship sinking. Let's build on our previous prediction: If a passenger was female, then we will predict that they survived. Otherwise, we will predict the passenger did not survive. \n", "Fill in the missing code below so that the function will make this prediction. \n", "**Hint:** You can access the values of each feature for a passenger like a dictionary. For example, `passenger['Sex']` is the sex of the passenger." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_1(data):\n", " \"\"\" Model with one feature: \n", " - Predict a passenger survived if they are female. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['Sex'] == 'female':\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_1(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "*How accurate would a prediction be that all female passengers survived and the remaining passengers did not survive?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 78.68%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: 78.68% (Accuracy when we predict `Survived=1` if and only if passenger is female.) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "Using just the **Sex** feature for each passenger, we are able to increase the accuracy of our predictions by a significant margin. Now, let's consider using an additional feature to see if we can further improve our predictions. For example, consider all of the male passengers aboard the RMS Titanic: Can we find a subset of those passengers that had a higher rate of survival? Let's start by looking at the **Age** of each male, by again using the `survival_stats` function. This time, we'll use a fourth parameter to filter out the data so that only passengers with the **Sex** 'male' will be included. \n", "Run the code cell below to plot the survival outcomes of male passengers based on their age." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZ88GYMyYMVx66aXV619//fX07NmTXr16cdddd9Xbkh88eDCXXnophxxyCB07dmTo0KG8++671cun\nTp3K3nvvTZcuXRgyZAhz5swB4NRTT2XBggUMGzaMjh07MmHChE3KXrlyJcOGDaNz58507dqVww47\nrHpZzUMIuXWYOXMmvXv35rrrrqNHjx6cccYZDBgwgIceeqh6/crKSnbccUdefPFF5s+fT6tWrdiw\nYQP33nsvgwYN2iiOm266iREjRgDw6aefct5551FWVkaPHj0466yz+OSTTxp4BRqHk7yZmTVo0KBB\n9OrViyeeeGKTZdOnT+fGG2/k0Ucf5fXXX+eRRx5psLwpU6YwadIkVqxYwSeffFKdsOfOncvo0aP5\n2c9+xooVKzjmmGM47rjjWL9+Pb/61a/o06cPDzzwAB988AHnnXfeJuXecMMN9O7dm5UrV7J8+XKu\nuuqq6mUNHUJYunQp7733HgsWLOCOO+5g9OjRTJ48eaN6duvWjf3222+j8oYNG8bcuXN58803N6rf\nySefDMAFF1zAG2+8wcsvv8wbb7zBokWLuPzyyxt8jhqDk7yZmeWlZ8+eG7W4q9x3332MGTOGPffc\nk+22245x48Y1WNaYMWPYddddadeuHSNHjuTFF18E4N577+W4445jyJAhtG7dmvPOO4+1a9fy17/+\ntXrb+g4FtG3bliVLlvD222/TunVrDj744Ly2A2jdujXjx4+nbdu2tGvXjlGjRjF16lQ+/vhjIEnc\no0aN2mS77bbbjuHDhzNlyhQAXn/9debMmcPxxx8PwM9//nNuuukmOnXqRPv27bnwwgur1y02J3kz\nM8vLokWL6NKlyybzFy9eTO/evauny8rKGkyo3bt3r368/fbb8+GHH1aXVZYzLkESvXv3ZtGiRXnF\n+JOf/IRdd92Vo446it12241rr702r+0AunXrRtu2baund911VwYMGMC0adNYu3YtU6dOZfTo2m+u\nOmrUqOrEPXnyZEaMGEG7du1YsWIFa9asYf/996dLly506dKFY445hpUrV+YdVyE88M7MzBr07LPP\nsnjxYg499NBNlvXo0YOFCxdWT8+fP3+LR9f37NmTV155ZaN5CxcupFevXkDDXe7t27dnwoQJTJgw\ngdmzZzN48GAOOOAABg8ezPbbb8+aNWuq1126dOlGP05qK/ukk05i8uTJVFZWstdee7HLLrtssg7A\nkUceyYoVK3jppZe45557uPnmmwH4/Oc/z/bbb8+sWbPo0aNHfk9CI3JL3szM6rR69WoeeOABRo0a\nxSmnnMKAAQM2WWfkyJH87//+L6+++ipr1qwp6HjzyJEjefDBB3nsscdYv349EyZMYNttt+Wggw4C\nkh6A+s6/f/DBB6uPjXfo0IE2bdrQqlWS6vbbbz8mT57Mhg0bmD59OjNnzmwwnpNOOokZM2Zw2223\nbdKKz+2taNOmDSeccALnn38+q1at4sgjjwSSHw7f+c53OPfcc1mxYgWQ9IjMmDFjM56VLeckb2Zm\nmxg2bBidOnWiT58+XH311Zx33nkbnT6X2+odOnQo5557LkOGDKF///4cfvjh9ZZdX2u8f//+/OY3\nv+H73/8+3bp148EHH2TatGm0aZN0PF944YVcccUVdOnShRtvvHGT7V9//XWOOOIIOnTowMEHH8zZ\nZ59dPcL+lltuYerUqXTu3JkpU6bw7//+7w0+D927d+eggw7i6aef5sQTT6y3HqNGjeLRRx9l5MiR\n1T8sAK699lp22203DjzwQHbYYQeOOuoo5s6d2+C+G4PvJ29mVgIDBw7c5C50zeViOFZatb03wPeT\nNzNr0ZyArbG5u97MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTN\nzKxkvve973HllVc2ernjx4/nlFNOafRyWxpfDMfMrJk48z/PZN7ieUUrv2/Pvtx+U34X3HnyySe5\n4IILmDVrFm3atGHPPffk5ptvZv/992/UmG677bZGLS/Xlt4kJ0uc5M3Mmol5i+dR9q2yhlfc0vJ/\nMy+v9VavXs2wYcOYOHEiJ5xwAp9++ilPPPEE7dq12+x9RoSTbQm5u97MzDYyd+5cJDFy5Egk0a5d\nO4444gj23nvvTbrB58+fT6tWrdiwYQMAgwcP5pJLLuGQQw6hffv2XH/99QwaNGij8m+66SZGjBgB\nwJgxY7j00ksBGDBgAA899FD1epWVley44468+OKLADz99NMcfPDBdO7cmS9+8Ysb3UVu3rx5lJeX\n06lTJ44++mjeeeed4jw5LYyTvJmZbaR///60bt2a008/nenTp/Pee+9ttLxmy7zm9G9+8xt+8Ytf\nsHr1as4880zmzp1bfftXgClTpnDyySdvst9Ro0YxefLk6unp06fTrVs39ttvPxYtWsRxxx3HpZde\nyqpVq5gwYQLf+MY3WLlyJQCjR49m0KBBvPPOO1xyySVMmjSp4OchC5zkzcxsIx06dODJJ5+kVatW\nfPe736Vbt26MGDGC5cuX57X96aefzh577EGrVq3o2LEjw4cPZ8qUKUByK9g5c+YwbNiwTbYbPXo0\nU6dO5eOPPwaSHwOjRo0C4O677+bYY4/l6KOPBuDwww9n4MCBPPTQQyxcuJDnnnuOyy+/nLZt23Lo\noYfWWv7WyEnezMw2sfvuu/PLX/6SBQsWMGvWLBYvXsy5556b17a9e/feaHrUqFHVSX7y5MmMGDGC\nbbfddpPtdt11VwYMGMC0adNYu3YtU6dOrW7xz58/n3vvvZcuXbrQpUsXOnfuzFNPPcWSJUtYvHgx\nnTt3Zrvttqsuq6yseGMbWhIPvDMzs3r179+f0047jTvuuIP999+fNWvWVC9bsmTJJuvX7L4/8sgj\nWbFiBS+99BL33HMPN998c537Oumkk5g8eTKVlZXstdde9OvXD0h+OJx66qlMnDhxk20WLFjAqlWr\nWLt2bXWiX7BgAa1auR3rZ8DMzDYyZ84cbrzxRhYtWgTAwoULmTJlCgcddBD77rsvjz/+OAsXLuT9\n99/nmmuuabC8Nm3acMIJJ3D++eezatUqjjzyyDrXPemkk5gxYwa33XYbo0ePrp7/rW99i2nTpjFj\nxgw2bNjAxx9/zMyZM1m8eDF9+vRh4MCBXHbZZaxbt44nn3ySadOmFf5EZICTvJmZbaRDhw4888wz\nfPnLX6ZDhw585StfYZ999mHChAkcccQRnHjiieyzzz4MGjRok2PfdZ0uN2rUKB599FFGjhy5UQu7\n5vrdu3fnoIMO4umnn+bEE0+snt+rVy/uv/9+rrrqKrp160ZZWRkTJkyoHtV/99138/TTT9O1a1eu\nuOIKTjvttMZ6Olo0RUSpY9hskqIlxm1mVmXgwIE899xzG81rThfDsdKp7b0ByQ+iiNisiw74mLw1\nuYvPPJOV8+aVOoyi6dq3L1fd7i9S23xOwNbYnOStya2cN4+JGR75OjbDP2DMrGUp6jF5SXdKWibp\n5Zx510l6VdKLkn4vqWPOsoskvZ4uP6qYsZmZmWVdsQfe3QUcXWPeDGCviNgPeB24CEDSAGAksCdw\nDHCrfMFjMzOzLVbUJB8RTwKrasx7JCI2pJNPA73Sx8cD90TE+oiYR/ID4IBixmdmZpZlpT6F7gyg\n6m4EOwMLc5YtSueZmZnZFihZkpf0X8C6iJhSqhjMzMyyrCSj6yWdDnwNGJIzexGQe8HjXum8Wo0b\nN676cXl5OeXl5Y0ZoplZUfXo0YOBAweWOgxrhnr06AFARUUFFRUVBZVV9IvhSOoLTIuIL6TTQ4Eb\ngK9GxMqc9QYAdwNfJumm/zPwb7Vd9cYXw2nZxg4dmu1T6ObPZ+L06aUOw8wyptldDEfSZKAc6Cpp\nAXAZcDGwDfDndPD80xFxVkTMlnQvMBtYB5zlTG5mZrbliprkI2J0LbPvqmf9q4GrixeRmZnZ1qPU\no+vNzMysSJzkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szM\nLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTN\nzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ\n3szMLKOc5M3MzDLKSd7MzCyjnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOc5M3MzDLKSd7MzCyj\nnOTNzMwyyknezMwso5zkzczMMspJ3szMLKOKmuQl3SlpmaSXc+Z1ljRD0hxJD0vqlLPsIkmvS3pV\n0lHFjM3MzCzrit2Svws4usa8C4FHImJ34C/ARQCSBgAjgT2BY4BbJanI8ZmZmWVWUZN8RDwJrKox\nezgwKX08CRiRPj4euCci1kfEPOB14IBixmdmZpZlpTgmv2NELAOIiKXAjun8nYGFOestSueZmZnZ\nFmgOA++i1AGYmZllUZsS7HOZpJ0iYpmk7sDydP4ioHfOer3SebUaN25c9ePy8nLKy8sbP1IzM7MS\nqaiooKKioqAyFFHchrSkvsC0iPhCOn0t8G5EXCvpAqBzRFyYDry7G/gySTf9n4F/i1oClFTbbGsh\nxg4dysSyslKHUTRj589n4vTppQ7DzDJGEhGxWQPSi9qSlzQZKAe6SloAXAZcA9wn6QxgPsmIeiJi\ntqR7gdnAOuAsZ3IzM7MtV9QkHxGj61h0RB3rXw1cXbyIzMzMth7NYeCdmZmZFYGTvJmZWUY5yZuZ\nmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8\n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\nM1Znko+IG6oeS+oAnAOMAe4BbqhrOzMzM2se6j0mL6kL8CPgZGAS8KWIWNUUgZmZmVlh6jsmfz3w\ndeAO4AsR8WGTRWVmZmYFq+9iOD8GegKXAIslfZD+rZb0QdOEZ2ZmZluqvmPym3U1PDMzM2tenMjN\nzMwyyknezMwso/K5rK2ZWbVXZs1i7NChpQ6jKLr27ctVt99e6jDMGo2TvJltFq1dm9l7K4zN8I2h\nbOvk7nozM7OMcpI3MzPLKCd5MzOzjHKSNzMzyygneTMzs4wqaZKX1ErS85KmptOdJc2QNEfSw5I6\nlTI+MzOzlqzULflzgNk50xcCj0TE7sBfgItKEpWZmVkGlCzJS+oFfA34Rc7s4SS3tCX9P6Kp4zIz\nM8uKUrbkbwLOByJn3k4RsQwgIpYCO5YiMDMzsywoSZKXdCywLCJeBFTPqlHPMjMzM6tHqS5rezBw\nvKSvAdsBHST9GlgqaaeIWCapO7C8rgLGjRtX/bi8vJzy8vLiRmxmZtaEKioqqKioKKiMkiT5iLgY\nuBhA0mHAjyPiFEnXAacD1wKnAffXVUZukjczM8uamg3Y8ePHb3YZpR5dX9M1wJGS5gCHp9NmZma2\nBUp+F7qImAnMTB+/CxxR2ojMzMyyobm15M3MzKyROMmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5\nyZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZll\nlJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZ\nWUY5yZuZmWWUk7yZmVlGOcmbmZlllJO8mZlZRjnJm5mZZZSTvJmZWUY5yZuZmWVUm1IHYGbWXLwy\naxZjhw4tdRhF07VvX666/fZSh2FNyEnezCyltWuZWFZW6jCKZuy8eaUOwZqYk7w1uTcqP2ToUw+V\nOoyieaPyw1KHYGYGOMlbCXzSZgNlX/tcqcMommfuWlbqEMzMAA+8MzMzyywneTMzs4xykjczM8so\nH5M3a2RrKtd7YKGZNQtO8maNbENrPLDQzJqFknTXS+ol6S+SZkn6p6QfpvM7S5ohaY6khyV1KkV8\nZmZmWVCqY/LrgR9FxF7AQcDZkvYALgQeiYjdgb8AF5UoPjMzsxavJEk+IpZGxIvp4w+BV4FewHBg\n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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'male'\"])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "Examining the survival statistics, the majority of males younger than 10 survived the ship sinking, whereas most males age 10 or older *did not survive* the ship sinking. Let's continue to build on our previous prediction: If a passenger was female, then we will predict they survive. If a passenger was male and younger than 10, then we will also predict they survive. Otherwise, we will predict they do not survive. \n", "Fill in the missing code below so that the function will make this prediction. \n", "**Hint:** You can start your implementation of this function using the prediction code you wrote earlier from `predictions_1`." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predictions_2(data):\n", " \"\"\" Model with two features: \n", " - Predict a passenger survived if they are female.\n", " - Predict a passenger survived if they are male and younger than 10. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['Sex'] == 'female' or passenger['Age'] < 10:\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_2(data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "*How accurate would a prediction be that all female passengers and all male passengers younger than 10 survived?* \n", "**Hint:** Run the code cell below to see the accuracy of this prediction." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 79.35%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: 79.35% (Accuracy when we predict a passenger survived if and only if they are female or if they are male and younger than 10.)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "***\n", "Adding the feature **Age** as a condition in conjunction with **Sex** improves the accuracy by a small margin more than with simply using the feature **Sex** alone. Now it's your turn: Find a series of features and conditions to split the data on to obtain an outcome prediction accuracy of at least 80%. This may require multiple features and multiple levels of conditional statements to succeed. You can use the same feature multiple times with different conditions. \n", "**Pclass**, **Sex**, **Age**, **SibSp**, and **Parch** are some suggested features to try.\n", "\n", "Use the `survival_stats` function below to to examine various survival statistics. \n", "**Hint:** To use mulitple filter conditions, put each condition in the list passed as the last argument. Example: `[\"Sex == 'male'\", \"Age < 18\"]`" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\n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\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nPSNGjGDjxo3ly2fOnMlhhx1Gp06dGDZsGEuXLgXg3HPPZeXKlYwcOZL27dszderUPcresGEDI0eO\npGPHjnTu3JkTTzyxfFnF7v7MOsyfP5+ePXty66230q1bNy644AL69+/PnDlzytcvKSlh//33Z9Gi\nRaxYsYIWLVpQWlrK448/zqBBg3aL484772TMmDEAfPnll1x++eXk5ubSrVs3fvCDH/DFF1/U8A7U\nnxK5iIiUGzRoED169OCll17aY9ncuXO54447eP7553n//fd57rnnaixvxowZTJ8+nXXr1vHFF1+U\nJ+Vly5YxceJEfv3rX7Nu3TpOO+00zjzzTHbt2sXDDz9Mr169eOaZZ/jss8+4/PLL9yj39ttvp2fP\nnmzYsIG1a9dy0003lS+rqbv/k08+4dNPP2XlypU88MADTJw4kYKCgt3q2aVLFwYMGLBbeSNHjmTZ\nsmV8+OGHu9Xv7LPPBuDKK6/kgw8+4O233+aDDz5g1apVXH/99TW+RvWlRC4iIrvp3r37bi3nMk88\n8QSTJk3ikEMOYZ999mHy5Mk1ljVp0iT69u1L69atGTduHIsWLQLg8ccf58wzz2TYsGHk5ORw+eWX\ns337dl555ZXybavrtm/VqhWrV6/m448/JicnhyFDhkTaDiAnJ4cpU6bQqlUrWrduTX5+PjNnzmTH\njh1AkJzz8/P32G6fffZh9OjRzJgxA4D333+fpUuXMmrUKAB++9vfcuedd9KhQwfatm3LVVddVb5u\nnJTIRURkN6tWraJTp057zC8uLqZnz57l07m5uTUmza5du5Y/b9OmDVu3bi0vKzdjrICZ0bNnT1at\nWhUpxp///Of07duXU045ha9+9avccsstkbYD6NKlC61atSqf7tu3L/3792fWrFls376dmTNnMnFi\n5TfvzM/PL0/OBQUFjBkzhtatW7Nu3Tq2bdvG0UcfTadOnejUqROnnXYaGzZsiBxXXWmwm4iIlHvt\ntdcoLi7mhBNO2GNZt27dKCoqKp9esWJFnUetd+/enXfeeWe3eUVFRfTo0QOouXu8bdu2TJ06lalT\np7JkyRKGDh3KMcccw9ChQ2nTpg3btm0rX/eTTz7Z7QdIZWVPmDCBgoICSkpKOPTQQznooIMq3e/w\n4cNZt24db731Fo899hh33XUXAF/5yldo06YNixcvplu3btFehAaiFrmIiLBlyxaeeeYZ8vPzOeec\nc+jfv/8e64wbN47f//73vPvuu2zbtq1ex3/HjRvH7NmzeeGFF9i1axdTp05l7733ZvDgwUDQkq/u\n/PTZs2eXH6tu164dLVu2pEWLIKUNGDCAgoICSktLmTt3LvPnz68xngkTJjBv3jzuvffePVrjmb0O\nLVu2ZOzYsVxxxRVs2rSJ4cOHA8GPg+9973tcdtllrFu3Dgh6NubNm1eLV6VulMhFRJqxkSNH0qFD\nB3r16sWvfvUrLr/88t1OPctsvY4YMYLLLruMYcOG0a9fP0466aRqy66uVd2vXz8eeeQRfvSjH9Gl\nSxdmz57NrFmzaNky6Ci+6qqruOGGG+jUqRN33HHHHtu///77nHzyybRr144hQ4bwwx/+sHzk+t13\n383MmTPp2LEjM2bM4N/+7d9qfB26du3K4MGDWbhwIePHj6+2Hvn5+Tz//POMGzeu/McDwC233MJX\nv/pVjj32WPbbbz9OOeUUli1bVuO+60v3IxeRPcR90ZKk1eaiKfU1cODA3e5+1pQuCCPJqfi5KKP7\nkYtIg4j7oiVJq81FUxqakqw0NHWti4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhI\niimRi4iIpJgSuYiIxO7iiy/mxhtvbPByp0yZwjnnnNPg5aaJLggjItKILvrJRSwvXh5b+b279+a+\nO6NfdGbBggVceeWVLF68mJYtW3LIIYdw1113cfTRRzdoXPfee2+DlpeprjduyRZK5CIijWh58XJy\nvxPfVfOWP7I88rpbtmxh5MiR3H///YwdO5Yvv/ySl156idatW9d6v+7e7BNqUtS1LiLSTC1btgwz\nY9y4cZgZrVu35uSTT+awww7bo8t6xYoVtGjRgtLSUgCGDh3KNddcw/HHH0/btm257bbbGDRo0G7l\n33nnnYwZMwaASZMmce211wLQv39/5syZU75eSUkJ+++/P4sWLQJg4cKFDBkyhI4dO3LkkUfudvey\n5cuXk5eXR4cOHTj11FNZv359PC9OiiiRi4g0U/369SMnJ4fzzz+fuXPn8umnn+62vGILu+L0I488\nwu9+9zu2bNnCRRddxLJly8pvLQowY8YMzj777D32m5+fT0FBQfn03Llz6dKlCwMGDGDVqlWceeaZ\nXHvttWzatImpU6fyrW99iw0bNgAwceJEBg0axPr167nmmmuYPn16vV+HtFMiFxFpptq1a8eCBQto\n0aIF3//+9+nSpQtjxoxh7dq1kbY///zz+drXvkaLFi1o3749o0ePZsaMGUBwm9GlS5cycuTIPbab\nOHEiM2fOZMeOHUCQ8PPz8wF49NFHOeOMMzj11FMBOOmkkxg4cCBz5syhqKiI119/neuvv55WrVpx\nwgknVFp+c6NELiLSjB188ME89NBDrFy5ksWLF1NcXMxll10WaduePXvuNp2fn1+eyAsKChgzZgx7\n7733Htv17duX/v37M2vWLLZv387MmTPLW+4rVqzg8ccfp1OnTnTq1ImOHTvy8ssvs3r1aoqLi+nY\nsSP77LNPeVm5WXyXvqhiTeRm9qCZrTGztytZ9jMzKzWzTnHGICIi0fTr14/zzjuPxYsXs++++7Jt\n27byZatXr95j/Ypd7cOHD2fdunW89dZbPPbYY0ycOLHKfU2YMIGCggKefvppDj30UPr06QMEPw7O\nPfdcNm7cyMaNG9m0aRNbtmzh5z//Od26dWPTpk1s3769vJyVK1fWt9qpF3eLfBpwasWZZtYDGA6s\niHn/IiJShaVLl3LHHXewatUqAIqKipgxYwaDBw/miCOO4MUXX6SoqIjNmzdz880311hey5YtGTt2\nLFdccQWbNm1i+PDhVa47YcIE5s2bx7333rtbwv/Od77DrFmzmDdvHqWlpezYsYP58+dTXFxMr169\nGDhwINdddx07d+5kwYIFzJo1q/4vRMrFmsjdfQGwqZJFdwJXxLlvERGpXrt27Xj11Vf5xje+Qbt2\n7TjuuOM4/PDDmTp1KieffDLjx4/n8MMPZ9CgQXsci67qVLP8/Hyef/55xo0bR4sWLapcv2vXrgwe\nPJiFCxcyfvz48vk9evTg6aef5qabbqJLly7k5uYyderU8tHyjz76KAsXLqRz587ccMMNnHfeeQ31\ncqSWuXu8OzDLBWa5++Hh9Cggz91/amYfA0e7+8YqtvW44xORPV04YgT3Z/GxxwtXrOD+uXMbZV8D\nBw7k9ddfL59uaheEkWRU/FyUMTPcvVYn5DfqBWHMbB/gaoJu9fLZjRmDiEiSlGSloTX2ld36Ar2B\ntyzoZ+kB/N3MjnH3Ss93mDx5cvnzvLw88vLy4o9SRESkERQWFlJYWFivMhojkVv4wN3fAbqWLwi6\n1o9y98qOowO7J3IREZFsUrGBOmXKlFqXEffpZwXAK0A/M1tpZpMqrOKoa11ERKTOYm2Ru3vVJxEG\nyw+Kc/8iIiLZTld2ExERSTElchERkRTT/chFRGLUrVs3Bg4cmHQY0sR069atwcpSIhcRiZEuISpx\nU9e6iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgSuYiI\nSIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGL\niIikmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpJgS\nuYiISIopkYuIiKSYErmIiEiKxZrIzexBM1tjZm9nzLvVzN41s0Vm9iczax9nDCIiItks7hb5NODU\nCvPmAYe6+wDgfeAXMccgIiKStWJN5O6+ANhUYd5z7l4aTi4EesQZg4iISDZL+hj5BcCzCccgIiKS\nWoklcjP7D2CnuxckFYOIiEjatUxip2Z2PnA6MKymdSdPnlz+PC8vj7y8vLjCEonsop9cxPLi5UmH\nEZsVHy2G3NykwxDJeoWFhRQWFtarDHP3hommqh2Y9QZmufvXw+kRwO3AN919Qw3betzxidTFiPEj\nyP1O9ia6OT/5E0UnfSvpMGJz4YoV3D93btJhiOzBzHB3q802cZ9+VgC8AvQzs5VmNgn4L2Bf4H/N\n7A0zuyfOGERERLJZrF3r7j6xktnT4tyniIhIc5L0qHURERGpByVyERGRFFMiFxERSTElchERkRRT\nIhcREUkxJXIREZEUUyIXERFJMSVyERGRFFMiFxERSTElchERkRRTIhcREUkxJXIREZEUUyIXERFJ\nMSVyERGRFFMiFxERSTElchERkRRTIhcREUmxlkkHIJJGy5YsZsWzi5MOIzafb92adAixemfxYi4c\nMSLpMGLTuXdvbrrvvqTDkEaiRC5SBzu3b2f4vl2SDiM2j5esSTqEWNn27dyfm5t0GLG5cPnypEOQ\nRqSudRERkRRTIhcREUkxJXIREZEUUyIXERFJMSVyERGRFKsxkZtZWzNrET7vZ2ajzKxV/KGJiIhI\nTaK0yF8E9jazA4F5wDnA7+MMSkRERKKJksjN3bcBZwH3uPtY4NB4wxIREZEoIiVyMxsMnA3MDufl\nxBeSiIiIRBUlkV8K/AL4H3dfbGYHAS/EG5aIiIhEUe0lWs0sBxjl7qPK5rn7R8AlcQcmIiIiNau2\n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\nIiIppkQuIiKSYkrkIiIiKaZELiIikmJK5CIiIimmRC4iIpJiSuQiIiIppkQuIiKSYkrkIiIiKaZE\nLiIikmJK5CIiIimmRC4iIpJiSuQiIiIppkQuIiKSYkrkIiIiKaZELiIikmJK5CIiIimmRC4iIpJi\nSuQiIiIppkQuIiKSYokmcjNrYWZvmNnMJOMQERFJq6Rb5JcCSxKOQUREJLUSS+Rm1gM4HfhdUjGI\niIikXZIt8juBKwBPMAYREZFUSySRm9kZwBp3XwRY+BAREZFaapnQfocAo8zsdGAfoJ2ZPezu51Zc\ncfLkyeXP8/LyyMvLa6wYRSRLbSvZxYiX5yQdRmw+KNmadAgSUWFhIYWFhfUqI5FE7u5XA1cDmNmJ\nwM8qS+KweyIXEWkIpTmQe/q+SYcRm1enrUk6BImoYgN1ypQptS4j6VHrIiIiUg9Jda2Xc/f5wPyk\n4xAREUkjtchFRERSTIlcREQkxZTIRUREUkyJXEREJMWUyEVERFJMiVxERCTFlMhFRERSTIlcREQk\nxZTIRUREUkyJXEREJMWUyEVERFJMiVxERCTFlMhFRERSTIlcREQkxZTIRUREUkyJXEREJMWUyEVE\nRFKsZdIBNGdXX3QRG5YvTzqM2Hy+dSvQJekwRCTLvLN4MReOGJF0GE2GEnmCNixfzv25uUmHEZvH\n/16adAgikoVs+/as/d/5QB22Ude6iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIik\nmBK5iIhIiimRi4iIpJgSuYiISIopkYuIiKSYErmIiEiKKZGLiIikmBK5iIhIiimRi4iIpFgiidzM\nepjZX81ssZn9w8wuSSIOERGRtEvqfuS7gJ+6+yIz2xf4u5nNc/f3EopHREQklRJpkbv7J+6+KHy+\nFXgXODCJWERERNIs8WPkZtYbGAC8mmwkIiIi6ZNU1zoAYbf6k8ClYct8D48+9mjjBtVIWu/VmpLS\n0qTDEBGRlEsskZtZS4Ik/gd3f7qq9SbfP7n8eefenencp3P8wTWCLz78go8/WMyI4neTDiU223xX\n0iGIiDRphcXFFBYX16uMJFvkDwFL3P3u6lYa9tNhjRRO4ypeV8w230Hu6V2TDiU2pdOSjkBEpGnL\n696dvO7dy6envPFGrctI6vSzIcDZwDAze9PM3jCzEUnEIiIikmaJtMjd/WUgJ4l9i4iIZJPER62L\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'male'\", \"Pclass == 1\"])" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nh7Fa7FqXpF6sJREPGDCAAw88kCuvvJJLL72U+++/H4BjjjmGb33rW63rf+9732PLLbdk6NChXHLJ\nJR22yPfYYw++9a1v8aEPfYiNNtqIMWPG8Nxzz7Uunzp1Ku9+97sZNGgQe+65J7NnzwbgyCOPZO7c\nuYwdO5aNNtqIs88+e4Wyn332WcaOHcvAgQPZdNNN+chHPtK6rG13f20dbrrpJoYNG8Z3v/tdhgwZ\nwic+8Ql22GEHrr/++tb1ly5dymabbcY999zDE088QZ8+fVi2bBlXXXUVO++883JxnHvuuRxyyCEA\nvP766xx//PEMHz6cIUOG8LnPfY7XXnutk3dg9ZnIJUmtdt55Z4YOHcott9yywrLp06dzzjnncMMN\nN/Dwww/z+9//vtPypkyZwqWXXsqiRYt47bXXWpPyQw89xKRJk/jhD3/IokWL2H///TnwwAN58803\n+dnPfsZWW23Ftddey4svvsjxxx+/Qrnf//73GTZsGM8++yxPP/00Z555Zuuyzrr7n3rqKf7+978z\nd+5cLrroIiZNmsTkyZOXq+fgwYMZMWLEcuWNHTuWhx56iEcffXS5+h122GEAnHjiiTzyyCPcd999\nPPLIIzz55JOcdtppnb5Gq8tELklazpZbbrlcy7nF1VdfzTHHHMO73vUu1l9/fU455ZROyzrmmGPY\ndtttWXfddRk3bhz33HMPAFdddRUHHngge+65J3379uX4449nyZIl/OlPf2rdtqNu+/79+7NgwQIe\nf/xx+vbty6hRo+raDqBv376ceuqp9O/fn3XXXZeJEycydepUXn31VaBIzhMnTlxhu/XXX5+DDz6Y\nKVOmAPDwww8ze/ZsDjroIAB+/OMfc+6557Lxxhuz4YYbctJJJ7Wu20gmcknScp588kkGDRq0wvz5\n8+czbNiw1unhw4d3mjS32GKL1ucbbLABL7/8cmtZw2vGCkQEw4YN48knn6wrxq9+9atsu+227Lvv\nvrzjHe/grLPOqms7gMGDB9O/f//W6W233ZYddtiBadOmsWTJEqZOncqkSZPa3XbixImtyXny5Mkc\ncsghrLvuuixatIjFixfzgQ98gEGDBjFo0CD2339/nn322brjWlUOdpMktbrjjjuYP38+u++++wrL\nhgwZwrx581qnn3jiiVUetb7lllvy17/+dbl58+bNY+jQoUDn3eMbbrghZ599NmeffTb3338/e+yx\nB7vssgt77LEHG2ywAYsXL25d96mnnlruB0h7ZU+YMIHJkyezdOlSdtxxR97+9re3u9999tmHRYsW\nce+993LFFVdw3nnnAfDWt76VDTbYgFmzZjFkyJD6XoQ1xBa5JImXXnqJa6+9lokTJ3LEEUewww47\nrLDOuHHj+K//+i8eeOABFi9evFrHf8eNG8d1113HjTfeyJtvvsnZZ5/Neuutx2677QYULfmOzk+/\n7rrrWo9VDxgwgH79+tGnT5HSRowYweTJk1m2bBnTp0/npptu6jSeCRMmMGPGDC644IIVWuO1vQ79\n+vXj0EMP5YQTTuD5559nn332AYofB5/61Kc47rjjWLRoEVD0bMyYMaMLr8qqMZFLUi82duxYNt54\nY7baaiu+/e1vc/zxxy936llt63XMmDEcd9xx7Lnnnmy33XbstddeHZbdUat6u+2247LLLuMLX/gC\ngwcP5rrrrmPatGn061d0FJ900kmcfvrpDBo0iHPOOWeF7R9++GH23ntvBgwYwKhRo/j85z/fOnL9\nBz/4AVOnTmXgwIFMmTKFf/7nf+70ddhiiy3YbbfduO222xg/fnyH9Zg4cSI33HAD48aNa/3xAHDW\nWWfxjne8g1133ZVNNtmEfffdl4ceeqjTfa8u70cuSQ00cuTI5e5+1pMuCKPmafu5aOH9yCWphzPJ\nak2za12SpAozkUuSVGEmckmSKsxELklShZnIJUmqMBO5JEkVZiKXJKnCTOSSpIb77Gc/yxlnnLHG\nyz311FM54ogj1ni5VeIFYSSpGx37b8cyZ/6chpW/9ZZb86Nz67/ozK233sqJJ57IrFmz6NevH+96\n17s477zz+MAHPrBG47rgggvWaHm1VvXGLWsLE7kkdaM58+cw/PDhna+4quVfNqfudV966SXGjh3L\nhRdeyKGHHsrrr7/OLbfcwrrrrtvl/WZmr0+ozWIil3qgRrfaerqutiq1ah566CEignHjxgGw7rrr\nsvfeewNFl/UjjzzCz3/+c6C4Zek222zDm2++SZ8+fdhjjz0YNWoUM2fO5O677+bkk0/m6quv5o47\n7mgt/9xzz+Wmm27i17/+NccccwzDhg3jtNNOY4cdduDss8/mox/9KABLly5lyJAhzJgxgxEjRnDb\nbbfxla98hfvvv5+tt96a8847r/WGKHPmzOHoo4/m7rvvZtddd2W77bbrzpesRzKRSz1Qo1ttPV1X\nWpVaddtttx19+/bl6KOPZsKECa137WrRtoXddvqyyy5j+vTpbLfddrz88succcYZPProo2y77bYA\nTJkyhRNOOGGF/U6cOJHJkye3JvLp06czePBgRowYwZNPPsmBBx7I5Zdfzn777ccNN9zAxz/+cWbP\nns2mm27KpEmTGDVqFL/73e+47bbbOOCAAzjkkEPW9EtTKQ52k6ReasCAAdx666306dOHT3/60wwe\nPJhDDjmEp59+uq7tjz76aN75znfSp08fNtpoIw4++GCmTJkCFLcZnT17NmPHjl1hu0mTJjF16lRe\nffVVoEj4EydOBODyyy/ngAMOYL/99gNgr732YuTIkVx//fXMmzePO++8k9NOO43+/fuz++67t1t+\nb2Mil6RebPvtt+enP/0pc+fOZdasWcyfP5/jjjuurm2HDRu23PTEiRNbE/nkyZM55JBDWG+99VbY\nbtttt2WHHXZg2rRpLFmyhKlTp3LYYYcBRRf+VVddxaBBgxg0aBADBw7kj3/8IwsWLGD+/PkMHDiQ\n9ddfv7Ws4cN7b89VC7vWJUlA0dV+1FFHcdFFF/GBD3yAxYsXty5bsGDBCuu37WrfZ599WLRoEffe\ney9XXHEF55133kr3NWHCBCZPnszSpUvZcccd2WabbYDix8GRRx7JhRdeuMI2c+fO5fnnn2fJkiWt\nyXzu3Ln06dO726S9u/aS1IvNnj2bc845hyeffBKAefPmMWXKFHbbbTfe+973cvPNNzNv3jxeeOEF\nvvOd73RaXr9+/Tj00EM54YQTeP7559lnn31Wuu6ECROYMWMGF1xwAZMmTWqdf/jhhzNt2jRmzJjB\nsmXLePXVV7npppuYP38+W221FSNHjuTkk0/mjTfe4NZbb2XatGmr/0JUnIlcknqpAQMGcPvtt/NP\n//RPDBgwgA9+8IPstNNOnH322ey9996MHz+enXbaiZ133nmFY9ErO9Vs4sSJ3HDDDYwbN265lnLb\n9bfYYgt22203brvtNsaPH986f+jQoVxzzTWceeaZDB48mOHDh3P22WezbNkyoDiGftttt7Hpppty\n+umnc9RRR62pl6OyIjObHcNKRUT25PikRhkzfkyvHrX+xGVPMP3K6c0OY40YOXIkd955Z+t0T7sg\njJqj7eeiRUSQmV06Id9j5JLUjUyyWtPsWpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKF\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\", \"Pclass == 1\"])" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfIAAAGJCAYAAABxdLHSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVeW59/HvjyIKAQRFBqWoGFQ0xkSwG8euUcpJIgLG\ngnlTPYmeHI1YIhN9NUGxJO+JHo2JwSjYUgQ1SiyjkgSjiSWKASsQygiIimKh3O8fa824Gabsmdl7\n9izm97muuWav9qx77Xbv51nPepYiAjMzM8umDqUOwMzMzJrPidzMzCzDnMjNzMwyzInczMwsw5zI\nzczMMsyJ3MzMLMOcyM0KTNJ4SQ8UoJzTJD1RiJiauf/rJV3YjO0GSHpXkooRVyH2L2mDpJ2LsO/7\nJZ2SPi7p62fthxP5Zk7SG5LWpF9sSyXdLKlrqeNqbZJ2kHS3pOWSVkl6XtKpxdhXREyLiGMLVVx9\nCyR9TdJLkt5JX9t7JXVLl90s6ZJ8d1JX0omIb0fEZXls+7qkw3O2WxQRPaJAg1RI+l9J1+VMd5L0\nnqSf1zFv39r7l/SopDNqFZt3bJImSbo4Z/oCSa+ln6mFkqbXFBrxxYj4TT77kTRU0oOSVkp6S9JT\nkvJ636Svb53v3zTej9P4Vqf/z8mn3Eb2udHrbG2HE/nmL4DjI6IH8HlgGHBRaUMqLkkd65j9G2AB\nMADYBjgFqCpg+a1K0qHAZcBJEdET2B24oyVF0oTk1soeBw7JmR4GLKw1bzhJ/H/Ps8xmtRZIOg04\nGTg8/UwNAx5uTlnATOBBoC+wHfA94N1mllXb7emPme7p/ykFKrfZ2sLnZnPlRN4+CCAilgJ/BPYE\nkHS6pLnpL/ZXJH2jZgNpG0kz09rrSkmP5Sw7T9K/0+1eknRYOl+SJqZlLZd0u6St02WD0ubMUyUt\nkPSmpAtyytxS0tS0ZvKipHMlLcpZ3i+tUb8p6VVJ381ZNknSXZJ+I+lt4LQ6noPhwNSI+DAiNkTE\ncxHxYLr9obn7SufV1D7qKP+CtJVj65z1P5cec8fc2q2k6yRdWavsP0g6O+e5fCV9Ll+QNDqfF5Qk\ngfwlIp4HiIi3I+I3EfG+pK+TJJsfpOXe09C+JO0GXA8ckNbg3krn19Tq63s/SLoFGAjMrK755bzW\nHdJ1ekn6laTF6ba/a6jMOjwO7C6pdzp9CHA70C1n3sHAXyNife7+Jf3fdP3/SeP7WU65R0man77n\n/qcJz/uDEfFG+ry/GRE3VS/UprX/DpL+n6S3089a9XtqG2BH4KaIWJf+/TUi/pIuP1TSIknnp++r\n1ySNzym3WT+6JPWQdJOkJWn5l0rJKQhJO0t6WNKK9HN2q6Qe6bK6Xuemfm5OU6LO7whrgYjw32b8\nB7xOUnuApDb6AlCRTh8H7Jg+PgR4H9g7nb4cuI7kx15H4KB0/hCS2lDfdHogsFP6+CzgL0A/oDNJ\ncpiWLhsEbABuALYA9gI+BHZNl/8EeBToAWwPPAcsTJcJeBq4MI1lR+AV4Kh0+STgI2BEOt2ljudh\nFjAbOAkYUGvZodX7qud5q13+lsBDwNdy1r8CuC59fBrweM7zuiBnva2BNTnP35dzHp8IvJczXVNO\nHcdzcPp6VQAHAlvUWn4zcEmteU3aV24Z9b0fcp6rw3KmBwHrgQ7p9H3A9PS17Qgc0liZdRzva8Co\n9PFMoJyklSV33kX17P9R4Ixa5W0AZgDdST4XbwJH5/F5OhlYAZwD7FO9j5zlNftKn9O1JDXtjsAY\n4G1g63T5vDTuUcB2dbwn1wJXknyWvpC+Xp/OI8ZJwC31LPt9+pxvCWwLzAG+ni4bDBwBdCJptaoE\nrm7gdW7q56YLDXxH+K/5f66Rtw9/SGtZj5N80fwYICL+GJ/ULJ4gSXbVzZVrST5sO0XE+oj4czp/\nPUki3lNSp4hYGBGvp8u+CVwYEUsjYi1wCfCV6poZSS2iIiI+jqQm+Rzw2XTZicBlEfFuRCwBcmtO\n+wLbRsRlaSxvADcBY3PW+WtEzEyP5aM6noMT0+O/CHhN0j8kDcvz+atd/ockiSm3hjQWuK32Runz\nGpIOTmd9haQmXZUu/23O47uAl9PjbVBEzAa+BHwOuBdYIemq6tpVPds0a1+p+t4P1ercr6R+wDHA\nN9PXdn36nORTZq7HgC+kx7cvSQKanTPvoHSdpvhxRKyOiEUkn4u9G9sgIm4DvgscTZLoqiT9oIFN\nqiLiZ+nx3UmSvI9Plx1GkvimAEskVUraJXd3wA8jYm1EPE7yg2hMnsd2UtrSsCr9XyZpO5If7/8V\nScvUCuBaYFx6bK9GxMORtA6sBK4hSda5mnpKovbnsrHvCGsGP3ntw6iI6B0RO0XEd6sTnaTjJP01\nbdZcRfIh3zbd5krgVWBW2gx2HiQfduBskppglaRpksrSbQYBv0+/ON4C5pJ8WffNiSX3vPQa4FPp\n4+2Bf+csy22yGwjsUF1uGuv5JOcV61p/ExHxTkRcEBGfSeN5jqR2kq/a5f8W2F9SXyXnqxtKRHeQ\nflmSJP+ahK/kVMMz6RfuKmAPPnkNGhQRD0bEqIjoTVKrOx34P/Wt35J9Uc/7IQ/9gbcioq5zv1c0\noczHSWqlnwFeTX9MzSZJNJ8hqWE+mWdM1ep7LzYoIqZHxNEkrSvfAi6VdFQ9qy+uNb2A5L1ORCyJ\niO9FxKdJPjtrgKk5665Kj3OTbfNwR/qZ75X+X5buozOwNOdz9L+k7wFJ20maruS02dvAreT//qhP\n7c9NPt8R1kRO5O3DJr+iJW0B3E3yZdonInqRnD+vPp/+XkScExGDgZHA95WeC4+I2yPiEJIPJcDk\n9P9C4Lj0i6P6S6RbJOfmG7OU5Eu/2sCcx4uA12qV2zMiRuSsk/c5w4h4i6QWtL2kXiRN1DU9+ZV0\nyulTe7NaZbxN0oIxliRJ397ALqeT1DoGAvuR/Aggnb4R+E56TL2AF2lGR6yIeBR4hLT/Q+1489hX\ng89fQ++HRrZdBPSuPtdaq8z3GyiztsdJaszHA0+k279I0ix+PPBURHxcX/gNHVtzpbXs3wLP88nz\nXtsOtaYHAkvqKGsx8PNa5fSStFVj2zbBIpLTWdvkfI62joi90uWXk5xy2CMitga+ysbvxdrPY5M/\nN7TsO8Lq4UTefm2R/q2IiA2SjiNpLgRA0vGSBqeTq4F1wAZJQyQdlv4Q+Bj4gOTDD8n578vTpIGk\nPpJG5uyzoQR1J3C+pK0l7QCcmbPsb8BqST9Q0imuo6Q9mtI0Lukn6TYdJXUHvgO8EhGrgPnAlmkL\nRSeS5vct8ih2OnAqybnnafWtFBHPAitJTgc8kFM77Uby3K1Q0jFrAvUnhNrHM1LSSfqkM+G+JLXT\nv6arVAG510k3tq8qoL+kzvXsr673w/p69gWf/CBcRvID8br0te0k6ZAGytxAHdKWoCqSc6y5l8k9\nmc57vK79NxBfsyjpyPhFSZ9KO24dBwwlaeqvS19J302P+0RgN+D+9LmokDQ4LWdb4Aw+ef2qj+FH\nkjqnz9nxwF3NjT19LWYB10jqnu53Z0lfSFfpTnIefnX6GTy3VhHL2Ph5bM7nprHvCGsGJ/LNX521\nkYh4j6QTzl1pE9dY4J6cVT4NPCRpNfBn4OcR8RhJh5WfAMtJagd9SJq5AX6aljFL0jsknVpyz8HW\njiV3+hKSZsjXSb5s7iLpKENEbABOIKmRvU7SMekXJJ2n8tWVpCl9FUlHuQEktUDSxPod4Jckzfur\n2biZvz4zSJ6npRHxz0bWnUbSkaimWT0iXgKuIkkCy0iaumfneTyrgK8D89Pn+hZgckRUtwz8Etgj\nbcL8XbqvqxvY1yMkNfRlkt6sY391vR+qk+ePgR+m+/p+9eHlbHsKSZL+F58k4/rKbOg89+MknbBy\nT2E8QfIerJ3Ic/f/U+BEJaeQrq1jeV3T9XkXuICkmXsVyWfhWxFRnYBrlzOH5DhXAJcCX05/PH5M\n0mnzT8A7JLX6D4EJOdsuTfexhKRj3zcjYn6ecdbnVJJkOxd4i+RzVn1q7EckHfjeJumE99ta2/6E\nnNc5/dycSdM+N419R1gzKKJ4l45K+iXJF3BVTvNN9bL/Jjnvtm3a1Imk80l+la4DzoqIWUULzto0\nSd8iuUa6vqZWs81W2u/iNxExsNGVrd0rdo38ZpIeqxuR1B84iuRXbfW83Ul6ZO5O0unqOqk0Qzxa\n61PSq/bAtLlvV+C/gd+VOi4zs7auqIk8vURmVR2LrmHT8y+jSEYjWhfJ5UVNuTTGsm8LkvNn75Jc\no/17kmtMzcysAZ1ae4dpx4ZFEfHPWhXuHdi4o8diNu3xaZupiFhIchmRWbuX9hVws7rlpVUTeXop\nxQUkzepmZmbWQq1dIx9M0lPzufT8d3/gH+mlM4vZ+BdofzYdTAEASW315g5mZmZFExGb9B1rjcvP\nxCfXlL4QEWURsXNE7ERyqcLnIuJNkkt5TpK0haSdgF1Irh+uUxR4rNpJkyaVfLxcH4ePJQt/m8ux\nbC7H4WNpm3/FOI76FDWRS5pGcp3gECX37Z1Qa5XgkyQ/l2RQkLnA/SQjULnmbWZm1oCiNq1HxPhG\nlu9ca/rHpDf0MDMzs8Z5ZLdUeXl5qUMoiM3lOMDH0lZtLseyuRwH+FjaotY8jqKO7FYsktzqbmZm\n7Yokoo7Obq1+HbmZmcGIESNYutQ3/bJN9evXj5kzZ+a9vhN5qqx/GVWLqxpfMU99d+jLsn8vK1h5\nZrZ5Wbp0KU8//XSpw7A2aNiwvG/sCDiR16haXAUVBSyvonA/CszMzOrjzm5mZmYZ5kRuZmaWYU7k\nZmbWZN/+9re57LLL6l3eoUMHXnvttVaMqHUtWrSIHj16NDjiWmtxIjczayN2LCtDUtH+diwryy+O\nHXeka9eu9OzZk969e3PwwQdzww03bJS0rr/+ei688MJ6y6h1d8uC2WmnnXjkkUeKUnZTDBgwgHff\nfbdox9kUTuRmZm3EgqoqAor2t6Aqv064krjvvvt45513WLBgARMnTmTy5Ml87Wtfy/tY2kJNtSXW\nr19f6hDy5kRuZmabqE7E3bt354QTTuCOO+5g6tSpzJ07F4AJEyZw8cUX16x/5ZVXsv3229O/f39u\nvvnmBmuqhx12GBdffDEHH3wwPXr04Nhjj+Wtt96qWT5jxgz23HNPevfuzeGHH868efMAOPXUU1m4\ncCEjRoygR48eTJkyZZOyV65cyYgRI+jVqxfbbLMNhx56aM2y2s39ucfw2GOPMWDAAK644gr69evH\nGWecwdChQ7n//vtr1l+/fj3bbbcdzz77LAsWLKBDhw5s2LCBO++8k+HDh28UxzXXXMPo0aMB+Pjj\njznnnHMYNGgQ/fr14zvf+Q4fffRRI69A/pzIzcysUcOHD6d///488cQTmyx74IEHuPrqq3n44Yd5\n+eWXeeihhxotb/r06UydOpXly5fz0Ucf1STl+fPnM378eH72s5+xfPlyjjvuOE444QTWrVvHLbfc\nwsCBA7n33nt59913OeecczYp96qrrmLAgAGsXLmSN998k8svv7xmWWPN4MuWLePtt99m4cKF3Hjj\njYwfP55p06ZtdJx9+vRh77333qi8ESNGMH/+fF599dWNju/kk08G4LzzzuOVV17h+eef55VXXmHx\n4sVccskljT5H+XIiNzOzvGy//fYb1Zyr3XXXXUyYMIHdd9+drbbaioqKikbLmjBhAoMHD6ZLly6M\nGTOGZ599FoA777yTE044gcMPP5yOHTtyzjnn8MEHH/CXv/ylZtuGmu07d+7M0qVLef311+nYsSMH\nHXRQXtsBdOzYkR/96Ed07tyZLl26MG7cOGbMmMGHH34IJMl53Lhxm2y31VZbMWrUKKZPnw7Ayy+/\nzLx58xg5ciQAv/jFL7jmmmvo2bMn3bp1Y+LEiTXrFoITuZmZ5WXx4sX07t17k/lLlixhwIABNdOD\nBg1qNGmW5XS869q1K++9915NWYMGDapZJokBAwawePHivGL8wQ9+wODBgzn66KPZZZddmDx5cl7b\nAfTp04fOnTvXTA8ePJihQ4cyc+ZMPvjgA2bMmMH48XXf1HPcuHE1yXnatGmMHj2aLl26sHz5ctas\nWcM+++xD79696d27N8cddxwrV67MO67GeGQ3MzNr1FNPPcWSJUs45JBDNlnWr18/Fi1aVDO9YMGC\nZvfm3n777XnhhRc2mrdo0SL69+8PNN483q1bN6ZMmcKUKVOYO3cuhx12GPvuuy+HHXYYXbt2Zc2a\nNTXrLlu2bKMfIHWVPXbsWKZNm8b69evZY4892HnnnTdZB+Coo45i+fLlPPfcc9x+++1ce+21AGy7\n7bZ07dqVF198kX79+uX3JDSRa+RmZlav1atXc++99zJu3DhOOeUUhg4dusk6Y8aM4de//jUvvfQS\na9asadH53zFjxnDffffx6KOPsm7dOqZMmcKWW27JAQccACQ1+YauT7/vvvtqzlV3796dTp060aFD\nkur23ntvpk2bxoYNG3jggQd47LHHGo1n7NixzJo1i+uvv36T2nhuq0OnTp048cQTOffcc1m1ahVH\nHXUUkPw4+PrXv87ZZ5/N8uXLgaRlY9asWU14VhrmRG5mZpsYMWIEPXv2ZODAgfz4xz/mnHPO4Ve/\n+lXN8tza67HHHsvZZ5/N4YcfzpAhQzjiiCMaLLuhWvWQIUO49dZb+c///E/69OnDfffdx8yZM+nU\nKWlAnjhxIpdeeim9e/fm6quv3mT7l19+mSOPPJLu3btz0EEHceaZZ9b0XP/pT3/KjBkz6NWrF9On\nT+c//uM/Gn0eysrKOOCAA5gzZw4nnXRSg8cxbtw4Hn74YcaMGVPz4wFg8uTJ7LLLLuy///5svfXW\nHH300cyfP7/RfefL9yP/pMyC3jSFiuxfR2lmxTNs2LBN7n62Y1lZ3td6N8egvn15Y5nvytjW1fXe\nAN+P3MyszXOSteZw07qZmVmGOZGbmZllmBO5mZlZhjmRm5mZZZgTuZmZWYY5kZuZmWWYE7mZmVmG\nOZGbmVnJfPvb3+ayyy4reLk/+tGPOOWUUwpeblvkRG5m1kaU9S9DUtH+yvqXNR5Eavbs2Rx00EFs\nvfXWbLvtthxyyCH8/e9/L/gxX3/99Vx44YUFLxcav8HK5sIju5mZtRFVi6sKO1R07fIr8hv+dfXq\n1YwYMYIbbriBE088kY8//pgnnniCLl26NHmfEdFuEmqpuEZuZmYbmT9/PpIYM2YMkujSpQtHHnkk\ne+655yZN1gsWLKBDhw5s2LABgMMOO4yLLrqIgw8+mG7dunHllVcyfPjwjcq/5pprGD16NAATJkzg\n4osvBmDo0KHcf//9NeutX7+e7bbbjmeffRaAOXPmcNBBB9GrVy8+97nPbXT3sjfeeIPy8nJ69uzJ\nMcccw4oVK4rz5LRBTuRmZraRIUOG0LFjR04//XQeeOAB3n777Y2W165h156+9dZbuemmm1i9ejXf\n+ta3mD9/fs2tRQGmT5/OySefvMl+x40bx7Rp02qmH3jgAfr06cPee+/N4sWLOeGEE7j44otZtWoV\nU6ZM4ctf/jIrV64EYPz48QwfPpwVK1Zw0UUXMXXq1BY/D1nhRG5mZhvp3r07s2fPpkOHDnzjG9+g\nT58+jB49mjfffDOv7U8//XR22203OnToQI8ePRg1ahTTp08HktuMzps3jxEjRmyy3fjx45kxYwYf\nfvghkCT8cePGAXDbbbdx/PHHc8wxxwBwxBFHMGzYMO6//34WLVrE008/zSWXXELnzp055JBD6ix/\nc+VEbmZmm9h111351a9+xcKFC3nxxRdZsmQJZ599dl7bDhgwYKPpcePG1STyadOmMXr0aLbccstN\nths8eDBDhw5l5syZfPDBB8yYMaOm5r5gwQLuvPNOevfuTe/evenVqxd//vOfWbp0KUuWLKFXr15s\ntdVWNWUNGjSouYeeOe7sZmZmDRoyZAinnXYaN954I/vssw9r1qypWbZ06dJN1q/d1H7UUUexfPly\nnnvuOW6//Xauvfbaevc1duxYpk2bxvr169ljjz3YaaedgOTHwamnnsoNN9ywyTYLFy5k1apVfPDB\nBzXJfOHChXTo0D7qqu3jKM3MLG/z5s3j6quvZvHixQAsWrSI6dOnc8ABB/DZz36Wxx9/nEWLFvHO\nO+/wk5/8pNHyOnXqxIknnsi5557LqlWrOOqoo+pdd+zYscyaNYvrr7+e8ePH18z/6le/ysyZM5k1\naxYbNmzgww8/5LHHHmPJkiUMHDiQYcOGMWnSJNauXcvs2bOZOXNmy5+IjHAiNzOzjXTv3p0nn3yS\n/fbbj+7du3PggQey1157MWXKFI488khOOukk9tprL4YPH77Juej6LjUbN24cDz/8MGPGjNmoplx7\n/bKyMg444ADmzJnDSSedVDO/f//+3HPPPVx++eX06dOHQYMGMWXKlJre8rfddhtz5sxhm2224dJL\nL+W0004r1NPR5ikiSh1Dk0mKQsctqbDXb1Yk10+amdVl2LBhPP300xvNK+tfllxLXiR9d+jLsn8v\n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\nM8tPPr3Wa0TiD8AxRYrHzMzMmiCfpvUv5Ux2AIYBHxYtIjMzM8tbPr3Wc+9Lvg54g6R53czMzEos\nn3Pkvi+5mZlZG1VvIpd0cQPbRURcWoR4zMzMrAkaqpG/X8e8bsDXgG0AJ3IzM7MSqzeRR8RV1Y8l\ndQfOAiYAtwNX1bedmZmZtZ4Gz5FL6g18HzgZmAp8PiJWtUZgZmZm1riGzpFfCXwJuBH4TES812pR\nmZmZWV4aGhDmv4HtgYuAJZLeTf9WS3q3dcIzMzOzhjR0jrxJo76ZmZlZ63OyNjMzyzAncjMzswxz\nIjczM8swJ3IzM7MMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8uwkiZySR0k/UPSjHS6\nl6RZkuZJelBSz1LGZ2Zm1taVukZ+FjA3Z3oi8FBE7Ao8ApxfkqjMzMwyomSJXFJ/4IvATTmzR5Hc\nLpX0/+jWjsvMzCxLSlkjvwY4F4iceX0jogogIpYB25UiMDMzs6woSSKXdDxQFRHPAmpg1WhgmZmZ\nWbtX721Mi+wgYKSkLwJbAd0l/QZYJqlvRFRJKgPerK+AioqKmsfl5eWUl5cXN2IzM7NWVFlZSWVl\nZaPrKaK0lV5JhwL/HREjJV0BrIyIyZLOA3pFxMQ6tolCxy0JKgpYYAWU4rkt+HFAyY7FzMw+IYmI\n2KQVu9S91mv7CXCUpHnAEem0mZmZ1aNUTes1IuIx4LH08VvAkaWNyMzMLDvaWo3czMzMmsCJ3MzM\nLMOcyM3MzDKs5OfIm0tq6PJzMzOz9iGzibzQF0P5Z4GZmWWRm9bNzMwyzInczMwsw5zIzczMMsyJ\n3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzInczMwsw5zIzczMMsyJ3MzMLMOcyM3MzDLMidzMzCzD\nnMjNzMwyzInczMwsw5zIzczMMsyJ3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzInczMwsw5zIzczM\nMsyJ3MzMLMOcyM3MzDLMidzMzCzDnMjNzMwyzIm8xHYsK0NSwf7MzKx96VTqANq7BVVVRAHLcyo3\nM2tfXCM3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3IzM7MMcyI3MzPLsJIkckn9JT0i\n6UVJ/5T0vXR+L0mzJM2T9KCknqWIz8zMLCtKVSNfB3w/IvYADgDOlLQbMBF4KCJ2BR4Bzi9RfGZm\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Sex == 'female'\"])" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nie9MqC8ZVc2zs2dz9bDGXSPhE534kRAR3HTTTRx00EEsWbKEmTNn8pnPfIa7776bH/7wh3WV0Z1b\nqvVYsWIFvXv3bnYY68VELnVDy5Yv69EXxJl9zexmh9BjtCTi/v37c/TRR7Pddtuxzz77cNZZZ7H7\n7rtz+umnM3ToUL785S8DcPnllzNhwgR69erFJZdc0m6L/KCDDuKAAw7gtttu44EHHmC//fZj0qRJ\nDBxYXLlwypQpnHfeecyfP58999yTq666it12241TTjmFuXPnMmrUKHr37s0FF1zAWWedtUrZzz77\nLKeddhp33nknvXr14u1vfzszZ84Eiu7+Rx99lDe/+c0Aq9Rh5syZnHTSSXz6059mwoQJHH744dxz\nzz2MHz+eD3zgA0CR3AcPHsz06dMZMGAAO++8M8uXL+fnP/85l19+Offcc09rHBMmTGDmzJnccMMN\nvPrqq5x33nlcf/31vPrqq3zwgx9kwoQJ9OvXbwO9WmvmMXJJUqu99tqLHXbYgTvuuGO1ZdOmTeOK\nK67g1ltv5ZFHHuGWW27psLzJkyczceJEFi1axCuvvML48eMBePjhhxk3bhzf+ta3WLRoEUceeSRH\nH300y5cv58c//jE77rgjv/rVr3jxxRdXS+IA3/jGNxg6dCjPPvssTz/9NF/96ldbl3XU3f/UU0/x\n/PPPM3fuXL773e8ybtw4Jk2atEo9Bw0axJ577rlKeaNGjeLhhx/mscceW6V+H/7whwE455xzePTR\nR3nggQd49NFHefLJJ1t/ADWSiVyStIohQ4bw3HPPrTb/+uuv5/TTT+dtb3sbm222WV23Gj399NPZ\nZZdd6NevH6NHj+a+++4D4LrrruPoo4/m4IMPpnfv3px11lksW7aM3//+963rttdt37dvXxYsWMAT\nTzxB79692X///etaD6B3795cfPHF9O3bl379+jF27FimTJnCyy+/DBTJeezYsautt9lmm3Hssccy\nefJkAB555BEeeughjjnmGAC+973vMWHCBLbeemu22GILzj333NbnNpKJXJK0iieffLK1+7vW/Pnz\nGTp0aOv0sGHDOkya22+/fevjzTffnJdeeqm1rGE1YwUigqFDh/Lkk0/WFeMXvvAFdtllFw4//HDe\n8pa3cNlll9W1HsCgQYPo27dv6/Quu+zC7rvvztSpU1m2bBlTpkxh3Lhxa1x37Nixrcl50qRJHHfc\ncfTr149FixaxdOlS3vve9zJw4EAGDhzIkUceybPPPlt3XOvKY+SSpFb33HMP8+fP54ADDlht2eDB\ng5k3b17r9Jw5c9Z51PqQIUP485//vMq8efPmscMOOwAdd49vscUWjB8/nvHjx/Pggw9y0EEHsffe\ne3PQQQex+eabs3Tp0tbnPvXUU6v8AFlT2SeeeCKTJk1ixYoV7LHHHq3H19s67LDDWLRoEffffz/X\nXnstV155JQBvfOMb2XzzzZk1axaDBw+ubydsILbIJUksWbKEX/3qV4wdO5aTTz6Z3XfffbXnjB49\nmv/4j//gL3/5C0uXLl2v47+jR4/mpptu4re//S3Lly9n/PjxbLrppuy7775A0ZJv7/z0m266qfVY\ndf/+/enTpw+9ehUpbc8992TSpEmsXLmSadOmtQ6Ca8+JJ57I9OnTueqqq1Zrjdf2OvTp04cTTjiB\ns88+m8WLF3PYYYcBxY+Dj33sY5x55pksWrQIKHo2pk+f3om9sm5M5JLUg40aNYqtt96aHXfcka99\n7WucddZZq5x6Vtt6HTlyJGeeeSYHH3wwu+66K4cccki7ZbfXqt5111255ppr+Od//mcGDRrETTfd\nxNSpU+nTp+goPvfcc7nkkksYOHAgV1xxxWrrP/LIIxx66KH079+f/fffn0996lMceOCBAHzzm99k\nypQpDBgwgMmTJ/PBD36ww/2w/fbbs++++3LXXXcxZsyYdusxduxYbr31VkaPHt364wHgsssu4y1v\neQv77LMPb3jDGzj88MN5+OGHO9z2+vJ+5OqWevr9yH9x9i84/vLjmx1G02xM92MfPnz4Knc/604X\nhFHztH1ftPB+5JLUzZlktaHZtS5JUoWZyCVJqjATuSRJFWYilySpwkzkkiRVmIlckqQKM5FLklRh\nJnJJUsN98pOf5Ctf+coGL/fiiy/m5JNP3uDlVokXhJGkLnTGv5zB7PmzG1b+TkN24jsT6r/ozJ13\n3sk555zDrFmz6NOnD29729u48soree9737tB47rqqqs2aHm11vXGLRsLE7kkdaHZ82c39PLDs6+Z\nXfdzlyxZwqhRo7j66qs54YQTePXVV7njjjvo169fp7ebmT0+oTaLXeuS1EM9/PDDRASjR48mIujX\nrx+HHnoob3/721frsp4zZw69evVi5cqVABx00EGcf/75vO9972OLLbbg8ssvZ6+99lql/AkTJnDc\ncccBcPrpp3PBBRcAsPvuu3PzzTe3Pm/FihVsu+223HfffQDcdddd7L///gwYMIB3v/vdq9y9bPbs\n2YwYMYKtt96aI444gmeeeaYxO6dCTOSS1EPtuuuu9O7dm9NOO41p06bx/PPPr7K8bQu77fQ111zD\n97//fZYsWcIZZ5zBww8/3HprUYDJkyfz4Q9/eLXtjh07lkmTJrVOT5s2jUGDBrHnnnvy5JNPcvTR\nR3PBBRewePFixo8fz/HHH8+zzz4LwLhx49hrr7145plnOP/885k4ceJ674eqM5FLUg/Vv39/7rzz\nTnr16sXHP/5xBg0axHHHHcfTTz9d1/qnnXYab33rW+nVqxdbbbUVxx57LJMnTwaK24w+9NBDjBo1\narX1xo0bx5QpU3j55ZeBIuGPHTsWgJ/+9KccddRRHHHEEQAccsghDB8+nJtvvpl58+Zx77338uUv\nf5m+fftywAEHrLH8nsZELkk92G677cYPf/hD5s6dy6xZs5g/fz5nnnlmXesOHTp0lemxY8e2JvJJ\nkyZx3HHHsemmm6623i677MLuu+/O1KlTWbZsGVOmTGltuc+ZM4frrruOgQMHMnDgQAYMGMDvfvc7\nFixYwPz58xkwYACbbbZZa1nDhvXc2x23cLCbJAkoutpPPfVUvvvd7/Le976XpUuXti5bsGDBas9v\n29V+2GGHsWjRIu6//36uvfZarrzyyrVu68QTT2TSpEmsWLGCPfbYg5133hkofhyccsopXH311aut\nM3fuXBYvXsyyZctak/ncuXPp1atnt0l7du0lqQd76KGHuOKKK3jyyScBmDdvHpMnT2bfffflXe96\nF7fffjvz5s3jhRde4NJLL+2wvD59+nDCCSdw9tlns3jxYg477LC1PvfEE09k+vTpXHXVVYwbN651\n/kknncTUqVOZPn06K1eu5OWXX2bmzJnMnz+fHXfckeHDh3PhhRfy2muvceeddzJ16tT13xEVZyKX\npB6qf//+3H333fzDP/wD/fv3Z7/99uOd73wn48eP59BDD2XMmDG8853vZK+99lrtWPTaTjUbO3Ys\nt956K6NHj16lpdz2+dtvvz377rsvd911F2PGjGmdv8MOO3DjjTfy1a9+lUGDBjFs2DDGjx/fOlr+\npz/9KXfddRfbbLMNl1xyCaeeeuqG2h2VFZnZ7BjWKiKyO8enxhk5ZmRDz7Xt7n5x9i84/vLjmx1G\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\", \"SibSp < 3\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After exploring the survival statistics visualization, fill in the missing code below so that the function will make your prediction. \n", "Make sure to keep track of the various features and conditions you tried before arriving at your final prediction model. \n", "**Hint:** You can start your implementation of this function using the prediction code you wrote earlier from `predictions_2`." ] }, { "cell_type": "code", "execution_count": 89, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 81.71%.\n" ] } ], "source": [ "def predictions_3(data):\n", " \"\"\" Model with multiple features. Makes a prediction with an accuracy of at least 80%. \"\"\"\n", " \n", " predictions = []\n", " for _, passenger in data.iterrows():\n", " \n", " # Remove the 'pass' statement below \n", " # and write your prediction conditions here\n", " if passenger['SibSp'] > 4:\n", " predictions.append(0)\n", " elif passenger['Sex'] == 'female' and passenger['Parch'] < 4:\n", " predictions.append(1)\n", " # This one didn't improve accuracy (2)\n", " elif passenger['Sex'] == 'female' and passenger['Pclass'] == 1 and passenger['Age'] > 10:\n", " predictions.append(1)\n", " # Removing this one didn't change accuracy (1)\n", " elif passenger['Sex'] == 'female' and passenger['Age'] > 50:\n", " predictions.append(1)\n", " elif passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male':\n", " predictions.append(1)\n", " elif passenger['Age'] < 10 and passenger['Pclass'] == 2:\n", " predictions.append(1)\n", " else:\n", " predictions.append(0)\n", " \n", " # Return our predictions\n", " return pd.Series(predictions)\n", "\n", "# Make the predictions\n", "predictions = predictions_3(data)\n", "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4\n", "*Describe the steps you took to implement the final prediction model so that it got an accuracy of at least 80%. What features did you look at? Were certain features more informative than others? Which conditions did you use to split the survival outcomes in the data? How accurate are your predictions?* \n", "**Hint:** Run the code cell below to see the accuracy of your predictions." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predictions have an accuracy of 81.71%.\n" ] } ], "source": [ "print accuracy_score(outcomes, predictions)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer**: \n", "\n", "### Steps:\n", "1. **Think about what features might matter.** \n", " - E.g. women and children may have been given priority to go on lifeboats. People with family members (`Parch`, `SibSp` > 0) might be more likely to survive if they are children because there are people taking care of them. They might be less likely to survive if they are parents trying to make sure their children are rescued.\n", "2. **Visualise the features** using the `survival_stats` function provided. See if the features are informative. They can be informative if (1) they show that almost all people of a certain group survive or if (2) they show that almost all people of a certain group don't survive.\n", " - See above for visualisations of informative features.\n", "3. **Choose filters and add them to the model.** \n", "4. **Run the model and see if it produces a higher accuracy**.\n", " - If it doesn't, ditch the filter.\n", "5. **Repeat with different features or filters**.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Features I looked at\n", "- SibSp\n", "- Age\n", "- Parch\n", "- Sex\n", "- Pclass\n", "\n", "Certain features were more informative than others. For example, looking at `SibSp` for males under the age of 10 was more useful than looking at `Age` for females because \n", "* the former told me that all males under the age of 10 with `SibSp` < 3 survived, whereas \n", "* for most age groups, there were a significant number of females that survived and a significant number of females that did not survive so it did not provide me with much information I could use to make splits." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\n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\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n+vfv3+ww1old65LUwtoS8aBBgzj88MO55pprmDRpEg888AAAJ598MmeffXb7+hdddBHbbbcdw4cP\n5wc/+EGXLfL999+fs88+m3322YctttiCsWPH8uyzz7Yvnzp1KrvvvjtDhgzhgAMO4OGHHwbghBNO\n4Mknn2TcuHFsscUWXHzxxauVvWjRIsaNG8fgwYPZaqut2G+//dqXdezur63DbbfdxogRI/jqV7/K\nsGHD+NCHPsSuu+7KjTfe2L7+ihUr2HrrrbnvvvuYPXs2/fr1Y+XKlVx77bXsueeqdxy/9NJLOeqo\nowB45ZVXOPXUUxk5ciTDhg3j4x//OC+//HI3f4F1ZyKXJLXbc889GT58OHfcccdqy26++WYuueQS\nbr31Vh599FFuueWWbsubMmUKkyZNYuHChbz88svtSfmRRx5h4sSJfP3rX2fhwoUceuihHH744Sxf\nvpwf/vCHbL/99vz85z/nhRde4NRTT12t3K997WuMGDGCRYsW8fTTT/PlL3+5fVl33f1PPfUUzz33\nHE8++STf/va3mThxIpMnT16lnkOHDmWPPfZYpbxx48bxyCOP8Je//GWV+n3wgx8E4PTTT+exxx7j\nj3/8I4899hhz587l/PPP7/YYrSsTuSRpFdttt90qLec21113HSeffDJvfvOb2WSTTTj33HO7Levk\nk09mp512YqONNmL8+PHcd999AFx77bUcfvjhHHDAAfTv359TTz2VZcuW8dvf/rZ926667QcOHMj8\n+fN54okn6N+/P6NHj65rO4D+/ftz3nnnMXDgQDbaaCMmTJjA1KlTeemll4AiOU+YMGG17TbZZBOO\nPPJIpkyZAsCjjz7Kww8/zBFHHAHAd77zHS699FK23HJLNttsM84444z2dRvJRC5JWsXcuXMZMmTI\navPnzZvHiBEj2qdHjhzZbdLcdttt219vuummvPjii+1ljawZKxARjBgxgrlz59YV4+c+9zl22mkn\n3vve9/LGN76RCy+8sK7tAIYOHcrAgQPbp3faaSd23XVXpk2bxrJly5g6dSoTJ05c47YTJkxoT86T\nJ0/mqKOOYqONNmLhwoUsXbqUd77znQwZMoQhQ4Zw6KGHsmjRorrjWlsOdpMktbvnnnuYN28e++67\n72rLhg0bxpw5c9qnZ8+evdaj1rfbbjv+/Oc/rzJvzpw5DB8+HOi+e3yzzTbj4osv5uKLL+aBBx5g\n//33Z6+99mL//fdn0003ZenSpe3rPvXUU6t8AVlT2cceeyyTJ09mxYoV7LbbbrzhDW9Y434PPvhg\nFi5cyP3338/VV1/NZZddBsDrXvc6Nt10U2bOnMmwYcPqOwjriS1ySRJLlizh5z//ORMmTOD4449n\n1113XW2d8ePH81//9V88+OCDLF26dJ3O/44fP54bbriBX//61yxfvpyLL76YjTfemL333hsoWvJd\nXZ9+ww03tJ+rHjRoEAMGDKBfvyKl7bHHHkyePJmVK1dy8803c9ttt3Ubz7HHHsv06dO54oorVmuN\n1/Y6DBgwgKOPPprTTjuNxYsXc/DBBwPFl4MPf/jDfOYzn2HhwoVA0bMxffr0HhyVtWMil6QWNm7c\nOLbccku23357vvKVr3DqqaeuculZbet17NixfOYzn+GAAw5g55135sADD+yy7K5a1TvvvDNXXnkl\n//qv/8rQoUO54YYbmDZtGgMGFB3FZ5xxBl/84hcZMmQIl1xyyWrbP/rooxx00EEMGjSI0aNH84lP\nfKJ95Prll1/O1KlTGTx4MFOmTOEf//Efuz0O2267LXvvvTd33XUXxxxzTJf1mDBhArfeeivjx49v\n//IAcOGFF/LGN76Rd73rXbz2ta/lve99L4888ki3+15XPo9ckhpo1KhRqzz9rC/dEEbN0/F90cbn\nkUtSH2eS1fpm17okSRVmIpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKFmcglSQ33sY99\njC996UvrvdzzzjuP448/fr2XWyXeEEaSetEp//cUZs2b1bDyd9huB755af03nbnzzjs5/fTTmTlz\nJgMGDODNb34zl112Ge985zvXa1xXXHHFei2v1to+uGVDYSKXpF40a94sRh43svsV17b8K2fVve6S\nJUsYN24c3/rWtzj66KN55ZVXuOOOO9hoo416vN/MbPmE2ix2rUtSi3rkkUeICMaPH09EsNFGG3HQ\nQQex++67r9ZlPXv2bPr168fKlSsB2H///TnrrLPYZ5992GyzzbjooovYc889Vyn/0ksv5aijjgLg\n5JNP5uyzzwZg11135cYbb2xfb8WKFWy99dbcd999ANx1112MHj2awYMH8/a3v32Vp5fNmjWLMWPG\nsOWWW3LIIYfwzDPPNObgVIiJXJJa1M4770z//v056aSTuPnmm3nuuedWWd6xhd1x+sorr+S73/0u\nS5Ys4ZRTTuGRRx5pf7QowJQpU/jgBz+42n4nTJjA5MmT26dvvvlmhg4dyh577MHcuXM5/PDDOfvs\ns1m8eDEXX3wxH/jAB1i0aBEAEydOZM899+SZZ57hrLPOYtKkSet8HKrORC5JLWrQoEHceeed9OvX\nj4985CMMHTqUo446iqeffrqu7U866STe9KY30a9fP7bYYguOPPJIpkyZAhSPGX344YcZN27cattN\nnDiRqVOn8tJLLwFFwp8wYQIAV111FYcddhiHHHIIAAceeCCjRo3ixhtvZM6cOdx7772cf/75DBw4\nkH333XeN5bcaE7kktbBddtmF73//+zz55JPMnDmTefPm8ZnPfKaubUeMGLHK9IQJE9oT+eTJkznq\nqKPYeOONV9tup512Ytddd2XatGksW7aMqVOntrfcZ8+ezbXXXsuQIUMYMmQIgwcP5je/+Q3z589n\n3rx5DB48mE022aS9rJEjGzfeoCoc7CZJAoqu9hNPPJFvf/vbvPOd72Tp0qXty+bPn7/a+h272g8+\n+GAWLlzI/fffz9VXX81ll13W6b6OPfZYJk+ezIoVK9htt93YcccdgeLLwQknnMC3vvWt1bZ58skn\nWbx4McuWLWtP5k8++ST9+rV2m7S1ay9JLezhhx/mkksuYe7cuQDMmTOHKVOmsPfee/O2t72N22+/\nnTlz5vD8889zwQUXdFvegAEDOProoznttNNYvHgxBx98cKfrHnvssUyfPp0rrriCiRMnts8/7rjj\nmDZtGtOnT2flypW89NJL3HbbbcybN4/tt9+eUaNGcc455/Dqq69y5513Mm3atHU/EBVnIpekFjVo\n0CDuvvtu/uEf/oFBgwbx7ne/m7e+9a1cfPHFHHTQQRxzzDG89a1vZc8991ztXHRnl5pNmDCBW2+9\nlfHjx6/SUu64/rbbbsvee+/NXXfdxTHHHNM+f/jw4Vx//fV8+ctfZujQoYwcOZKLL764fbT8VVdd\nxV133cVWW23FF7/4RU488cT1dTgqKzKz2TF0KiKyL8cnSd0ZNWoU9957b/t0X7shjJqj4/uiTUSQ\nmT26IN9z5JLUi0yyWt/sWpckqcJM5JIkVZiJXJKkCvMcufqkRg8I6uscsCSpXiZy9UmNfkJUX9eT\nJ1hJam12rUuSVGG2yCWpgYYNG8aoUaOaHYb6mGHDhq23skzkktRA3kJUjWbXuiRJFdbwFnlEzAKe\n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\nzEQuSVKF/T/SWc9tOWWciwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Splits\n", "\n", "1) If passenger['SibSp'] > 4, they are less likely to survive." ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n06FDhyZxtZMTuZlZE7FXSQmSCvbYq6Qkvzj22ou2bdvSsWNHOnfuzOGHH85NN920RdK68cYb+eEP\nf1htGQ09+ma5vffem0ceeaQgZddFjx49ePfddwt2nHXhRG5m1kQsLCsjoGCPhWVlecUhiXvvvZc1\na9awcOFCxo4dy4QJE/jqV7+a97E0hZrqtti4cWOxQ8ibE7mZmW2lPBG3b9+ek08+mTvuuIPJkycz\nZ84cAM4++2wuv/zyivWvu+469thjD7p3786tt95aY011yJAhXH755Rx++OF06NCBE044gVWrVlUs\nnzlzJgcddBCdO3fmqKOOYu7cuQCcccYZLFq0iKFDh9KhQwcmTpy4VdkrV65k6NChdOrUiV133ZUj\njzyyYlnl5v7cY3jsscfo0aMHP/nJT+jWrRvnnHMOffv25b777qtYf+PGjey+++48//zzLFy4kBYt\nWrBp0yZmzJjBgAEDtojj+uuvZ8SIEQB8/PHHXHjhhfTq1Ytu3bpx7rnn8tFHH9XyDuTPidzMzGo1\nYMAAunfvzhNPPLHVsvvvv59Jkybx8MMPM3/+fB566KFay5s2bRqTJ09mxYoVfPTRRxVJed68eYwZ\nM4Zf/OIXrFixghNPPJGTTz6ZDRs2cNttt9GzZ0/uuece3n33XS688MKtyv3pT39Kjx49WLlyJW+9\n9RZXX311xbLamsGXL1/OO++8w6JFi7j55psZM2YMU6dO3eI4u3TpQr9+/bYob+jQocybN4/XXntt\ni+M77bTTALj44ot59dVXefHFF3n11VdZsmQJV1xxRa2vUb6cyM3MLC977LHHFjXncnfeeSdnn302\nBxxwADvttFNed5I8++yz6d27N23atGHkyJE8//zzAMyYMYOTTz6Zo446ipYtW3LhhRfywQcf8Le/\n/a1i25qa7Vu3bs2yZct44403aNmyJYMGDcprO4CWLVvy4x//mNatW9OmTRtGjx7NzJkz+fDDD4Ek\nOY8ePXqr7XbaaSeGDx/OtGnTAJg/fz5z585l2LBhAPz617/m+uuvp2PHjrRr146xY8dWrNsQnMjN\nzCwvS5YsoXPnzlvNX7p0KT169KiY7tWrV61JsySn413btm157733Ksrq1atXxTJJ9OjRgyVLluQV\n4w9+8AN69+7Ncccdx7777suECRPy2g6gS5cutG7dumK6d+/e9O3bl1mzZvHBBx8wc+ZMxowZU+W2\no0ePrkjOU6dOZcSIEbRp04YVK1awbt06PvvZz9K5c2c6d+7MiSeeyMqVK/OOqzYeotXMzGr1zDPP\nsHTpUo444oitlnXr1o3FixdXTC9cuLDevbn32GMP/v3vf28xb/HixXTv3h2ovXm8Xbt2TJw4kYkT\nJzJnzhyGDBnCwIEDGTJkCG3btmXdunUV6y5fvnyLHyBVlT1q1CimTp3Kxo0bOfDAA9lnn32q3O+x\nxx7LihUreOGFF5g+fTo/+9nPANhtt91o27YtL7/8Mt26dcvvRagj18jNzKxaa9eu5Z577mH06NGc\nfvrp9O3bd6t1Ro4cye9+9zteeeUV1q1bt03nf0eOHMm9997Lo48+yoYNG5g4cSI77rgjhx56KJDU\n5Gu6Pv3ee++tOFfdvn17WrVqRYsWSarr168fU6dOZdOmTdx///089thjtcYzatQoZs+ezY033rhV\nbTy31aFVq1accsopXHTRRaxevZpjjz0WSH4cfO1rX+OCCy5gxYoVQNKyMXv27Dq8KjVzIjczs60M\nHTqUjh070rNnT6655houvPBCfvvb31Ysz629nnDCCVxwwQUcddRR9OnTh6OPPrrGsmuqVffp04fb\nb7+db3/723Tp0oV7772XWbNm0apV0oA8duxYrrzySjp37sykSZO22n7+/Pkcc8wxtG/fnkGDBnHe\needV9Fz/+c9/zsyZM+nUqRPTpk3jv/7rv2p9HUpKSjj00EN56qmnOPXUU2s8jtGjR/Pwww8zcuTI\nih8PABMmTGDfffflc5/7HLvssgvHHXcc8+bNq3Xf+fL9yMvLJPvXPZpZdvTv33+ru5/tVVKS97Xe\n9dGra1cWLF9esPKtYVT12QDfj9zMrMlzkrX6cNO6mZlZhjmRm5mZZZgTuZmZWYY5kZuZmWWYE7mZ\nmVmGOZGbmZllmBO5mZlZhjmRm5lZ0XzrW9/iqquuavByf/zjH3P66ac3eLlNkRO5mVkTUdK9BEkF\ne5R0L6k9iNSTTz7JoEGD2GWXXdhtt9044ogj+Oc//9ngx3zjjTfywx/+sMHLhdpvsLK98MhuZmZN\nRNmSMhhfwPLH5zf869q1axk6dCg33XQTp5xyCh9//DFPPPEEbdq0qfM+I6LZJNRicY3czMy2MG/e\nPCQxcuRIJNGmTRuOOeYYDjrooK2arBcuXEiLFi3YtGkTAEOGDOGyyy7j8MMPp127dlx33XUMGDBg\ni/Kvv/56RowYAcDZZ5/N5ZdfDkDfvn257777KtbbuHEju+++O88//zwATz31FIMGDaJTp058+tOf\n3uLuZQsWLGDw4MF07NiR448/nrfffrswL04T5ERuZmZb6NOnDy1btuSss87i/vvv55133tlieeUa\nduXp22+/nVtuuYW1a9fyzW9+k3nz5lXcWhRg2rRpnHbaaVvtd/To0UydOrVi+v7776dLly7069eP\nJUuWcPLJJ3P55ZezevVqJk6cyJe+9CVWrlwJwJgxYxgwYABvv/02l112GZMnT97m1yErnMjNzGwL\n7du358knn6RFixZ8/etfp0uXLowYMYK33norr+3POuss9t9/f1q0aEGHDh0YPnw406ZNA5LbjM6d\nO5ehQ4dutd2YMWOYOXMmH374IZAk/NGjRwMwZcoUTjrpJI4//ngAjj76aPr37899993H4sWLefbZ\nZ7niiito3bo1RxxxRJXlb6+cyM3MbCv77bcfv/3tb1m0aBEvv/wyS5cu5YILLshr2x49emwxPXr0\n6IpEPnXqVEaMGMGOO+641Xa9e/emb9++zJo1iw8++ICZM2dW1NwXLlzIjBkz6Ny5M507d6ZTp078\n9a9/ZdmyZSxdupROnTqx0047VZTVq1ev+h565hQ0kUtqI+lpSc9JeknSuHT+OElvSvpX+jghZ5tL\nJM2X9Iqk4woZn5mZ1a5Pnz6ceeaZvPzyy+y8886sW7euYtmyZcu2Wr9yU/uxxx7LihUreOGFF5g+\nfTpjxoypdl+jRo1i6tSp3H333Rx44IHsvffeQPLj4IwzzmDVqlWsWrWK1atXs3btWn7wgx/QrVs3\nVq9ezQcffFBRzqJFi7b1sDOjoIk8Ij4ChkTEp4F+wImSBqaLJ0XEZ9LH/QCSDgBGAgcAJwI3yN0d\nzcwa1dy5c5k0aRJLliwBYPHixUybNo1DDz2UT33qUzz++OMsXryYNWvWcO2119ZaXqtWrTjllFO4\n6KKLWL16Nccee2y1644aNYrZs2dz4403bpHwv/KVrzBr1ixmz57Npk2b+PDDD3nsscdYunQpPXv2\npH///owbN47169fz5JNPMmvWrG1/ITKi4E3rEVH+060NyeVukU5XlaCHA9MjYkNELADmAwOrWM/M\nzAqkffv2PP300xxyyCG0b9+eww47jIMPPpiJEydyzDHHcOqpp3LwwQczYMCArc5FV1f3Gj16NA8/\n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\nM8swJ3IzM7MMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3IzM7MMcyI3MzPLMCdy\nMzOzDHMiNzMzyzAncjMzswxzIrcGs1dJCZIa7LFXSUmxDynzGvo98fti1vS0KnYAtv1YWFZGNGB5\nKitrwNKap4Z+T8Dvi1lT4xq5NV0tadCaZEl31yTNbPvjGrk1XRuB8Q1XXNn4/GuSe5WUsLABa569\nunZlwfLlDVaemVk5J3KzKvg0gZllhZvWzczMMsyJ3MzMLMOcyM3MrNnL8uWzTTKRSzpB0n8kzZN0\ncbHjMTOz7Vt5v5iGejRkZ9naNLlELqkF8L/A8cCBwGhJ+xc3KrNt1MKX0m2rhq4xlXTuXOxDajCl\npaXFDqHBbE/H0liaYq/1gcD8iFgIIGk6MBz4T1GjMtsWmyjapXQNTsmPkobSdc+uLH+z9kvzGvxK\ngtWrG7C04iotLWXw4MHFDqNBbE/H0liaYiLfE1icM/0mSXI3s6Yg2H5+lJhtB5pc07qZmZnlTxEN\nPRLztpH0OWB8RJyQTo8FIiIm5KzTtII2MzNrBBGx1XmtppjIWwJzgaOBZcA/gNER8UpRAzMzM2uC\nmtw58ojYKOnbwGySpv/fOImbmZlVrcnVyM3MzCx/zb6z2/Yy+Iyk30gqk/RisWPZVpK6S3pE0suS\nXpL03WLHVB+S2kh6WtJz6XGMK3ZM20pSC0n/kjSz2LFsC0kLJL2Qvjf/KHY820JSR0l3Snol/c4c\nUuyY6kpSn/S9+Ff6d01Wv/cAkr4n6d+SXpQ0RdIOBd1fc66Rp4PPzCM5H78UeAYYFRGZu2Zd0uHA\ne8BtEXFwsePZFpJKgJKIeF7SzsA/geEZfV/aRsS6tO/HX4HvRkRmE4ek7wGfBTpExLBix1Nfkl4H\nPhsRmb+YXNLvgMci4lZJrYC2EfFukcOqt/T/8pvAIRGxuLb1mxpJewBPAvtHxMeS7gDujYjbCrXP\n5l4jrxh8JiLWA+WDz2RORDwJZP6fEkBELI+I59Pn7wGvkIwvkDkRsS592oakT0pmfzlL6g58Abil\n2LE0ALEd/P+T1AE4IiJuBYiIDVlO4qljgNeymMRztATalf+wIqkoFkzmP8jbqKrBZzKZMLZXkvYC\n+gFPFzeS+kmbop8DlgMPRsQzxY5pG1wPXESGf4zkCOBBSc9I+lqxg9kGewNvS7o1bZa+WdJOxQ5q\nG50KTCt2EPUVEUuBnwKLgCXAOxHxUCH32dwTuTVhabP6XcD5ac08cyJiU0R8GugOHCKpb7Fjqg9J\nJwFlaUuJ0keWDYqIz5C0MJyXnprKolbAZ4BfpcezDhhb3JDqT1JrYBhwZ7FjqS9Ju5C07PYC9gB2\nljSmkPts7ol8CdAzZ7p7Os+KLG2Sugv4fUTcXex4tlXa3PkocEKxY6mnQcCw9NzyNGCIpIKd8yu0\niFiW/l0B/InsDgP9JrA4Ip5Np+8iSexZdSLwz/R9yapjgNcjYlVEbAT+CBxWyB0290T+DLCvpF5p\nr8JRQJZ7424PNaVyvwXmRMTPix1IfUnaTVLH9PlOwLFk9OY/EXFpRPSMiH1IviePRMQZxY6rPiS1\nTVt7kNQOOA74d3Gjqp+IKAMWS+qTzjoamFPEkLbVaDLcrJ5aBHxO0o5K7i50NEk/n4JpcgPCNKbt\nafAZSVOBwcCukhYB48o7wGSNpEHAacBL6fnlAC6NiPuLG1mddQMmp71wWwB3RMR9RY7JoCvwp3So\n51bAlIiYXeSYtsV3gSlps/TrwNlFjqdeJLUlqc1+vdixbIuI+Ieku4DngPXp35sLuc9mffmZmZlZ\n1jX3pnUzM7NMcyI3MzPLMCdyMzOzDHMiNzMzyzAncjMzswxzIjczM8swJ3KzZkzSD9PbLb6QjtU9\nMB2ve/90+dpqtjtE0lPpLSdflnR540ZuZuWa9YAwZs2ZpM+RjDXeLyI2SOoM7BARuQNyVDfQxGTg\nyxHx73T0qv0KHK6ZVcM1crPmqxvwdkRsAEjHhl4u6VFJ5eN1S9KktNb+oKRd0/ldgLJ0uyi/V7yk\ncZJuk/Q3SXMl/XdjH5RZc+NEbtZ8zQZ6SvqPpF9J+nwV67QD/hERBwGPA+PS+T8D5kr6g6SvS2qT\ns80nSYYLPgy4XFJJ4Q7BzJzIzZqpiHif5E5ZXwdWANMlnVlptY3AjPT57cDh6bZXAp8l+TEwBvhL\nzjZ3R8THEbESeITs3lnMLBN8jtysGYvkZguPA49Legk4k+rPi5O7LCLeAG6SdAuwQlKnyuuQ3I3P\nN3QwKyDXyM2aKUl9JO2bM6sfsKDSai2BL6fPTwOeTLf9Qs46fYANwDvp9HBJO6Tn048kuV2wmRWI\na+RmzdfOwC/Te6ZvAF4laWa/K2ed94CBkn5E0rnt1HT+6ZImAevSbcdERCQd2HkRKAV2Ba6IiOWN\ncCxmzZZvY2pmDUbSOGBtREwqdixmzYWb1s3MzDLMNXIzM7MMc43czMwsw5zIzczMMsyJ3MzMLMOc\nyM3MzDLMidzMzCzDnMjNzMwy7P8DGdQiBOtrj5wAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2) If passenger['Sex'] == 'female' and passenger['Parch'] < 4, they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZmb11CTibt26ceqpp3LvvfcyefJk5s+fD8D48eO58sora5f/3ve+x5577kl5eTl33313kzXVo48+\nmiuvvJLDDz+c7t27c9JJJ7FmzZra+TNmzOCAAw6gV69eHHPMMSxYsACAs88+m8WLFzNixAi6d+/O\npEmT6m179erVjBgxgp49e7Lrrrty1FFH1c6r29xfuA9z586lb9++fPe736VPnz6cd955DB48mNmz\nZ9cuv3HjRnbffXeeeeYZFi1aRKdOndi0aRPTp09n6NChm8Vx0003MXr0aAA++OADLrroIvr370+f\nPn04//zzef/995v5D2TnRN6MsvLiNnXVvMrKszV5mZmVwtChQykvL+fxxx+vN+/BBx/kxhtv5OGH\nH+all17ioYceanZ7U6dOZfLkyaxcuZL333+/NikvXLiQcePG8f3vf5+VK1dy8sknc+qpp7JhwwZ+\n8pOf0K9fP371q1/x1ltvcdFFF9Xb7g033EDfvn1ZvXo1r7/+Otdee23tvOaawVesWMEbb7zB4sWL\nueOOOxg3bhxTpkzZbD979+7NQQcdtNn2RowYwcKFC/n73/++2f6deeaZAFx66aW8/PLLPPfcc7z8\n8sssXbqUq6++utljlJVvCNOM6qXVUNkG5VRma/IyMyuVPffcc7Oac4377ruP8ePHs99++wFQWVnJ\ntGnTmtzW+PHjGThwIABjxoypvZPZ9OnTOfXUUznmmGMAuOiii7jlllv43e9+x5FHHgk03Wy/3Xbb\nsXz5cl599VUGDhzI8OHDa+c119zfuXNnvv3tb7PddtsBMHbsWD7zmc/w3nvvseOOOzJ16lTGjh1b\nb72ddtqJUaNGMXXqVK644gpeeuklFixYwMiRIwH44Q9/yPPPP0+PHj0AmDBhAmeeeWaTnQVbwjVy\nMzPLZOnSpfTq1ave9GXLltG3b9/a8f79+zebNMsKOt517dqVt99+u3Zb/fv3r50nib59+7J06dJM\nMV5yySUMHDiQE044gX322YeJEydmWg+gd+/etUkcYODAgQwePJiZM2fy7rvvMmPGDMaNa/ihnmPH\njmXq1KkATJkyhdGjR7PDDjuwcuVK1q9fz2c/+1l69epFr169OPnkk1m9enXmuJrjGrmZmTXrqaee\nYtmyZRxxxBH15vXp04clS5bUji9atGiLe3Pvueee/PWvf91s2pIlSygvLweabx7feeedmTRpEpMm\nTWL+/PkcffTRHHLIIRx99NF07dqV9evX1y67YsWKzX6ANLTtM844gylTprBx40b2339/Pv7xjzdY\n7vHHH8/KlSt59tlnmTZtGjfffDMAu+22G127duWFF16gT58+2Q5CC7lGbmZmjVq3bh2/+tWvGDt2\nLGeddRaDBw+ut8yYMWP48Y9/zIsvvsj69eu36vzvmDFjmDVrFo8++igbNmxg0qRJ7LjjjgwbNgxI\navJNXZ8+a9as2nPV3bp1o0uXLnTqlKS6gw46iClTprBp0yYefPBB5s6d22w8Z5xxBnPmzOG2226r\nVxsvbHXo0qULp512GhdffDFr167l+OOPB5IfB1/84he58MILWblyJZC0bMyZM6cFR6VpTuRmZlbP\niBEj6NGjB/369eO6667joosu4q677qqdX1h7Pemkk7jwwgs55phjGDRoEMcee2yT226qVj1o0CB+\n9rOf8R//8R/07t2bWbNmMXPmTLp0SRqQJ0yYwDXXXEOvXr248cYb663/0ksvcdxxx9GtWzeGDx/O\nV7/61dqe67fccgszZsygZ8+eTJ06lX/+539u9jiUlZUxbNgw5s2bx+mnn97kfowdO5aHH36YMWPG\n1P54AJg4cSL77LMPhx12GLvssgsnnHACCxcubLbsrPw88ubLapPOblTm/7pLM8tuyJAh9Z5+NqCs\nLPO13lui/x578NqKFUXbvrWOht4b4OeRm5m1e06ytiXctG5mZpZjTuRmZmY55kRuZmaWY07kZmZm\nOeZEbmZmlmNO5GZmZjnmRG5mZpZjTuRmZlYyX/nKV1rtKWCFvv3tb3PWWWe1+nbbIydyM7N2oqy8\nDElFe5WVlzUfROqJJ55g+PDh7LLLLuy2224cccQR/OlPf2r1fb7tttv45je/2erbheYfsLKt8J3d\nzMzaieql1UW9JXR1Zbbbv65bt44RI0Zw++23c9ppp/HBBx/w+OOPs8MOO7S4zIjoMAm1VFwjNzOz\nzSxcuBBJjBkzBknssMMOHHfccRxwwAH1mqwXLVpEp06d2LRpEwBHH300V1xxBYcffjg777wz3/ve\n9xg6dOhm27/pppsYPXo0AOPHj+fKK68EYPDgwcyePbt2uY0bN7L77rvzzDPPADBv3jyGDx9Oz549\n+cxnPrPZ08tee+01Kioq6NGjByeeeCKrVq0qzsFph5zIzcxsM4MGDaJz586ce+65PPjgg7zxxhub\nza9bw647/rOf/Ywf/ehHrFu3ji9/+cssXLiw9tGiAFOnTuXMM8+sV+7YsWOZMmVK7fiDDz5I7969\nOeigg1i6dCmnnnoqV155JWvXrmXSpEn867/+K6tXrwZg3LhxDB06lFWrVnHFFVcwefLkrT4OeeFE\nbmZmm+nWrRtPPPEEnTp14ktf+hK9e/dm9OjRvP7665nWP/fcc/nkJz9Jp06d6N69O6NGjWLq1KlA\n8pjRBQsWMGLEiHrrjRs3jhkzZvDee+8BScIfO3YsAPfccw+nnHIKJ554IgDHHnssQ4YMYfbs2SxZ\nsoSnn36aq6++mu22244jjjiiwe1vq5zIzcysnn333Ze77rqLxYsX88ILL7Bs2TIuvPDCTOv27dt3\ns/GxY8fWJvIpU6YwevRodtxxx3rrDRw4kMGDBzNz5kzeffddZsyYUVtzX7RoEdOnT6dXr1706tWL\nnj178uSTT7J8+XKWLVtGz5492WmnnWq31b9//y3d9dwpaiKXdKekaknPNTDvvyRtktSrYNplkl6S\n9KKkE4oZm5mZZTNo0CDOOeccXnjhBT72sY+xfv362nnLly+vt3zdpvbjjz+elStX8uyzzzJt2jTG\njRvXaFlnnHEGU6ZM4YEHHmD//fdn7733BpIfB2effTZr1qxhzZo1rF27lnXr1nHJJZfQp08f1q5d\ny7vvvlu7ncWLF2/tbudGsWvkdwMn1p0oqRw4HlhUMG0/YAywH3AycKvc1dHMrM0tWLCAG2+8kaVL\nlwKwZMkSpk6dyrBhw/j0pz/NY489xpIlS3jzzTe5/vrrm91ely5dOO2007j44otZu3Ytxx9/fKPL\nnnHGGcyZM4fbbrtts4T/+c9/npkzZzJnzhw2bdrEe++9x9y5c1m2bBn9+vVjyJAhXHXVVXz44Yc8\n8cQTzJw5c+sPRE4UNZFHxBPA2gZm3QRcXGfaKGBaRGyIiNeAl4BDihmfmZnV161bN/7whz9w6KGH\n0q1bNz73uc9x4IEHMmnSJI477jhOP/10DjzwQIYOHVrvXHRj9a+xY8fy8MMPM2bMGDp16tTo8mVl\nZQwbNox58+Zx+umn104vLy/ngQce4Nprr6V3797079+fSZMm1faWv+eee5g3bx677ror11xzDeec\nc05rHY52TxFR3AKk/sDMiDgwHR8JVETENyS9Cnw2ItZI+m/g9xExJV3uR8DsiPh5A9uMYsddUFZR\nr+usVZlcb2lmHcOQIUN4+umnN5tWVl6WXEteJHvstQcr/rGiaNu31tHQewOSfBQR9X4ptekNYSTt\nBFxO0qxuZmYFnGRtS7T1nd0GAgOAZ9Pz3+XAnyUdAiwF+hUsW55Oa1BlZWXtcEVFBRUVFa0frZmZ\nWYlUVVVRVVXV7HJt0bQ+gKRp/VMNzHsVODgi1koaDNwDHArsBfwW+ERDbehuWjezvGus+dSspU3r\nxb78bArwO2CQpMWSxtdZJAABRMR8YDowH5gNnN9m2drMzCynitq0HhGNXyyYzP94nfHrgOuKGZOZ\nmdm2xHd2MzMzyzEncjMzsxzz88jNzEqgT58+DBkypNRhWDvUp0+fFi3vRG5mVgId6RaiVlxuWjcz\nM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdy\nMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxz\nIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI3MzPL\nMSdyMzOzHHMiNzMzy7GiJnJJd0qqlvRcwbTvSnpR0jOS/ldS94J5l0l6KZ1/QjFjMzMz2xYUu0Z+\nN3BinWlzgP0j4iDgJeAyAEmDgTHAfsDJwK2SVOT4zMzMcq2oiTwingDW1pn2UERsSkfnAeXp8Ehg\nWkRsiIjXSJL8IcWMz8zMLO9KfY78PGB2OrwXsKRg3tJ0mpmZmTWiZIlc0jeBDyNiaqliMDMzy7su\npShU0rnAPwHHFExeCvQtGC9PpzWosrKydriiooKKiorWDNHMzKykqqqqqKqqanY5RURRA5E0AJgZ\nEZ9Kx08CbgCOjIjVBcsNBu4BDiVpUv8t8IloIEBJDU0uCklQ2QYFVUJb7ZOZmeWPJCKiXifwotbI\nJU0BKoBdJS0GrgIuB7YHfpt2Sp8XEedHxHxJ04H5wIfA+W2Wrc3MzHKq6DXyYnCN3MzMOprGauSl\n7rVuZmZmW8GJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3M\nzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInc\n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\n26CgSvDTYc3MrDGSiAjVnZ7leeRblbCb8HXgHknbkTyIZTzQGZgu6TxgETCmSGWbmZltE7Lc2W0d\nH52r3h7YDngnIrpvTcER8SwwtIFZx23Nds3MzDqSLDXybjXDkgSMAg4rZlBmZmaWTZZe67Ui8Uvg\nxCLFY2ZmZi2QpWn9XwpGOwFDgPeKFpGZmZllluXys8Lnkm8guQf6qKJEY2ZmZi2S5Ry5n0tuZmbW\nTjWayCVd2cR6ERHXFCEeMzMza4GmauTvNDBtZ+ALwK6AE7mZmVmJNZrII+KGmmFJ3YALSG7aMg24\nobH1zMzMrO00eY5cUi/gG8CZJI8VPTgi1rZFYGZmZta8ps6Rfw/4F+AO4FMR8XabRWVmZmaZNPrQ\nFEmbSJ52toHNHycqks5uW3WL1q3hh6aYmVlH0+KHpkREi+76ZmZmZm3PydrMzCzHnMjNzMxyzInc\nzMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMec\nyM3MzHLMidzMzCzHnMjNzMxyzIncmlVWXoakor/KystKvatmZrnT6PPIzWpUL62GyjYop7K6+IWY\nmW1jXCM3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8uxkiZySZ0k/VnSjHS8p6Q5khZI+o2k\nHqWMz8zMrL0rdY38AmB+wfgE4KGI2Bd4BLisJFGZmZnlRMkSuaRy4J+AHxVMHgVMTocnA6PbOi4z\nM7M8KeUNYW4CLgYKm8/3iIhqgIhYIWn3xlaWVOTwzMzM2r+S1MglnQJUR8QzQFMZOZqa0RYvMzOz\n9qxUNfLhwEhJ/wTsBHST9FNghaQ9IqJaUhnwemMbqCwYrkhfZmZm24qqqiqqqqqaXU4Rpa13SjoK\n+K+IGCnpu8DqiJgo6VKgZ0RMaGCdNota0Cb3GacSSv2/aIykDn8MzMxKTRIRUa8Vu9S91uu6Hjhe\n0gLg2HTczMzMGlHyp59FxFxgbjq8BjiutBGZmZnlR3urkZuZmVkLOJGbmZnlmBO5mZlZjjmRm5mZ\n5ZgTuZmZWY45kZuZmeWYE7mZmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTuZmZWY45kZuZmeWYE7mZ\nmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTuZmZWY45kZtlVFZehqSiv8rKy0q9q2aWI11KHYBZXlQv\nrYbKNiinsrr4hZjZNsM1cjMzsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMz\nsxxzIjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8uxkiRySeWSHpH0\ngqTnJX09nd5T0hxJCyT9RlKPUsRnZmaWF6WqkW8AvhER+wPDgK9K+iQwAXgoIvYFHgEuK1F8ZmZm\nuVCSRB4RKyLimXT4beBFoBwYBUxOF5sMjC5FfGZmZnlR8nPkkgYABwHzgD0iohqSZA/sXrrIzMzM\n2r+SJnJJHwPuBy5Ia+ZRZ5G642ZmZlagS6kKltSFJIn/NCIeSCdXS9ojIqollQGvN7Z+ZcFwRfoy\nMzPbVlRVVVFVVdXscoooTaVX0k+AVRHxjYJpE4E1ETFR0qVAz4iY0MC6bRa1YPNfDcVSCaX6XzRH\nUoc/BuDjYGalJYmIUN3pJamRSxoOnAk8L+kvJE3olwMTgemSzgMWAWNKEZ/ly4CyMhZVV5c6DDOz\nkihJIo+IJ4HOjcw+ri1jsfxbVF3dJp0p6v0MNjNrB0rea93MzMy2nBO5mZlZjjmRm5mZ5ZgTuZmZ\nWY45kZuZmeWYE7mZmVmOOZGbmZnlmBO5mZlZjjmRm5mZ5ZgTeY4NKCtDUtFfZmbWfpXs6We29Xxr\nUjMzc43czMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ\n3MzMLMecyM3MzHLMidzMzCzHnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM3MzHLMidzMzCzH\nnMjNzMxyzInczMwsx5zIzczMcsyJ3MzMLMecyM2sRcrKy5BU9FdZeVmpdzW3BpS1zf9oQJn/R+1B\nl1IH0BBJJwE3k/zQuDMiJpY4JDNLVS+thso2KKeyuviFbKMWVVcTbVCOqv0/ag/aXY1cUifgf4AT\ngf2BsZI+WdqozCwP2qomWtarV6l31dqJqqqqUofQ/hI5cAjwUkQsiogPgWnAqBLHZGY5UFMTLfar\neu3aNtsna9+cyBu2F7CkYPwf6TQza0Rb1UQllXpXrT0R7ba/RFt9Jm6eNKkIB7Zl2uU5cjNrmbY6\nJwrgVG61gnbbX6LN+gm8804blNJMDBFt9fHPRtJhQGVEnJSOTwCisMObpPYVtJmZWRuIiHq/pdtj\nIu8MLACOBZYDfwTGRsSLJQ3MzMysHWp3TesRsVHSfwBz+OjyMydxMzOzBrS7GrmZmZll1x57rbcL\nkk6S9DdJCyVdWup4SkHSnZKqJT1X6lhKRVK5pEckvSDpeUlfL3VMpSBpB0l/kPSX9DhcVeqYSkVS\nJ0l/ljSj1LGUiqTXJD2bvh/+WOp4SkVSD0n3SXox/Y44tCRxuEZen5Kb0iwkOU+/DHgKOCMi/lbS\nwNqYpMOBt4GfRMSBpY6nFCSVAWUR8YykjwF/AkZ1tPcCgKSuEbE+7cfyJPD1iOhwX+KS/hP4LNA9\nIkaWOp5SkPQK8NmI6NAX1Ev6MTA3Iu6W1AXoGhFvtXUcrpE3zDelASLiCaBDf1AjYkVEPJMOvw28\nSAe9r0FErE8HdyDpX9PhagGSyoF/An5U6lhKTHTw/CGpO3BERNwNEBEbSpHEoYP/I5rgm9JYPZIG\nAAcBfyhtJKWRNin/BVgB/DYinip1TCVwE3AxHfBHTB0B/FbSU5K+WOpgSmRvYJWku9NTLXdI2qkU\ngTiRm2WQNqvfD1yQ1sw7nIjYFBGfAcqBQyUNLnVMbUnSKUB12kIjOva9cYZHxMEkrRNfTU/DdTRd\ngIOBH6THYj0woRSBOJE3bCnQr2C8PJ1mHVB67ut+4KcR8UCp4ym1tPnwUeCkUsfSxoYDI9Pzw1OB\noyX9pMQxlURELE//rgR+QXI6sqP5B7AkIp5Ox+8nSextzom8YU8B+0jqL2l74Aygo/ZQ7eg1D4C7\ngPkRcUupAykVSbtJ6pEO7wQcD3SoDn8RcXlE9IuIj5N8JzwSEWeXOq62Jqlr2kKFpJ2BE4C/ljaq\nthcR1cASSYPSSccC80sRS7u7IUx74JvSJCRNASqAXSUtBq6q6djRUUgaDpwJPJ+eHw7g8oh4sLSR\ntbk+wOT0io5OwL0RMbvEMVlp7AH8Ir1VdhfgnoiYU+KYSuXrwD2StgNeAcaXIghffmZmZpZjblo3\nMzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3IzM7MccyI366AkbUzvEf28pHsl7dgK2zxH\n0n+3Rnxmlo0TuVnH9U5EHBwRnwI+BL6cdcX0xjCN8c0pzNqQE7mZATwO7AMg6RfpU62el/R/ahaQ\ntE7SpPQOd4dJGiLpSUnPSJqX3q4TYC9Jv5a0QNLEEuyLWYfiW7SadVyC2ofCnAz8Op0+PiLeSJva\nn5L0vxGxFtgZ+H1EXJTekvJvwGkR8ef03tvvpet/muRxrx8CCyR9PyL80CGzInGN3Kzj2knSn4E/\nAouAO9PpF0p6BphH8uS/T6TTNwA/T4f3BZZFxJ8BIuLtiNiYzns4HX+f5CES/Yu/K2Ydl2vkZh3X\n+vQ5yrUkHQUcAxwaEe9LehSo6QT3Xmz+cIbGnor3fsHwRvw9Y1ZUrpGbdVwNJeIewNo0iX8SOKyR\n5RcAZZI+CyDpY5I6Fy9UM2uMfymbdVwN9S5/EPiypBdIkvXvG1o+Ij6UdDrwP+nzydcDx2Usw8xa\nkR9jamZmlmNuWjczM8sxJ3IzM7MccyI3MzPLMSdyMzOzHHMiNzMzyzEncjMzsxxzIjczM8sxJ3Iz\nM7Mc+/+RC0tGUupuygAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Parch', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3) If passenger['Sex'] == 'female' and passenger['Age'] > 50, they are more likely to survive. " ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n+vfv3+ww1old65LUwtoS8aBBgzj88MO55pprmDRpEg888AAAJ598MmeffXb7+hdddBHbbbcdw4cP\n5wc/+EGXLfL999+fs88+m3322YctttiCsWPH8uyzz7Yvnzp1KrvvvjtDhgzhgAMO4OGHHwbghBNO\n4Mknn2TcuHFsscUWXHzxxauVvWjRIsaNG8fgwYPZaqut2G+//dqXdezur63DbbfdxogRI/jqV7/K\nsGHD+NCHPsSuu+7KjTfe2L7+ihUr2HrrrbnvvvuYPXs2/fr1Y+XKlVx77bXsueeqdxy/9NJLOeqo\nowB45ZVXOPXUUxk5ciTDhg3j4x//OC+//HI3f4F1ZyKXJLXbc889GT58OHfcccdqy26++WYuueQS\nbr31Vh599FFuueWWbsubMmUKkyZNYuHChbz88svtSfmRRx5h4sSJfP3rX2fhwoUceuihHH744Sxf\nvpwf/vCHbL/99vz85z/nhRde4NRTT12t3K997WuMGDGCRYsW8fTTT/PlL3+5fVl33f1PPfUUzz33\nHE8++STf/va3mThxIpMnT16lnkOHDmWPPfZYpbxx48bxyCOP8Je//GWV+n3wgx8E4PTTT+exxx7j\nj3/8I4899hhz587l/PPP7/YYrSsTuSRpFdttt90qLec21113HSeffDJvfvOb2WSTTTj33HO7Levk\nk09mp512YqONNmL8+PHcd999AFx77bUcfvjhHHDAAfTv359TTz2VZcuW8dvf/rZ926667QcOHMj8\n+fN54okn6N+/P6NHj65rO4D+/ftz3nnnMXDgQDbaaCMmTJjA1KlTeemll4AiOU+YMGG17TbZZBOO\nPPJIpkyZAsCjjz7Kww8/zBFHHAHAd77zHS699FK23HJLNttsM84444z2dRvJRC5JWsXcuXMZMmTI\navPnzZvHiBEj2qdHjhzZbdLcdttt219vuummvPjii+1ljawZKxARjBgxgrlz59YV4+c+9zl22mkn\n3vve9/LGN76RCy+8sK7tAIYOHcrAgQPbp3faaSd23XVXpk2bxrJly5g6dSoTJ05c47YTJkxoT86T\nJ0/mqKOOYqONNmLhwoUsXbqUd77znQwZMoQhQ4Zw6KGHsmjRorrjWlsOdpMktbvnnnuYN28e++67\n72rLhg0bxpw5c9qnZ8+evdaj1rfbbjv+/Oc/rzJvzpw5DB8+HOi+e3yzzTbj4osv5uKLL+aBBx5g\n//33Z6+99mL//fdn0003ZenSpe3rPvXUU6t8AVlT2cceeyyTJ09mxYoV7LbbbrzhDW9Y434PPvhg\nFi5cyP3338/VV1/NZZddBsDrXvc6Nt10U2bOnMmwYcPqOwjriS1ySRJLlizh5z//ORMmTOD4449n\n1113XW2d8ePH81//9V88+OCDLF26dJ3O/44fP54bbriBX//61yxfvpyLL76YjTfemL333hsoWvJd\nXZ9+ww03tJ+rHjRoEAMGDKBfvyKl7bHHHkyePJmVK1dy8803c9ttt3Ubz7HHHsv06dO54oorVmuN\n1/Y6DBgwgKOPPprTTjuNxYsXc/DBBwPFl4MPf/jDfOYzn2HhwoVA0bMxffr0HhyVtWMil6QWNm7c\nOLbccku23357vvKVr3DqqaeuculZbet17NixfOYzn+GAAw5g55135sADD+yy7K5a1TvvvDNXXnkl\n//qv/8rQoUO54YYbmDZtGgMGFB3FZ5xxBl/84hcZMmQIl1xyyWrbP/rooxx00EEMGjSI0aNH84lP\nfKJ95Prll1/O1KlTGTx4MFOmTOEf//Efuz0O2267LXvvvTd33XUXxxxzTJf1mDBhArfeeivjx49v\n//IAcOGFF/LGN76Rd73rXbz2ta/lve99L4888ki3+15XPo9ckhpo1KhRqzz9rC/dEEbN0/F90cbn\nkUtSH2eS1fpm17okSRVmIpckqcJM5JIkVZiJXJKkCjORS5JUYSZySZIqzEQuSVKFmcglSQ33sY99\njC996UvrvdzzzjuP448/fr2XWyXeEEaSetEp//cUZs2b1bDyd9huB755af03nbnzzjs5/fTTmTlz\nJgMGDODNb34zl112Ge985zvXa1xXXHHFei2v1to+uGVDYSKXpF40a94sRh43svsV17b8K2fVve6S\nJUsYN24c3/rWtzj66KN55ZVXuOOOO9hoo416vN/MbPmE2ix2rUtSi3rkkUeICMaPH09EsNFGG3HQ\nQQex++67r9ZlPXv2bPr168fKlSsB2H///TnrrLPYZ5992GyzzbjooovYc889Vyn/0ksv5aijjgLg\n5JNP5uyzzwZg11135cYbb2xfb8WKFWy99dbcd999ANx1112MHj2awYMH8/a3v32Vp5fNmjWLMWPG\nsOWWW3LIIYfwzDPPNObgVIiJXJJa1M4770z//v056aSTuPnmm3nuuedWWd6xhd1x+sorr+S73/0u\nS5Ys4ZRTTuGRRx5pf7QowJQpU/jgBz+42n4nTJjA5MmT26dvvvlmhg4dyh577MHcuXM5/PDDOfvs\ns1m8eDEXX3wxH/jAB1i0aBEAEydOZM899+SZZ57hrLPOYtKkSet8HKrORC5JLWrQoEHceeed9OvX\nj4985CMMHTqUo446iqeffrqu7U866STe9KY30a9fP7bYYguOPPJIpkyZAhSPGX344YcZN27cattN\nnDiRqVOn8tJLLwFFwp8wYQIAV111FYcddhiHHHIIAAceeCCjRo3ixhtvZM6cOdx7772cf/75DBw4\nkH333XeN5bcaE7kktbBddtmF73//+zz55JPMnDmTefPm8ZnPfKaubUeMGLHK9IQJE9oT+eTJkznq\nqKPYeOONV9tup512Ytddd2XatGksW7aMqVOntrfcZ8+ezbXXXsuQIUMYMmQIgwcP5je/+Q3z589n\n3rx5DB48mE022aS9rJEjGzfeoCoc7CZJAoqu9hNPPJFvf/vbvPOd72Tp0qXty+bPn7/a+h272g8+\n+GAWLlzI/fffz9VXX81ll13W6b6OPfZYJk+ezIoVK9htt93YcccdgeLLwQknnMC3vvWt1bZ58skn\nWbx4McuWLWtP5k8++ST9+rV2m7S1ay9JLezhhx/mkksuYe7cuQDMmTOHKVOmsPfee/O2t72N22+/\nnTlz5vD8889zwQUXdFvegAEDOProoznttNNYvHgxBx98cKfrHnvssUyfPp0rrriCiRMnts8/7rjj\nmDZtGtOnT2flypW89NJL3HbbbcybN4/tt9+eUaNGcc455/Dqq69y5513Mm3atHU/EBVnIpekFjVo\n0CDuvvtu/uEf/oFBgwbx7ne/m7e+9a1cfPHFHHTQQRxzzDG89a1vZc8991ztXHRnl5pNmDCBW2+9\nlfHjx6/SUu64/rbbbsvee+/NXXfdxTHHHNM+f/jw4Vx//fV8+ctfZujQoYwcOZKLL764fbT8VVdd\nxV133cVWW23FF7/4RU488cT1dTgqKzKz2TF0KiKyL8cnSd0ZNWoU9957b/t0X7shjJqj4/uiTUSQ\nmT26IN9z5JLUi0yyWt/sWpckqcJM5JIkVZiJXJKkCvMcufqkRg8I6uscsCSpXiZy9UmNfkJUX9eT\nJ1hJam12rUuSVGG2yCWpgYYNG8aoUaOaHYb6mGHDhq23skzkktRA3kJUjWbXuiRJFdbwFnlEzAKe\n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\nzEQuSVKF/T/SWc9tOWWciwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Age', [\"Sex == 'female'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4) If passenger['Age'] < 10 and passenger['SibSp'] < 3 and passenger['Sex'] == 'male', they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n559/vmH7uTpM2JLUg2YvWkRCw/5mL1pUdywRwXXXXcdzzz3H7NmzOe200zj//PP58Ic/XHcZ60LL\nc20sX7682SHUzYQtSeuxloQ7cOBADjvsMH784x9z+eWX88ADDwAwceJEzjzzzNb1v/71r7P11lsz\nYsQILrvssk5bnvvssw9nnnkme+21F4MGDeLggw/mmWeeaV0+bdo03vrWtzJkyBD23XdfHnroIQBO\nOOEE5syZw7hx4xg0aBCTJ09epeynn36acePGMXjwYDbffHPe9773tS5r201fuw8333wzI0eO5Gtf\n+xrDhw/nQx/6EDvuuCPXX3996/rLly9nyy235O6772b27Nn06dOHFStWcPXVV7PrrruuFMeFF17I\nkUceCcArr7zCySefzOjRoxk+fDif/OQnefnlLu9xVTcTtiSp1a677sqIESO49dZbV1l2ww03cMEF\nF3DjjTfy8MMP86tf/arL8qZOncrll1/O4sWLefnll1uT76xZs5gwYQLf+ta3WLx4MYcccgiHHXYY\nr732GldccQWjRo3i5z//Oc8//zwnn3zyKuV+4xvfYOTIkTz99NM8+eSTfPnLX25d1lX39cKFC3n2\n2WeZM2cOl156KRMmTGDKlCkr7efQoUPZZZddVipv3LhxzJo1i0cffXSl/TvuuOMAOPXUU3nkkUe4\n9957eeSRR5g3bx7nnHNOl89RvUzYkqSVbL311iu1hFtcc801TJw4kb//+79n4403ZtKkSV2WNXHi\nRLbbbjs23HBDjj76aO6++24Arr76ag477DD23Xdf+vbty8knn8yLL77Ib3/729ZtO+tu79+/PwsW\nLODxxx+nb9++7LnnnnVtB9C3b1/OPvts+vfvz4Ybbsj48eOZNm0aL730ElAk4fHjx6+y3cYbb8wR\nRxzB1KlTAXj44Yd56KGHOPzwwwH47ne/y4UXXsimm27KJptswmmnnda6bncwYUuSVjJv3jyGDBmy\nyvz58+czcuTI1unRo0d3mRyH1QyCGzBgAC+88EJrWaNHj25dFhGMHDmSefPm1RXj5z//ebbbbjsO\nPPBA3vzmN3P++efXtR3A0KFD6d+/f+v0dtttx4477sj06dN58cUXmTZtGhMmtHezSRg/fnxrEp4y\nZQpHHnkkG264IYsXL2bZsmW8613vYsiQIQwZMoRDDjmEp59+uu64uuKlSSVJre68807mz5/P3nvv\nvcqy4cOHM3fu3Nbp2bNnr/Ho6a233pr77rtvpXlz585lxIgRQNfd2ptssgmTJ09m8uTJPPDAA+yz\nzz7stttu7LPPPgwYMIBly5a1rrtw4cKVfmi0V/axxx7LlClTWL58OTvttBNvetOb2q33gAMOYPHi\nxdxzzz1cddVVXHTRRQBsscUWDBgwgPvvv5/hw4fX9ySsJlvYkiSWLl3Kz3/+c8aPH8/xxx/Pjjvu\nuMo6Rx99NP/93//Ngw8+yLJly9bq+OzRRx/Nddddx0033cRrr73G5MmT2Wijjdh9992BomXe2fnd\n1113Xeux5IEDB9KvXz/69ClS2i677MKUKVNYsWIFN9xwAzfffHOX8Rx77LHMmDGDiy++eJXWdW0v\nQr9+/TjqqKM45ZRTWLJkCQcccABQ/Aj4yEc+wkknncTixYuBoqdixowZq/GsdM6ELUnrsXHjxrHp\nppsyatQovvKVr3DyySfzgx/8oHV5bWv04IMP5qSTTmLfffdl++23Z7/99uu07M5aydtvvz0/+tGP\n+Jd/+ReGDh3Kddddx/Tp0+nXr+j4Pe200zj33HMZMmQIF1xwwSrbP/zww+y///4MHDiQPffck099\n6lOtI8W/+c1vMm3aNAYPHszUqVP5h3/4hy6fh2HDhrH77rtz++23c8wxx3S6H+PHj+fGG2/k6KOP\nbv2RAHD++efz5je/mfe85z1sttlmHHjggcyaNavLuuvl/bAlqYHGjBmz0t26thk2bLXOlV5do7fa\niicWLmxY+eoebd8XLbwftiStI0ymWlN2iUuSVAEmbEmSKsCELUlSBZiwJUmqABO2JEkVYMKuqGEj\nuveeusNG1H8PXUlSz/O0ropaNG8RTOrG8iY17rxQSdLas4UtSWq4T3ziE5x33nndXu7ZZ5/N8ccf\n3+3lrotM2JLUg7r7cNbaHt667bbb2HPPPdlss83YYost2HvvvfnDH/7Q7ft98cUXc/rpp3d7udD1\njUJ6C7vEJakHdffhrFXKX43DW0uXLmXcuHFccsklHHXUUbzyyivceuutbLjhhqtdb2auN4mzWWxh\nS9J6atasWUQERx99NBHBhhtuyP77789b3/rWVbqaZ8+eTZ8+fVixYgUA++yzD2eccQZ77bUXm2yy\nCV//+tfZddddVyr/wgsv5MgjjwRg4sSJnHnmmQDsuOOOXH/99a3rLV++nC233JK7774bgNtvv509\n99yTwYMH8453vGOlu2098cQTjB07lk033ZSDDjqIp556qjFPzjrIhC1J66ntt9+evn378sEPfpAb\nbriBZ599dqXlbVvMbad/9KMf8b3vfY+lS5fy8Y9/nFmzZrXe8hJg6tSpHHfccavUO378eKZMmdI6\nfcMNNzB06FB22WUX5s2bx2GHHcaZZ57JkiVLmDx5Mv/0T//E008/DcCECRPYddddeeqppzjjjDO4\n/PLL1/p5qAoTtiStpwYOHMhtt91Gnz59+OhHP8rQoUM58sgjefLJJ+va/oMf/CA77LADffr0YdCg\nQRxxxBFMnToVKG5/+dBDDzFu3LhVtpswYQLTpk3jpZdeAorEPn78eACuvPJKDj30UA466CAA9ttv\nP8aMGcP111/P3LlzueuuuzjnnHPo378/e++9d7vl91YmbElaj73lLW/hBz/4AXPmzOH+++9n/vz5\nnHTSSXVtO3LkyJWmx48f35qwp0yZwpFHHslGG220ynbbbbcdO+64I9OnT+fFF19k2rRprS3x2bNn\nc/XVVzNkyBCGDBnC4MGD+c1vfsOCBQuYP38+gwcPZuONN24ta/To0Wu665XjoDNJElB0kZ944olc\neumlvOtd72LZsmWtyxYsWLDK+m27yA844AAWL17MPffcw1VXXcVFF13UYV3HHnssU6ZMYfny5ey0\n005su+22QPEj4IQTTuCSSy5ZZZs5c+awZMkSXnzxxdakPWfOHPr0WT/anuvHXkqSVvHQQw9xwQUX\nMG/ePADmzp3L1KlT2X333Xn729/OLbfcwty5c3nuuef46le/2mV5/fr146ijjuKUU05hyZIlHHDA\nAR2ue+yxxzJjxgwuvvhiJkyY0Dr/Ax/4ANOnT2fGjBmsWLGCl156iZtvvpn58+czatQoxowZw1ln\nncWrr77KbbfdxvTp09f+iagIE7YkracGDhzIHXfcwbvf/W4GDhzIHnvswc4778zkyZPZf//9OeaY\nY9h5553ZddddVzlW3NEpXOPHj+fGG2/k6KOPXqnl23b9YcOGsfvuu3P77bdzzDHHtM4fMWIEP/vZ\nz/jyl7/M0KFDGT16NJMnT24dnX7llVdy++23s/nmm3Puuedy4okndtfTsc6LzGx2DB2KiFyX42um\niOjeczknFedRSupeY8aM4a677mqdHjZiWHEudoNs9catWPjXhQ0rX92j7fuiRUSQme3+GvIYtiT1\n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\nAv4/cs18rxAkAioAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'SibSp', [\"Age < 10\", \"Sex == 'male'\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5) If passenger['Age'] < 10 and passenger['Pclass'] == 2, they are more likely to survive." ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nhv3NWrCg7loigssvv5znnnuOWbNmceKJJ3LWWWfx8Y9/vO519IaW5xuxbNmyZpdQNwNbkvqwlsBd\nd911Ofjgg/nVr37F1KlTuffeewE45phjOPnkk1vn/853vsMmm2zCiBEj+NnPftZly3Pvvffm5JNP\nZo899mC99dbjgAMO4Jlnnmmdfumll/LOd76TIUOGsM8++3D//fcD8JGPfITZs2czfvx41ltvPaZM\nmbLCup9++mnGjx/P4MGD2XDDDdlrr71ap7XfTV/7HGbOnMnIkSP59re/zfDhw/nYxz7GdtttxxVX\nXNE6/7Jly9h44425/fbbmTVrFv369WP58uVcdNFF7Lzzzm3q+N73vsdhhx0GwCuvvMLxxx/PqFGj\nGD58OJ/97Gd5+eWXu/kfqJ+BLUlqtfPOOzNixAhuuOGGFaZdeeWVnH322VxzzTU8+OCDXH311d2u\n74ILLmDq1KksXLiQl19+uTV8H3jgASZNmsQPf/hDFi5cyIEHHsjBBx/Ma6+9xs9//nM222wzLrvs\nMhYvXszxxx+/wnq/+93vMnLkSJ5++mmefPJJzjzzzNZp3e2+nj9/Ps8++yyzZ8/mxz/+MZMmTWLa\ntGltnudGG23ETjvt1GZ948eP54EHHuDhhx9u8/w+9KEPAXDCCSfw0EMPceedd/LQQw8xd+5cTjvt\ntG5fo3oZ2JKkNjbZZJM2LeEWF198Mccccwzbbrsta6+9dl23wDzmmGPYaqutWHPNNZkwYQK33347\nABdddBEHH3ww++yzD/379+f444/nxRdf5E9/+lPrsl3tbh84cCDz5s3j0UcfpX///uy+++51LQfQ\nv39/Tj31VAYOHMiaa67JxIkTufTSS3nppZeAIoQnTpy4wnJrr702hx56KBdccAEADz74IPfffz+H\nHHIIAOeddx7f+973WH/99VlnnXU48cQTW+ddHQxsSVIbc+fOZciQISuMf+KJJxg5cmTr8KhRo7oN\nx2E1neAGDRrE888/37quUaNGtU6LCEaOHMncuXPrqvErX/kKW221FePGjWPrrbfmrLPOqms5gI02\n2oiBAwe2Dm+11VZst912TJ8+nRdffJFLL72USZMmdbjsxIkTW0N42rRpHHbYYay55posXLiQpUuX\n8t73vpchQ4YwZMgQDjzwQJ5++um66+qOlyaVJLW65ZZbeOKJJ9hzzz1XmDZ8+HDmzJnTOjxr1qxV\n7j29ySabcPfdd7cZN2fOHEaMGAF0v1t7nXXWYcqUKUyZMoV7772Xvffem1122YW9996bQYMGsXTp\n0tZ558+f3+aHRkfrPvLII5k2bRrLli1j++23Z8stt+xwu2PHjmXhwoXccccdXHjhhXz/+98H4K1v\nfSuDBg3innvuYfjw4fW9CCvJFrYkiSVLlnDZZZcxceJEjjrqKLbbbrsV5pkwYQL/+7//y3333cfS\npUvf0PHZCRMmcPnll3Pttdfy2muvMWXKFNZaay122203oGiZd3V+9+WXX956LHnddddlwIAB9OtX\nRNpOO+3EtGnTWL58OVdeeSUzZ87stp4jjzySGTNmcO65567Quq7dizBgwACOOOIIvvzlL7No0SLG\njh0LFD8CPvnJT/LFL36RhQsXAsWeihkzZqzEq9I1A1uS+rDx48ez/vrrs9lmm/HNb36T448/np/+\n9Ket02tbowcccABf/OIX2Weffdhmm23Yd999u1x3V63kbbbZhl/+8pd8/vOfZ6ONNuLyyy9n+vTp\nDBhQ7Pg98cQTOf300xkyZAhnn332Css/+OCD7Lfffqy77rrsvvvufO5zn2vtKf6DH/yASy+9lMGD\nB3PBBRfwz//8z92+DsOGDWO33Xbj5ptv5oMf/GCXz2PixIlcc801TJgwofVHAsBZZ53F1ltvzfve\n9z422GADxo0bxwMPPNDttuvl/bAlqYFGjx7d5m5dmw8btlLnSq+sUUOH8tj8+Q1bv1aP9u+LFt4P\nW5J6CcNUq8pd4pIkVYCBLUlSBRjYkiRVgIEtSVIF2OlMknqZO++4g1defbXZZTTNGgMHsuO73tXs\nMnodA1uSeplXXn2V0c0uoolu7cM/VrriLnFJkirAwJYkNdxnvvUtzqi5gtrqcuqpp3LUUUet9vX2\nRu4Sl6QeNGzEMBbMbdyVzoZuPIT5l19V9/w33n47J/znf3LPI48woH9/tt1iC75/3HG8d9ttV2td\n55544mpdX61VvQFJ1RjYktSDFsxdAJMbuP7JK97HujNLXniB8ccdx4+++lWO2G8/Xnn1VW647TbW\nrLn1ZL0ys88EZ7O4S1yS+qgHZs8mIpgwdiwRwZprrMF+u+7KO7femlPPO4+jTj65dd5Z8+bRb5dd\nWL58OQB7f/rTnHTuuezxiU+wzp578p1f/IKdP/KRNuv/3rRpHHb88QAcc+qpnPw//wPAdhMmcMVN\nN7XOt2zZMjYeN47b778fgLvuuovdd9+dwYMH8+53v7vN3bYee+wxxowZw/rrr8/+++/PU0891ZgX\npxcysCWpj9pms83o368fH508mSv/9CeeXbKkzfT2Leb2w7/8/e/5vyedxJKZM/n04YfzwOzZPPz4\n463TL7jqKj50wAErbHfiuHFMu/LK1uEr//xnNtpgA3Z6+9uZ++ST/Md//Acnn3wyixYtYsqUKfzL\nv/wLTz/9NACTJk1i55135qmnnuKkk05i6tSpb/h1qAoDW5L6qHXXWYcbzzuPfv368W9nnslGY8dy\n2PHH8+Qz9e1W/+jBB/OOzTenX79+rPeWt3DoXntxwVXF8fMHZ8/m/lmzGL/nnissN+mAA7j0hht4\n6eWXgSLYJ+6/PwDnX3kle+yxB/uXw/vuuy+jR4/miiuuYM6cOdx6662cdtppDBw4kD333JPx48ev\njpeiEgxsSerD3r755vz05JOZfdll3POrX/HEwoV8sYP7T3dk5NChbYYnjhvXGtjTrrqKw8aMYa01\n11xhua1GjGC7LbZg+g038OJLL3HpDTe0tsRnzZvH1VdfzZAhQxgyZAiDBw/mpptuYt68eTzxxBMM\nHjyYtddeu3Vdo0aNWtWnXjl2OpMkAbDNqFEcfdBB/Pi3v+W973gHS196qXXavA6OFbffRT52111Z\n+Oyz3PHAA1w4YwbfP+64Trd15NixTLvqKpYtX872W27JFptuChQ/Aj7wgQ/w61//eoVlZs+ezaJF\ni3jxxRdbQ3v27Nn069c32p5941lKklZw/2OPcfb55zP3yScBmDN/PhfMmMFuO+zAu972Nq6/7Tbm\nzJ/Pc88/z7fqOFY8YMAAjth3X778wx+yaPFixu66a6fzHjluHDNuvplzL7mESeXub4APH3ggN9xw\nAzNmzGD58uW89NJLzJw5kyeeeILNNtuM0aNHc8opp/Dqq69y4403Mn369Df+QlSEgS1JfdS666zD\nX+6+m12POYZ199qL93/84+y49dZMOfZY9tt1Vz44diw7TprEzkcfvcKx6M5O4Zq4//5cc8stTBg7\ntk3Lt/38w976VnbbYQduvvtuPjh2bOv4EUOHMmXKFM4880w22mgjRo0axZQpU1p7p59//vncfPPN\nbLjhhpx++ukcffTRq+vl6PUiM5tdQ6ciIntzfZLUndGjR3Prrbe2Dve2C6f0RrdSvG5vZu3fFy0i\n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\nklQB/x/DUF1sByf4KwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "survival_stats(data, outcomes, 'Pclass', [\"Age < 10\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Accuracy\n", "81.71% on the data itself. \n", "\n", "This is kind of cheating because I can see that all males under the age of 10 who have 0-1 siblings (or spouses) survived. So theoretically I could get 100% accuracy by specifying one category (combination of filters)-outcome pair for every single datapoint." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion\n", "\n", "After several iterations of exploring and conditioning on the data, you have built a useful algorithm for predicting the survival of each passenger aboard the RMS Titanic. The technique applied in this project is a manual implementation of a simple machine learning model, the *decision tree*. A decision tree splits a set of data into smaller and smaller groups (called *nodes*), by one feature at a time. Each time a subset of the data is split, our predictions become more accurate if each of the resulting subgroups are more homogeneous (contain similar labels) than before. The advantage of having a computer do things for us is that it will be more exhaustive and more precise than our manual exploration above. [This link](http://www.r2d3.us/visual-intro-to-machine-learning-part-1/) provides another introduction into machine learning using a decision tree.\n", "\n", "A decision tree is just one of many models that come from *supervised learning*. In supervised learning, we attempt to use features of the data to predict or model things with objective outcome labels. That is to say, each of our data points has a known outcome value, such as a categorical, discrete label like `'Survived'`, or a numerical, continuous value like predicting the price of a house.\n", "\n", "### Question 5\n", "*Think of a real-world scenario where supervised learning could be applied. What would be the outcome variable that you are trying to predict? Name two features about the data used in this scenario that might be helpful for making the predictions.* " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "**Answer**: *Replace this text with your answer to the question above.*\n", "\n", "**Scenario**: A bank issuing loans.\n", "\n", "**Outcome variable**: Whether or not someone will return a loan.\n", "\n", "**Features that may be useful**: (1) Person's annual income, (2) whether that person has a criminal record." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p0-titanic-survival-exploration/titanic_visualizations.py ================================================ import numpy as np import pandas as pd import matplotlib.pyplot as plt def filter_data(data, condition): """ Remove elements that do not match the condition provided. Takes a data list as input and returns a filtered list. Conditions should be a list of strings of the following format: ' ' where the following operations are valid: >, <, >=, <=, ==, != Example: ["Sex == 'male'", 'Age < 18'] """ field, op, value = condition.split(" ") # convert value into number or strip excess quotes if string try: value = float(value) except: value = value.strip("\'\"") # get booleans for filtering if op == ">": matches = data[field] > value elif op == "<": matches = data[field] < value elif op == ">=": matches = data[field] >= value elif op == "<=": matches = data[field] <= value elif op == "==": matches = data[field] == value elif op == "!=": matches = data[field] != value else: # catch invalid operation codes raise Exception("Invalid comparison operator. Only >, <, >=, <=, ==, != allowed.") # filter data and outcomes data = data[matches].reset_index(drop = True) return data def survival_stats(data, outcomes, key, filters = []): """ Print out selected statistics regarding survival, given a feature of interest and any number of filters (including no filters) """ # Check that the key exists if key not in data.columns.values : print "'{}' is not a feature of the Titanic data. Did you spell something wrong?".format(key) return False # Return the function before visualizing if 'Cabin' or 'Ticket' # is selected: too many unique categories to display if(key == 'Cabin' or key == 'PassengerId' or key == 'Ticket'): print "'{}' has too many unique categories to display! Try a different feature.".format(key) return False # Merge data and outcomes into single dataframe all_data = pd.concat([data, outcomes], axis = 1) # Apply filters to data for condition in filters: all_data = filter_data(all_data, condition) # Create outcomes DataFrame all_data = all_data[[key, 'Survived']] # Create plotting figure plt.figure(figsize=(8,6)) # 'Numerical' features if(key == 'Age' or key == 'Fare'): # Remove NaN values from Age data all_data = all_data[~np.isnan(all_data[key])] # Divide the range of data into bins and count survival rates min_value = all_data[key].min() max_value = all_data[key].max() value_range = max_value - min_value # 'Fares' has larger range of values than 'Age' so create more bins if(key == 'Fare'): bins = np.arange(0, all_data['Fare'].max() + 20, 20) if(key == 'Age'): bins = np.arange(0, all_data['Age'].max() + 10, 10) # Overlay each bin's survival rates nonsurv_vals = all_data[all_data['Survived'] == 0][key].reset_index(drop = True) surv_vals = all_data[all_data['Survived'] == 1][key].reset_index(drop = True) plt.hist(nonsurv_vals, bins = bins, alpha = 0.6, color = 'red', label = 'Did not survive') plt.hist(surv_vals, bins = bins, alpha = 0.6, color = 'green', label = 'Survived') # Add legend to plot plt.xlim(0, bins.max()) plt.legend(framealpha = 0.8) # 'Categorical' features else: # Set the various categories if(key == 'Pclass'): values = np.arange(1,4) if(key == 'Parch' or key == 'SibSp'): values = np.arange(0,np.max(data[key]) + 1) if(key == 'Embarked'): values = ['C', 'Q', 'S'] if(key == 'Sex'): values = ['male', 'female'] # Create DataFrame containing categories and count of each frame = pd.DataFrame(index = np.arange(len(values)), columns=(key,'Survived','NSurvived')) for i, value in enumerate(values): frame.loc[i] = [value, \ len(all_data[(all_data['Survived'] == 1) & (all_data[key] == value)]), \ len(all_data[(all_data['Survived'] == 0) & (all_data[key] == value)])] # Set the width of each bar bar_width = 0.4 # Display each category's survival rates for i in np.arange(len(frame)): nonsurv_bar = plt.bar(i-bar_width, frame.loc[i]['NSurvived'], width = bar_width, color = 'r') surv_bar = plt.bar(i, frame.loc[i]['Survived'], width = bar_width, color = 'g') plt.xticks(np.arange(len(frame)), values) plt.legend((nonsurv_bar[0], surv_bar[0]),('Did not survive', 'Survived'), framealpha = 0.8) # Common attributes for plot formatting plt.xlabel(key) plt.ylabel('Number of Passengers') plt.title('Passenger Survival Statistics With \'%s\' Feature'%(key)) plt.show() # Report number of passengers with missing values if sum(pd.isnull(all_data[key])): nan_outcomes = all_data[pd.isnull(all_data[key])]['Survived'] print "Passengers with missing '{}' values: {} ({} survived, {} did not survive)".format( \ key, len(nan_outcomes), sum(nan_outcomes == 1), sum(nan_outcomes == 0)) ================================================ FILE: p1-boston-housing/.ipynb_checkpoints/boston_housing-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Model Evaluation & Validation\n", "## Project 1: Predicting Boston Housing Prices\n", "\n", "Welcome to the first project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and you will need to implement additional functionality to successfully complete this project. You will not need to modify the included code beyond what is requested. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO' statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", "In this project, you will evaluate the performance and predictive power of a model that has been trained and tested on data collected from homes in suburbs of Boston, Massachusetts. A model trained on this data that is seen as a *good fit* could then be used to make certain predictions about a home — in particular, its monetary value. This model would prove to be invaluable for someone like a real estate agent who could make use of such information on a daily basis.\n", "\n", "The dataset for this project originates from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Housing). The Boston housing data was collected in 1978 and each of the 506 entries represent aggregated data about 14 features for homes from various suburbs in Boston, Massachusetts. For the purposes of this project, the following preprocessing steps have been made to the dataset:\n", "- 16 data points have an `'MEDV'` value of 50.0. These data points likely contain **missing or censored values** and have been removed.\n", "- 1 data point has an `'RM'` value of 8.78. This data point can be considered an **outlier** and has been removed.\n", "- The features `'RM'`, `'LSTAT'`, `'PTRATIO'`, and `'MEDV'` are essential. The remaining **non-relevant features** have been excluded.\n", "- The feature `'MEDV'` has been **multiplicatively scaled** to account for 35 years of market inflation.\n", "\n", "Run the code cell below to load the Boston housing dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Boston housing dataset has 489 data points with 4 variables each.\n" ] } ], "source": [ "# Import libraries necessary for this project\n", "import numpy as np\n", "import pandas as pd\n", "import visuals as vs # Supplementary code\n", "from sklearn.cross_validation import ShuffleSplit\n", "\n", "# Pretty display for notebooks\n", "%matplotlib inline\n", "\n", "# Load the Boston housing dataset\n", "data = pd.read_csv('housing.csv')\n", "prices = data['MEDV']\n", "features = data.drop('MEDV', axis = 1)\n", " \n", "# Success\n", "print \"Boston housing dataset has {} data points with {} variables each.\".format(*data.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "In this first section of this project, you will make a cursory investigation about the Boston housing data and provide your observations. Familiarizing yourself with the data through an explorative process is a fundamental practice to help you better understand and justify your results.\n", "\n", "Since the main goal of this project is to construct a working model which has the capability of predicting the value of houses, we will need to separate the dataset into **features** and the **target variable**. The **features**, `'RM'`, `'LSTAT'`, and `'PTRATIO'`, give us quantitative information about each data point. The **target variable**, `'MEDV'`, will be the variable we seek to predict. These are stored in `features` and `prices`, respectively." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Calculate Statistics\n", "For your very first coding implementation, you will calculate descriptive statistics about the Boston housing prices. Since `numpy` has already been imported for you, use this library to perform the necessary calculations. These statistics will be extremely important later on to analyze various prediction results from the constructed model.\n", "\n", "In the code cell below, you will need to implement the following:\n", "- Calculate the minimum, maximum, mean, median, and standard deviation of `'MEDV'`, which is stored in `prices`.\n", " - Store each calculation in their respective variable." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics for Boston housing dataset:\n", "\n", "Minimum price: $105,000.00\n", "Maximum price: $1,024,800.00\n", "Mean price: $454,342.94\n", "Median price $438,900.00\n", "Standard deviation of prices: $165,171.13\n" ] } ], "source": [ "# TODO: Minimum price of the data\n", "minimum_price = np.min(prices)\n", "\n", "# TODO: Maximum price of the data\n", "maximum_price = np.max(prices)\n", "\n", "# TODO: Mean price of the data\n", "mean_price = np.mean(prices)\n", "\n", "# TODO: Median price of the data\n", "median_price = np.median(prices)\n", "\n", "# TODO: Standard deviation of prices of the data\n", "std_price = np.std(prices)\n", "\n", "# Show the calculated statistics\n", "print \"Statistics for Boston housing dataset:\\n\"\n", "print \"Minimum price: ${:,.2f}\".format(minimum_price)\n", "print \"Maximum price: ${:,.2f}\".format(maximum_price)\n", "print \"Mean price: ${:,.2f}\".format(mean_price)\n", "print \"Median price ${:,.2f}\".format(median_price)\n", "print \"Standard deviation of prices: ${:,.2f}\".format(std_price)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZmZWiP8P9EgSll3r1RAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Boxplot of prices to get a sense of the data\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.title(\"Boston Home Prices\")\n", "plt.ylabel(\"Price (USD)\")\n", "plt.boxplot(prices)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Feature Observation\n", "As a reminder, we are using three features from the Boston housing dataset: `'RM'`, `'LSTAT'`, and `'PTRATIO'`. For each data point (neighborhood):\n", "- `'RM'` is the average number of rooms among homes in the neighborhood.\n", "- `'LSTAT'` is the percentage of homeowners in the neighborhood considered \"lower class\" (working poor).\n", "- `'PTRATIO'` is the ratio of students to teachers in primary and secondary schools in the neighborhood.\n", "\n", "_Using your intuition, for each of the three features above, do you think that an increase in the value of that feature would lead to an **increase** in the value of `'MEDV'` or a **decrease** in the value of `'MEDV'`? Justify your answer for each._ \n", "**Hint:** Would you expect a home that has an `'RM'` value of 6 be worth more or less than a home that has an `'RM'` value of 7?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. **`'RM'`: increase**. \n", " - An increase in the value of `'RM'` should lead to an increase in the value of `'MEDV'`.\n", " - Intuitively, homes with more rooms should have **larger floor area**. \n", " - Homes with larger floor area should be more expensive than homes with small area (if price per square foot is is similar), hence the guess for a positive relationship.\n", " - However, homes in cities with high prices and high prices per square foot (cities such as Hong Kong or New York) tend to be much smaller on average than homes in say rural France. If we compared **homes in Hong Kong with homes in rural France, there would be a negative relationship between `'RM'` and `'MEDV'`**.\n", " - But it is unlikely than there will be such high and large-scale regional variance within Boston.\n", "\n", "2. **`'LSTAT'`: decrease**. \n", " - An increase in the value of `'LSTAT'` should lead to an decrease in the value of `'MEDV'`.\n", " - If more people in the neighbourhood are the 'working poor', given (1) they usually have low income (by definition) and (2) they should've been able to afford their homes, their homes should tend to be relatively cheap.\n", " - Thus, the higher `'LSTAT'` is, the higher the percentage of relatively cheap homes in the area is likely to be. \n", " - The higher the percentage of relatively cheap homes in the area, the lower the average price of homes in the area.\n", "\n", "3. **`'PTRATIO'`: increase**. \n", " - An increase in the value of `'RM'` should lead to an increase in the value of `'MEDV'`.\n", " - A higher `'PTRATIO'` means there are more students to one teacher in schools. \n", " - Maintaining lower student-to-teacher ratios is more expensive and thus usually reflects more funding to schools either through tuition fees or donations. \n", " - This usually means people in the area are relatively well-off. \n", " - People who are more well-off often choose to buy more expensive homes since homes are normal goods. (As income increases, amount spent on said good increases.)\n", " - Thus the homes in the area are likely to be more expensive. That is, `'MDEV'` is likely to be higher.\n", "\n", "It is notable that the question asked whether an increase in the value of X would LEAD TO an increase in the value of Y. This is fine because this is an intuition-based question and not a statistical one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", "## Developing a Model\n", "In this second section of the project, you will develop the tools and techniques necessary for a model to make a prediction. Being able to make accurate evaluations of each model's performance through the use of these tools and techniques helps to greatly reinforce the confidence in your predictions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Define a Performance Metric\n", "It is difficult to measure the quality of a given model without quantifying its performance over training and testing. This is typically done using some type of performance metric, whether it is through calculating some type of error, the goodness of fit, or some other useful measurement. For this project, you will be calculating the [*coefficient of determination*](http://stattrek.com/statistics/dictionary.aspx?definition=coefficient_of_determination), R2, to quantify your model's performance. The coefficient of determination for a model is a useful statistic in regression analysis, as it often describes how \"good\" that model is at making predictions. \n", "\n", "The values for R2 range from 0 to 1, which captures the percentage of squared correlation between the predicted and actual values of the **target variable**. A model with an R2 of 0 always fails to predict the target variable, whereas a model with an R2 of 1 perfectly predicts the target variable. Any value between 0 and 1 indicates what percentage of the target variable, using this model, can be explained by the **features**. *A model can be given a negative R2 as well, which indicates that the model is no better than one that naively predicts the mean of the target variable.*\n", "\n", "For the `performance_metric` function in the code cell below, you will need to implement the following:\n", "- Use `r2_score` from `sklearn.metrics` to perform a performance calculation between `y_true` and `y_predict`.\n", "- Assign the performance score to the `score` variable." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'r2_score'\n", "from sklearn.metrics import r2_score\n", "\n", "def performance_metric(y_true, y_predict):\n", " \"\"\" Calculates and returns the performance score between \n", " true and predicted values based on the metric chosen. \"\"\"\n", " \n", " # TODO: Calculate the performance score between 'y_true' and 'y_predict'\n", " score = r2_score(y_true, y_predict)\n", " \n", " # Return the score\n", " return score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Goodness of Fit\n", "Assume that a dataset contains five data points and a model made the following predictions for the target variable:\n", "\n", "| True Value | Prediction |\n", "| :-------------: | :--------: |\n", "| 3.0 | 2.5 |\n", "| -0.5 | 0.0 |\n", "| 2.0 | 2.1 |\n", "| 7.0 | 7.8 |\n", "| 4.2 | 5.3 |\n", "*Would you consider this model to have successfully captured the variation of the target variable? Why or why not?* \n", "\n", "Run the code cell below to use the `performance_metric` function and calculate this model's coefficient of determination." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model has a coefficient of determination, R^2, of 0.923.\n" ] } ], "source": [ "# Calculate the performance of this model\n", "score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])\n", "print \"Model has a coefficient of determination, R^2, of {:.3f}.\".format(score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "**Yes**, I'd consider this model to have successfully captured the variation of the target variable because\n", "1. The model has a **high R^2 of 0.923**. This means a 92.3% percentage of the target variable can be explained by the features using the model. So the model is pretty good.\n", "2. The model also got the ordering of all five datapoints in the dataset correct." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Shuffle and Split Data\n", "Your next implementation requires that you take the Boston housing dataset and split the data into training and testing subsets. Typically, the data is also shuffled into a random order when creating the training and testing subsets to remove any bias in the ordering of the dataset.\n", "\n", "For the code cell below, you will need to implement the following:\n", "- Use `train_test_split` from `sklearn.cross_validation` to shuffle and split the `features` and `prices` data into training and testing sets.\n", " - Split the data into 80% training and 20% testing.\n", " - Set the `random_state` for `train_test_split` to a value of your choice. This ensures results are consistent.\n", "- Assign the train and testing splits to `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training and testing split was successful.\n" ] } ], "source": [ "# TODO: Import 'train_test_split'\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# TODO: Shuffle and split the data into training and testing subsets\n", "X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=7)\n", "\n", "# Success\n", "print \"Training and testing split was successful.\"" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (X,y): (391, 3) (391,)\n", "Test shapes (X,y): (98, 3) (98,)\n" ] } ], "source": [ "print \"Train shapes (X,y): \", X_train.shape, y_train.shape\n", "print \"Test shapes (X,y): \", X_test.shape, y_test.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Training and Testing\n", "*What is the benefit to splitting a dataset into some ratio of training and testing subsets for a learning algorithm?* \n", "**Hint:** What could go wrong with not having a way to test your model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "\n", "It provides **more reliable evaluation metrics** and helps detect **overfitting**.\n", "1. If there was no training set, we wouldn't be able to train our model which would be bad because then our model would be purely based on (possibly random) initial values.\n", "\n", "2. If there was no test set, we wouldn't be able to test our model on unseen data. \n", " - That is, we would be making judgements about how good our model was purely on its performance on the training set.\n", " - Suppose we used `accuracy_score` as our performance metric. If we had e.g. an overfit decision tree with `accuracy_score = 0.98`, we might think it was an excellent model.\n", " - But it would not be excellent because it wouldn't generalise well. That is, it would perform well on examples it had seen before (because it had overfitted) but likely be terrible for examples it hadn't seen before.\n", " - **If we had test our model on unseen data, we would have a better idea as to whether the model generalised and so whether it was actually that good.** E.g. we may have had an `accuracy_score = 0.6` on test data, realised our model wasn't generalised and tried another one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", "## Analyzing Model Performance\n", "In this third section of the project, you'll take a look at several models' learning and testing performances on various subsets of training data. Additionally, you'll investigate one particular algorithm with an increasing `'max_depth'` parameter on the full training set to observe how model complexity affects performance. Graphing your model's performance based on varying criteria can be beneficial in the analysis process, such as visualizing behavior that may not have been apparent from the results alone." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Learning Curves\n", "The following code cell produces four graphs for a decision tree model with different maximum depths. Each graph visualizes the learning curves of the model for both training and testing as the size of the training set is increased. Note that the shaded region of a learning curve denotes the uncertainty of that curve (measured as the standard deviation). The model is scored on both the training and testing sets using R2, the coefficient of determination. \n", "\n", "Run the code cell below and use these graphs to answer the following question." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\nzlT9hrEwZ5qVIjYzUAPMYExK+J5+GrGMSStjAHxXXgl87WsL48h8voUMk86Jrq1AzLkdiwHHj6e/\ndlukzG55SwVsD7z2GrYdO5bd4vaBD2Dgj/7IfI/V9dLZBTMcNrtQNjUtfJ4zy6VzXFzmOte+DK6B\n8+7dNZPspFYDQWe5iIiIqLGxZYuWpoxAbejgQdzz/ventyCtW4cb/9f/wro1axbOteYQcc4n4gzc\nMr8j13g45xgwXTeDNitwc6wH7roL2w4ezCr+QE8Ptl16afa0AqqanjzF2pdMmt0dw2GzFS0UWtgu\ntM963dyctt7205/iZpd55u585zsxcNtt2RNJhsPp+zITnmRuu+0rcnvo0CHcc/XV6XPi1EDWy8wA\ntR4zYLEuJqJGw5Yt8hJbtmhpsiabTll39tm48be/XVyLm3McW+a8H27bzsmxrQDOGcw5tn2nnYZY\nKmCwxAD4LrwQuO22/GVy/qxWIhVVTV+SyYXALJlMD9Cci6KYiU6soC6RgJFRLiA1WeXgoDmpt65n\nTzxp/dy6vtDSVsxSyrmBAB7YtSt7DN4bb+DO974XA+97X+7xdLnG3LltZ56f71hq+4Gvf90OtIiI\niKjxMdgiSlm3YQMGfvSj0t8oxKISXxTjhh/8AAPvfnd6C83GjbjxO98B1q0rPqFJocXtPGdwaL12\n/My+L30JMZcpBnzveAfw5S+bO5ytexbrc62gK3NxBmXOczJfW4Gcte14r5FMugeC09PAxER6ApfM\nrqhu+8p0vjE9zUCLiIhoCWGwRVTD1m3ciBt/85vyjHErB0cQd8M992DgmmvSA8ENG3Djt7+dHghm\nvC9tAdyDvFzBn9sxl/2+ffvcx+Cdfz5w443pP0++JCvOY9Zr589UbFfI1Np3662IPfwwAy4iIqIl\ngmO2iGjRanmySteslw8/bJYvM+DLFRjme21tuwWIOV4PDQ3hnhtuwLbhYY7ZIiKqERyzRV5isEVE\nDamWA0GrXF9+/PG6u8CzLiaiRsNgi7zEYIuIqErq8QLPupiIGk091sVUP3zVLgAREREREVEjYrBF\nRERERETkAQZbREREREREHmCwRURERERE5AEGW0RERERERB5gsEVEREREROQBBltEREREREQeYLBF\nRERERETkAQZbREREREREHmCwRURERERE5AEGW0RERERERB5gsEVEREREROQBBltEREREREQe8DzY\n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\n/D+cJBlqTR21IAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Produce learning curves for varying training set sizes and maximum depths\n", "vs.ModelLearning(features, prices)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Learning the Data\n", "*Choose one of the graphs above and state the maximum depth for the model. What happens to the score of the training curve as more training points are added? What about the testing curve? Would having more training points benefit the model?* \n", "**Hint:** Are the learning curves converging to particular scores?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: ** \n", "\n", "Chosen graph has **`max_depth = 1`**.\n", "\n", "**As more training points (TP) are added**,\n", "- **The score of the training curve decreases**.\n", " - It decreases dramatically from 1.0 (since there are 0 TP, it predicts perfectly) at 0 TP to just under 0.6 at 50 TP. \n", " - It then decreases slightly as TP increases.\n", " - The score the testing curve converges to is **just under 0.5**.\n", "- **The score of the testing curve increases** dramatically from <0 to just under 0.4 when the number of TP is increased from 0 to 50. \n", " - It then increases slightly (by less than 0.1) as the number of TP increases from 50 to 200\n", " - before plateauing or even decreasing slightly as more TP are added beyond 200 TP.\n", " - The score the testing curve converges to is roughly **0.4**.\n", " - Most gains are made by TP = 50.\n", "\n", "It **does not seem like the model will benefit from additional training points beyond 200 training points**.\n", "\n", "The final gap between the training and testing curve scores is small (< 0.1 and much smaller than in the other graphs). The error (~0.6) is quite high. This indicates that the model is **biased**.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Complexity Curves\n", "The following code cell produces a graph for a decision tree model that has been trained and validated on the training data using different maximum depths. The graph produces two complexity curves — one for training and one for validation. Similar to the **learning curves**, the shaded regions of both the complexity curves denote the uncertainty in those curves, and the model is scored on both the training and validation sets using the `performance_metric` function. \n", "\n", "Run the code cell below and use this graph to answer the following two questions." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAFRCAYAAAALn8i+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXl8XHXV/99nZjKTPU26pG2apBsFC/QBBEQoUMUFhUdE\n/T0KooILoCw+PqIIWkoBoSLwgBUQVDbZQR9ZREHUAmWRggqyd03TLWnSNMtkMuv398f33pk72dtm\nsjTn/Xrd19x9zp07M597zvec71eMMSiKoijKeME30gYoiqIoynCiwqcoiqKMK1T4FEVRlHGFCp+i\nKIoyrlDhUxRFUcYVKnyKoijKuEKFb4wjIk+IyJcGsV+7iMzMvUXKeEREviYifxuC8/xIRG4aCpuG\nGhF5n4j8S0RaReTskbZH2X1U+IYBEdkgIp3OD2aHiKwUkbNERPb03MaYTxpjfjOI/UqMMRv29P28\nOGLa5kxJ5xrddacM5Xv18f6bnPdsE5EtIvJrESnI9fuOJkRkuojcJiJbRWSniLwpIotFJDQC5uxx\nUbAx5gpjzLcARGSOiKR291yOGCec78dOEXlVRD6xB+ZdCDxpjCkzxvxiD86jjDAqfMODAU4wxpQB\ntcAy7I/o1yNq1R7iiGmpMaYUqMNeo7vuvu77i4h/qE0APu68/yHA4cD3h/g9ABCREf2t9PbZichE\n4EXs7/gwY8wE4HhgEjB7eC3MCcKei+mzzvejHPgN8JCIlOySEZnPvhZ4c3eMyMF3X9kDVPiGDwEw\nxrQbYx4HPg98RUTmA4hIUESuEZE65+n9Ju9Tu4icJCL/dLzG1SLyMWf930Tkq878HBFZ4TzdNorI\nfZ7jUyIy25kvFZG7nH3Wi8gPPft9RUSeE5GfOt7pWhE5fpDXl+XBisjlInK/iNwrIq3AF8VysYis\ncd7/XhEp8xxzlIi8KCItIvIPETl6kJ/rNuAp4CDPuUIicp2IbHQ+05+LSNCz/SJnfb2IfN35jGqc\nbb9x9v+jiLQDC/s7n4hMFpE/OHY3i8gKz/tcLCKbnXv3logc47HvZ463Wi8i14pIwNl2nHNvLhKR\nrcCtvVz794AmY8zpxphNzudQb4z5tjHmbec8C0VklWPXSyJyuMeu50RkqfN5d4jI70Skwr1fzvoZ\nzr5+5/M5V0TWOffuqj5vish8Efmz81m8JSKfcdYHReR1cUKFznlfFJEfeL4ztzmnecZZ50YRFjrX\nsa/nfaaKSFhEyvv+ioCxXVTdBhQCs5xjPyU2dNkiIs+KyP6e89aLyAUi8jrQ4dzPo4FbHFtmikiZ\niNztfBbr3Gtwjv+aiDwjIjeISBPwQ2fdCmddi4i8JyKHi8hXPd+pL3rO8Z+S+c1vEJEfebbNce7H\nlxxbG0TkQs92v1jPf41z/MsiMrW/ezOuMMbolOMJWA98uJf1dcBZzvz/Ar8HyoAi4BHgx862w4Gd\n7jmAacA8Z/5vwFed+XuBi5z5IHCk572SwGxn/i7g/7B/ArXAu8AZzravAFHgq1hRORvYvDvXCFwO\ndAGfdJZDwHeB54Cpjo23Anc526uBJuAjzvLHgO1AeR/vWQ8c4zn2TeBqz/blwG+BUqAYeBxY6mw7\nEdgEzAMKnM8uCdQ4238DNAOHez7P/s53NfAz7MNkAFjorJ8PbAAmO8u1wExn/kpgJVCB9dJeAhY7\n244D4s5nGABCvVz/KuCH/dyTic735r8cu05zPt8yZ/tzwNuOTWXO/NvAMc7+9wC3OPv6gRT24aLU\n+bxXA192tn8N+KszX+R8tl90vkMHO/dxH2f7Auez3QdY4tghnu/Mbc78HCDZ7Zp+AVzuWf4f4Ld9\nXL/XpoCz707HvsOArdhIgQCnA2uAgOe7tQr7Wwt5Pq8ve85/L/AwGTFdDXzJ895x4Ezn/CFnXRQ4\n1Vl3lfPduB7IAz7h2JfvnGMR8D5n/kCgkcxvaY5zP25yjj0Y+1ub42y/CPgnmd/8AmDCQPdmvEwj\nbsB4mOhb+F4kI1QdwCzPtg8C65z5XwDX9nFur/Dd6exb1ct+KWz4y+f8+Pb1bDvT8wfxFeA9z7YC\nrCBM2dVrxP6JPd1t3XvA0Z7laiDizF8M/Lrb/k8Dp/TxnvVAmzOlgD8BJc42ASJAtWf/o91rcz6r\npZ5t+9JT+H7l2T7Q+X6M/ROc3c3Gedg/2A8D/m7bNgDHeZY/6TnfcUBn92O6Hb/Ovfd9bD8dWNlt\n3cvAqc78c8D3PNuuBx7xLH8aeNmZd4XvQ57t5wF/dOa9InMq8Jdu7/srnO+6s/w94C2sENd2+870\nJ3xH4vwunOV/Ap/u4/pd8dmBFY2VwLHOtltxHjI8+68BPuj5bn2x2/a08GGFNI4jNM66bwFPed57\nTS/2vOlZPsj5zk3wrNsJzO/jepYDP/F+NjgPVM66V4HPeK7l+F7OMeC9GQ+ThjpHlipgh4hMxj41\nvio2vLgD+CP2iR2sOKwdxPm+hxW2l0Xk3yJyRi/7TML+aDd61tU5trhsc2eMMRHsn37x4C6pB/Xd\nlmuAxzzX+TqQEpEpWM/jVHebiLQAHwCm93P+E4xtw/kw1ruqcNZPxT5lv+Z5r8ew149zTq9t9XQL\n1XbbPtD5lmE/07+IDUVfAGCMeQ/r5V4GNIjIPc61ujb0dx8ajDHJfq69GeuR9MV055xeeryHZz7S\ny3L3+76p27l6uze12NCw9z7+Vzdb78T+eT9mjOluY58YY14A4mJD4vtjfxt/6OeQ54wxFcaYKcaY\nhcaYZzw2XtjNxqlkfzabepwtwxTsb62/+9f9uw89P9+kMWZnt3XFACLyQbFNGY0ishMrnJM8+2KM\n2e5Z7CRzv6qxD0bdGcy92etR4RshROQw7J/Gc9in3k5gf+dHWmGMmWBsMgzYH9Ccgc5pjGk0xpxp\njKnChihvEqddz0MT9km11rOuFti8Z1fUt1ndluuBj3qus9wYU2SMaXS23dZtW4kx5tp+zu+28a3A\nhp6ucdY3kPFsvZ+pK4xbgRme89T0Yqt3ud/zGdt2+z/GmFlYT+lCcdonjTH3GmMWYsNhAWyIC2AL\n/d+H7vZ052ng5H62bwFmdltXw57d6+pu59rSyz71WE/fex9LjTHne/a5GRtuP1E87Y7d6Ov67wK+\n5EwPGmPiu3YJaRuXdrOx2Bjz8CDeH6wHmWTP7t9A3Ac8hI3gTMAmww02E7yv/4zB3Ju9HhW+YUZE\nSkTkROyX+jfGmLeMjTf8Erje8f4QkSpxEliwX/gzRORDYpkuIvN6OffnRMR94tyJDU1lpYMbY1LA\ng8CPRaRYRGqB72BDe8PBLcBVIlLt2DxFRP7T2fYb4GQR+YiI+EQkX0QWuY3yg+B/gU+KyHznOn8F\n3CAik5z3miEiH3X2fRD4mojME5FC4Ee9n9Iy0PlE5ETPQ0Y7kMB6svs51xDECmeEzD25D7hERCY6\n9/1H7Np9uAaYJLacwf08Z4jI9SLyPmwb5HwR+X9OssOp2D/D/jykgfi+2KSOGuB84P5e9nkU2F9E\nThGRgIjkichh7nfWiUTsjw3F/g9wt/RehtIIGBGZ1W393cDngFOwIrg7/BI4R0QOdWwqdu7hoMph\njDEJbGj7ShEpcmz8b3b9d9SfkBUDLcaYuIgcAXxhF479FXCFZBLa/kNEJjDAvRkvqPANH4+JzWzc\niG14vgabQOJyITYu/5IT1ngK2z6EMWYVcAa2DaYVWEHmSdP7VHkY8HcRacMmypxvMrV73v3Ox3qY\n64BngbuNMbf3Y/tgnlwH+3R7LTaM+xfn81gJHArghLxOBhZjG9w3YP8Y+/qeZr2nMaYB+6e42Fl1\nATb89LLzmf4JmOvs+zjW63gWm9yz0jkm2s/1fLev82HbCP8qNgP0OeB6Y8zz2PDo1c71bMEmGLhZ\ntEuB14A3gH9h23yX9XGtPS/emGZsWzDAKufzfNJ5r3XGmCbgU8APsJ7+t7Gh4dZ+rnEgHnNsfRWb\nVHJnL3a1AR/HJtNsxV73lUDQedD6KTYJpMvYGtTXyHjq3vN0YL3jvzthuUOc9XXAv4GoMeal3bgG\njDF/B74J3OyErd/BJnykd+ntsG7L52CjJxuwbe23m0HU1A5wTu/yN4Flzn39AfDALhz7U+x/gPs7\nuwWbNNPnvdlFu8c0biaVooxrROQA4FVjzEgUfo96xNahxbEZqRsH2n8Y7LkTWGuMuWykbVHGHurx\nKeMWEfm0E+qpwHpavx9pm5SBccJ3n8LW5SnKLqPCp4xnzsGGAN/Dhn7PHVlzRj0jHh4SkSuxJQw/\nNk7RvqLsKhrqVBRFUcYV6vEpiqIo44rASBswWEREXVNFURSlB8aYXRrpZkx5fCPdzc2uTEuWLBlx\nG9TWkZ/Gkr1jydaxZq/amrtpdxhTwqcoiqIoe4oKn6IoijKuUOHLEYsWLRppEwaN2po7xpK9Y8lW\nGFv2qq2jizFTziAiZqzYqiiKogwPIoLZm5NbFEVRFGVPUeFTFEVRxhU5FT4R+bWINIjI6/3s8zNn\n4M5/ichBubRHURRFUXLt8d2OHQKjV0TkE8AcY8w+wFnAL3Jsj6IoijLOyanwGWNWAi397HISzkCS\nxo6PVSYilbm0SVEURRnfjHQbXxVQ71ne7KxTFEVRlJwwZvrqBLj00kvT84sWLRoX9SaKoihKhhUr\nVrBixYo9OkfO6/hEpBZ4zBizoJdtvwD+Zox5wFl+BzjWGNPQy75ax6coiqIAULd+PXcsXsyl99wz\nKuv4xJl641HgywAicgSwszfRUxRFURSXuvXrWf7Rj3LBPffs1vE5DXWKyL3AImCiiGwElgBBwBhj\nbjXGPCEinxSRNUAYOCOX9iiKoii943pQqc2b8VVVcfrll1M7a9bQnNwYO6VSmamv5WQSEgk7tbZC\nSwu0tdmptRXa2rjjrrtYunYtRbtpTk6Fzxhz6iD2OTeXNiiKoij943pQrpiEgSUvvsh5TzxBbU1N\n30LlClQiYde58+3tVqTa2zOiFQ73PnV09D4fiUBBARQVQXGxnUpKoLiYVEPDbosejLHkFkVRFGUX\ncD2o7lMqBbFYerrjO9/J8qCKgKXr1nHNaaex5L/+ywpYOAydnRlx6uiwy17BctcFg1awHKFKv3qn\nGTOy1xcVWaErLob8fDuJWHvd/A4RMAbfkiWEn3xydHp8iqIoyhDhFS2viCUSGRGLx+1rIgE7dmSH\nCXfuTIcK06/OlFqzpoeIFAGpd9+FJ5/MFq/Kyr4FraAACgvB58vYaUzmVTzpHu6yK2qBAOTlZb8G\ng5l5nw/8fvD5OP3661lywgksXbdutz5KFT5FUZQc0Wu72cyZfXti8Xi2eMVi1ttqasoWrd7muwta\nfj5MmABlZVBebufdado0u95Z9t18M+G//jVL/MKAb+FCuOKK7PCmK1bdX8GKlIgVKlfA3CkQSAtX\nj1efL1sUB6B2v/047+mnuWbxYtiNBBcdlkhRFGVPcdu7PIkZdevWsfwzn2FpXV2m3WzaNM676CJq\n8/Mz7WDeyStg7pRMWoFyxcsjWH1OZWVWTLwelyteyWS2aAF1mzax/PzzWbp5c8bW6mrOu+MOaufM\nyXhffn/f4uX3j8hHvzvDEqnwKYqi9IVXzNzXeBy6uiAatR5ZV5cNKW7fDg0N0NgIjY0s/dOfuGDL\nlh5e1DVFRSyZOzdbpNx5r2fmrg+FMt7WAAKW5YH1Fi4MBu3kCpVHyOo2buSOSy8ltWULvunThzar\nM4fsjvBpqFNRlPGFm33oTZtPJKyAxWJW0OJx+5pKWc/MI2hs3555bWiwk98PU6dmTalQqPd2s/nz\n4dZbswUMem//isXsPnl5VrAKCwcUsPT8LlI7dy5L7r57tz/WsYQKn6IoY4o+2826e2ZuG5lX0Fwx\nc2ltzRY0d2pogG3b7Gtenm0Tq6zMCNsHP5gtdMXF2SIaj+NbvZrw+vU9283c5JAcCZgyMBrqVBRl\n9OOISd3q1Sw/6SSWbtiQaYuaMYPzbriB2hkz7L7u/0RLCzQ3Z8SssTHjobnClp+fETSvuLnzlZVW\n1FwbvJP3vcCeq6Ag/Vq3dSvLP/1pljriFwaWzJnDeX/+85gIIY4VtI1PUZSxiTej0W1D6+y0Rcxd\nXWmBWXrJJVzQrX4rDFwzZw5L5s+3grZ1q30tLMx4ZJWVVsy8y1On2n28NrhteIlEz7azUCgjboWF\n1lPzZi72kpWY9k7HWLvZWELb+BRFGZ2kUtnCFo1aYevqsuLmLVJ2929stCK2dSvU10N9Pannn++9\n3SwahYULs4WtoCB7R2/JgBsGjUYz24NBK2wlJfbYUCg7Fd+3610b186aNW7azcYSKnyKouw5xmQL\nWyxmBc2dYrHMvq5nFA5bz2zLFti0KS1u1Nfb0OTUqVBTY3v4qK6Ggw/GF4sRfvbZnu1mBx8Mn/pU\nxmNz2/a8HlsgYAVtwoSMx+atM9sNYVPGJip8iqIMjFun5vWWvMLW1ZXZ1xvya262wrZ5c7aw1dfb\nc9bUWFGrroYFC+CEE+z8tGlWqLrZcPq8eSxZt46lmzZl2s2qqjjvjDNsd1kFBbYMwG1r6148rSho\nG5+ijHvS7VCbNuGbNo3TL76Y2qoqK2huO1s0mh2KBCsmkYhNEtmyBTZuzBa2bdtg8uSMsFVXZzy4\nmhorUN3bxVzP0RXZVCrba8vPp665mTuWLyfV1GTbzZYupXaffVTYxima3KIoyuBw2rfq3n2X5Z/9\nLEs3bsz2oH72M2pra63oNDdn2tk2bcoWuFgsW9i8Ajd9ug0ndscbFnV79YeMwLnJI4WF1mvzhiR3\noVsrZXygwqcoSjbGZOrXOjttMXZ7e7pous8sycmTWVJUZD25CROyQ5Jecauo6F2M3CJxt89J1xYR\nO7niVlSUSSJxsyRV3JRdQLM6FWU8k0xmRK6jIzMGGmS6u9q61Xps69fDmjWkuiWKgJMlWV4O118P\nVVXW6+rr/dwRAeLx7M6K/X4rbOXltg7O9dpccVOUEUS/gYoyFnFLAiKRjBfnJpjEYtZTq6+3Ard2\nLaxZY8OU06bB3Ll2Ou44fOFw71mS++4Lc+ZkuvJy29y87W15eVbcSkvta/f0f0UZpWioU1FGM8Zk\nUvNdkWtrs0IUjWba2zZsSHtxbN5sE0hcgZs714rYrFlWnDzU1dez/IwzWFpfn93Gt3w5tdOn2/29\nbW6u15aXp8kkyqhA2/gUZSzjDVWGw1bgOjqs6NXVWWGrq7Mit26dDVtWV1tR22cf+zp3Lsyc2TOp\nxFuKkEhkeW51TU3cccstNkuyqorTL7mE2nnztLZNGROo8CnKKKHXjpS9XVW5ocqurkyocseOjMBt\n2JARuMZGqK3NCJs71dZacXLpTdzc30x+fsZrKyjI9txU3JQxjAqfoowC6tavZ/lHP8rStWsz4cNZ\nszjvgQeonTDB1retWWNFzStyTU3WW/N6b3Pn2uxJt83MK2wDiZu3DEDFTdlLUeFTlJHE6Spr6emn\nc8HDD/csEZg0iSV5eXbUgFmzsr23uXNtu1wgkF3A7R2rzSngVnFTlAxazqAow4HbFheL2ba4nTvh\n7bfh3Xdh7VpSTz3Ve4lARQXceKMtEXDr3Lzi1tHRU9zchBI3NKk1boqyx6jwKUpfpFKZHvy7uuyg\npRs3wltv2RIBt0ygrs52zbXffjBvHr599iH86qs9SwRmzbKp/21tGXErKurZ5qbipig5RUOdiuKW\nDLhlA+3tdnSAt9/OiNuaNXY+lYJ997XTvHn2dc4cK1pOMXfdli0sP+88lm7enN3G9+ijmWxJFTdF\nGRK0jU9RBsLNpozFMjVxrrCtXp3x5LZts4kmXoHbd1/bRZc77I2XoiI7jltxMYRC1G3Zwh1Ll+oA\npIqSY1T4FMXFO9BoOGzbz7Zute1wrtCtW2dFrqwsI27uq9tBs9sll0swaMWttDQzWKm2vSnKiKHC\np+y19FkXl0plPLjOTitwLS3Z4Un3tb29pwe3zz5WyNxQp/c7VlRkt5WUWIELhbQrLkUZZajwKXsl\nvdbF1dRw3k03UZtKZYTNnTZutEPidG+Lmz49u2NlsJ5aIGDFraQk48WFQurFKcoYQIVP2fuIRll6\n2mm918UFAiwpK8sWt3nzbE1cXl7Gi3PHe4NMW5x6cYqyV6B1fMrYJ5WyIcvWVtvZ8osvknrmmd7r\n4hYsgHvvzSSbuKMHuKMJlJTAlCmZkQPUi1MUBRU+ZTTgJqA0N8O//w0vvAAvvQT/+hfsuy++igrC\n27f3rIubPNkWjxcW2mxLrxfn7cNSURTFg4Y6leHH9era2uyQOi++aKeXXrJD7xx9tJ2OOgqKiqhb\nu5bl3/xmz7q4J56wdXHaVZeijFu0jU8ZvbjdezU3w+uvw/PPW6F77TXb48kxx9hp331tyDISsccF\nAjBxInVtbdyxbBmpbdu0Lk5RlDQqfMroobtX54YvX3zRtsEdfbQVuqOOsqHKSMRmXBpja+QmTbKl\nBPn52i6nKEqfqPApI4vXq3vttWyvbv78bK/O7f8SbAH4xIkwYYIVQc2yVBRlkKjwKcNLKmU9tdZW\n2LTJCp3r2UWjGaE78siMV5dI2GMnTLBiV1SkXp2iKLuNCp+Se1yvrqnJenIvvGDDl6+/DvvvnxG7\nefOyvbpQyGZeTphgxc7vH9nrUBRlr0CFTxl6jMluq1u5MpOBGYtle3X5+Zm2Osh4dW5bnaIoyhCj\nwqfsMslUkrZoGymTQtxwo9PvpexowffvN8h74SXy/r6KwBtvkZz/PuILjySx8ChS+8yBaBcSc7r/\nctrqpKwMCgrTXp14wpiCZ75beHOw2wK+AH6feoyKoqjwKbvIG+++zi8v+gGytYHk5HI+fNYpzPBD\n6cuvMWHVG5S98ga+ZJKdRxxE6xEH03bogSTzg5hoFEmlbLtcSQmmtAQpKIRgCIPJFi3jnc3eZoxJ\nC9pgt7nfgfxAPkXBIkqCJRTkFRD0Bwn5Qz0EU1GUvRsVPmVQRBNRXnh9Jb/9zFf4SV2mKHxxMMh5\nIlQesC/hIw8jfOShxGbXZvq8BNtWN2EClBRDfsGItdUlUgliyRixZMyKpAgGQ1GgiOJQMSXBEkKB\nEEF/kKA/OCI2KoqSe0al8InI8cD1gA/4tTHmJ922lwJ3AzWAH7jWGHNHL+dR4dtDUiZFQ0cDG3fW\ncc85i7nqsad7dAO25LijOfPy79ukFGOsV1damik1CI5eETHGEE/FiSVjxJM2/Coi+PBRHCymOFRM\nUV4RoUCIkD+k4VJF2QsYdZ1Ui4gP+DlwHLAFWCUijxhj3vHsdg7wpjHmUyIyCXhXRO42xiRyadt4\noy3axvqW9XS1t1Dx3kZKVq7qteNnad5hyxQqK21SSkHBmOkSTER69fBSJkUsGaOho4FkKpkOnQZ9\nQYqCRZSGSskP5Kc9RJ+MjetVFGX3yHWl8OHAamNMHYCI3A+cBHiFzwAlznwJ0KyiN3REE1Hq2+rZ\n3rKJkm07mX3bA1T89g+YinLCLa09PL7UrFrbhdhehE985AfyyQ9kZ5YmUgnC8TA7u3ZijMFgQKAw\nUEhxMBMuDQVC5PnytP1QUfYSci18VUC9Z3kTVgy9/Bx4VES2AMXA53Ns07ggZVJsD2+nrmkN/h0t\n1D62gkm3/IbovnPZeMcNfDQW46L/XsJVWxvSbXwXzazm5B/9z0ibPmwEfAECvgB4BnJww6UtXS1s\nD2+36zD4xAmXOlPQHyQUCNnjFUUZU4yGX+3HgX8aYz4sInOAP4vIAmNMR/cdL7300vT8okWLWLRo\n0bAZOZZoi7axvnktXdu3MvnlN5h601342zto+NF3iLx/AXR0UFU4mZMf+jWX/O8t+BoaSVVO4eSL\nv01VbfVIm98r9RvrueEXN9DQ0UBlcSXfPvvbVNcMva39hUvjyTiN4Ua2dGxBjE2mCfqDaTEszCtM\nC6KGSxUlN6xYsYIVK1bs0TlymtwiIkcAlxpjjneWfwAYb4KLiDwOXGWMed5Z/gtwoTHmlW7n0uSW\nAYgmotS3bmT7tnWUra5n+m0PUrxyFc1nnkbrScdDlzPiQXW1TVYZI6G7+o31nHHxGdQfUg9BIAbV\n/6jm9itvz4n47QrJVDKdXZoyKQQriAV5BRTnWUEM+AP4xY9PfPh9/qx5FUhF2TNGXVaniPiBd7HJ\nLVuBl4FTjDFve/a5EWg0xiwVkUrgFeA/jDE7up1Lha8P0mHNLW/h37SZ6of/TMV9v6f9+A/T/I0v\nkgoFbZbmpEk2aWWMDdJ6wcUX8Nikx6zoucTgP5v+k2uuvGbE7OoPN7M0nopnyi3c2kTJ1CMCBP1B\n8nx5BHwB8vz2NegPkufPwy/+tEB2n9c2R0UZhVmdxpikiJwLPEWmnOFtETnLbja3AlcAd4jI685h\n3+8uekrftEfbWbftbbo21zFtxatU3noPiWmVbLr1GmI1VdDRYbMy582z5QijgFgyRkukhZ1dO3ud\nWrpasubrV9fD9G4nCcLzG59n+d+XM7t8NrPLZzNzwkwK8gpG5Jq6M9j6QWMMKZMiaZLEU3G6kl2k\nTMquSyVBSIdVRSTdIYARgw8fQX8Qv/gJBjLi6YqmK5Be79IVT0UZz2gB+xglloxR37SOxo1vUfHv\ntVT98n6CWxrY/p0zCR95mO1IGvoNa+5pu5kxhnA8bIUq0r+AedfFkjEm5E/ocyrPL8+av/4n1/NU\n5VM9PL6D1x3MEacdwbqWdaxvWU9dax2TCicxq3xWWgxnT7Cvkwon7XUekjGGpElmCaU774ZdXe/S\nDcG6nqfrXXrFMuALkB/IT3udAV9As1mVUc+oC3UOJSp8lpRJ0dTewIZ1/yS4fgM19z5B6dPPseP0\nz7Pzvz6VGSpo8iSonNpnWLO3drOqV6u4/AeXkz8p3wpVpH8R29m1kzx/3oDi1X1dcbB4l/5MB9vG\nl0wl2dy+mXUt67KmtS1rSaaSGTF0plnls6gprSHPP7ZCv0NBd5F0BTSZSmZ1FYdA0BdMl4O4kzcs\nq5mtykiiwreX0x5pZX3da0Q2rKH6yReYctfv6Dj2CJrP/grJshIb1iwogBkz7NA//dBXu1nRqiL2\n+cw+lBfJ+G2mAAAgAElEQVT0FK7eRCwUCOX2oh1c77Qx3MiUoim77J3uiOxIe4ZpUdy5jm0d26gq\nqeohirPLZ1MaKs3hFY0dEqkEyVSSRCpBIpUgRQqric5/jZAWxIJAQdpr9LZbahKPkitU+PZSYskY\nmza/TePa15n8yjtU/fI+UiXFbP+fs4nOm23DmsZAVZUd824Ab6o92s6JZ57ItsO29dj2gdUf4K4b\n7srVpYw6ookoda11PbzE9TvXU5hXyOwJs7NDp+WzmV4yfcA/8uEqvxgNGGPSopg0ViC9CT1gayZD\n/hAFeVYYC/IKssKpAV9AQ6rKbjHqkluUPSNlUjRt38iG1S+Tv3o9+9/xCPmr17H9/K/T8eGFtuPo\n1tZMtuYA/WgmUgkeeushfv7yzyn0F0KMHh7flKIpOb2m0UYoEGLexHnMmzgva70xhoZwQ5YYrtiw\ngnUt62iNtjJzwsysNkRvck1WaHY6EIN/XfyvUVF+kQtExHp4/YSMUyZFIpWgPdbOzq6dJFKJ7HZH\nDCFfKN11nFsTqSFVJReoxzdK6WhvZt27L9FVv55Zv/sbFY/9mZZTP0PLqZ/B5AVsWDM/3yavDBDW\nBJsBedXKqygvKOfihRdTHCketbVxo52OWIcNme5clxU+3di6kUmFk4j9Jcb2g7b3eKg4dvOxLF6y\nmKK8IgrzCkfNMEqjxTt1Q6rxVNy2QXpCqm7vOaFAKB1SdftV9YkPEUGQIXlVxhYa6twLiEU72bz2\nX2zb8AZVz/yT6bc/ROdhB9F0zhkkJk/MDmuWlw/YgfS6lnVc/fzVrG1Zy4VHXchxs45L/7j3tN1M\nySaRSrC5bTPnfv9c3lvwXo/tBc8VUPHJCjrjnXTGO4mn4hTmFaanoryitCgWBgt7bOuxHOy5viBQ\nkJPEodFA95Cq2+F4+n/BKf1AsGUfu/BqjEkvu2LqFVUfPnw+X/pVkB779TZ5BdX1Wv3i19DuEKLC\nN4YxySTb69+hbs2rFL+5mpm/fBAQtn/3bLoOfB9Eo7YIfeLEQYU1d3bt5MZVN/LYu49x5vvP5LQF\np+m4dMPEYAvuE6kEkXiEzngnHfEOOmOdaVF0p3A8nPXq3Se9zjMfTUQpyCtIC2JRMFsYu4voU7c9\nxZtz3+xh64lNJ3LtldcO22c2mnA7LO/+ujvbgLSgup6ruy7oC6ZHBAn5Qz1KSVQgB4cK31jEGDoa\nN7H+nZeI1dcx5+4/UPTPN2g653Taj/+w9e7CYTsAbPUMKCru93TxZJz737ifm1+5mY/N+Rjnf+B8\nKgoqhulico9bnzaa/wxG0otKppJEEhHCsXD/AuqI6CO/eISGwxt6nEdWCDUn1VBZVMmUoilMKZ5C\nZVEllcV22V2vD1O7TzKVTCcDufPpDgpUIAeNCt8YI75zB5veXUXjtjXUPL6SKQ/9gZ2fPYEdX/k8\npiAfOjttXd4gw5rP1D3DspXLmFY8jR8s/EGPhI2xRCKVSHf5lUwl0+vdbEpvgTaQzg4cLanzYyWM\n3Jd3enzj8Zx/4fk0hhtp6GjIfg030BBuoLmzmZJQSVoIXTGsLK7MEsny/PJx+6c8FPQnkJBdb+kK\nZH4gn5A/NC4EUoVvjGA6O2le8zrrN79J+d9fo/bWB+iaP4/t532dRNVUG9aMRGxYc+rUAcOaq5tX\ns+z5ZWxq28RFCy/i2Npjx8SX2x0CyNunpUvIH8pqw3K7AMvz56Xbetxjo4konQnrxUTikfQfg/vU\n7P3xa2ZgNnvinSZTSXZEdqSF0BVHd76xw4pkJBFhcuHkbFHsJpJTiqYMuru50ZKMM9oYSoEcSx2o\nq/CNdmIxwhvXsn79PzBr1zL71ofwd3Sy/btn2+GCUimbrTnIsOaOyA6Wv7ycP635E2cfejanHnDq\nqOyFxB3SxxUqb+FzQcC2RxUHi9M/xqA/uEf9SbqZgW5H0Z3xTiKJCJ2xTqLJqPPWghGTfgoez91z\n5do7jcQjbO/cniWK7nxaJMON5Afys0TRDa+mPcriSiLbI3ztR18bE8k4o5XuAumWlnhxHxp94iPg\nC+Dz+fBjfyuuKLrz7m/I7/Onk35EspN/els/VKjwjVaSSeLbNrNl9T/Z3rieWff8gbKVr9J81pdo\nPenj4PdbwTMGpk+3Rej9hDVjyRj3/vtefvHKLzhx3omcc9g5lBeUD+MF9U738KT7Y/L7/DZjMWin\nPF9eWuCGW2i6i3AkHkl7i12JLruT4y2KSDp8GvAFxswT8FjEGENLV0s6lOp6i91FsuWPLZgjTY/Q\n7CHrD+H7F3+faSXTmFw4WTviHiLcTtRTJpVO2HHnUyaVtez+P7u/6fRoJGR+T97/cNezdMUzvey8\neoXVK6rdBbQgr0CFb1RhDKa5mebVr1G3YwOT/7iC6Xc/StsJH2HH108lVVJsi9A7O63YTZvWb1jT\nGMNfN/yVq1deTe2EWi486kLmVMwZxgvKhCddb8pLfiCfwrxCioPFFOQVpMVtrIQX3RBqLBkjnnJC\nqB5vMWlsW6Obnach1OHntPNPY9W8VT3Wl79YzoyTZrCtYxs7u3YyqXASU4unMq1kmn0tnsa04mnp\ndRUFFfogM8L0Jpx9iWxfopoyKT5Y80HtuWXU0NZGeM1bbGheh//Vf3DATfcRr51B/a+uJT6z2oY1\n29psWHPePgOGNd9peodlK5fRGG7kh8f8kGNqj8mp+W64MJ6MkzCJdFuBiFAYKKQ8v7xHeHKs/5EM\n1AOJ16ONJWLp7MhIIkJ7sj09bJDBZNpLnCdVLZQeGqYWT+21x6GFtQu55r9sqUgsGaMh3MC29m1s\n7djKto5trN+5nhfqX2Bbh13XGe+ksqjSimHJ1IwoFk9Li2VZqEzvUw7xiQ8E/Oy+dx5NRHfrOPX4\nhpi69eu57bvfpWv9arry/XwjEmOf1g62f+csOo881O4UDlvhG0RYs7mzmRv+fgNPr3uacw47h88f\n8Pkh9y4i8QixZCyrHinPn5cOT2Yll4zTdrCBcEOorrfo1udFE1GSJDEpW9vl9kjiLZhOj7O3i4XX\nRkzWA0lvwtqf6I5FQR6qUpFIPMK2jm1pIdzasTVLKLd2bCWZSvbrNU4tnkpxsP8HVk3EyS3RRJQF\nUxdoqHMkqVu/nuXHHcfS9espAsLAj8pK+dRt11FVM2OXwpqxZIw7X7uTX/3jV3x630/zrcO+RVl+\n2ZDa62ZBuiMx5Afyx1x4cizTVzH07rx6hxjqazIYUqkUKVLpV++xSZPMGiXetVFEerS/jOQI8MNV\nKtIR62Br+9YsMUyLZbudD/gCTC2emhZG13ucVjwNs9Ow+CeL2XTIJk3EyREqfKOApV/8Ihfcey/e\nnjPDwCUfX8RZ3/+WDWvOmAHFfT8lGmN4au1T/PSFn7LPxH34/pHfZ1b5rCG1M5qIEo6FKQ2VUjOh\nZsCnVmX84HYm7R2GKJFKEE1GiSaiRJNRW0KS9ISYuo0K310g99ZEE2MMrdHWtBBmCWT7Nt548A06\nD+/sEZatfbOWE888kYqCCsrzyykvKM+a104BBs/uCp8+1g8hKcfT81IE+Bq2Ww9v0qR+w5pvNr7J\nVSuvojXayuUfupwPVn9wSO2LJWN0RDsoCBbwvsnvozRUOupDW8rw4hOf/eMdhFa54uhNjY8lY8SS\nMboSXUQTUbqSXcRSMcRkjwAPZKXFe1/HCiKSHp9yv0n79dj+pRVf4uXgy9krPZq2tmUtLZEWdkR2\n0NLVQkukhZauFkL+kBXCgnLK87NFsfu6ioIKSkIlQ/K5jaewrArfUNHZSaqjjTD08PhSs2phSt/D\n/TSGG/nfl/6XZ+ue5fzDz+dz8z83pE/JiVSC9mg7QX+QfSbuQ0VBhQqesse4qegDYYzpUTeWNEmi\niSixZIxoMkosESMcC5MwznBFTsjVbXfuLo5joQeSyuLKXhNxFlQu4PwPnN/rMcYYOmIdaTHcEdlh\nxbHLvq7fud4KpGddJBFJDw7tFci0YLpC6VnXfQDpcTeU1mgPH7qM6lBnKoX5299Y95lPc0MoxFXb\nm9NtfBfNrObk395OVW3PL09Xoos7/nUHt//rdj43/3Oc/f6zKQmVDJlZyVSS9lg7PnzUTKhhYsHE\nvTbspOwdpEwqq8DaFcuuRJcVyUSUWMq+pkwKsEk6ef48QoHQqGqbHq4+W2PJGDu7dmaJYdqD9Kzz\nepZ5/rysMOu6361j04Gbeoj0R7Z9hBuW3TCqPlcv2sY3kmzeTOxzn6HxfdWsPuF4Hr/5LnyRLlLT\npnLixd/uIXrGGP645o9c88I17D95f7531PeoKasZMnOMMbRF2zAYZpTMYErxlFH7xVWU3SWRStCV\n6CISj9AWbaM92p7VM89oEMPR2GerMYZwPJwlhj+54iesO2hdj30DzwTgQ1AWKmNy0WQmF07OvLrz\nnuXBdjs3VKjwjRThMKkfX0HXbx9g3W3XEozEYPZsKOs9A/P1hte58rkriSajXLTwIg6vOnzITHHD\nJIlUIp1yrQ3lynhiLIjhaKS/obSWXbGMHZEdbA9vZ3unM4Uzr02dTTSGG9neuZ2gP5gtis7rpMJJ\nTCmakl4eihrJ+o31XHfzdTzxyydU+IaVVAqefJLUqafwxvLF5FfV2lEUqns+0W3r2MZ1L17HC/Uv\n8N9H/Dcn73fykIYdw7Ew0USUyUWTqSqtIj+QP2TnVpSxjIrhwAxFWNaNNDV1NtHY2WjF0RVGd7nT\nLkfikR7C6HZkPrkwI5QTCyf2el+y7L0SFb5hpb6e1KdPYvMR+9N+6ucIJFPUFxRxw69+ns6MOuvr\nZ/Fk05P85rXf8IUDvsA33v+NIS0fcAulKwoqmFE6g6Jg97xSRVG6o2LYk+EMy3YlurI8xu3h7Wlx\nbOpsSm9r6WqhLFRmhbFoMlMKpzC5aDIrf7MyM4DypSp8w0c4DIsXE/3LU7z288VMiEJ9fiFn/Pic\nrKcm/zN+jv5/R7P4U4uZUTpjyN4+lozREeugOFhMbVntkCbFKMp4RMVw9OEOfeUKYWNnI02dTdz7\ns3tpPLzR7nTprguf3sHdIZmEp5/G3H47b9+ylNIYUFnJDT+/LiN6AEFIHpuk5K0SZpw2NKIXT8bp\niHWQH8hnv0n7aX+CijJEBHwBioPFFAeLmVw0GehdDNuT7YCK4XDg9/nTCTRMzqxfO2Mtj8W6tUnu\nAnq3dof6evjhD2k68zRSlVPwBQqgspKGjgZbA+MlaOv09pRkKkl7tB2/z8+c8jlUFGrv8oqSa1QM\nRyffPvvb/Ovif1lHYzfQO7OrdHTAT35CoriItSd8kIq4D2bXgN/PlOIpvRasTinqu3h9IFImRVtX\nGyJCdVk1U4qmaC2eoowguyuGbk813knZPaprbOLNdTdfxxM8scvHaxvfrpBMwu9+hznrLFbfeS2R\n/DwKqmqhshKAB55/gMt+ehmJYxJ7XLBqjKE91k4ylaSqtIrKospRObq6oii94xXD9mg7CWOHtfL2\ngeriba7w9lrjdhDefURzFU+L1vENB2vXwic+QeeXT+H1I+dQUVABc+eCz0dXootP3vNJvr3vt3nu\n0ef2KDOqI9ZBLBmjsqiS6SXTe3QvpCjK3kEylewxikbSZNYlkgniqWyxjCfjWT3bdG/j7z7yefdR\ny71COpKjbAwF2kl1rmlvh8svx8yYwXsfWkBxJAo1NelOp2999VYWVC7gpCNO4qQjTtqtt+iMd9KV\n6KKioILq0uph7wVBUZThxe/z79FArN2HpPKKptv9W5ZopuIkknY+lozZLuFIZoTSI5qIDeu6w5Tt\nTd6lCt9gSCbh97+Hxx+n+cE7iLZtpXD2/pBvi8TrdtZxz7/v4ZEvPLJbp48monTEOigLlTF3ylwd\nJkhRlEGRHitxiMTTFc5EKmGHL4uHCcfCtEfbSZlUWhRFbLtlni9vTHQY3h0VvsGwZg0sXkziRxez\n3rRQUjENJk4E7Jfmiueu4BuHfIOpxVN36bTuMEGFwULmT56vwwQpijLseMUzD08eQQgme2oI4sk4\nsWSMeCpOJB4hHA/TGe+kI9qBmExoNeALpEVxtCbiqfANRFsbXHop7L8/2xYehNlRR6BmJjgC9Zf1\nf2Fz22a+/MkvD/qU3mGC5k2cR3lBuQqeoiijmjx/XjrBbkL+hPR6Y0xaEGPJGJ3xTsIxK4qxZCxr\neKk8f96oCJ2q8PVHIgEPPgh//Stdv3+YzdvfpWzu/hC09QqReIQrn7uSHx/340F1Bp1MJWmLteHH\nz6zyWUwqnLRXxc0VRRl/iAihQIgQNgmvoqAivS2ZSqYF0Q2ddsY7aY+2pwckdhNw8vw2bJrny8u5\nI6DC1x/vvAOXXAKXXcamWDOBCRX4yjM39dZ/3Mp/TP0PPjij/5HSvcMEVZdU6zBBiqKMC9zBivMD\n+b2GTl1R7Ep0EY6FCcfDtEZbwVhBRCAggXT4dKj+N/Xfty/a2uBHP4IjjyT8gYPZ3vgGFfsclg5x\n1u2s495/38ujX3i0z1N4hwmaVjyNqSVTdZggRVEUMqHTwrzCrPXGmLQguqHTzngnnbHOdKcAQFYI\ndVdR4euNRALuugtWrcI88gh1je9RUDsXCVlX3k1oOfOQM6ksruz1FDpMkKIoyq4jIgT9wbST0F/o\ntDPeuVvvocLXG//+N1x+OVx9Na2xNlrLgkyclMnYHCihZWfXTkpDpcybOE+HCVIURRkiuodOdxfN\nrOhOayv84AfwsY+ROuRgNkS3UVI9N73ZTWhZfOziXrsQiyai5PnymFsxV0VPURRlFKLC5yUeh1tu\ngXffhe9+l6bmeqLTpxIMZWLQt7x6CwdNPajXhBa3TW9OxRxNXlEURRml5Fz4ROR4EXlHRN4TkQv7\n2GeRiPxTRN4Qkb/l2qY++ec/4eqr7egLkTAbS6GkIhPi3LBzA/e9cR8XHtXrZdDa1cq04mmUhkqH\ny2JFURRlF8mpWyIiPuDnwHHAFmCViDxijHnHs08ZcCPwMWPMZhGZlEub+mTHDvje9+Czn4X99mNb\n5zZSkyamPTdjDJc/ezlnvf+sXhNaYskYAV+AGWVDN8q6oiiKMvTk2uM7HFhtjKkzxsSB+4HuPTif\nCvzWGLMZwBjTlGObehKPw89/Dlu2wDnnEA23smVyiNLCTO8ET697mm0d2/jSgi/1ONwYQ3u0XUOc\niqIoY4BcC18V4B0id5Ozzss8oEJE/iYiq0Skp7Lkmpdeguuvh5/+FCIRNlUE8BUWp3tVicQjXLny\nShYf03tCS1u0jcriSsryy4bbckVRFGUXGQ3uSQA4BPgwUAS8KCIvGmPWDMu7NzfDBRfAl78MtbWE\nJc72QigPlqR3+cWrv+CQqYdwxIwjehweS8bwiY/q0l0bc09RFEUZGXItfJuBGs/yDGedl01AkzGm\nC+gSkWeB/wB6CN+ll16anl+0aBGLFi3aM+tiMbjmGujshK99DRMOs7EqRH5eMN1X3PqW9dz/xv19\n9tDSHm1nv0n76ejoiqIow8CKFStYsWLFHp0jpyOwi4gfeBeb3LIVeBk4xRjztmef/YDlwPHYksS/\nA583xrzV7VxDPwL7X/5ik1nuuw/Ky2mtmsTbNFFRaHsKMMbw9Ue/zsKahZxx8Bk9Dm+PtlOWX8bc\nirk9timKoii5R0RG1wjsxpikiJwLPIVtT/y1MeZtETnLbja3GmPeEZEngdeBJHBrd9HLCdu32xDn\nN78JlZWkCgvYkBemSDJF539e92cawg2ctuC0HofHk3FSJkVNWU2PbYqiKMroJace31AypB5fLAbf\n/z48/zzcfjt0dtK0TxVrw5soLygHoDPeyQn3nsCy45bxgRkf6HGK5s5m9p24b9o7VBRFUYafUefx\njUqMgaefhjvvhIcfhvZ2EnNnUxfZRHGwOL3bLa/cwiHTDulV9Nqj7UwsnKiipyiKMgYZf8LX0ADf\n/S585zswYQKUltIYTJCMJdMJKutb1vPAmw/wyBce6XF4IpUgaZLMnDBzmA1XFEVRhoLx1VdnNApL\nlsDEiXDyyWAM0RnTqG/flO5mzBjDFc9ewdmHnt1rDy1t0TbmlM/RcfUURVHGKOPH4zMGnngCHnoI\nfv976OiA+fPZ0rUdv8+fLlZ/au1TNIQb+OKBX+xxio5YB+X55VnjQymKoihji/Hj8W3ZYrM4L7oI\n8vNh6lTCBQEaOhoocYrVO+OdXLXyKi459pIedXmJVIJEKsHMCTPTNX6KoijK2GN8CF80ChdfDLNn\nw8c/Dnl5UF1NfVs9oUAoLWQ3r7qZQ6cfyuFVh/c4RVtXGzMnzCQU2IPRDxVFUZQRZ+8PdRoDv/sd\n/OEP8OijEA7DAQfQmgjTEmlhYuFEANa1rOOhtx7i0VN69tDSEeugLL+MyYWTh9t6RVEUZYjZ+z2+\nDRvgwgvh0kvB74cZM0gVF7GhdUO6fMGb0DKlaErW4clUkkQywazyWRriVBRF2QvYu4Wvq8uK3kEH\nwdFH27a96dPZ0bmDSDySDls+ufZJtoe399pDS2u0ldoJteQH8ofbekVRFCUH7L2hTmPg3nvh2Wfh\nkUdsR9QLFpAQQ11rXTqhJRwLc9XKq7jmo9f0GEsvHAtTGizt4QUqiqIoY5dBe3wislBEznDmJ4vI\nrNyZNQSsWQM//CFccYVdrq2FoiIaOxpJmEQ6a/PmV27m8KrDOazqsKzDk6kksWRMQ5yKoih7GYPy\n+ERkCXAosC9wO5AH3A0clTvT9oBIxPbOcswx8P73QzAIU6cSS8bY1L6J0qAtVl/bspaH33qYx055\nrMcpWrtsiLMgr2C4rVcURVFyyGBDnScDBwP/ADDGbBGRkv4PGSGMgdtug3/8wxaqx+Ow337g87G5\nZTM+fPh9/nRCyzcP+yaTi7KzNTvjnRSHinvtuUVRFEUZ2ww21BlzhkYwACKesXtGG++8YzM4ly2D\nRAJmzoSCAjrjnTSEGygJWb3+09o/0dTZ1KOHlpRJ0RXvYnb57HRvLoqiKMrew2D/2R8UkVuACSLy\nDeBp4Je5M2s3iUTg/PPhhBNg/nwoL4fJ1purb60n6Lcjq4djYZatXMaSY5f0SGhp7WqlpqyGwrzC\nkbgCRVEUJccMKtRpjLlGRD4KtGHb+S4xxvw5p5btKqkU3HgjrF2b7e2J0BZtY0dkR7pY/aZXbuID\nVR/g0OmHZp0iEo+Qn5fP1JKpI3ABiqIoynAwoPCJiB942hjzIWB0iZ2X11+HK6+EW2+1A83Omweh\nEMYYNuzcQFHQRmfX7ljLb9/6bY+ElpRJ0RnvZEHlAg1xKoqi7MUM+A9vjEkCKREpGwZ7do9wGM49\nFz7/eevlTZ5shx4CdkRssXp+IB9jDJc/e3mvCS2t0Vaqy6rTAqkoiqLsnQw2q7MD+LeI/BkIuyuN\nMefnxKpdIZWC666DpiY480y7XFsL2Fq8up116a7J/rjmjzRHmnsktHQlusj35zOteNqwm68oiqIM\nL4MVvt850+jjlVes8N15p+2ibP58O/oC0BhuJG7iFPuL6Yh18JPnf8K1H7s2K6HFGEM4FubAygPx\n+/wjdRWKoijKMDHY5JY7RSQIzHNWvWuMiefOrEHS3g7nnANf/SpMnWpDnGU2IhtLxqhvq08Xq9+0\n6iaOqDqiR0JLa7SVqpKqtFeoKIqi7N0MtueWRcCdwAZAgGoR+Yox5tncmTYAqZRNZonF4DSnc+nq\n6vTmre1b08Xqa3es5Xdv/47HT3086xTRRJQ8Xx5VpVXDabmiKIoyggw21Hkt8DFjzLsAIjIPuA94\nf64MG5Dnn4ebb4b777chzgMOgIC9nM54J1s7tlKeX44xhsuevYxvHfYtJhVOSh9ujKEj1sH+U/bX\nEKeiKMo4YrB5+3mu6AEYY97D9tc5MrS1wbe+ZTM5y8thxgwoyfSgtql1U7pY/Y9r/khLpIVTDzw1\n6xStXa1MK55Gaah0uK1XFEVRRpDBenyviMivsB1TA3wReCU3Jg1AMgmXXAIFBfDZz4LPB9Onpze3\nRdtojjQzsXAiHbEOlq1cxnUfvy4roSWWjBHwBZhRNmMkrkBRFEUZQQYrfN8EzgHc8oXngJtyYtFA\n/PWvNoPz4YchGoUDD7Qjq2PDl3U769K1eDeuupEjq4/MSmgxxtAebWf+5Pk9uitTFEVR9n4G+88f\nAG4wxlwH6d5cQjmzqi927LDhzQsugOJiqKmBokzB+Y7IDsKxMBWFFazZsYb/e/v/eiS0tEXbqCyu\npCx/9NbjK4qiKLljsG18fwG8A9MVYDuqHlaWfuAD1JWWwic+YYWvMjNsULpYPVRsE1qeuYxzDjsn\nK6EllozhEx/VpdW9nV5RFEUZBwxW+PKNMR3ugjM/7MMXXLBmDcu3bKFuwwaYPdu27zk0hhtJpBIE\n/UGeWP0ErdFWTjnwlKzj27ramF0+Oz36uqIoijL+GKzwhUXkEHdBRA4FIrkxqW+KgKVbtnDHPffY\n5BYHt1i9JFSS7qHlkmMvyWrDa+tqY0rxFMoLyofbbEVRFGUUMdg2vv8GHhKRLc7yNODzuTGpf4qA\n1I4dWeu2tm9FEPw+Pze+fCNHVR/F+6dlSgzjSdvJTE1ZzXCaqiiKooxC+vX4ROQwEZlqjFkF7Ac8\nAMSBPwHrh8G+HoQBX1Wmp5VIPMLW9q2UhkpZ3bya37/7ey448oKsY9qj7cwun03QHxxmaxVFUZTR\nxkChzluAmDP/QeBi4EagBbg1h3b1ShhYMmcOp19+eXpdfVs9wYAVtMuetQkt7oCzYEWvorCCisKK\n4TZXURRFGYUMJHx+Y4wbV/w8cKsx5rfGmMXA3Nya1pNrvvhFzvvzn6mdNQuwotbc2UxxsJg/rP4D\n7dF2vnDAF9L7J1IJkibJzAkzh9tURVEUZZQyUBufX0QCxpgEcBxw5i4cO+Qsufvu9LwxhrrWOgrz\nCtMJLTccf0N2Qku0jX0q9tEQp6IoipJmIPG6D3hGRJqwWZzPAYjIXKA1x7b1S0ukhY5YBxUFFSxb\nudYE644AAB4mSURBVIyFNQs5ZFo68ZSOWAfl+eVUFGiIU1EURcnQr/AZY34sIn/BZnE+ZYwxziYf\ncF6ujeuLZCpJXasdWf295vd45N1HePyUTA8tiVSCRCrBzAkzEZGRMlNRFEUZhQwYrjTGvNTLuvdy\nY87gaOpsIpaMUZhXyOXPXM65h52bldDS1tXG7IrZhALD36uaoiiKMroZbAH7qCGejLOxdSOloVIe\nf+9xOuIdWQktHbEOyvLLmFw4eQStVBRFUUYrY074trZvBSCSiHD1C1dzyTGXpAeSTaaSxJNxZpXP\n0hCnoiiK0itjSvi6El1sad9CaaiU5X9fztE1R3PwtIPT21ujrcycMJP8QP4IWqkoiqKMZsbUgHRu\nsfrqHat59L1H+cOpf0hvC8fClAZLmVI0ZQQtVBRFUUY7Off4ROR4EXlHRN4TkQv72e8wEYmLyGf6\n2qcp3ERRXhGXPXMZ5x5+brpUIZlKEkvGNMSpKIqiDEhOhU9EfMDPgY8D+wOniMh+fey3DHiyv/Pl\nB/J57L3HCMfDfGH/TEJLW7SNmrIaCvIK+jlaURRFUXLv8R0OrDbG1Blj4sD9wEm97Hce8DDQ2N/J\nIvEIVz9/NUuOXZJOaOmMd1IULKKyuLK/QxVFURQFyL3wVQH1nuVNzro0IjId+LQx5mag3zjlza/c\nzLEzj+WgqQcBkDIpuuJdzC6fjU/GVJ6OoiiKMkKMBrW4HvC2/fUpfg/e+CCnzMiMqt7a1UpNWQ2F\necM+GLyiKIoyRsl1VudmwDv66wxnnZdDgfvFZqVMAj4hInFjzKPdTxaLxTjjS2dw0nEncczHj+Hw\now5nasnUnBmvKIqijC5WrFjBihUr9ugckul+c+gRET/wLnZkh63Ay8Apxpi3+9j/duAxY8zvetlm\nuBSIwYlNJ/LDxT/kwCkHUhQsypn9iqIoyuhGRDDG7FI6f049PmNMUkTOBZ7ChlV/bYx5W0TOsptN\n98FsB1bhIGxp28KM0hkqeoqiKMouk/MCdmPMn4B9u627pY99vzrgCWNQWVLJtOJpQ2OgoiiKMq4Y\nUz23EIOqV6u4+mdXp8sZFEVRFGVXGA1ZnYPmI9s+wgNXP8AB8w4YaVMURVGUMUpOk1uGEhEx/9jy\nDxZULlBvT1EURQF2L7llTAlfW1cbJaGSkTZFURRFGSXs9cI3VmxVFEVRhofdEb4x1canKIqiKHuK\nCp+iKIoyrlDhUxRFUcYVKnyKoijKuEKFT1EURRlXqPApiqIo4woVPkVRFGVcocKnKIqijCtU+BRF\nUZRxhQqfoiiKMq5Q4VMURVHGFSp8iqIoyrhChU9RFEUZV6jwKYqiKOMKFT5FURRlXKHCpyiKoowr\nVPgURVGUcYUKn6IoijKuUOFTFEVRxhUqfIqiKMq4QoVPURRFGVeo8CmKoijjChU+RVEUZVyhwqco\niqKMK1T4FEVRlHGFCp+iKIoyrlDhUxRFUcYVKnyKoijKuEKFT1EURRlXqPApiqIo4woVPkVRFGVc\nocKnKIqijCtU+BRFUZRxhQqfoiiKMq5Q4VMURVHGFSp8iqIoyrhChU9RFEUZV+Rc+ETkeBF5R0Te\nE5ELe9l+qoi85kwrReTAXNukKIqijF/EGJO7k4v4gPeA44AtwCrgC8aYdzz7HAG8bYxpFZHjgUuN\nMUf0ci6TS1sVRVGUsYeIYIyRXTkm1x7f4cBqY0ydMSYO3A+c5N3BGPOSMabVWXwJqMqxTYqiKMo4\nJtfCVwXUe5Y30b+wfR34Y04tUhRFUcY1gZE2wEVEPgScASzsa59LL700Pb9o0SIWLVqUc7sURVGU\n0cOKFStYsWLFHp0j1218R2Db7I53ln8AGGPMT7rttwD4LXC8MWZtH+fSNj5FURQli9HYxrcKmCsi\ntSISBL4APOrdQURqsKL3pb5ET1EURVGGipyGOo0xSRE5F3gKK7K/Nsa8LSJn2c3mVmAxUAHcJCIC\nxI0xh+fSLkVRFGX8ktNQ51CioU5FURSlO6Mx1KkoiqIoowoVPkVRFGVcocKnKIqijCtU+BRFUZRx\nhQrf/2/v3qOqrtNHj78fFDUKEBQREFHxkk1qWkd/Rj9/otNxcjqlaXkB1DrHWsyZcNI5LW1q4W3y\nZ0ebtEmrNV6TppqaUkIn0UlcTtN4ndJSqyMQyeivyAukgrCf88f+sgPc3Azcm3hea7H4Xj/72V/Y\nPHw++7s/jzHGmFbFEp8xxphWxRKfMcaYVsUSnzHGmFbFEp8xxphWxRKfMcaYVsUSnzHGmFbFb+rx\nGWNahx49epCfn+/rMEwLExcXR15eXpO0ZZNUG2OuKWdSYV+HYVqY2n5vbJJqY4wxph6W+IwxxrQq\nlviMMca0Kpb4jDGmmbhcLoKDg/nqq6+a9Fjzw1jiM8YYR3BwMCEhIYSEhNCmTRuCgoI82/74xz82\nur2AgACKi4vp1q1bkx7bWGfPnuXBBx8kKiqKjh070r9/f5YvX97kj9NS2McZjDHGUVxc7Fnu1asX\na9asITExsdbjKyoqaNOmzbUI7QdJS0vD5XLx2WefERwczPHjxzl69GiTPkZLuRZgPT5jjB/Jz81l\nQXIy6YmJLEhOJj831ydtAKjqFbfPP/XUU0yePJmpU6cSGhpKRkYGH374IcOHDycsLIyYmBhmzZpF\nRUUF4E4GAQEBfPnllwCkpKQwa9Ysxo4dS0hICAkJCZ7PNDbmWIBt27bRr18/wsLCSEtL44477mDj\nxo1en8u+ffuYOnUqwcHBAPTr149x48Z59h8+fJg777yTTp06ER0dzbJlywAoLS0lLS2N6OhoYmNj\nmTNnDuXl5QDs3LmTnj17smTJEqKionj44YcB2LJlC7fccgthYWGMGDGCTz755Kquf7Oq/OH6+5c7\nVGNMS1fbaznvxAmdEx+vJaAKWgI6Jz5e806caHDbTdFGpR49eujOnTurbXvyySe1ffv2mpWVpaqq\nly5d0v379+vevXvV5XJpbm6u9uvXT1944QVVVS0vL9eAgADNz89XVdXk5GSNiIjQgwcPanl5uU6a\nNElTUlIafezp06c1ODhYMzMztby8XJ999llt166dbtiwwetzmTFjhg4YMEDXr1+vn3/+ebV9586d\n08jISH3++ee1rKxMi4uLdd++faqqOm/ePE1ISNCioiL9+uuvddiwYbpw4UJVVd2xY4e2bdtWn3zy\nSb18+bJeunRJ9+7dq127dtUDBw6oy+XSdevWaXx8vF6+fLnR17+m2n5vnO2NyyeNPcFXX5b4jPlx\nqO21PD8pyZOwtErimp+U1OC2m6KNSrUlvtGjR9d53rJly/SBBx5QVXcyE5FqySw1NdVz7JYtW3TA\ngAGNPnbt2rU6YsSIao8bFRVVa+K7ePGi/va3v9Vbb71VAwMDtW/fvrp9+3ZVVX3llVd06NChXs+L\ni4vTHTt2eNazsrK0T58+qupOfNddd121pDZz5kxPYqwUHx+vH3zwgdf2G6MpE58NdRpj/ILr5Emu\nr7HtesCVkQEiDfpyZWR4b6OwsMnijI2NrbZ+/Phx7r77bqKioggNDSU9PZ1vvvmm1vO7du3qWQ4K\nCqKkpKTRxxYWFl4RR103xXTo0IEnnniC/fv3U1RUxPjx45k4cSLFxcUUFBQQHx/v9bzCwkK6d+/u\nWY+Li+PkyZOe9cjISNq2/f5Wkfz8fJYuXUp4eDjh4eGEhYVx6tSpauf4A0t8xhi/EBATw3c1tn0H\nBCQl1ejD1f4VkJTkvY3o6CaLU6T67FiPPPIIAwYM4MSJE5w7d44FCxZUjlI1m6ioKAoKCqpta2hy\nCQ4OZt68eRQXF5OXl0dsbCxffPGF12NjYmKqva+Yn59PTEyMZ73mtYiNjSU9PZ1vv/2Wb7/9ljNn\nzlBSUsLEiRMb+tSuCUt8xhi/MGPRItLj4z2J6zsgPT6eGYsWXdM2Gqu4uJjQ0FCuu+46jh49yksv\nvdRsj1Xp7rvv5tChQ2RlZVFRUcFzzz1XZy9z4cKFHDhwgMuXL1NaWsqKFSvo1KkTffr04Z577qGg\noIBVq1ZRVlZGcXEx+/btA2Dy5MksXLiQoqIivv76axYvXkxKSkqtjzNz5kxeeOEF9u/fD0BJSQnv\nvvsuFy9ebNoL8ANZ4jPG+IW4nj15NDubZUlJpCcmsiwpiUezs4nr2fOatlGpZm+mNsuXL2f9+vWE\nhISQmprK5MmTa22nvjYbemyXLl14/fXXeeyxx+jcuTO5ubkMHjyY9u3b13rO9OnT6dy5MzExMeze\nvZusrCw6dOhASEgI2dnZvPnmm0RGRtKvXz92794NQHp6OoMGDeLmm2/mlltuYfjw4cydO7fWxxg2\nbBirV68mNTWV8PBwbrzxRjIyMup8zr5g1RmMMdeUVWdoei6Xi+joaN566y0SEhJ8HU6zsOoMxhjT\nyr333nucO3eO0tJSFi5cSLt27Rg6dKivw2oRLPEZY0wLtGfPHnr16kVkZCTZ2dm88847BAYG+jqs\nFsGGOo0x15QNdZqrYUOdxhhjzFWyxGeMMaZVscRnjDGmVbHEZ4wxplWxxGeMMaZVscRnjDFNJD8/\nn4CAAFwuFwBjx47llVdeadCxjbVkyRJPDTzTOJb4jDHGcddddzF//vwrtm/evJmoqKgGJamqU41t\n3bq1zrktGzotWk5OzhXVGObNm8fLL7/coPMb4/Lly8yZM4fY2FhCQkLo1asXs2fPbvLH8SVLfMYY\n45g+fTqbNm26YvumTZtISUkhIMA3fzJVtcFJ8od6+umnOXjwIPv37+f8+fPs2rWLIUOGNOljVFao\n9xVLfMYYv5Gbl0tyWjKJMxJJTksmNy/3mrYxbtw4ioqK2LNnj2fb2bNneffdd5k2bRrg7sUNGTKE\n0NBQ4uLiWLBgQa3tJSYmsnbtWsA9n+avf/1rIiIi6N27N1lZWdWOXb9+PTfddBMhISH07t3b05u7\ncOECY8eOpbCwkODgYEJCQjh16hQLFiyo1pvcsmULN998M+Hh4YwaNYpjx4559vXs2ZPly5czaNAg\nwsLCmDJlCmVlZV5j3r9/P+PHjycyMhKA7t27k5yc7Nn/1VdfMWHCBLp06UJERARpaWmAOzkvXryY\nHj160LVrV2bMmMH58+eB74d1165dS1xcHKNHjwbgww8/JCEhgbCwMAYPHkxOTk5dP56m09jKtb76\nwiqwG/OjUNtr+UTuCY3/ebzyBMp8lCfQ+J/H64ncEw1uuynamDlzps6cOdOz/uKLL+rgwYM96zk5\nOXrkyBFVVT18+LB27dpVN2/erKqqeXl5GhAQoBUVFaqqOnLkSF2zZo2qqq5evVr79++vJ0+e1DNn\nzmhiYmK1Y7du3aq5ubmqqrp7924NCgrSQ4cOqarqrl27NDY2tlqc8+fP15SUFFVVPX78uF5//fW6\nc+dOLS8v12eeeUZ79+7tqY7eo0cPHTZsmJ46dUrPnDmj/fv315deesnr81+8eLF2795dV61apYcP\nH662r6KiQgcNGqRz5szRixcvamlpqf7tb39TVdU1a9Zonz59NC8vT7/77ju97777PPHl5eWpiOj0\n6dP1woULeunSJT158qR26tRJ//KXv6iqu6J7p06d9JtvvvEaV22/N1xFBXafJ7QGB2qJz5gfhdpe\ny0mPJn2fsOZ/n7iSHk1qcNtN0caePXu0Y8eOWlpaqqqqCQkJ+txzz9V6/K9+9SudPXu2qtad+EaN\nGlUt2Wzfvr3asTWNGzdOV65cqar1J75FixbppEmTPPtcLpfGxMRoTk6OqroT36uvvurZ//jjj2tq\naqrXx3W5XLpq1Sq94447tEOHDhoTE6MbNmxQVdW///3v2qVLF68xjx49WlevXu1ZP378uAYGBmpF\nRYXnuuTl5Xn2L126VKdNm1atjTFjxujGjRu9xtWUia9tbT1BY4y5lk6ePwmdamxsBxkfZ5CxoIE1\n3T4GEq9so/B8YYPjSEhIICIignfeeYfbbruNffv28fbbb3v27927l7lz53LkyBHKysooKyvj/vvv\nr7fdwsLCajeoxMXFVdu/bds2Fi5cyGeffYbL5eLixYsMHDiwQTEXFhZWa09EiI2NrVaVvXLoEiAo\nKIh//etfXtsSEVJTU0lNTaW0tJQ1a9bw0EMPMWzYMAoKCoiLi/P6XmfNGOLi4igvL+f06dOebd26\ndfMs5+fn88Ybb5CZmQm4O2Hl5eWMGjWqQc/5h2j2xCciPwOew/1+4hpVXerlmJXAXbgLJs9Q1X82\nd1zGGP8SExIDZUC7KhvLIGlgEpvSr7zhxJvkomQyyjKuaCM6JLpRsaSkpLBhwwaOHTvGmDFjiIiI\n8OybOnUqaWlpvPfeewQGBvLYY49RVFRUb5tRUVEUFBR41vPz878PsayMiRMnsmnTJu69914CAgIY\nP368Z1Lm+m5siY6O5siRI9W2FRQUVEs0V6N9+/b84he/ID09nU8//ZTY2Fjy8/NxuVxXJL/o6Ohq\nzyk/P5/AwEAiIyM9z7vq84iNjWXatGnXpGJ9Tc16c4uIBAC/B8YAPwGmiMiNNY65C4hX1T7AI8CL\nzRmTMcY/LZq9iPiP4t3JD6AM4j+KZ9HsRde0DYBp06axY8cO/vCHPzB9+vRq+0pKSggLCyMwMJC9\ne/fy6quvVttfmaxqeuCBB1i5ciUnT57kzJkzLF36fR+gsufYuXNnAgIC2LZtG9u3b/fsj4yMpKio\nyHOziLe2s7KyeP/99ykvL2fZsmV06NCB4cOHN+p5A6xYsYKcnBwuXbpERUUFGzZsoKSkhCFDhjB0\n6FCio6OZO3cuFy5coLS0lA8++ACAKVOm8Lvf/Y68vDxKSkr4zW9+w+TJkz0JsuZ1SU5OJjMzk+3b\nt+Nyubh06RI5OTkUFja8d361mvuuzqHA56qar6qXgdeAe2sccy+wEUBV/wGEikgkxphWpWePnmT/\nPpuk4iQScxNJKk4i+/fZ9OzR85q2Ae5huttvv50LFy5wzz33VNu3atUqnnrqKUJDQ1m8eDGTJk2q\ntr9qr6bq8syZMxkzZgyDBg3itttuY8KECZ59N9xwAytXruT+++8nPDyc1157jXvv/f5PZb9+/Zgy\nZQq9evUiPDycU6dOVXvMvn37smnTJn75y18SERFBVlYWmZmZtG3b9oo46hMUFMScOXOIiooiIiKC\n1atX8+c//9kzxJmZmcnnn39O9+7diY2N5Y033gDgoYceIiUlhREjRhAfH09QUBArV670ei3APey5\nefNmnn76aSIiIoiLi2PZsmVX/YH+xmjWenwiMgEYo6oPO+vJwFBVTatyTCawRFU/cNZ3AI+r6sEa\nbWlzxmqMuTasHp+5Gk1Zj69F3dxSdUaFkSNHMnLkSJ/FYowx5trbtWsXu3bt+kFtNHeP79+A+ar6\nM2d9Lu5bT5dWOeZF4H1Vfd1ZPwb8h6qertGW9fiM+RGwHp+5Gi2pAvs+oLeIxIlIO2AysKXGMVuA\naeBJlGdrJj1jjDGmqTTrUKeqVojIL4HtfP9xhqMi8oh7t76sqltFZKyIfIH74wwPNmdMxhhjWrdm\nHepsSjbUacyPgw11mqvRkoY6jTHGGL9iic8YY0yr0qI+zmCMafni4uKuWW058+NRc27TH8Le4zPG\nGNNi2Xt8fuSHfsDyWrJYm09LirclxQotK16L1b9Y4msmLemXx2JtPi0p3pYUK7SseC1W/2KJzxhj\nTKtiic8YY0yr0qJubvF1DMYYY/xPY29uaTGJzxhjjGkKNtRpjDGmVbHEZ4wxplXx+8QnImtE5LSI\nfOzrWOojIt1E5K8i8omIHBaRtPrP8h0RaS8i/xCRQ0686b6OqT4iEiAiB0WkZnkrvyIieSLykXNt\n9/o6nvqISKiI/ElEjjq/v8N8HZM3ItLXuaYHne/n/Pl1JiKPicgREflYRDKc8mx+S0RmOX8L/PLv\nl7d8ICJhIrJdRI6LyHsiElpfO36f+IB1wBhfB9FA5cBsVf0JMBz43yJyo49jqpWqlgKJqjoYuAW4\nS0SG+jis+swCPvV1EA3gAkaq6mBV9fdrCrAC2Kqq/YFBwFEfx+OVqn7mXNMhwK24S5m97eOwvBKR\naOBRYIiqDsQ9ReRk30ZVOxH5CfA/gdtw/z24W0R6+TaqK3jLB3OBHaraD/grMK++Rvw+8anqHuCM\nr+NoCFU9par/dJZLcP/xiPFtVHVT1QvOYnvcL0y/vdtJRLoBY4E/+DqWBhBawOsLQERCgH9X1XUA\nqlququd9HFZD/BT4f6pa4OtA6tAGuF5E2gJBQKGP46lLf+AfqlqqqhXAbuA+H8dUTS354F5gg7O8\nARhXXzst4oXZEolID9z/Nf3Dt5HUzRk6PAScArJVdZ+vY6rD74D/gx8n5yoUyBaRfSIy09fB1KMn\n8I2IrHOGEF8Wket8HVQDTAL+6OsgaqOqhcBy4EvgJHBWVXf4Nqo6HQH+3Rk6DML9T2asj2NqiC6q\nehrcnQ+gS30nWOJrBiJyA/AmMMvp+fktVXU5Q53dgGEicpOvY/JGRH4OnHZ61OJ8+bMEZzhuLO4h\n7zt8HVAd2gJDgBecmC/gHj7yWyISCNwD/MnXsdRGRDri7o3EAdHADSIy1bdR1U5VjwFLgWxgK3AI\nqPBpUFen3n+MLfE1MWdI403gFVXd7Ot4GsoZ2nof+JmvY6lFAnCPiJzA/V9+oohs9HFMtVLVfznf\nv8b9HpQ/v8/3FVCgqvud9TdxJ0J/dhdwwLm+/uqnwAlV/dYZOvwzcLuPY6qTqq5T1dtUdSRwFvjM\nxyE1xGkRiQQQka7Af9V3QktJfC3hP/xKa4FPVXWFrwOpj4h0rrwDyhnauhM45tuovFPVJ1S1u6r2\nwn2DwF9VdZqv4/JGRIKcXj8icj3w33EPI/klZ5ioQET6OptG4/83EE3Bj4c5HV8C/yYiHcRdgHA0\nfnrTUCURiXC+dwfGA6/6NiKvauaDLcAMZ3k6UG+Hw+8L0YrIq8BIoJOIfAmkV74J729EJAFIAg47\n75sp8ISq/sW3kdUqCtggIgG4/wl6XVW3+jimH4NI4G1nmr22QIaqbvdxTPVJAzKcIcQTwIM+jqdW\nzvtPPwUe9nUsdVHVvSLyJu4hw8vO95d9G1W93hKRcNzx/sLfbnLylg+A/wT+JCIPAfnAA/W2Y1OW\nGWOMaU1aylCnMcYY0yQs8RljjGlVLPEZY4xpVSzxGWOMaVUs8RljjGlVLPEZY4xpVSzxGVODiLiq\nzgojIm1E5OurLYUkIv9DRB5vuggb/fjvi8gxEfmniHwqIisbUrqljvamOzNkVK7nOp/9MqZFsMRn\nzJW+A24WkfbO+p3AVVcAUNVMVX2mSSK7elNU9RZgIFBGA2a3qMMMqlcdsQ8DmxbFEp8x3m0Ffu4s\nV5seS0T+m4h8ICIHRGSPiPRxtv9KRNY4ywOc4qMdnB7S8872dSKySkT+LiJfiMh/OMU1PxWRtVUe\no7jK8gQRWdeY870QcJccAh4HYkVkgNNmkrgLEh8UkdXO9FqISLGIPCvuQqrZItJJRCbgrte2yTm+\ng9N2mnM9Pqoy9ZkxfskSnzFXUuA1YIrT6xtI9fJSR4E7VPVW3FMmLXG2rwDiRWQc7jlbH1bVS1Xa\nrNRRVYcDs3HPM7hcVW8CBorIQC/HX835tT85VRfwMXCjuAslTwJudyozuHBPuwdwPbBXVW/GXZst\nXVXfAvYDU1V1SJXn91/O9XgRd+koY/yW38/VaYwvqOoRp6biFCCL6pPidgQ2Oj29yvk4UVUVkQdx\nJ5UXVfXDWprPdL4fBk6pauWE0J8APZzz65qUvSHn16ey/dG4KzHsc3p6HXDXZgR3EnzDWd4EvOXl\n/EqVVdAP4J7c2Bi/ZYnPmNptAf4v7klxO1fZvgh3dYj7RCQOdzmnSn2BYtz112pT6nx3VVmuXK98\nTVbt4XW4ivNrJSJtgAG4e66RwAZV/Y2XQ+vqddZUGUdFQ2IwxpdsqNOYK1X2ZtYCC1T1kxr7Q3FX\n1IYqVQycOyVXACNwzx4/oRGPVdMpEennVM6oqwfV0HJdle/btcU9NPulqh4BdgITq5SjCRORyqrb\nbYCJznISsMdZLgZCGvi4xvgdS3zGXEkBVPWkqv7ey/5ngP8UkQNUfw09Czyvql8A/wtYIiKda5xb\nVy+q6vI83EOse4DCqzi/pk0i8k/cw6PX4a4MjqoeBZ4EtovIR8B23OWqwH1361AROYy717vQ2b4e\neLHKzS12V6dpUawskTHGKxEpVtVgX8dhTFOzHp8xpjb2X7H5UbIenzHGmFbFenzGGGNaFUt8xhhj\nWhVLfMYYY1oVS3zGGGNaFUt8xhhjWhVLfMYYY1qV/w+NJFS/5Rw/1QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vs.ModelComplexity(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Bias-Variance Tradeoff\n", "*When the model is trained with a maximum depth of 1, does the model suffer from high bias or from high variance? How about when the model is trained with a maximum depth of 10? What visual cues in the graph justify your conclusions?* \n", "**Hint:** How do you know when a model is suffering from high bias or high variance?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. When the model is trained with `max_depth = 1`,\n", " - it suffers from **high bias**.\n", " - We can infer this from two features:\n", " 1. The training and testing learning curves converge (the **gap between them is small**) at \n", " 2. a **high error of 0.6** as the number of training points increases.\n", " - This is shown in the model complexity graph where the gap between the training and validation scores is smaller than 0.1 and both scores are low (in the range 0.4-0.5), meaning the errors are high. \n", "2. When the model is trained with `max_depth = 10`,\n", " - it suffers from **high variance**.\n", " - We can infer this from the **large gap** between the training and validation scores in the model complexity graph. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6 - Best-Guess Optimal Model\n", "*Which maximum depth do you think results in a model that best generalizes to unseen data? What intuition lead you to this answer?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I think **`max_depth=3`** best generalises to unseen data.\n", "1. `max_depth=3` and `max_depth=4` have **roughly the highest validation score**, i.e. score on unseen data.\n", "2. Between those two, `max_depth=3` has a **lower variance** (as seen by the difference between training and testing scores), which suggests it **suffers less from overfitting** and generalises better. The validation score is thus more reliable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "-----\n", "\n", "## Evaluating Model Performance\n", "In this final section of the project, you will construct a model and make a prediction on the client's feature set using an optimized model from `fit_model`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7 - Grid Search\n", "*What is the grid search technique and how it can be applied to optimize a learning algorithm?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "1. The grid search technique tests different values within a given range for each parameter to see which (combination of) parameter value(s) is optimal. E.g. which combination of parameter values maximises the accuracy score.\n", "2. It can be applied to optimise a learning algorithm by **optimally tuning parameters to maximise performance score**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 8 - Cross-Validation\n", "*What is the k-fold cross-validation training technique? What benefit does this technique provide for grid search when optimizing a model?* \n", "**Hint:** Much like the reasoning behind having a testing set, what could go wrong with using grid search without a cross-validated set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "1. The k-fold cross-validation training technique equally partitions a dataset into k parts ('folds') without shuffling. \n", " - For each fold, it trains the model on data from the remaining (k-1) folds and then validates (tests) it on the data from the one fold. \n", " - It repeats this k times (once on each fold).\n", " - The k results can then be averaged to produce a single score.\n", "2. Benefits for Grid Search:\n", " - With k-fold CV, all data is used for training and all data is used for validation exactly once.\n", " - Suppose there is no cross-validated set. Then Grid Search may choose values of parameters than work well (score highly) for a particular validation/test set but **don't generalise**. \n", " - With a cross-validated set, there is more test data and the model is tested more times because the model is validated k times (each time on different data). So if the averaged score is high, the model (with parameters chosen from Grid Search) is more likely to be generalisable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Fitting a Model\n", "Your final implementation requires that you bring everything together and train a model using the **decision tree algorithm**. To ensure that you are producing an optimized model, you will train the model using the grid search technique to optimize the `'max_depth'` parameter for the decision tree. The `'max_depth'` parameter can be thought of as how many questions the decision tree algorithm is allowed to ask about the data before making a prediction. Decision trees are part of a class of algorithms called *supervised learning algorithms*.\n", "\n", "For the `fit_model` function in the code cell below, you will need to implement the following:\n", "- Use [`DecisionTreeRegressor`](http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html) from `sklearn.tree` to create a decision tree regressor object.\n", " - Assign this object to the `'regressor'` variable.\n", "- Create a dictionary for `'max_depth'` with the values from 1 to 10, and assign this to the `'params'` variable.\n", "- Use [`make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html) from `sklearn.metrics` to create a scoring function object.\n", " - Pass the `performance_metric` function as a parameter to the object.\n", " - Assign this scoring function to the `'scoring_fnc'` variable.\n", "- Use [`GridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) from `sklearn.grid_search` to create a grid search object.\n", " - Pass the variables `'regressor'`, `'params'`, `'scoring_fnc'`, and `'cv_sets'` as parameters to the object. \n", " - Assign the `GridSearchCV` object to the `'grid'` variable." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'make_scorer', 'DecisionTreeRegressor', and 'GridSearchCV'\n", "from sklearn.tree import DecisionTreeRegressor\n", "from sklearn.metrics import make_scorer\n", "from sklearn.grid_search import GridSearchCV\n", "\n", "def fit_model(X, y):\n", " \"\"\" Performs grid search over the 'max_depth' parameter for a \n", " decision tree regressor trained on the input data [X, y]. \"\"\"\n", " \n", " # Create cross-validation sets from the training data\n", " cv_sets = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.20, random_state = 0)\n", "\n", " # TODO: Create a decision tree regressor object\n", " regressor = DecisionTreeRegressor()\n", "\n", " # TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10\n", " params = {'max_depth':range(1,11)}\n", "\n", " # TODO: Transform 'performance_metric' into a scoring function using 'make_scorer' \n", " scoring_fnc = make_scorer(performance_metric)\n", "\n", " # TODO: Create the grid search object\n", " grid = GridSearchCV(regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)\n", "\n", " # Fit the grid search object to the data to compute the optimal model\n", " grid = grid.fit(X, y)\n", "\n", " # Return the optimal model after fitting the data\n", " return grid.best_estimator_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Making Predictions\n", "Once a model has been trained on a given set of data, it can now be used to make predictions on new sets of input data. In the case of a *decision tree regressor*, the model has learned *what the best questions to ask about the input data are*, and can respond with a prediction for the **target variable**. You can use these predictions to gain information about data where the value of the target variable is unknown — such as data the model was not trained on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 9 - Optimal Model\n", "_What maximum depth does the optimal model have? How does this result compare to your guess in **Question 6**?_ \n", "\n", "Run the code block below to fit the decision tree regressor to the training data and produce an optimal model." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameter 'max_depth' is 4 for the optimal model.\n" ] } ], "source": [ "# Fit the training data to the model using grid search\n", "reg = fit_model(X_train, y_train)\n", "\n", "# Produce the value for 'max_depth'\n", "print \"Parameter 'max_depth' is {} for the optimal model.\".format(reg.get_params()['max_depth'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "The optimal model has **`max_depth = 4`**. \n", "- This is not what I guessed initially (I guessed `max_depth = 3`) but is reasonable because it did have a **slightly higher validation score** than `max_depth = 3`.\n", "- I guessed that `max_depth = 3` would be better because it had a similar validation score and had lower variance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 10 - Predicting Selling Prices\n", "Imagine that you were a real estate agent in the Boston area looking to use this model to help price homes owned by your clients that they wish to sell. You have collected the following information from three of your clients:\n", "\n", "| Feature | Client 1 | Client 2 | Client 3 |\n", "| :---: | :---: | :---: | :---: |\n", "| Total number of rooms in home | 5 rooms | 4 rooms | 8 rooms |\n", "| Neighborhood poverty level (as %) | 17% | 32% | 3% |\n", "| Student-teacher ratio of nearby schools | 15-to-1 | 22-to-1 | 12-to-1 |\n", "*What price would you recommend each client sell his/her home at? Do these prices seem reasonable given the values for the respective features?* \n", "**Hint:** Use the statistics you calculated in the **Data Exploration** section to help justify your response. \n", "\n", "Run the code block below to have your optimized model make predictions for each client's home." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predicted selling price for Client 1's home: $407,232.00\n", "Predicted selling price for Client 2's home: $229,200.00\n", "Predicted selling price for Client 3's home: $979,300.00\n" ] } ], "source": [ "# Produce a matrix for client data\n", "client_data = [[5, 17, 15], # Client 1\n", " [4, 32, 22], # Client 2\n", " [8, 3, 12]] # Client 3\n", "client_prices = []\n", "# Show predictions\n", "for i, price in enumerate(reg.predict(client_data)):\n", " print \"Predicted selling price for Client {}'s home: ${:,.2f}\".format(i+1, price)\n", " client_prices.append(price)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. The recommended selling prices are:\n", " - Client 1: \\$407,232\n", " - Client 2: \\$229,200\n", " - Client 3: \\$979,300\n", "\n", "2. By intuition in Q1:\n", " - Client 3 has the highest `RMSTAT` (intuited positive relationship with price), the lowest `STRATIO` and the lowest `LSTAT` (Both intuited negative rel with price). \n", " - Client 2 has the lowest `RMSTAT`, the highest `STRATIO` and the highest `LSTAT`.\n", " - So based on intuition from Question 1, the **ordering of prices (Client 3 > Client 1 > Client 2) is reasonable**. \n", "\n", "3. Revisiting the statistics from the Data Exploration section:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics for Boston housing dataset:\n", "\n", "Minimum price: $105,000.00\n", "Maximum price: $1,024,800.00\n", "Mean price: $454,342.94\n", "Median price $438,900.00\n", "Standard deviation of prices: $165,171.13\n" ] } ], "source": [ "# Show the calculated statistics\n", "print \"Statistics for Boston housing dataset:\\n\"\n", "print \"Minimum price: ${:,.2f}\".format(minimum_price)\n", "print \"Maximum price: ${:,.2f}\".format(maximum_price)\n", "print \"Mean price: ${:,.2f}\".format(mean_price)\n", "print \"Median price ${:,.2f}\".format(median_price)\n", "print \"Standard deviation of prices: ${:,.2f}\".format(std_price)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " * The prices are all within the min-max of existing house prices, so they are not outrageous.\n", " * I'd argue that it is difficult to justify the reasonable-ness of the predicted prices purely based on the Data Exploration statistics (beyond whether or not the prices are obviously crazy). We need more information on the distribution of `RMSTAT`, `PTRATIO` and `LSTAT`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stds away from the mean (Client 1): -0.285225053221\n", "Stds away from the mean (Client 2): -1.36308895314\n", "Stds away from the mean (Client 3): 3.17826154187\n" ] } ], "source": [ "print \"Stds away from the mean (Client 1): \", (client_prices[0]-mean_price)/std_price\n", "print \"Stds away from the mean (Client 2): \", (client_prices[1]-mean_price)/std_price\n", "print \"Stds away from the mean (Client 3): \", (client_prices[2]-mean_price)/std_price" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sensitivity\n", "An optimal model is not necessarily a robust model. Sometimes, a model is either too complex or too simple to sufficiently generalize to new data. Sometimes, a model could use a learning algorithm that is not appropriate for the structure of the data given. Other times, the data itself could be too noisy or contain too few samples to allow a model to adequately capture the target variable — i.e., the model is underfitted. Run the code cell below to run the `fit_model` function ten times with different training and testing sets to see how the prediction for a specific client changes with the data it's trained on." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Trial 1: $391,183.33\n", "Trial 2: $419,700.00\n", "Trial 3: $415,800.00\n", "Trial 4: $420,622.22\n", "Trial 5: $418,377.27\n", "Trial 6: $411,931.58\n", "Trial 7: $399,663.16\n", "Trial 8: $407,232.00\n", "Trial 9: $351,577.61\n", "Trial 10: $413,700.00\n", "\n", "Range in prices: $69,044.61\n" ] } ], "source": [ "vs.PredictTrials(features, prices, fit_model, client_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 11 - Applicability\n", "*In a few sentences, discuss whether the constructed model should or should not be used in a real-world setting.* \n", "**Hint:** Some questions to answer:\n", "- *How relevant today is data that was collected from 1978?*\n", "- *Are the features present in the data sufficient to describe a home?*\n", "- *Is the model robust enough to make consistent predictions?*\n", "- *Would data collected in an urban city like Boston be applicable in a rural city?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. House prices have changed greatly since 1978. \n", " - Taking inflation into account is insufficient because housing prices are highly volatile. \n", " - So even a model based on data from 3 years ago might not be useful today.\n", "2. Features presented are not sufficient to describe a home.\n", " - Important features may include square feet, other aspects of location (proximity to transport, places of work, grocery stores, schools, leisure facilities), state of house (age, whether it's recently been refurbished).\n", " - But with more features comes the need for exponentially more data (the Curse of Dimensionality).\n", "3. The model does not make consistent predictions, as seen in the Sensitivity section above.\n", " - The range in prices of \\$28,652.84 is non-trivial - for some, it is more than 6 months' worth of the median US salary.\n", " - But if you look at the percentage variation it's about +/- 3.5% which isn't that much. \n", " - Calculation ((28652.84/2)/410000), 410k estimated by eye.\n", "4. No, data collected in an urban city like Boston would not be applicable in a rural city. So the predictions in this model **should not be used in other cities**. \n", " - If we constructed a model based on data from a wide range of cities and included features that could represent the variation in cities (e.g. population, GDP per capita), we might be able come up with a model that can cover both urban and rural cities in different countries.\n", " - But that would be a complex model that wolud require exponentially more data." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.03494248780487805" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rough work calculations\n", "(28652.84/2)/410000" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p1-boston-housing/README.md ================================================ # Project 1: Model Evaluation & Validation ## Predicting Boston Housing Prices ### Install This project requires **Python 2.7** and the following Python libraries installed: - [NumPy](http://www.numpy.org/) - [matplotlib](http://matplotlib.org/) - [scikit-learn](http://scikit-learn.org/stable/) You will also need to have software installed to run and execute an [iPython Notebook](http://ipython.org/notebook.html) Udacity recommends our students install [Anaconda](https://www.continuum.io/downloads), a pre-packaged Python distribution that contains all of the necessary libraries and software for this project. ### Code Template code is provided in the `boston_housing.ipynb` notebook file. You will also be required to use the included `visuals.py` Python file and the `housing.csv` dataset file to complete your work. While some code has already been implemented to get you started, you will need to implement additional functionality when requested to successfully complete the project. ### Run In a terminal or command window, navigate to the top-level project directory `boston_housing/` (that contains this README) and run one of the following commands: ```ipython notebook boston_housing.ipynb``` ```jupyter notebook boston_housing.ipynb``` This will open the iPython Notebook software and project file in your browser. ### Data The dataset used in this project is included with the scikit-learn library ([`sklearn.datasets.load_boston`](http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_boston.html#sklearn.datasets.load_boston)). You do not have to download it separately. You can find more information on this dataset from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Housing) page. ================================================ FILE: p1-boston-housing/boston_housing.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Model Evaluation & Validation\n", "## Project 1: Predicting Boston Housing Prices\n", "\n", "Welcome to the first project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and you will need to implement additional functionality to successfully complete this project. You will not need to modify the included code beyond what is requested. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO' statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", "In this project, you will evaluate the performance and predictive power of a model that has been trained and tested on data collected from homes in suburbs of Boston, Massachusetts. A model trained on this data that is seen as a *good fit* could then be used to make certain predictions about a home — in particular, its monetary value. This model would prove to be invaluable for someone like a real estate agent who could make use of such information on a daily basis.\n", "\n", "The dataset for this project originates from the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Housing). The Boston housing data was collected in 1978 and each of the 506 entries represent aggregated data about 14 features for homes from various suburbs in Boston, Massachusetts. For the purposes of this project, the following preprocessing steps have been made to the dataset:\n", "- 16 data points have an `'MEDV'` value of 50.0. These data points likely contain **missing or censored values** and have been removed.\n", "- 1 data point has an `'RM'` value of 8.78. This data point can be considered an **outlier** and has been removed.\n", "- The features `'RM'`, `'LSTAT'`, `'PTRATIO'`, and `'MEDV'` are essential. The remaining **non-relevant features** have been excluded.\n", "- The feature `'MEDV'` has been **multiplicatively scaled** to account for 35 years of market inflation.\n", "\n", "Run the code cell below to load the Boston housing dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Boston housing dataset has 489 data points with 4 variables each.\n" ] } ], "source": [ "# Import libraries necessary for this project\n", "import numpy as np\n", "import pandas as pd\n", "import visuals as vs # Supplementary code\n", "from sklearn.cross_validation import ShuffleSplit\n", "\n", "# Pretty display for notebooks\n", "%matplotlib inline\n", "\n", "# Load the Boston housing dataset\n", "data = pd.read_csv('housing.csv')\n", "prices = data['MEDV']\n", "features = data.drop('MEDV', axis = 1)\n", " \n", "# Success\n", "print \"Boston housing dataset has {} data points with {} variables each.\".format(*data.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "In this first section of this project, you will make a cursory investigation about the Boston housing data and provide your observations. Familiarizing yourself with the data through an explorative process is a fundamental practice to help you better understand and justify your results.\n", "\n", "Since the main goal of this project is to construct a working model which has the capability of predicting the value of houses, we will need to separate the dataset into **features** and the **target variable**. The **features**, `'RM'`, `'LSTAT'`, and `'PTRATIO'`, give us quantitative information about each data point. The **target variable**, `'MEDV'`, will be the variable we seek to predict. These are stored in `features` and `prices`, respectively." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Calculate Statistics\n", "For your very first coding implementation, you will calculate descriptive statistics about the Boston housing prices. Since `numpy` has already been imported for you, use this library to perform the necessary calculations. These statistics will be extremely important later on to analyze various prediction results from the constructed model.\n", "\n", "In the code cell below, you will need to implement the following:\n", "- Calculate the minimum, maximum, mean, median, and standard deviation of `'MEDV'`, which is stored in `prices`.\n", " - Store each calculation in their respective variable." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics for Boston housing dataset:\n", "\n", "Minimum price: $105,000.00\n", "Maximum price: $1,024,800.00\n", "Mean price: $454,342.94\n", "Median price $438,900.00\n", "Standard deviation of prices: $165,171.13\n" ] } ], "source": [ "# TODO: Minimum price of the data\n", "minimum_price = np.min(prices)\n", "\n", "# TODO: Maximum price of the data\n", "maximum_price = np.max(prices)\n", "\n", "# TODO: Mean price of the data\n", "mean_price = np.mean(prices)\n", "\n", "# TODO: Median price of the data\n", "median_price = np.median(prices)\n", "\n", "# TODO: Standard deviation of prices of the data\n", "std_price = np.std(prices)\n", "\n", "# Show the calculated statistics\n", "print \"Statistics for Boston housing dataset:\\n\"\n", "print \"Minimum price: ${:,.2f}\".format(minimum_price)\n", "print \"Maximum price: ${:,.2f}\".format(maximum_price)\n", "print \"Mean price: ${:,.2f}\".format(mean_price)\n", "print \"Median price ${:,.2f}\".format(median_price)\n", "print \"Standard deviation of prices: ${:,.2f}\".format(std_price)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nZmZWiP8P9EgSll3r1RAAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Boxplot of prices to get a sense of the data\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "plt.title(\"Boston Home Prices\")\n", "plt.ylabel(\"Price (USD)\")\n", "plt.boxplot(prices)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Feature Observation\n", "As a reminder, we are using three features from the Boston housing dataset: `'RM'`, `'LSTAT'`, and `'PTRATIO'`. For each data point (neighborhood):\n", "- `'RM'` is the average number of rooms among homes in the neighborhood.\n", "- `'LSTAT'` is the percentage of homeowners in the neighborhood considered \"lower class\" (working poor).\n", "- `'PTRATIO'` is the ratio of students to teachers in primary and secondary schools in the neighborhood.\n", "\n", "_Using your intuition, for each of the three features above, do you think that an increase in the value of that feature would lead to an **increase** in the value of `'MEDV'` or a **decrease** in the value of `'MEDV'`? Justify your answer for each._ \n", "**Hint:** Would you expect a home that has an `'RM'` value of 6 be worth more or less than a home that has an `'RM'` value of 7?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. **`'RM'`: increase**. \n", " - An increase in the value of `'RM'` should lead to an increase in the value of `'MEDV'`.\n", " - Intuitively, homes with more rooms should have **larger floor area**. \n", " - Homes with larger floor area should be more expensive than homes with small area (if price per square foot is is similar), hence the guess for a positive relationship.\n", " - However, homes in cities with high prices and high prices per square foot (cities such as Hong Kong or New York) tend to be much smaller on average than homes in say rural France. If we compared **homes in Hong Kong with homes in rural France, there would be a negative relationship between `'RM'` and `'MEDV'`**.\n", " - But it is unlikely than there will be such high and large-scale regional variance within Boston.\n", "\n", "2. **`'LSTAT'`: decrease**. \n", " - An increase in the value of `'LSTAT'` should lead to an decrease in the value of `'MEDV'`.\n", " - If more people in the neighbourhood are the 'working poor', given (1) they usually have low income (by definition) and (2) they should've been able to afford their homes, their homes should tend to be relatively cheap.\n", " - Thus, the higher `'LSTAT'` is, the higher the percentage of relatively cheap homes in the area is likely to be. \n", " - The higher the percentage of relatively cheap homes in the area, the lower the average price of homes in the area.\n", "\n", "3. **`'PTRATIO'`: increase**. \n", " - An increase in the value of `'RM'` should lead to an increase in the value of `'MEDV'`.\n", " - A higher `'PTRATIO'` means there are more students to one teacher in schools. \n", " - Maintaining lower student-to-teacher ratios is more expensive and thus usually reflects more funding to schools either through tuition fees or donations. \n", " - This usually means people in the area are relatively well-off. \n", " - People who are more well-off often choose to buy more expensive homes since homes are normal goods. (As income increases, amount spent on said good increases.)\n", " - Thus the homes in the area are likely to be more expensive. That is, `'MDEV'` is likely to be higher.\n", "\n", "It is notable that the question asked whether an increase in the value of X would LEAD TO an increase in the value of Y. This is fine because this is an intuition-based question and not a statistical one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", "## Developing a Model\n", "In this second section of the project, you will develop the tools and techniques necessary for a model to make a prediction. Being able to make accurate evaluations of each model's performance through the use of these tools and techniques helps to greatly reinforce the confidence in your predictions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Define a Performance Metric\n", "It is difficult to measure the quality of a given model without quantifying its performance over training and testing. This is typically done using some type of performance metric, whether it is through calculating some type of error, the goodness of fit, or some other useful measurement. For this project, you will be calculating the [*coefficient of determination*](http://stattrek.com/statistics/dictionary.aspx?definition=coefficient_of_determination), R2, to quantify your model's performance. The coefficient of determination for a model is a useful statistic in regression analysis, as it often describes how \"good\" that model is at making predictions. \n", "\n", "The values for R2 range from 0 to 1, which captures the percentage of squared correlation between the predicted and actual values of the **target variable**. A model with an R2 of 0 always fails to predict the target variable, whereas a model with an R2 of 1 perfectly predicts the target variable. Any value between 0 and 1 indicates what percentage of the target variable, using this model, can be explained by the **features**. *A model can be given a negative R2 as well, which indicates that the model is no better than one that naively predicts the mean of the target variable.*\n", "\n", "For the `performance_metric` function in the code cell below, you will need to implement the following:\n", "- Use `r2_score` from `sklearn.metrics` to perform a performance calculation between `y_true` and `y_predict`.\n", "- Assign the performance score to the `score` variable." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'r2_score'\n", "from sklearn.metrics import r2_score\n", "\n", "def performance_metric(y_true, y_predict):\n", " \"\"\" Calculates and returns the performance score between \n", " true and predicted values based on the metric chosen. \"\"\"\n", " \n", " # TODO: Calculate the performance score between 'y_true' and 'y_predict'\n", " score = r2_score(y_true, y_predict)\n", " \n", " # Return the score\n", " return score" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Goodness of Fit\n", "Assume that a dataset contains five data points and a model made the following predictions for the target variable:\n", "\n", "| True Value | Prediction |\n", "| :-------------: | :--------: |\n", "| 3.0 | 2.5 |\n", "| -0.5 | 0.0 |\n", "| 2.0 | 2.1 |\n", "| 7.0 | 7.8 |\n", "| 4.2 | 5.3 |\n", "*Would you consider this model to have successfully captured the variation of the target variable? Why or why not?* \n", "\n", "Run the code cell below to use the `performance_metric` function and calculate this model's coefficient of determination." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model has a coefficient of determination, R^2, of 0.923.\n" ] } ], "source": [ "# Calculate the performance of this model\n", "score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])\n", "print \"Model has a coefficient of determination, R^2, of {:.3f}.\".format(score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "**Yes**, I'd consider this model to have successfully captured the variation of the target variable because\n", "1. The model has a **high R^2 of 0.923**. This means a 92.3% percentage of the target variable can be explained by the features using the model. So the model is pretty good.\n", "2. The model also got the ordering of all five datapoints in the dataset correct." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Shuffle and Split Data\n", "Your next implementation requires that you take the Boston housing dataset and split the data into training and testing subsets. Typically, the data is also shuffled into a random order when creating the training and testing subsets to remove any bias in the ordering of the dataset.\n", "\n", "For the code cell below, you will need to implement the following:\n", "- Use `train_test_split` from `sklearn.cross_validation` to shuffle and split the `features` and `prices` data into training and testing sets.\n", " - Split the data into 80% training and 20% testing.\n", " - Set the `random_state` for `train_test_split` to a value of your choice. This ensures results are consistent.\n", "- Assign the train and testing splits to `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training and testing split was successful.\n" ] } ], "source": [ "# TODO: Import 'train_test_split'\n", "from sklearn.cross_validation import train_test_split\n", "\n", "# TODO: Shuffle and split the data into training and testing subsets\n", "X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=7)\n", "\n", "# Success\n", "print \"Training and testing split was successful.\"" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (X,y): (391, 3) (391,)\n", "Test shapes (X,y): (98, 3) (98,)\n" ] } ], "source": [ "print \"Train shapes (X,y): \", X_train.shape, y_train.shape\n", "print \"Test shapes (X,y): \", X_test.shape, y_test.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Training and Testing\n", "*What is the benefit to splitting a dataset into some ratio of training and testing subsets for a learning algorithm?* \n", "**Hint:** What could go wrong with not having a way to test your model?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "\n", "It provides **more reliable evaluation metrics** and helps detect **overfitting**.\n", "1. If there was no training set, we wouldn't be able to train our model which would be bad because then our model would be purely based on (possibly random) initial values.\n", "\n", "2. If there was no test set, we wouldn't be able to test our model on unseen data. \n", " - That is, we would be making judgements about how good our model was purely on its performance on the training set.\n", " - Suppose we used `accuracy_score` as our performance metric. If we had e.g. an overfit decision tree with `accuracy_score = 0.98`, we might think it was an excellent model.\n", " - But it would not be excellent because it wouldn't generalise well. That is, it would perform well on examples it had seen before (because it had overfitted) but likely be terrible for examples it hadn't seen before.\n", " - **If we had test our model on unseen data, we would have a better idea as to whether the model generalised and so whether it was actually that good.** E.g. we may have had an `accuracy_score = 0.6` on test data, realised our model wasn't generalised and tried another one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", "## Analyzing Model Performance\n", "In this third section of the project, you'll take a look at several models' learning and testing performances on various subsets of training data. Additionally, you'll investigate one particular algorithm with an increasing `'max_depth'` parameter on the full training set to observe how model complexity affects performance. Graphing your model's performance based on varying criteria can be beneficial in the analysis process, such as visualizing behavior that may not have been apparent from the results alone." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Learning Curves\n", "The following code cell produces four graphs for a decision tree model with different maximum depths. Each graph visualizes the learning curves of the model for both training and testing as the size of the training set is increased. Note that the shaded region of a learning curve denotes the uncertainty of that curve (measured as the standard deviation). The model is scored on both the training and testing sets using R2, the coefficient of determination. \n", "\n", "Run the code cell below and use these graphs to answer the following question." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\nzlT9hrEwZ5qVIjYzUAPMYExK+J5+GrGMSStjAHxXXgl87WsL48h8voUMk86Jrq1AzLkdiwHHj6e/\ndlukzG55SwVsD7z2GrYdO5bd4vaBD2Dgj/7IfI/V9dLZBTMcNrtQNjUtfJ4zy6VzXFzmOte+DK6B\n8+7dNZPspFYDQWe5iIiIqLGxZYuWpoxAbejgQdzz/ventyCtW4cb/9f/wro1axbOteYQcc4n4gzc\nMr8j13g45xgwXTeDNitwc6wH7roL2w4ezCr+QE8Ptl16afa0AqqanjzF2pdMmt0dw2GzFS0UWtgu\ntM963dyctt7205/iZpd55u585zsxcNtt2RNJhsPp+zITnmRuu+0rcnvo0CHcc/XV6XPi1EDWy8wA\ntR4zYLEuJqJGw5Yt8hJbtmhpsiabTll39tm48be/XVyLm3McW+a8H27bzsmxrQDOGcw5tn2nnYZY\nKmCwxAD4LrwQuO22/GVy/qxWIhVVTV+SyYXALJlMD9Cci6KYiU6soC6RgJFRLiA1WeXgoDmpt65n\nTzxp/dy6vtDSVsxSyrmBAB7YtSt7DN4bb+DO974XA+97X+7xdLnG3LltZ56f71hq+4Gvf90OtIiI\niKjxMdgiSlm3YQMGfvSj0t8oxKISXxTjhh/8AAPvfnd6C83GjbjxO98B1q0rPqFJocXtPGdwaL12\n/My+L30JMZcpBnzveAfw5S+bO5ytexbrc62gK3NxBmXOczJfW4Gcte14r5FMugeC09PAxER6ApfM\nrqhu+8p0vjE9zUCLiIhoCWGwRVTD1m3ciBt/85vyjHErB0cQd8M992DgmmvSA8ENG3Djt7+dHghm\nvC9tAdyDvFzBn9sxl/2+ffvcx+Cdfz5w443pP0++JCvOY9Zr589UbFfI1Np3662IPfwwAy4iIqIl\ngmO2iGjRanmySteslw8/bJYvM+DLFRjme21tuwWIOV4PDQ3hnhtuwLbhYY7ZIiKqERyzRV5isEVE\nDamWA0GrXF9+/PG6u8CzLiaiRsNgi7zEYIuIqErq8QLPupiIGk091sVUP3zVLgAREREREVEjYrBF\nRERERETkAQZbREREREREHmCwRURERERE5AEGW0RERERERB5gsEVEREREROQBBltEREREREQeYLBF\nRERERETkAQZbREREREREHmCwRURERERE5AEGW0RERERERB5gsEVEREREROQBBltEREREREQe8DzY\n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\n/D+cJBlqTR21IAAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Produce learning curves for varying training set sizes and maximum depths\n", "vs.ModelLearning(features, prices)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Learning the Data\n", "*Choose one of the graphs above and state the maximum depth for the model. What happens to the score of the training curve as more training points are added? What about the testing curve? Would having more training points benefit the model?* \n", "**Hint:** Are the learning curves converging to particular scores?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: ** \n", "\n", "Chosen graph has **`max_depth = 1`**.\n", "\n", "**As more training points (TP) are added**,\n", "- **The score of the training curve decreases**.\n", " - It decreases dramatically from 1.0 (since there are 0 TP, it predicts perfectly) at 0 TP to just under 0.6 at 50 TP. \n", " - It then decreases slightly as TP increases.\n", " - The score the testing curve converges to is **just under 0.5**.\n", "- **The score of the testing curve increases** dramatically from <0 to just under 0.4 when the number of TP is increased from 0 to 50. \n", " - It then increases slightly (by less than 0.1) as the number of TP increases from 50 to 200\n", " - before plateauing or even decreasing slightly as more TP are added beyond 200 TP.\n", " - The score the testing curve converges to is roughly **0.4**.\n", " - Most gains are made by TP = 50.\n", "\n", "It **does not seem like the model will benefit from additional training points beyond 200 training points**.\n", "\n", "The final gap between the training and testing curve scores is small (< 0.1 and much smaller than in the other graphs). The error (~0.6) is quite high. This indicates that the model is **biased**.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Complexity Curves\n", "The following code cell produces a graph for a decision tree model that has been trained and validated on the training data using different maximum depths. The graph produces two complexity curves — one for training and one for validation. Similar to the **learning curves**, the shaded regions of both the complexity curves denote the uncertainty in those curves, and the model is scored on both the training and validation sets using the `performance_metric` function. \n", "\n", "Run the code cell below and use this graph to answer the following two questions." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vs.ModelComplexity(X_train, y_train)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Bias-Variance Tradeoff\n", "*When the model is trained with a maximum depth of 1, does the model suffer from high bias or from high variance? How about when the model is trained with a maximum depth of 10? What visual cues in the graph justify your conclusions?* \n", "**Hint:** How do you know when a model is suffering from high bias or high variance?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. When the model is trained with `max_depth = 1`,\n", " - it suffers from **high bias**.\n", " - We can infer this from two features:\n", " 1. The training and testing learning curves converge (the **gap between them is small**) at \n", " 2. a **high error of 0.6** as the number of training points increases.\n", " - This is shown in the model complexity graph where the gap between the training and validation scores is smaller than 0.1 and both scores are low (in the range 0.4-0.5), meaning the errors are high. \n", "2. When the model is trained with `max_depth = 10`,\n", " - it suffers from **high variance**.\n", " - We can infer this from the **large gap** between the training and validation scores in the model complexity graph. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6 - Best-Guess Optimal Model\n", "*Which maximum depth do you think results in a model that best generalizes to unseen data? What intuition lead you to this answer?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I think **`max_depth=3`** best generalises to unseen data.\n", "1. `max_depth=3` and `max_depth=4` have **roughly the highest validation score**, i.e. score on unseen data.\n", "2. Between those two, `max_depth=3` has a **lower variance** (as seen by the difference between training and testing scores), which suggests it **suffers less from overfitting** and generalises better. The validation score is thus more reliable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "-----\n", "\n", "## Evaluating Model Performance\n", "In this final section of the project, you will construct a model and make a prediction on the client's feature set using an optimized model from `fit_model`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7 - Grid Search\n", "*What is the grid search technique and how it can be applied to optimize a learning algorithm?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "1. The grid search technique tests different values within a given range for each parameter to see which (combination of) parameter value(s) is optimal. E.g. which combination of parameter values maximises the accuracy score.\n", "2. It can be applied to optimise a learning algorithm by **optimally tuning parameters to maximise performance score**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 8 - Cross-Validation\n", "*What is the k-fold cross-validation training technique? What benefit does this technique provide for grid search when optimizing a model?* \n", "**Hint:** Much like the reasoning behind having a testing set, what could go wrong with using grid search without a cross-validated set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "1. The k-fold cross-validation training technique equally partitions a dataset into k parts ('folds') without shuffling. \n", " - For each fold, it trains the model on data from the remaining (k-1) folds and then validates (tests) it on the data from the one fold. \n", " - It repeats this k times (once on each fold).\n", " - The k results can then be averaged to produce a single score.\n", "2. Benefits for Grid Search:\n", " - With k-fold CV, all data is used for training and all data is used for validation exactly once.\n", " - Suppose there is no cross-validated set. Then Grid Search may choose values of parameters than work well (score highly) for a particular validation/test set but **don't generalise**. \n", " - With a cross-validated set, there is more test data and the model is tested more times because the model is validated k times (each time on different data). So if the averaged score is high, the model (with parameters chosen from Grid Search) is more likely to be generalisable." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Fitting a Model\n", "Your final implementation requires that you bring everything together and train a model using the **decision tree algorithm**. To ensure that you are producing an optimized model, you will train the model using the grid search technique to optimize the `'max_depth'` parameter for the decision tree. The `'max_depth'` parameter can be thought of as how many questions the decision tree algorithm is allowed to ask about the data before making a prediction. Decision trees are part of a class of algorithms called *supervised learning algorithms*.\n", "\n", "For the `fit_model` function in the code cell below, you will need to implement the following:\n", "- Use [`DecisionTreeRegressor`](http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html) from `sklearn.tree` to create a decision tree regressor object.\n", " - Assign this object to the `'regressor'` variable.\n", "- Create a dictionary for `'max_depth'` with the values from 1 to 10, and assign this to the `'params'` variable.\n", "- Use [`make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html) from `sklearn.metrics` to create a scoring function object.\n", " - Pass the `performance_metric` function as a parameter to the object.\n", " - Assign this scoring function to the `'scoring_fnc'` variable.\n", "- Use [`GridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) from `sklearn.grid_search` to create a grid search object.\n", " - Pass the variables `'regressor'`, `'params'`, `'scoring_fnc'`, and `'cv_sets'` as parameters to the object. \n", " - Assign the `GridSearchCV` object to the `'grid'` variable." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'make_scorer', 'DecisionTreeRegressor', and 'GridSearchCV'\n", "from sklearn.tree import DecisionTreeRegressor\n", "from sklearn.metrics import make_scorer\n", "from sklearn.grid_search import GridSearchCV\n", "\n", "def fit_model(X, y):\n", " \"\"\" Performs grid search over the 'max_depth' parameter for a \n", " decision tree regressor trained on the input data [X, y]. \"\"\"\n", " \n", " # Create cross-validation sets from the training data\n", " cv_sets = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.20, random_state = 0)\n", "\n", " # TODO: Create a decision tree regressor object\n", " regressor = DecisionTreeRegressor()\n", "\n", " # TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10\n", " params = {'max_depth':range(1,11)}\n", "\n", " # TODO: Transform 'performance_metric' into a scoring function using 'make_scorer' \n", " scoring_fnc = make_scorer(performance_metric)\n", "\n", " # TODO: Create the grid search object\n", " grid = GridSearchCV(regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)\n", "\n", " # Fit the grid search object to the data to compute the optimal model\n", " grid = grid.fit(X, y)\n", "\n", " # Return the optimal model after fitting the data\n", " return grid.best_estimator_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Making Predictions\n", "Once a model has been trained on a given set of data, it can now be used to make predictions on new sets of input data. In the case of a *decision tree regressor*, the model has learned *what the best questions to ask about the input data are*, and can respond with a prediction for the **target variable**. You can use these predictions to gain information about data where the value of the target variable is unknown — such as data the model was not trained on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 9 - Optimal Model\n", "_What maximum depth does the optimal model have? How does this result compare to your guess in **Question 6**?_ \n", "\n", "Run the code block below to fit the decision tree regressor to the training data and produce an optimal model." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Parameter 'max_depth' is 4 for the optimal model.\n" ] } ], "source": [ "# Fit the training data to the model using grid search\n", "reg = fit_model(X_train, y_train)\n", "\n", "# Produce the value for 'max_depth'\n", "print \"Parameter 'max_depth' is {} for the optimal model.\".format(reg.get_params()['max_depth'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "The optimal model has **`max_depth = 4`**. \n", "- This is not what I guessed initially (I guessed `max_depth = 3`) but is reasonable because it did have a **slightly higher validation score** than `max_depth = 3`.\n", "- I guessed that `max_depth = 3` would be better because it had a similar validation score and had lower variance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 10 - Predicting Selling Prices\n", "Imagine that you were a real estate agent in the Boston area looking to use this model to help price homes owned by your clients that they wish to sell. You have collected the following information from three of your clients:\n", "\n", "| Feature | Client 1 | Client 2 | Client 3 |\n", "| :---: | :---: | :---: | :---: |\n", "| Total number of rooms in home | 5 rooms | 4 rooms | 8 rooms |\n", "| Neighborhood poverty level (as %) | 17% | 32% | 3% |\n", "| Student-teacher ratio of nearby schools | 15-to-1 | 22-to-1 | 12-to-1 |\n", "*What price would you recommend each client sell his/her home at? Do these prices seem reasonable given the values for the respective features?* \n", "**Hint:** Use the statistics you calculated in the **Data Exploration** section to help justify your response. \n", "\n", "Run the code block below to have your optimized model make predictions for each client's home." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Predicted selling price for Client 1's home: $407,232.00\n", "Predicted selling price for Client 2's home: $229,200.00\n", "Predicted selling price for Client 3's home: $979,300.00\n" ] } ], "source": [ "# Produce a matrix for client data\n", "client_data = [[5, 17, 15], # Client 1\n", " [4, 32, 22], # Client 2\n", " [8, 3, 12]] # Client 3\n", "client_prices = []\n", "# Show predictions\n", "for i, price in enumerate(reg.predict(client_data)):\n", " print \"Predicted selling price for Client {}'s home: ${:,.2f}\".format(i+1, price)\n", " client_prices.append(price)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. The recommended selling prices are:\n", " - Client 1: \\$407,232\n", " - Client 2: \\$229,200\n", " - Client 3: \\$979,300\n", "\n", "2. By intuition in Q1:\n", " - Client 3 has the highest `RMSTAT` (intuited positive relationship with price), the lowest `STRATIO` and the lowest `LSTAT` (Both intuited negative rel with price). \n", " - Client 2 has the lowest `RMSTAT`, the highest `STRATIO` and the highest `LSTAT`.\n", " - So based on intuition from Question 1, the **ordering of prices (Client 3 > Client 1 > Client 2) is reasonable**. \n", "\n", "3. Revisiting the statistics from the Data Exploration section:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Statistics for Boston housing dataset:\n", "\n", "Minimum price: $105,000.00\n", "Maximum price: $1,024,800.00\n", "Mean price: $454,342.94\n", "Median price $438,900.00\n", "Standard deviation of prices: $165,171.13\n" ] } ], "source": [ "# Show the calculated statistics\n", "print \"Statistics for Boston housing dataset:\\n\"\n", "print \"Minimum price: ${:,.2f}\".format(minimum_price)\n", "print \"Maximum price: ${:,.2f}\".format(maximum_price)\n", "print \"Mean price: ${:,.2f}\".format(mean_price)\n", "print \"Median price ${:,.2f}\".format(median_price)\n", "print \"Standard deviation of prices: ${:,.2f}\".format(std_price)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " * The prices are all within the min-max of existing house prices, so they are not outrageous.\n", " * I'd argue that it is difficult to justify the reasonable-ness of the predicted prices purely based on the Data Exploration statistics (beyond whether or not the prices are obviously crazy). We need more information on the distribution of `RMSTAT`, `PTRATIO` and `LSTAT`." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Stds away from the mean (Client 1): -0.285225053221\n", "Stds away from the mean (Client 2): -1.36308895314\n", "Stds away from the mean (Client 3): 3.17826154187\n" ] } ], "source": [ "print \"Stds away from the mean (Client 1): \", (client_prices[0]-mean_price)/std_price\n", "print \"Stds away from the mean (Client 2): \", (client_prices[1]-mean_price)/std_price\n", "print \"Stds away from the mean (Client 3): \", (client_prices[2]-mean_price)/std_price" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sensitivity\n", "An optimal model is not necessarily a robust model. Sometimes, a model is either too complex or too simple to sufficiently generalize to new data. Sometimes, a model could use a learning algorithm that is not appropriate for the structure of the data given. Other times, the data itself could be too noisy or contain too few samples to allow a model to adequately capture the target variable — i.e., the model is underfitted. Run the code cell below to run the `fit_model` function ten times with different training and testing sets to see how the prediction for a specific client changes with the data it's trained on." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Trial 1: $391,183.33\n", "Trial 2: $419,700.00\n", "Trial 3: $415,800.00\n", "Trial 4: $420,622.22\n", "Trial 5: $418,377.27\n", "Trial 6: $411,931.58\n", "Trial 7: $399,663.16\n", "Trial 8: $407,232.00\n", "Trial 9: $351,577.61\n", "Trial 10: $413,700.00\n", "\n", "Range in prices: $69,044.61\n" ] } ], "source": [ "vs.PredictTrials(features, prices, fit_model, client_data)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 11 - Applicability\n", "*In a few sentences, discuss whether the constructed model should or should not be used in a real-world setting.* \n", "**Hint:** Some questions to answer:\n", "- *How relevant today is data that was collected from 1978?*\n", "- *Are the features present in the data sufficient to describe a home?*\n", "- *Is the model robust enough to make consistent predictions?*\n", "- *Would data collected in an urban city like Boston be applicable in a rural city?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "1. House prices have changed greatly since 1978. \n", " - Taking inflation into account is insufficient because housing prices are highly volatile. \n", " - So even a model based on data from 3 years ago might not be useful today.\n", "2. Features presented are not sufficient to describe a home.\n", " - Important features may include square feet, other aspects of location (proximity to transport, places of work, grocery stores, schools, leisure facilities), state of house (age, whether it's recently been refurbished).\n", " - But with more features comes the need for exponentially more data (the Curse of Dimensionality).\n", "3. The model does not make consistent predictions, as seen in the Sensitivity section above.\n", " - The range in prices of \\$28,652.84 is non-trivial - for some, it is more than 6 months' worth of the median US salary.\n", " - But if you look at the percentage variation it's about +/- 3.5% which isn't that much. \n", " - Calculation ((28652.84/2)/410000), 410k estimated by eye.\n", "4. No, data collected in an urban city like Boston would not be applicable in a rural city. So the predictions in this model **should not be used in other cities**. \n", " - If we constructed a model based on data from a wide range of cities and included features that could represent the variation in cities (e.g. population, GDP per capita), we might be able come up with a model that can cover both urban and rural cities in different countries.\n", " - But that would be a complex model that wolud require exponentially more data." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.03494248780487805" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rough work calculations\n", "(28652.84/2)/410000" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p1-boston-housing/housing.csv ================================================ RM,LSTAT,PTRATIO,MEDV 6.575,4.98,15.3,504000.0 6.421,9.14,17.8,453600.0 7.185,4.03,17.8,728700.0 6.998,2.94,18.7,701400.0 7.147,5.33,18.7,760200.0 6.43,5.21,18.7,602700.0 6.012,12.43,15.2,480900.0 6.172,19.15,15.2,569100.0 5.631,29.93,15.2,346500.0 6.004,17.1,15.2,396900.0 6.377,20.45,15.2,315000.0 6.009,13.27,15.2,396900.0 5.889,15.71,15.2,455700.0 5.949,8.26,21.0,428400.0 6.096,10.26,21.0,382200.0 5.834,8.47,21.0,417900.0 5.935,6.58,21.0,485100.0 5.99,14.67,21.0,367500.0 5.456,11.69,21.0,424200.0 5.727,11.28,21.0,382200.0 5.57,21.02,21.0,285600.0 5.965,13.83,21.0,411600.0 6.142,18.72,21.0,319200.0 5.813,19.88,21.0,304500.0 5.924,16.3,21.0,327600.0 5.599,16.51,21.0,291900.0 5.813,14.81,21.0,348600.0 6.047,17.28,21.0,310800.0 6.495,12.8,21.0,386400.0 6.674,11.98,21.0,441000.0 5.713,22.6,21.0,266700.0 6.072,13.04,21.0,304500.0 5.95,27.71,21.0,277200.0 5.701,18.35,21.0,275100.0 6.096,20.34,21.0,283500.0 5.933,9.68,19.2,396900.0 5.841,11.41,19.2,420000.0 5.85,8.77,19.2,441000.0 5.966,10.13,19.2,518700.0 6.595,4.32,18.3,646800.0 7.024,1.98,18.3,732900.0 6.77,4.84,17.9,558600.0 6.169,5.81,17.9,531300.0 6.211,7.44,17.9,518700.0 6.069,9.55,17.9,445200.0 5.682,10.21,17.9,405300.0 5.786,14.15,17.9,420000.0 6.03,18.8,17.9,348600.0 5.399,30.81,17.9,302400.0 5.602,16.2,17.9,407400.0 5.963,13.45,16.8,413700.0 6.115,9.43,16.8,430500.0 6.511,5.28,16.8,525000.0 5.998,8.43,16.8,491400.0 5.888,14.8,21.1,396900.0 7.249,4.81,17.9,743400.0 6.383,5.77,17.3,518700.0 6.816,3.95,15.1,663600.0 6.145,6.86,19.7,489300.0 5.927,9.22,19.7,411600.0 5.741,13.15,19.7,392700.0 5.966,14.44,19.7,336000.0 6.456,6.73,19.7,466200.0 6.762,9.5,19.7,525000.0 7.104,8.05,18.6,693000.0 6.29,4.67,16.1,493500.0 5.787,10.24,16.1,407400.0 5.878,8.1,18.9,462000.0 5.594,13.09,18.9,365400.0 5.885,8.79,18.9,438900.0 6.417,6.72,19.2,508200.0 5.961,9.88,19.2,455700.0 6.065,5.52,19.2,478800.0 6.245,7.54,19.2,491400.0 6.273,6.78,18.7,506100.0 6.286,8.94,18.7,449400.0 6.279,11.97,18.7,420000.0 6.14,10.27,18.7,436800.0 6.232,12.34,18.7,445200.0 5.874,9.1,18.7,426300.0 6.727,5.29,19.0,588000.0 6.619,7.22,19.0,501900.0 6.302,6.72,19.0,520800.0 6.167,7.51,19.0,480900.0 6.389,9.62,18.5,501900.0 6.63,6.53,18.5,558600.0 6.015,12.86,18.5,472500.0 6.121,8.44,18.5,466200.0 7.007,5.5,17.8,495600.0 7.079,5.7,17.8,602700.0 6.417,8.81,17.8,474600.0 6.405,8.2,17.8,462000.0 6.442,8.16,18.2,480900.0 6.211,6.21,18.2,525000.0 6.249,10.59,18.2,432600.0 6.625,6.65,18.0,596400.0 6.163,11.34,18.0,449400.0 8.069,4.21,18.0,812700.0 7.82,3.57,18.0,919800.0 7.416,6.19,18.0,697200.0 6.727,9.42,20.9,577500.0 6.781,7.67,20.9,556500.0 6.405,10.63,20.9,390600.0 6.137,13.44,20.9,405300.0 6.167,12.33,20.9,422100.0 5.851,16.47,20.9,409500.0 5.836,18.66,20.9,409500.0 6.127,14.09,20.9,428400.0 6.474,12.27,20.9,415800.0 6.229,15.55,20.9,407400.0 6.195,13.0,20.9,455700.0 6.715,10.16,17.8,478800.0 5.913,16.21,17.8,394800.0 6.092,17.09,17.8,392700.0 6.254,10.45,17.8,388500.0 5.928,15.76,17.8,384300.0 6.176,12.04,17.8,445200.0 6.021,10.3,17.8,403200.0 5.872,15.37,17.8,428400.0 5.731,13.61,17.8,405300.0 5.87,14.37,19.1,462000.0 6.004,14.27,19.1,426300.0 5.961,17.93,19.1,430500.0 5.856,25.41,19.1,363300.0 5.879,17.58,19.1,394800.0 5.986,14.81,19.1,449400.0 5.613,27.26,19.1,329700.0 5.693,17.19,21.2,340200.0 6.431,15.39,21.2,378000.0 5.637,18.34,21.2,300300.0 6.458,12.6,21.2,403200.0 6.326,12.26,21.2,411600.0 6.372,11.12,21.2,483000.0 5.822,15.03,21.2,386400.0 5.757,17.31,21.2,327600.0 6.335,16.96,21.2,380100.0 5.942,16.9,21.2,365400.0 6.454,14.59,21.2,359100.0 5.857,21.32,21.2,279300.0 6.151,18.46,21.2,373800.0 6.174,24.16,21.2,294000.0 5.019,34.41,21.2,302400.0 5.403,26.82,14.7,281400.0 5.468,26.42,14.7,327600.0 4.903,29.29,14.7,247800.0 6.13,27.8,14.7,289800.0 5.628,16.65,14.7,327600.0 4.926,29.53,14.7,306600.0 5.186,28.32,14.7,373800.0 5.597,21.45,14.7,323400.0 6.122,14.1,14.7,451500.0 5.404,13.28,14.7,411600.0 5.012,12.12,14.7,321300.0 5.709,15.79,14.7,407400.0 6.129,15.12,14.7,357000.0 6.152,15.02,14.7,327600.0 5.272,16.14,14.7,275100.0 6.943,4.59,14.7,867300.0 6.066,6.43,14.7,510300.0 6.51,7.39,14.7,489300.0 6.25,5.5,14.7,567000.0 5.854,11.64,14.7,476700.0 6.101,9.81,14.7,525000.0 5.877,12.14,14.7,499800.0 6.319,11.1,14.7,499800.0 6.402,11.32,14.7,468300.0 5.875,14.43,14.7,365400.0 5.88,12.03,14.7,401100.0 5.572,14.69,16.6,485100.0 6.416,9.04,16.6,495600.0 5.859,9.64,16.6,474600.0 6.546,5.33,16.6,617400.0 6.02,10.11,16.6,487200.0 6.315,6.29,16.6,516600.0 6.86,6.92,16.6,627900.0 6.98,5.04,17.8,781200.0 7.765,7.56,17.8,835800.0 6.144,9.45,17.8,760200.0 7.155,4.82,17.8,795900.0 6.563,5.68,17.8,682500.0 5.604,13.98,17.8,554400.0 6.153,13.15,17.8,621600.0 6.782,6.68,15.2,672000.0 6.556,4.56,15.2,625800.0 7.185,5.39,15.2,732900.0 6.951,5.1,15.2,777000.0 6.739,4.69,15.2,640500.0 7.178,2.87,15.2,764400.0 6.8,5.03,15.6,653100.0 6.604,4.38,15.6,611100.0 7.287,4.08,12.6,699300.0 7.107,8.61,12.6,636300.0 7.274,6.62,12.6,726600.0 6.975,4.56,17.0,732900.0 7.135,4.45,17.0,690900.0 6.162,7.43,14.7,506100.0 7.61,3.11,14.7,888300.0 7.853,3.81,14.7,1018500.0 5.891,10.87,18.6,474600.0 6.326,10.97,18.6,512400.0 5.783,18.06,18.6,472500.0 6.064,14.66,18.6,512400.0 5.344,23.09,18.6,420000.0 5.96,17.27,18.6,455700.0 5.404,23.98,18.6,405300.0 5.807,16.03,18.6,470400.0 6.375,9.38,18.6,590100.0 5.412,29.55,18.6,497700.0 6.182,9.47,18.6,525000.0 5.888,13.51,16.4,489300.0 6.642,9.69,16.4,602700.0 5.951,17.92,16.4,451500.0 6.373,10.5,16.4,483000.0 6.951,9.71,17.4,560700.0 6.164,21.46,17.4,455700.0 6.879,9.93,17.4,577500.0 6.618,7.6,17.4,632100.0 8.266,4.14,17.4,940800.0 8.04,3.13,17.4,789600.0 7.163,6.36,17.4,663600.0 7.686,3.92,17.4,980700.0 6.552,3.76,17.4,661500.0 5.981,11.65,17.4,510300.0 7.412,5.25,17.4,665700.0 8.337,2.47,17.4,875700.0 8.247,3.95,17.4,1014300.0 6.726,8.05,17.4,609000.0 6.086,10.88,17.4,504000.0 6.631,9.54,17.4,527100.0 7.358,4.73,17.4,661500.0 6.481,6.36,16.6,497700.0 6.606,7.37,16.6,489300.0 6.897,11.38,16.6,462000.0 6.095,12.4,16.6,422100.0 6.358,11.22,16.6,466200.0 6.393,5.19,16.6,497700.0 5.593,12.5,19.1,369600.0 5.605,18.46,19.1,388500.0 6.108,9.16,19.1,510300.0 6.226,10.15,19.1,430500.0 6.433,9.52,19.1,514500.0 6.718,6.56,19.1,550200.0 6.487,5.9,19.1,512400.0 6.438,3.59,19.1,520800.0 6.957,3.53,19.1,621600.0 8.259,3.54,19.1,898800.0 6.108,6.57,16.4,459900.0 5.876,9.25,16.4,438900.0 7.454,3.11,15.9,924000.0 7.333,7.79,13.0,756000.0 6.842,6.9,13.0,632100.0 7.203,9.59,13.0,709800.0 7.52,7.26,13.0,905100.0 8.398,5.91,13.0,1024800.0 7.327,11.25,13.0,651000.0 7.206,8.1,13.0,766500.0 5.56,10.45,13.0,478800.0 7.014,14.79,13.0,644700.0 7.47,3.16,13.0,913500.0 5.92,13.65,18.6,434700.0 5.856,13.0,18.6,443100.0 6.24,6.59,18.6,529200.0 6.538,7.73,18.6,512400.0 7.691,6.58,18.6,739200.0 6.758,3.53,17.6,680400.0 6.854,2.98,17.6,672000.0 7.267,6.05,17.6,697200.0 6.826,4.16,17.6,695100.0 6.482,7.19,17.6,611100.0 6.812,4.85,14.9,737100.0 7.82,3.76,14.9,953400.0 6.968,4.59,14.9,743400.0 7.645,3.01,14.9,966000.0 7.088,7.85,15.3,676200.0 6.453,8.23,15.3,462000.0 6.23,12.93,18.2,422100.0 6.209,7.14,16.6,487200.0 6.315,7.6,16.6,468300.0 6.565,9.51,16.6,520800.0 6.861,3.33,19.2,598500.0 7.148,3.56,19.2,783300.0 6.63,4.7,19.2,585900.0 6.127,8.58,16.0,501900.0 6.009,10.4,16.0,455700.0 6.678,6.27,16.0,600600.0 6.549,7.39,16.0,569100.0 5.79,15.84,16.0,426300.0 6.345,4.97,14.8,472500.0 7.041,4.74,14.8,609000.0 6.871,6.07,14.8,520800.0 6.59,9.5,16.1,462000.0 6.495,8.67,16.1,554400.0 6.982,4.86,16.1,695100.0 7.236,6.93,18.4,758100.0 6.616,8.93,18.4,596400.0 7.42,6.47,18.4,701400.0 6.849,7.53,18.4,592200.0 6.635,4.54,18.4,478800.0 5.972,9.97,18.4,426300.0 4.973,12.64,18.4,338100.0 6.122,5.98,18.4,464100.0 6.023,11.72,18.4,407400.0 6.266,7.9,18.4,453600.0 6.567,9.28,18.4,499800.0 5.705,11.5,18.4,340200.0 5.914,18.33,18.4,373800.0 5.782,15.94,18.4,415800.0 6.382,10.36,18.4,485100.0 6.113,12.73,18.4,441000.0 6.426,7.2,19.6,499800.0 6.376,6.87,19.6,485100.0 6.041,7.7,19.6,428400.0 5.708,11.74,19.6,388500.0 6.415,6.12,19.6,525000.0 6.431,5.08,19.6,516600.0 6.312,6.15,19.6,483000.0 6.083,12.79,19.6,466200.0 5.868,9.97,16.9,405300.0 6.333,7.34,16.9,474600.0 6.144,9.09,16.9,415800.0 5.706,12.43,16.9,359100.0 6.031,7.83,16.9,407400.0 6.316,5.68,20.2,466200.0 6.31,6.75,20.2,434700.0 6.037,8.01,20.2,443100.0 5.869,9.8,20.2,409500.0 5.895,10.56,20.2,388500.0 6.059,8.51,20.2,432600.0 5.985,9.74,20.2,399000.0 5.968,9.29,20.2,392700.0 7.241,5.49,15.5,686700.0 6.54,8.65,15.9,346500.0 6.696,7.18,17.6,501900.0 6.874,4.61,17.6,655200.0 6.014,10.53,18.8,367500.0 5.898,12.67,18.8,361200.0 6.516,6.36,17.9,485100.0 6.635,5.99,17.0,514500.0 6.939,5.89,19.7,558600.0 6.49,5.98,19.7,480900.0 6.579,5.49,18.3,506100.0 5.884,7.79,18.3,390600.0 6.728,4.5,17.0,632100.0 5.663,8.05,22.0,382200.0 5.936,5.57,22.0,432600.0 6.212,17.6,20.2,373800.0 6.395,13.27,20.2,455700.0 6.127,11.48,20.2,476700.0 6.112,12.67,20.2,474600.0 6.398,7.79,20.2,525000.0 6.251,14.19,20.2,417900.0 5.362,10.19,20.2,436800.0 5.803,14.64,20.2,352800.0 3.561,7.12,20.2,577500.0 4.963,14.0,20.2,459900.0 3.863,13.33,20.2,485100.0 4.906,34.77,20.2,289800.0 4.138,37.97,20.2,289800.0 7.313,13.44,20.2,315000.0 6.649,23.24,20.2,291900.0 6.794,21.24,20.2,279300.0 6.38,23.69,20.2,275100.0 6.223,21.78,20.2,214200.0 6.968,17.21,20.2,218400.0 6.545,21.08,20.2,228900.0 5.536,23.6,20.2,237300.0 5.52,24.56,20.2,258300.0 4.368,30.63,20.2,184800.0 5.277,30.81,20.2,151200.0 4.652,28.28,20.2,220500.0 5.0,31.99,20.2,155400.0 4.88,30.62,20.2,214200.0 5.39,20.85,20.2,241500.0 5.713,17.11,20.2,317100.0 6.051,18.76,20.2,487200.0 5.036,25.68,20.2,203700.0 6.193,15.17,20.2,289800.0 5.887,16.35,20.2,266700.0 6.471,17.12,20.2,275100.0 6.405,19.37,20.2,262500.0 5.747,19.92,20.2,178500.0 5.453,30.59,20.2,105000.0 5.852,29.97,20.2,132300.0 5.987,26.77,20.2,117600.0 6.343,20.32,20.2,151200.0 6.404,20.31,20.2,254100.0 5.349,19.77,20.2,174300.0 5.531,27.38,20.2,178500.0 5.683,22.98,20.2,105000.0 4.138,23.34,20.2,249900.0 5.608,12.13,20.2,585900.0 5.617,26.4,20.2,361200.0 6.852,19.78,20.2,577500.0 5.757,10.11,20.2,315000.0 6.657,21.22,20.2,361200.0 4.628,34.37,20.2,375900.0 5.155,20.08,20.2,342300.0 4.519,36.98,20.2,147000.0 6.434,29.05,20.2,151200.0 6.782,25.79,20.2,157500.0 5.304,26.64,20.2,218400.0 5.957,20.62,20.2,184800.0 6.824,22.74,20.2,176400.0 6.411,15.02,20.2,350700.0 6.006,15.7,20.2,298200.0 5.648,14.1,20.2,436800.0 6.103,23.29,20.2,281400.0 5.565,17.16,20.2,245700.0 5.896,24.39,20.2,174300.0 5.837,15.69,20.2,214200.0 6.202,14.52,20.2,228900.0 6.193,21.52,20.2,231000.0 6.38,24.08,20.2,199500.0 6.348,17.64,20.2,304500.0 6.833,19.69,20.2,296100.0 6.425,12.03,20.2,338100.0 6.436,16.22,20.2,300300.0 6.208,15.17,20.2,245700.0 6.629,23.27,20.2,281400.0 6.461,18.05,20.2,201600.0 6.152,26.45,20.2,182700.0 5.935,34.02,20.2,176400.0 5.627,22.88,20.2,268800.0 5.818,22.11,20.2,220500.0 6.406,19.52,20.2,359100.0 6.219,16.59,20.2,386400.0 6.485,18.85,20.2,323400.0 5.854,23.79,20.2,226800.0 6.459,23.98,20.2,247800.0 6.341,17.79,20.2,312900.0 6.251,16.44,20.2,264600.0 6.185,18.13,20.2,296100.0 6.417,19.31,20.2,273000.0 6.749,17.44,20.2,281400.0 6.655,17.73,20.2,319200.0 6.297,17.27,20.2,338100.0 7.393,16.74,20.2,373800.0 6.728,18.71,20.2,312900.0 6.525,18.13,20.2,296100.0 5.976,19.01,20.2,266700.0 5.936,16.94,20.2,283500.0 6.301,16.23,20.2,312900.0 6.081,14.7,20.2,420000.0 6.701,16.42,20.2,344400.0 6.376,14.65,20.2,371700.0 6.317,13.99,20.2,409500.0 6.513,10.29,20.2,424200.0 6.209,13.22,20.2,449400.0 5.759,14.13,20.2,417900.0 5.952,17.15,20.2,399000.0 6.003,21.32,20.2,401100.0 5.926,18.13,20.2,401100.0 5.713,14.76,20.2,422100.0 6.167,16.29,20.2,417900.0 6.229,12.87,20.2,411600.0 6.437,14.36,20.2,487200.0 6.98,11.66,20.2,625800.0 5.427,18.14,20.2,289800.0 6.162,24.1,20.2,279300.0 6.484,18.68,20.2,350700.0 5.304,24.91,20.2,252000.0 6.185,18.03,20.2,306600.0 6.229,13.11,20.2,449400.0 6.242,10.74,20.2,483000.0 6.75,7.74,20.2,497700.0 7.061,7.01,20.2,525000.0 5.762,10.42,20.2,457800.0 5.871,13.34,20.2,432600.0 6.312,10.58,20.2,445200.0 6.114,14.98,20.2,401100.0 5.905,11.45,20.2,432600.0 5.454,18.06,20.1,319200.0 5.414,23.97,20.1,147000.0 5.093,29.68,20.1,170100.0 5.983,18.07,20.1,285600.0 5.983,13.35,20.1,422100.0 5.707,12.01,19.2,457800.0 5.926,13.59,19.2,514500.0 5.67,17.6,19.2,485100.0 5.39,21.14,19.2,413700.0 5.794,14.1,19.2,384300.0 6.019,12.92,19.2,445200.0 5.569,15.1,19.2,367500.0 6.027,14.33,19.2,352800.0 6.593,9.67,21.0,470400.0 6.12,9.08,21.0,432600.0 6.976,5.64,21.0,501900.0 6.794,6.48,21.0,462000.0 6.03,7.88,21.0,249900.0 ================================================ FILE: p1-boston-housing/report.html ================================================ boston_housing

Machine Learning Engineer Nanodegree

Model Evaluation & Validation

Project 1: Predicting Boston Housing Prices

Welcome to the first project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and you will need to implement additional functionality to successfully complete this project. You will not need to modify the included code beyond what is requested. Sections that begin with 'Implementation' in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO' statement. Please be sure to read the instructions carefully!

In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a 'Question X' header. Carefully read each question and provide thorough answers in the following text boxes that begin with 'Answer:'. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide.

Note: Code and Markdown cells can be executed using the Shift + Enter keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode.

Getting Started

In this project, you will evaluate the performance and predictive power of a model that has been trained and tested on data collected from homes in suburbs of Boston, Massachusetts. A model trained on this data that is seen as a good fit could then be used to make certain predictions about a home — in particular, its monetary value. This model would prove to be invaluable for someone like a real estate agent who could make use of such information on a daily basis.

The dataset for this project originates from the UCI Machine Learning Repository. The Boston housing data was collected in 1978 and each of the 506 entries represent aggregated data about 14 features for homes from various suburbs in Boston, Massachusetts. For the purposes of this project, the following preprocessing steps have been made to the dataset:

  • 16 data points have an 'MEDV' value of 50.0. These data points likely contain missing or censored values and have been removed.
  • 1 data point has an 'RM' value of 8.78. This data point can be considered an outlier and has been removed.
  • The features 'RM', 'LSTAT', 'PTRATIO', and 'MEDV' are essential. The remaining non-relevant features have been excluded.
  • The feature 'MEDV' has been multiplicatively scaled to account for 35 years of market inflation.

Run the code cell below to load the Boston housing dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported.

In [1]:
# Import libraries necessary for this project
import numpy as np
import pandas as pd
import visuals as vs # Supplementary code
from sklearn.cross_validation import ShuffleSplit

# Pretty display for notebooks
%matplotlib inline

# Load the Boston housing dataset
data = pd.read_csv('housing.csv')
prices = data['MEDV']
features = data.drop('MEDV', axis = 1)
    
# Success
print "Boston housing dataset has {} data points with {} variables each.".format(*data.shape)
Boston housing dataset has 489 data points with 4 variables each.

Data Exploration

In this first section of this project, you will make a cursory investigation about the Boston housing data and provide your observations. Familiarizing yourself with the data through an explorative process is a fundamental practice to help you better understand and justify your results.

Since the main goal of this project is to construct a working model which has the capability of predicting the value of houses, we will need to separate the dataset into features and the target variable. The features, 'RM', 'LSTAT', and 'PTRATIO', give us quantitative information about each data point. The target variable, 'MEDV', will be the variable we seek to predict. These are stored in features and prices, respectively.

Implementation: Calculate Statistics

For your very first coding implementation, you will calculate descriptive statistics about the Boston housing prices. Since numpy has already been imported for you, use this library to perform the necessary calculations. These statistics will be extremely important later on to analyze various prediction results from the constructed model.

In the code cell below, you will need to implement the following:

  • Calculate the minimum, maximum, mean, median, and standard deviation of 'MEDV', which is stored in prices.
    • Store each calculation in their respective variable.
In [2]:
# TODO: Minimum price of the data
minimum_price = np.min(prices)

# TODO: Maximum price of the data
maximum_price = np.max(prices)

# TODO: Mean price of the data
mean_price = np.mean(prices)

# TODO: Median price of the data
median_price = np.median(prices)

# TODO: Standard deviation of prices of the data
std_price = np.std(prices)

# Show the calculated statistics
print "Statistics for Boston housing dataset:\n"
print "Minimum price: ${:,.2f}".format(minimum_price)
print "Maximum price: ${:,.2f}".format(maximum_price)
print "Mean price: ${:,.2f}".format(mean_price)
print "Median price ${:,.2f}".format(median_price)
print "Standard deviation of prices: ${:,.2f}".format(std_price)
Statistics for Boston housing dataset:

Minimum price: $105,000.00
Maximum price: $1,024,800.00
Mean price: $454,342.94
Median price $438,900.00
Standard deviation of prices: $165,171.13
In [3]:
# Boxplot of prices to get a sense of the data

import matplotlib.pyplot as plt
%matplotlib inline

plt.title("Boston Home Prices")
plt.ylabel("Price (USD)")
plt.boxplot(prices)
plt.show()

Question 1 - Feature Observation

As a reminder, we are using three features from the Boston housing dataset: 'RM', 'LSTAT', and 'PTRATIO'. For each data point (neighborhood):

  • 'RM' is the average number of rooms among homes in the neighborhood.
  • 'LSTAT' is the percentage of homeowners in the neighborhood considered "lower class" (working poor).
  • 'PTRATIO' is the ratio of students to teachers in primary and secondary schools in the neighborhood.

Using your intuition, for each of the three features above, do you think that an increase in the value of that feature would lead to an increase in the value of 'MEDV' or a decrease in the value of 'MEDV'? Justify your answer for each.
Hint: Would you expect a home that has an 'RM' value of 6 be worth more or less than a home that has an 'RM' value of 7?

Answer:

  1. 'RM': increase.

    • An increase in the value of 'RM' should lead to an increase in the value of 'MEDV'.
    • Intuitively, homes with more rooms should have larger floor area.
    • Homes with larger floor area should be more expensive than homes with small area (if price per square foot is is similar), hence the guess for a positive relationship.
    • However, homes in cities with high prices and high prices per square foot (cities such as Hong Kong or New York) tend to be much smaller on average than homes in say rural France. If we compared homes in Hong Kong with homes in rural France, there would be a negative relationship between 'RM' and 'MEDV'.
    • But it is unlikely than there will be such high and large-scale regional variance within Boston.
  2. 'LSTAT': decrease.

    • An increase in the value of 'LSTAT' should lead to an decrease in the value of 'MEDV'.
    • If more people in the neighbourhood are the 'working poor', given (1) they usually have low income (by definition) and (2) they should've been able to afford their homes, their homes should tend to be relatively cheap.
    • Thus, the higher 'LSTAT' is, the higher the percentage of relatively cheap homes in the area is likely to be.
    • The higher the percentage of relatively cheap homes in the area, the lower the average price of homes in the area.
  3. 'PTRATIO': increase.

    • An increase in the value of 'RM' should lead to an increase in the value of 'MEDV'.
    • A higher 'PTRATIO' means there are more students to one teacher in schools.
    • Maintaining lower student-to-teacher ratios is more expensive and thus usually reflects more funding to schools either through tuition fees or donations.
    • This usually means people in the area are relatively well-off.
    • People who are more well-off often choose to buy more expensive homes since homes are normal goods. (As income increases, amount spent on said good increases.)
    • Thus the homes in the area are likely to be more expensive. That is, 'MDEV' is likely to be higher.

It is notable that the question asked whether an increase in the value of X would LEAD TO an increase in the value of Y. This is fine because this is an intuition-based question and not a statistical one.


Developing a Model

In this second section of the project, you will develop the tools and techniques necessary for a model to make a prediction. Being able to make accurate evaluations of each model's performance through the use of these tools and techniques helps to greatly reinforce the confidence in your predictions.

Implementation: Define a Performance Metric

It is difficult to measure the quality of a given model without quantifying its performance over training and testing. This is typically done using some type of performance metric, whether it is through calculating some type of error, the goodness of fit, or some other useful measurement. For this project, you will be calculating the coefficient of determination, R2, to quantify your model's performance. The coefficient of determination for a model is a useful statistic in regression analysis, as it often describes how "good" that model is at making predictions.

The values for R2 range from 0 to 1, which captures the percentage of squared correlation between the predicted and actual values of the target variable. A model with an R2 of 0 always fails to predict the target variable, whereas a model with an R2 of 1 perfectly predicts the target variable. Any value between 0 and 1 indicates what percentage of the target variable, using this model, can be explained by the features. A model can be given a negative R2 as well, which indicates that the model is no better than one that naively predicts the mean of the target variable.

For the performance_metric function in the code cell below, you will need to implement the following:

  • Use r2_score from sklearn.metrics to perform a performance calculation between y_true and y_predict.
  • Assign the performance score to the score variable.
In [4]:
# TODO: Import 'r2_score'
from sklearn.metrics import r2_score

def performance_metric(y_true, y_predict):
    """ Calculates and returns the performance score between 
        true and predicted values based on the metric chosen. """
    
    # TODO: Calculate the performance score between 'y_true' and 'y_predict'
    score = r2_score(y_true, y_predict)
    
    # Return the score
    return score

Question 2 - Goodness of Fit

Assume that a dataset contains five data points and a model made the following predictions for the target variable:

True Value Prediction
3.0 2.5
-0.5 0.0
2.0 2.1
7.0 7.8
4.2 5.3

Would you consider this model to have successfully captured the variation of the target variable? Why or why not?

Run the code cell below to use the performance_metric function and calculate this model's coefficient of determination.

In [5]:
# Calculate the performance of this model
score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)
Model has a coefficient of determination, R^2, of 0.923.

Answer:

Yes, I'd consider this model to have successfully captured the variation of the target variable because

  1. The model has a high R^2 of 0.923. This means a 92.3% percentage of the target variable can be explained by the features using the model. So the model is pretty good.
  2. The model also got the ordering of all five datapoints in the dataset correct.

Implementation: Shuffle and Split Data

Your next implementation requires that you take the Boston housing dataset and split the data into training and testing subsets. Typically, the data is also shuffled into a random order when creating the training and testing subsets to remove any bias in the ordering of the dataset.

For the code cell below, you will need to implement the following:

  • Use train_test_split from sklearn.cross_validation to shuffle and split the features and prices data into training and testing sets.
    • Split the data into 80% training and 20% testing.
    • Set the random_state for train_test_split to a value of your choice. This ensures results are consistent.
  • Assign the train and testing splits to X_train, X_test, y_train, and y_test.
In [6]:
# TODO: Import 'train_test_split'
from sklearn.cross_validation import train_test_split

# TODO: Shuffle and split the data into training and testing subsets
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=7)

# Success
print "Training and testing split was successful."
Training and testing split was successful.
In [7]:
print "Train shapes (X,y): ", X_train.shape, y_train.shape
print "Test shapes (X,y): ", X_test.shape, y_test.shape
Train shapes (X,y):  (391, 3) (391,)
Test shapes (X,y):  (98, 3) (98,)

Question 3 - Training and Testing

What is the benefit to splitting a dataset into some ratio of training and testing subsets for a learning algorithm?
Hint: What could go wrong with not having a way to test your model?

Answer:

It provides more reliable evaluation metrics and helps detect overfitting.

  1. If there was no training set, we wouldn't be able to train our model which would be bad because then our model would be purely based on (possibly random) initial values.

  2. If there was no test set, we wouldn't be able to test our model on unseen data.

    • That is, we would be making judgements about how good our model was purely on its performance on the training set.
    • Suppose we used accuracy_score as our performance metric. If we had e.g. an overfit decision tree with accuracy_score = 0.98, we might think it was an excellent model.
    • But it would not be excellent because it wouldn't generalise well. That is, it would perform well on examples it had seen before (because it had overfitted) but likely be terrible for examples it hadn't seen before.
    • If we had test our model on unseen data, we would have a better idea as to whether the model generalised and so whether it was actually that good. E.g. we may have had an accuracy_score = 0.6 on test data, realised our model wasn't generalised and tried another one.

Analyzing Model Performance

In this third section of the project, you'll take a look at several models' learning and testing performances on various subsets of training data. Additionally, you'll investigate one particular algorithm with an increasing 'max_depth' parameter on the full training set to observe how model complexity affects performance. Graphing your model's performance based on varying criteria can be beneficial in the analysis process, such as visualizing behavior that may not have been apparent from the results alone.

Learning Curves

The following code cell produces four graphs for a decision tree model with different maximum depths. Each graph visualizes the learning curves of the model for both training and testing as the size of the training set is increased. Note that the shaded region of a learning curve denotes the uncertainty of that curve (measured as the standard deviation). The model is scored on both the training and testing sets using R2, the coefficient of determination.

Run the code cell below and use these graphs to answer the following question.

In [8]:
# Produce learning curves for varying training set sizes and maximum depths
vs.ModelLearning(features, prices)

Question 4 - Learning the Data

Choose one of the graphs above and state the maximum depth for the model. What happens to the score of the training curve as more training points are added? What about the testing curve? Would having more training points benefit the model?
Hint: Are the learning curves converging to particular scores?

Answer:

Chosen graph has max_depth = 1.

As more training points (TP) are added,

  • The score of the training curve decreases.
    • It decreases dramatically from 1.0 (since there are 0 TP, it predicts perfectly) at 0 TP to just under 0.6 at 50 TP.
    • It then decreases slightly as TP increases.
    • The score the testing curve converges to is just under 0.5.
  • The score of the testing curve increases dramatically from <0 to just under 0.4 when the number of TP is increased from 0 to 50.
    • It then increases slightly (by less than 0.1) as the number of TP increases from 50 to 200
    • before plateauing or even decreasing slightly as more TP are added beyond 200 TP.
    • The score the testing curve converges to is roughly 0.4.
    • Most gains are made by TP = 50.

It does not seem like the model will benefit from additional training points beyond 200 training points.

The final gap between the training and testing curve scores is small (< 0.1 and much smaller than in the other graphs). The error (~0.6) is quite high. This indicates that the model is biased.

Complexity Curves

The following code cell produces a graph for a decision tree model that has been trained and validated on the training data using different maximum depths. The graph produces two complexity curves — one for training and one for validation. Similar to the learning curves, the shaded regions of both the complexity curves denote the uncertainty in those curves, and the model is scored on both the training and validation sets using the performance_metric function.

Run the code cell below and use this graph to answer the following two questions.

In [9]:
vs.ModelComplexity(X_train, y_train)

Question 5 - Bias-Variance Tradeoff

When the model is trained with a maximum depth of 1, does the model suffer from high bias or from high variance? How about when the model is trained with a maximum depth of 10? What visual cues in the graph justify your conclusions?
Hint: How do you know when a model is suffering from high bias or high variance?

Answer:

  1. When the model is trained with max_depth = 1,
    • it suffers from high bias.
    • We can infer this from two features:
      1. The training and testing learning curves converge (the gap between them is small) at
      2. a high error of 0.6 as the number of training points increases.
    • This is shown in the model complexity graph where the gap between the training and validation scores is smaller than 0.1 and both scores are low (in the range 0.4-0.5), meaning the errors are high.
  2. When the model is trained with max_depth = 10,
    • it suffers from high variance.
    • We can infer this from the large gap between the training and validation scores in the model complexity graph.

Question 6 - Best-Guess Optimal Model

Which maximum depth do you think results in a model that best generalizes to unseen data? What intuition lead you to this answer?

Answer:

I think max_depth=3 best generalises to unseen data.

  1. max_depth=3 and max_depth=4 have roughly the highest validation score, i.e. score on unseen data.
  2. Between those two, max_depth=3 has a lower variance (as seen by the difference between training and testing scores), which suggests it suffers less from overfitting and generalises better. The validation score is thus more reliable.

Evaluating Model Performance

In this final section of the project, you will construct a model and make a prediction on the client's feature set using an optimized model from fit_model.

What is the grid search technique and how it can be applied to optimize a learning algorithm?

Answer:

  1. The grid search technique tests different values within a given range for each parameter to see which (combination of) parameter value(s) is optimal. E.g. which combination of parameter values maximises the accuracy score.
  2. It can be applied to optimise a learning algorithm by optimally tuning parameters to maximise performance score.

Question 8 - Cross-Validation

What is the k-fold cross-validation training technique? What benefit does this technique provide for grid search when optimizing a model?
Hint: Much like the reasoning behind having a testing set, what could go wrong with using grid search without a cross-validated set?

Answer:

  1. The k-fold cross-validation training technique equally partitions a dataset into k parts ('folds') without shuffling.
    • For each fold, it trains the model on data from the remaining (k-1) folds and then validates (tests) it on the data from the one fold.
    • It repeats this k times (once on each fold).
    • The k results can then be averaged to produce a single score.
  2. Benefits for Grid Search:
    • With k-fold CV, all data is used for training and all data is used for validation exactly once.
    • Suppose there is no cross-validated set. Then Grid Search may choose values of parameters than work well (score highly) for a particular validation/test set but don't generalise.
    • With a cross-validated set, there is more test data and the model is tested more times because the model is validated k times (each time on different data). So if the averaged score is high, the model (with parameters chosen from Grid Search) is more likely to be generalisable.

Implementation: Fitting a Model

Your final implementation requires that you bring everything together and train a model using the decision tree algorithm. To ensure that you are producing an optimized model, you will train the model using the grid search technique to optimize the 'max_depth' parameter for the decision tree. The 'max_depth' parameter can be thought of as how many questions the decision tree algorithm is allowed to ask about the data before making a prediction. Decision trees are part of a class of algorithms called supervised learning algorithms.

For the fit_model function in the code cell below, you will need to implement the following:

  • Use DecisionTreeRegressor from sklearn.tree to create a decision tree regressor object.
    • Assign this object to the 'regressor' variable.
  • Create a dictionary for 'max_depth' with the values from 1 to 10, and assign this to the 'params' variable.
  • Use make_scorer from sklearn.metrics to create a scoring function object.
    • Pass the performance_metric function as a parameter to the object.
    • Assign this scoring function to the 'scoring_fnc' variable.
  • Use GridSearchCV from sklearn.grid_search to create a grid search object.
    • Pass the variables 'regressor', 'params', 'scoring_fnc', and 'cv_sets' as parameters to the object.
    • Assign the GridSearchCV object to the 'grid' variable.
In [10]:
# TODO: Import 'make_scorer', 'DecisionTreeRegressor', and 'GridSearchCV'
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import make_scorer
from sklearn.grid_search import GridSearchCV

def fit_model(X, y):
    """ Performs grid search over the 'max_depth' parameter for a 
        decision tree regressor trained on the input data [X, y]. """
    
    # Create cross-validation sets from the training data
    cv_sets = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.20, random_state = 0)

    # TODO: Create a decision tree regressor object
    regressor = DecisionTreeRegressor()

    # TODO: Create a dictionary for the parameter 'max_depth' with a range from 1 to 10
    params = {'max_depth':range(1,11)}

    # TODO: Transform 'performance_metric' into a scoring function using 'make_scorer' 
    scoring_fnc = make_scorer(performance_metric)

    # TODO: Create the grid search object
    grid = GridSearchCV(regressor, param_grid=params, scoring=scoring_fnc, cv=cv_sets)

    # Fit the grid search object to the data to compute the optimal model
    grid = grid.fit(X, y)

    # Return the optimal model after fitting the data
    return grid.best_estimator_

Making Predictions

Once a model has been trained on a given set of data, it can now be used to make predictions on new sets of input data. In the case of a decision tree regressor, the model has learned what the best questions to ask about the input data are, and can respond with a prediction for the target variable. You can use these predictions to gain information about data where the value of the target variable is unknown — such as data the model was not trained on.

Question 9 - Optimal Model

What maximum depth does the optimal model have? How does this result compare to your guess in Question 6?

Run the code block below to fit the decision tree regressor to the training data and produce an optimal model.

In [11]:
# Fit the training data to the model using grid search
reg = fit_model(X_train, y_train)

# Produce the value for 'max_depth'
print "Parameter 'max_depth' is {} for the optimal model.".format(reg.get_params()['max_depth'])
Parameter 'max_depth' is 4 for the optimal model.

Answer: The optimal model has max_depth = 4.

  • This is not what I guessed initially (I guessed max_depth = 3) but is reasonable because it did have a slightly higher validation score than max_depth = 3.
  • I guessed that max_depth = 3 would be better because it had a similar validation score and had lower variance.

Question 10 - Predicting Selling Prices

Imagine that you were a real estate agent in the Boston area looking to use this model to help price homes owned by your clients that they wish to sell. You have collected the following information from three of your clients:

Feature Client 1 Client 2 Client 3
Total number of rooms in home 5 rooms 4 rooms 8 rooms
Neighborhood poverty level (as %) 17% 32% 3%
Student-teacher ratio of nearby schools 15-to-1 22-to-1 12-to-1

What price would you recommend each client sell his/her home at? Do these prices seem reasonable given the values for the respective features?
Hint: Use the statistics you calculated in the Data Exploration section to help justify your response.

Run the code block below to have your optimized model make predictions for each client's home.

In [12]:
# Produce a matrix for client data
client_data = [[5, 17, 15], # Client 1
               [4, 32, 22], # Client 2
               [8, 3, 12]]  # Client 3
client_prices = []
# Show predictions
for i, price in enumerate(reg.predict(client_data)):
    print "Predicted selling price for Client {}'s home: ${:,.2f}".format(i+1, price)
    client_prices.append(price)
Predicted selling price for Client 1's home: $407,232.00
Predicted selling price for Client 2's home: $229,200.00
Predicted selling price for Client 3's home: $979,300.00

Answer:

  1. The recommended selling prices are:

    • Client 1: \$407,232
    • Client 2: \$229,200
    • Client 3: \$979,300
  2. By intuition in Q1:

    • Client 3 has the highest RMSTAT (intuited positive relationship with price), the lowest STRATIO and the lowest LSTAT (Both intuited negative rel with price).
    • Client 2 has the lowest RMSTAT, the highest STRATIO and the highest LSTAT.
    • So based on intuition from Question 1, the ordering of prices (Client 3 > Client 1 > Client 2) is reasonable.
  3. Revisiting the statistics from the Data Exploration section:

In [13]:
# Show the calculated statistics
print "Statistics for Boston housing dataset:\n"
print "Minimum price: ${:,.2f}".format(minimum_price)
print "Maximum price: ${:,.2f}".format(maximum_price)
print "Mean price: ${:,.2f}".format(mean_price)
print "Median price ${:,.2f}".format(median_price)
print "Standard deviation of prices: ${:,.2f}".format(std_price)
Statistics for Boston housing dataset:

Minimum price: $105,000.00
Maximum price: $1,024,800.00
Mean price: $454,342.94
Median price $438,900.00
Standard deviation of prices: $165,171.13
* The prices are all within the min-max of existing house prices, so they are not outrageous.
* I'd argue that it is difficult to justify the reasonable-ness of the predicted prices purely based on the Data Exploration statistics (beyond whether or not the prices are obviously crazy). We need more information on the distribution of `RMSTAT`, `PTRATIO` and `LSTAT`.
In [14]:
print "Stds away from the mean (Client 1): ", (client_prices[0]-mean_price)/std_price
print "Stds away from the mean (Client 2): ", (client_prices[1]-mean_price)/std_price
print "Stds away from the mean (Client 3): ", (client_prices[2]-mean_price)/std_price
Stds away from the mean (Client 1):  -0.285225053221
Stds away from the mean (Client 2):  -1.36308895314
Stds away from the mean (Client 3):  3.17826154187

Sensitivity

An optimal model is not necessarily a robust model. Sometimes, a model is either too complex or too simple to sufficiently generalize to new data. Sometimes, a model could use a learning algorithm that is not appropriate for the structure of the data given. Other times, the data itself could be too noisy or contain too few samples to allow a model to adequately capture the target variable — i.e., the model is underfitted. Run the code cell below to run the fit_model function ten times with different training and testing sets to see how the prediction for a specific client changes with the data it's trained on.

In [15]:
vs.PredictTrials(features, prices, fit_model, client_data)
Trial 1: $391,183.33
Trial 2: $419,700.00
Trial 3: $415,800.00
Trial 4: $420,622.22
Trial 5: $418,377.27
Trial 6: $411,931.58
Trial 7: $399,663.16
Trial 8: $407,232.00
Trial 9: $351,577.61
Trial 10: $413,700.00

Range in prices: $69,044.61

Question 11 - Applicability

In a few sentences, discuss whether the constructed model should or should not be used in a real-world setting.
Hint: Some questions to answer:

  • How relevant today is data that was collected from 1978?
  • Are the features present in the data sufficient to describe a home?
  • Is the model robust enough to make consistent predictions?
  • Would data collected in an urban city like Boston be applicable in a rural city?

Answer:

  1. House prices have changed greatly since 1978.
    • Taking inflation into account is insufficient because housing prices are highly volatile.
    • So even a model based on data from 3 years ago might not be useful today.
  2. Features presented are not sufficient to describe a home.
    • Important features may include square feet, other aspects of location (proximity to transport, places of work, grocery stores, schools, leisure facilities), state of house (age, whether it's recently been refurbished).
    • But with more features comes the need for exponentially more data (the Curse of Dimensionality).
  3. The model does not make consistent predictions, as seen in the Sensitivity section above.
    • The range in prices of \$28,652.84 is non-trivial - for some, it is more than 6 months' worth of the median US salary.
    • But if you look at the percentage variation it's about +/- 3.5% which isn't that much.
      • Calculation ((28652.84/2)/410000), 410k estimated by eye.
  4. No, data collected in an urban city like Boston would not be applicable in a rural city. So the predictions in this model should not be used in other cities.
    • If we constructed a model based on data from a wide range of cities and included features that could represent the variation in cities (e.g. population, GDP per capita), we might be able come up with a model that can cover both urban and rural cities in different countries.
    • But that would be a complex model that wolud require exponentially more data.
In [16]:
# Rough work calculations
(28652.84/2)/410000
Out[16]:
0.03494248780487805
================================================ FILE: p1-boston-housing/visuals.py ================================================ ########################################### # Suppress matplotlib user warnings # Necessary for newer version of matplotlib import warnings warnings.filterwarnings("ignore", category = UserWarning, module = "matplotlib") ########################################### import matplotlib.pyplot as pl import numpy as np import sklearn.learning_curve as curves from sklearn.tree import DecisionTreeRegressor from sklearn.cross_validation import ShuffleSplit, train_test_split def ModelLearning(X, y): """ Calculates the performance of several models with varying sizes of training data. The learning and testing scores for each model are then plotted. """ # Create 10 cross-validation sets for training and testing cv = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.2, random_state = 0) # Generate the training set sizes increasing by 50 train_sizes = np.rint(np.linspace(1, X.shape[0]*0.8 - 1, 9)).astype(int) # Create the figure window fig = pl.figure(figsize=(10,7)) # Create three different models based on max_depth for k, depth in enumerate([1,3,6,10]): # Create a Decision tree regressor at max_depth = depth regressor = DecisionTreeRegressor(max_depth = depth) # Calculate the training and testing scores sizes, train_scores, test_scores = curves.learning_curve(regressor, X, y, \ cv = cv, train_sizes = train_sizes, scoring = 'r2') # Find the mean and standard deviation for smoothing train_std = np.std(train_scores, axis = 1) train_mean = np.mean(train_scores, axis = 1) test_std = np.std(test_scores, axis = 1) test_mean = np.mean(test_scores, axis = 1) # Subplot the learning curve ax = fig.add_subplot(2, 2, k+1) ax.plot(sizes, train_mean, 'o-', color = 'r', label = 'Training Score') ax.plot(sizes, test_mean, 'o-', color = 'g', label = 'Testing Score') ax.fill_between(sizes, train_mean - train_std, \ train_mean + train_std, alpha = 0.15, color = 'r') ax.fill_between(sizes, test_mean - test_std, \ test_mean + test_std, alpha = 0.15, color = 'g') # Labels ax.set_title('max_depth = %s'%(depth)) ax.set_xlabel('Number of Training Points') ax.set_ylabel('Score') ax.set_xlim([0, X.shape[0]*0.8]) ax.set_ylim([-0.05, 1.05]) # Visual aesthetics ax.legend(bbox_to_anchor=(1.05, 2.05), loc='lower left', borderaxespad = 0.) fig.suptitle('Decision Tree Regressor Learning Performances', fontsize = 16, y = 1.03) fig.tight_layout() fig.show() def ModelComplexity(X, y): """ Calculates the performance of the model as model complexity increases. The learning and testing errors rates are then plotted. """ # Create 10 cross-validation sets for training and testing cv = ShuffleSplit(X.shape[0], n_iter = 10, test_size = 0.2, random_state = 0) # Vary the max_depth parameter from 1 to 10 max_depth = np.arange(1,11) # Calculate the training and testing scores train_scores, test_scores = curves.validation_curve(DecisionTreeRegressor(), X, y, \ param_name = "max_depth", param_range = max_depth, cv = cv, scoring = 'r2') # Find the mean and standard deviation for smoothing train_mean = np.mean(train_scores, axis=1) train_std = np.std(train_scores, axis=1) test_mean = np.mean(test_scores, axis=1) test_std = np.std(test_scores, axis=1) # Plot the validation curve pl.figure(figsize=(7, 5)) pl.title('Decision Tree Regressor Complexity Performance') pl.plot(max_depth, train_mean, 'o-', color = 'r', label = 'Training Score') pl.plot(max_depth, test_mean, 'o-', color = 'g', label = 'Validation Score') pl.fill_between(max_depth, train_mean - train_std, \ train_mean + train_std, alpha = 0.15, color = 'r') pl.fill_between(max_depth, test_mean - test_std, \ test_mean + test_std, alpha = 0.15, color = 'g') # Visual aesthetics pl.legend(loc = 'lower right') pl.xlabel('Maximum Depth') pl.ylabel('Score') pl.ylim([-0.05,1.05]) pl.show() def PredictTrials(X, y, fitter, data): """ Performs trials of fitting and predicting data. """ # Store the predicted prices prices = [] for k in range(10): # Split the data X_train, X_test, y_train, y_test = train_test_split(X, y, \ test_size = 0.2, random_state = k) # Fit the data reg = fitter(X_train, y_train) # Make a prediction pred = reg.predict([data[0]])[0] prices.append(pred) # Result print "Trial {}: ${:,.2f}".format(k+1, pred) # Display price range print "\nRange in prices: ${:,.2f}".format(max(prices) - min(prices)) ================================================ FILE: p2-student-intervention/.ipynb_checkpoints/student_intervention-Copy1-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count labels column\n", "n_features = len(student_data.iloc[0]) -1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 30 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 30 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0516 seconds\n", "Score: 0.97\n", "Made predictions in 0.0039 seconds.\n", "F1 score for training set: 0.9774.\n", "Score: 0.652631578947\n", "Made predictions in 0.0024 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0095 seconds\n", "Score: 0.985\n", "Made predictions in 0.0027 seconds.\n", "F1 score for training set: 0.9889.\n", "Score: 0.684210526316\n", "Made predictions in 0.0018 seconds.\n", "F1 score for test set: 0.7727.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0146 seconds\n", "Score: 0.986666666667\n", "Made predictions in 0.0065 seconds.\n", "F1 score for training set: 0.9901.\n", "Score: 0.642105263158\n", "Made predictions in 0.0019 seconds.\n", "F1 score for test set: 0.7344.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0018 seconds\n", "Score: 0.82\n", "Made predictions in 0.0008 seconds.\n", "F1 score for training set: 0.8714.\n", "Score: 0.589473684211\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Score: 0.775\n", "Made predictions in 0.0062 seconds.\n", "F1 score for training set: 0.8421.\n", "Score: 0.578947368421\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0022 seconds\n", "Score: 0.743333333333\n", "Made predictions in 0.0044 seconds.\n", "F1 score for training set: 0.8180.\n", "Score: 0.6\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0039 seconds\n", "Score: 0.84\n", "Made predictions in 0.0043 seconds.\n", "F1 score for training set: 0.8857.\n", "Score: 0.642105263158\n", "Made predictions in 0.0005 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Score: 0.815\n", "Made predictions in 0.0005 seconds.\n", "F1 score for training set: 0.8720.\n", "Score: 0.610526315789\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0038 seconds\n", "Score: 0.783333333333\n", "Made predictions in 0.0007 seconds.\n", "F1 score for training set: 0.8513.\n", "Score: 0.631578947368\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier(random_state=0)\n", "clf_B = GaussianNB()\n", "clf_C = LogisticRegression(random_state=0)\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a DecisionTreeClassifier using a training set size of 100. . .\n", "Trained model in 0.0022 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.6721.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 300. . .\n", "Trained model in 0.0018 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6723.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 100. . .\n", "Trained model in 0.0058 seconds\n", "Made predictions in 0.0029 seconds.\n", "F1 score for training set: 0.0000.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.0000.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8074.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7069.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 300. . .\n", "Trained model in 0.0010 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.6268.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6847.\n", "\n", "\n", "Training a SVC using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0016 seconds.\n", "F1 score for training set: 0.8645.\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.7867.\n", "\n", "\n", "Training a SVC using a training set size of 200. . .\n", "Trained model in 0.0040 seconds\n", "Made predictions in 0.0021 seconds.\n", "F1 score for training set: 0.8698.\n", "Made predictions in 0.0012 seconds.\n", "F1 score for test set: 0.7785.\n", "\n", "\n", "Training a SVC using a training set size of 300. . .\n", "Trained model in 0.0068 seconds\n", "Made predictions in 0.0040 seconds.\n", "F1 score for training set: 0.8675.\n", "Made predictions in 0.0015 seconds.\n", "F1 score for test set: 0.7755.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8857.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0015 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8720.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0034 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8513.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "# Models 4 - 7 for general comparison\n", "\n", "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.linear_model import SGDClassifier\n", "\n", "\n", "# TODO: Initialize the three models\n", "clf_A = DecisionTreeClassifier()\n", "clf_B = SGDClassifier()\n", "clf_C = SVC()\n", "clf_D = LogisticRegression()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C, clf_D]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0102 | 0.0009 | 0.9922 | **0.7206** |\n", "| 200 | 0.0094 | 0.0008 | 0.9962 | 0.6977 |\n", "| 300 | 0.0107 | 0.0012 | 0.9951 | 0.6721 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 4 - Support Vector Machines SVC** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0038 | 0.0007 | 0.8671 | 0.7483 |\n", "| 200 | 0.0033 | 0.0013 | 0.8800 | 0.7724 |\n", "| 300 | 0.0053 | 0.0013 | 0.8793 | **0.7808** |\n", "\n", "* This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).\n", "* Prediction time linear with number of things to predict for training set sizes 200,300.\n", "\n", "** Classifer 5 - KNeighborsClassifier** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0006 | 0.0012 | 0.8345 | 0.7023 |\n", "| 200 | 0.0006 | 0.0014 | 0.8502 | 0.7121 |\n", "| 300 | 0.0007 | 0.0019 | 0.8731 | **0.7556** |\n", "\n", "\n", "** Classifer 6 - Decision Trees** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 1.0000 | 0.6667 |\n", "| 200 | 0.0013 | 0.0001 | 1.0000 | **0.7460** |\n", "| 300 | 0.0016 | 0.0002 | 1.0000 | 0.7424 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.\n", "\n", "** Classifer 7 - Stochastic Gradient Descent** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0091 | 0.0008 | 0.7832 | 0.7586 |\n", "| 200 | 0.0010 | 0.0002 | 0.5027 | 0.3902 |\n", "| 300 | 0.0010 | 0.0002 | 0.5981 | 0.4946 |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**The model is trained by** trying to fit an S-shaped curve to our data. This curve maps input features to the whether or not a student passed. The model picks this curve by minimising some error between the curve and our training data. This curve is expressed in the form of an equation (which becomes our model for prediction).\n", "\n", "**The model makes a prediction** putting the input features (have they failed before? Do they have access to Internet at home?) into an equation we got during training. The equation gives us an output which tells us the chance of this student passing. If we predict that the student is more likely to pass than to fail, they are classified as 'passed' and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/.ipynb_checkpoints/student_intervention-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count label column\n", "n_features = len(student_data.iloc[0]) - 1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 31 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 31 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0242 seconds\n", "Made predictions in 0.0018 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0022 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0121 seconds\n", "Made predictions in 0.0011 seconds.\n", "F1 score for training set: 0.9964.\n", "Made predictions in 0.0013 seconds.\n", "F1 score for test set: 0.6563.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0140 seconds\n", "Made predictions in 0.0012 seconds.\n", "F1 score for training set: 0.9927.\n", "Made predictions in 0.0009 seconds.\n", "F1 score for test set: 0.6870.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8714.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8421.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8180.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 100. . .\n", "Trained model in 0.0077 seconds\n", "Made predictions in 0.0071 seconds.\n", "F1 score for training set: 0.8552.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 200. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0030 seconds.\n", "F1 score for training set: 0.8667.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7737.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0047 seconds.\n", "F1 score for training set: 0.8615.\n", "Made predictions in 0.0017 seconds.\n", "F1 score for test set: 0.7971.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier(random_state=0)\n", "clf_B = GaussianNB()\n", "clf_C = LogisticRegression(random_state=0)\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a DecisionTreeClassifier using a training set size of 100. . .\n", "Trained model in 0.0022 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.6721.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 300. . .\n", "Trained model in 0.0018 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6723.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 100. . .\n", "Trained model in 0.0058 seconds\n", "Made predictions in 0.0029 seconds.\n", "F1 score for training set: 0.0000.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.0000.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8074.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7069.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 300. . .\n", "Trained model in 0.0010 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.6268.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6847.\n", "\n", "\n", "Training a SVC using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0016 seconds.\n", "F1 score for training set: 0.8645.\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.7867.\n", "\n", "\n", "Training a SVC using a training set size of 200. . .\n", "Trained model in 0.0040 seconds\n", "Made predictions in 0.0021 seconds.\n", "F1 score for training set: 0.8698.\n", "Made predictions in 0.0012 seconds.\n", "F1 score for test set: 0.7785.\n", "\n", "\n", "Training a SVC using a training set size of 300. . .\n", "Trained model in 0.0068 seconds\n", "Made predictions in 0.0040 seconds.\n", "F1 score for training set: 0.8675.\n", "Made predictions in 0.0015 seconds.\n", "F1 score for test set: 0.7755.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8857.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0015 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8720.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0034 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8513.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "# Models 4 - 7 for general comparison\n", "\n", "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.linear_model import SGDClassifier\n", "\n", "\n", "# TODO: Initialize the three models\n", "clf_A = DecisionTreeClassifier(random_state=0)\n", "clf_B = SGDClassifier(random_state=0)\n", "clf_C = SVC(random_state=0)\n", "clf_D = KNeighborsClassifier()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C, clf_D]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0102 | 0.0009 | 0.9922 | **0.7206** |\n", "| 200 | 0.0094 | 0.0008 | 0.9962 | 0.6977 |\n", "| 300 | 0.0107 | 0.0012 | 0.9951 | 0.6721 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 4 - Support Vector Machines SVC** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0038 | 0.0007 | 0.8671 | 0.7483 |\n", "| 200 | 0.0033 | 0.0013 | 0.8800 | 0.7724 |\n", "| 300 | 0.0053 | 0.0013 | 0.8793 | **0.7808** |\n", "\n", "* This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).\n", "* Prediction time linear with number of things to predict for training set sizes 200,300.\n", "\n", "** Classifer 5 - KNeighborsClassifier** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0006 | 0.0012 | 0.8345 | 0.7023 |\n", "| 200 | 0.0006 | 0.0014 | 0.8502 | 0.7121 |\n", "| 300 | 0.0007 | 0.0019 | 0.8731 | **0.7556** |\n", "\n", "\n", "** Classifer 6 - Decision Trees** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 1.0000 | 0.6667 |\n", "| 200 | 0.0013 | 0.0001 | 1.0000 | **0.7460** |\n", "| 300 | 0.0016 | 0.0002 | 1.0000 | 0.7424 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.\n", "\n", "** Classifer 7 - Stochastic Gradient Descent** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0091 | 0.0008 | 0.7832 | 0.7586 |\n", "| 200 | 0.0010 | 0.0002 | 0.5027 | 0.3902 |\n", "| 300 | 0.0010 | 0.0002 | 0.5981 | 0.4946 |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Training** Logistic regression will draw one single curve to relate characteristics like whether or not a student has access to Internet or whether to the predicted probability that they pass. For example, it may think that students who have little free time and are in romantic relationships are less likely to pass (an intuitive reason is because they have less time to study). \n", "\n", "\n", "**Prediction** If the model guesses based on the student's characteristics they are more likely to pass than to fail, then it predicts that they will pass and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/.ipynb_checkpoints/student_intervention1-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count labels column\n", "n_features = len(student_data.iloc[0]) -1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 30 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 30 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0242 seconds\n", "Made predictions in 0.0018 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0022 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0121 seconds\n", "Made predictions in 0.0011 seconds.\n", "F1 score for training set: 0.9964.\n", "Made predictions in 0.0013 seconds.\n", "F1 score for test set: 0.6563.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0140 seconds\n", "Made predictions in 0.0012 seconds.\n", "F1 score for training set: 0.9927.\n", "Made predictions in 0.0009 seconds.\n", "F1 score for test set: 0.6870.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8714.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8421.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8180.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 100. . .\n", "Trained model in 0.0077 seconds\n", "Made predictions in 0.0071 seconds.\n", "F1 score for training set: 0.8552.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 200. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0030 seconds.\n", "F1 score for training set: 0.8667.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7737.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0047 seconds.\n", "F1 score for training set: 0.8615.\n", "Made predictions in 0.0017 seconds.\n", "F1 score for test set: 0.7971.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier()\n", "clf_B = GaussianNB()\n", "clf_C = KNeighborsClassifier()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a DecisionTreeClassifier using a training set size of 100. . .\n", "Trained model in 0.0022 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.6721.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 300. . .\n", "Trained model in 0.0018 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6723.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 100. . .\n", "Trained model in 0.0058 seconds\n", "Made predictions in 0.0029 seconds.\n", "F1 score for training set: 0.0000.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.0000.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8074.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7069.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 300. . .\n", "Trained model in 0.0010 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.6268.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6847.\n", "\n", "\n", "Training a SVC using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0016 seconds.\n", "F1 score for training set: 0.8645.\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.7867.\n", "\n", "\n", "Training a SVC using a training set size of 200. . .\n", "Trained model in 0.0040 seconds\n", "Made predictions in 0.0021 seconds.\n", "F1 score for training set: 0.8698.\n", "Made predictions in 0.0012 seconds.\n", "F1 score for test set: 0.7785.\n", "\n", "\n", "Training a SVC using a training set size of 300. . .\n", "Trained model in 0.0068 seconds\n", "Made predictions in 0.0040 seconds.\n", "F1 score for training set: 0.8675.\n", "Made predictions in 0.0015 seconds.\n", "F1 score for test set: 0.7755.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8857.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0015 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8720.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0034 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8513.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "# Models 4 - 7 for general comparison\n", "\n", "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.linear_model import SGDClassifier\n", "\n", "\n", "# TODO: Initialize the three models\n", "clf_A = DecisionTreeClassifier()\n", "clf_B = SGDClassifier()\n", "clf_C = SVC()\n", "clf_D = LogisticRegression()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C, clf_D]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0102 | 0.0009 | 0.9922 | **0.7206** |\n", "| 200 | 0.0094 | 0.0008 | 0.9962 | 0.6977 |\n", "| 300 | 0.0107 | 0.0012 | 0.9951 | 0.6721 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 4 - Support Vector Machines SVC** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0038 | 0.0007 | 0.8671 | 0.7483 |\n", "| 200 | 0.0033 | 0.0013 | 0.8800 | 0.7724 |\n", "| 300 | 0.0053 | 0.0013 | 0.8793 | **0.7808** |\n", "\n", "* This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).\n", "* Prediction time linear with number of things to predict for training set sizes 200,300.\n", "\n", "** Classifer 5 - KNeighborsClassifier** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0006 | 0.0012 | 0.8345 | 0.7023 |\n", "| 200 | 0.0006 | 0.0014 | 0.8502 | 0.7121 |\n", "| 300 | 0.0007 | 0.0019 | 0.8731 | **0.7556** |\n", "\n", "\n", "** Classifer 6 - Decision Trees** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 1.0000 | 0.6667 |\n", "| 200 | 0.0013 | 0.0001 | 1.0000 | **0.7460** |\n", "| 300 | 0.0016 | 0.0002 | 1.0000 | 0.7424 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.\n", "\n", "** Classifer 7 - Stochastic Gradient Descent** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0091 | 0.0008 | 0.7832 | 0.7586 |\n", "| 200 | 0.0010 | 0.0002 | 0.5027 | 0.3902 |\n", "| 300 | 0.0010 | 0.0002 | 0.5981 | 0.4946 |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**The model is trained by** trying to fit an S-shaped curve to our data. This curve maps input features to the whether or not a student passed. The model picks this curve by minimising some error between the curve and our training data. This curve is expressed in the form of an equation (which becomes our model for prediction).\n", "\n", "**The model makes a prediction** putting the input features (have they failed before? Do they have access to Internet at home?) into an equation we got during training. The equation gives us an output which tells us the chance of this student passing. If we predict that the student is more likely to pass than to fail, they are classified as 'passed' and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/.ipynb_checkpoints/student_intervention_py2.7-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: ** \n", "\n", "**Classification**.\n", "- The **inputs are discrete**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output. \n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print \"Student data read successfully!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print \"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students: 395\n", "Number of features: 31\n", "Number of students who passed: 265\n", "Number of students who failed: 130\n", "Graduation rate of the class: 0.67%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "n_features = len(student_data.iloc[0])\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students\n", "\n", "# Print the results\n", "print \"Total number of students: {}\".format(n_students)\n", "print \"Number of features: {}\".format(n_features)\n", "print \"Number of students who passed: {}\".format(n_passed)\n", "print \"Number of students who failed: {}\".format(n_failed)\n", "print \"Graduation rate of the class: {:.2f}%\".format(grad_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print \"Feature columns:\\n{}\".format(feature_cols)\n", "print \"\\nTarget column: {}\".format(target_col)\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print \"\\nFeature values:\"\n", "print X_all.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print \"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num_test: 95\n", "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "print \"num_test: \", num_test\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print \"Training set has {} samples.\".format(X_train.shape[0])\n", "print \"Testing set has {} samples.\".format(X_test.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "Description of data:\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 31 features (non-trivial)\n", "\n", "**Model 1: Naive Bayes**\n", "- Application: Text learning\n", "- Strengths:\n", " - Efficient: problem stated they cared about computational cost.\n", " - Can deal with many features. (31 features)\n", "- Weaknesses:\n", " - Can break...?\n", " - Independent features assumption may be false.\n", "- Why it's a good fit\n", " - Efficient -> Problem stated they care about computational cost.\n", " - Can deal with many features -> There are 31 (many) features in our dataset.\n", "\n", "**Model x: SVM**\n", "- works well in complicated domains where there is a clear margin of separation\n", "- doesn't work well with large datasets because training time is O(n^3) where n is the size of the dataset.\n", "- Don't work well with much noise (e.g. classes overlapping (or many features?)) -> Naive Bayes better.\n", "\n", "**Model 2: Random Forest**\n", "- It's just quite good\n", "- \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print \"Trained model in {:.4f} seconds\".format(end - start)\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print \"Made predictions in {:.4f} seconds.\".format(end - start)\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print \"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print \"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train))\n", " print \"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "# from sklearn import model_A\n", "# from sklearn import model_B\n", "# from skearln import model_C\n", "\n", "# TODO: Initialize the three models\n", "clf_A = None\n", "clf_B = None\n", "clf_C = None\n", "\n", "# TODO: Set up the training set sizes\n", "X_train_100 = None\n", "y_train_100 = None\n", "\n", "X_train_200 = None\n", "y_train_200 = None\n", "\n", "X_train_300 = None\n", "y_train_300 = None\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "# train_predict(clf, X_train, y_train, X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | EXAMPLE | | | |\n", "| 300 | | | | EXAMPLE |\n", "\n", "** Classifer 2 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | EXAMPLE | | | |\n", "| 300 | | | | EXAMPLE |\n", "\n", "** Classifer 3 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | | | | |\n", "| 300 | | | | |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = None\n", "\n", "# TODO: Initialize the classifier\n", "clf = None\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = None\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = None\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = None\n", "\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print \"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train))\n", "print \"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/README.md ================================================ # Project 2: Supervised Learning ## Building a Student Intervention System ### Install This project requires **Python 2.7** and the following Python libraries installed: - [NumPy](http://www.numpy.org/) - [Pandas](http://pandas.pydata.org) - [scikit-learn](http://scikit-learn.org/stable/) You will also need to have software installed to run and execute an [iPython Notebook](http://ipython.org/notebook.html) Udacity recommends our students install [Anaconda](https://www.continuum.io/downloads), a pre-packaged Python distribution that contains all of the necessary libraries and software for this project. ### Code Template code is provided in the notebook `student_intervention.ipynb` notebook file. While some code has already been implemented to get you started, you will need to implement additional functionality when requested to successfully complete the project. ### Run In a terminal or command window, navigate to the top-level project directory `student_intervention/` (that contains this README) and run one of the following commands: ```ipython notebook student_intervention.ipynb``` ```jupyter notebook student_intervention.ipynb``` This will open the iPython Notebook software and project file in your browser. ## Data The dataset used in this project is included as `student-data.csv`. This dataset has the following attributes: - `school` : student's school (binary: "GP" or "MS") - `sex` : student's sex (binary: "F" - female or "M" - male) - `age` : student's age (numeric: from 15 to 22) - `address` : student's home address type (binary: "U" - urban or "R" - rural) - `famsize` : family size (binary: "LE3" - less or equal to 3 or "GT3" - greater than 3) - `Pstatus` : parent's cohabitation status (binary: "T" - living together or "A" - apart) - `Medu` : mother's education (numeric: 0 - none, 1 - primary education (4th grade), 2 - 5th to 9th grade, 3 - secondary education or 4 - higher education) - `Fedu` : father's education (numeric: 0 - none, 1 - primary education (4th grade), 2 - 5th to 9th grade, 3 - secondary education or 4 - higher education) - `Mjob` : mother's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") - `Fjob` : father's job (nominal: "teacher", "health" care related, civil "services" (e.g. administrative or police), "at_home" or "other") - `reason` : reason to choose this school (nominal: close to "home", school "reputation", "course" preference or "other") - `guardian` : student's guardian (nominal: "mother", "father" or "other") - `traveltime` : home to school travel time (numeric: 1 - <15 min., 2 - 15 to 30 min., 3 - 30 min. to 1 hour, or 4 - >1 hour) - `studytime` : weekly study time (numeric: 1 - <2 hours, 2 - 2 to 5 hours, 3 - 5 to 10 hours, or 4 - >10 hours) - `failures` : number of past class failures (numeric: n if 1<=n<3, else 4) - `schoolsup` : extra educational support (binary: yes or no) - `famsup` : family educational support (binary: yes or no) - `paid` : extra paid classes within the course subject (Math or Portuguese) (binary: yes or no) - `activities` : extra-curricular activities (binary: yes or no) - `nursery` : attended nursery school (binary: yes or no) - `higher` : wants to take higher education (binary: yes or no) - `internet` : Internet access at home (binary: yes or no) - `romantic` : with a romantic relationship (binary: yes or no) - `famrel` : quality of family relationships (numeric: from 1 - very bad to 5 - excellent) - `freetime` : free time after school (numeric: from 1 - very low to 5 - very high) - `goout` : going out with friends (numeric: from 1 - very low to 5 - very high) - `Dalc` : workday alcohol consumption (numeric: from 1 - very low to 5 - very high) - `Walc` : weekend alcohol consumption (numeric: from 1 - very low to 5 - very high) - `health` : current health status (numeric: from 1 - very bad to 5 - very good) - `absences` : number of school absences (numeric: from 0 to 93) - `passed` : did the student pass the final exam (binary: yes or no) ================================================ FILE: p2-student-intervention/archive/student_intervention-Copy1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count labels column\n", "n_features = len(student_data.iloc[0]) -1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 30 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 30 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0516 seconds\n", "Score: 0.97\n", "Made predictions in 0.0039 seconds.\n", "F1 score for training set: 0.9774.\n", "Score: 0.652631578947\n", "Made predictions in 0.0024 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0095 seconds\n", "Score: 0.985\n", "Made predictions in 0.0027 seconds.\n", "F1 score for training set: 0.9889.\n", "Score: 0.684210526316\n", "Made predictions in 0.0018 seconds.\n", "F1 score for test set: 0.7727.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0146 seconds\n", "Score: 0.986666666667\n", "Made predictions in 0.0065 seconds.\n", "F1 score for training set: 0.9901.\n", "Score: 0.642105263158\n", "Made predictions in 0.0019 seconds.\n", "F1 score for test set: 0.7344.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0018 seconds\n", "Score: 0.82\n", "Made predictions in 0.0008 seconds.\n", "F1 score for training set: 0.8714.\n", "Score: 0.589473684211\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Score: 0.775\n", "Made predictions in 0.0062 seconds.\n", "F1 score for training set: 0.8421.\n", "Score: 0.578947368421\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0022 seconds\n", "Score: 0.743333333333\n", "Made predictions in 0.0044 seconds.\n", "F1 score for training set: 0.8180.\n", "Score: 0.6\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0039 seconds\n", "Score: 0.84\n", "Made predictions in 0.0043 seconds.\n", "F1 score for training set: 0.8857.\n", "Score: 0.642105263158\n", "Made predictions in 0.0005 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Score: 0.815\n", "Made predictions in 0.0005 seconds.\n", "F1 score for training set: 0.8720.\n", "Score: 0.610526315789\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0038 seconds\n", "Score: 0.783333333333\n", "Made predictions in 0.0007 seconds.\n", "F1 score for training set: 0.8513.\n", "Score: 0.631578947368\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier(random_state=0)\n", "clf_B = GaussianNB()\n", "clf_C = LogisticRegression(random_state=0)\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a DecisionTreeClassifier using a training set size of 100. . .\n", "Trained model in 0.0022 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.6721.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 300. . .\n", "Trained model in 0.0018 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6723.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 100. . .\n", "Trained model in 0.0058 seconds\n", "Made predictions in 0.0029 seconds.\n", "F1 score for training set: 0.0000.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.0000.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8074.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7069.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 300. . .\n", "Trained model in 0.0010 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.6268.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6847.\n", "\n", "\n", "Training a SVC using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0016 seconds.\n", "F1 score for training set: 0.8645.\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.7867.\n", "\n", "\n", "Training a SVC using a training set size of 200. . .\n", "Trained model in 0.0040 seconds\n", "Made predictions in 0.0021 seconds.\n", "F1 score for training set: 0.8698.\n", "Made predictions in 0.0012 seconds.\n", "F1 score for test set: 0.7785.\n", "\n", "\n", "Training a SVC using a training set size of 300. . .\n", "Trained model in 0.0068 seconds\n", "Made predictions in 0.0040 seconds.\n", "F1 score for training set: 0.8675.\n", "Made predictions in 0.0015 seconds.\n", "F1 score for test set: 0.7755.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8857.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0015 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8720.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0034 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8513.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "# Models 4 - 7 for general comparison\n", "\n", "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.linear_model import SGDClassifier\n", "\n", "\n", "# TODO: Initialize the three models\n", "clf_A = DecisionTreeClassifier()\n", "clf_B = SGDClassifier()\n", "clf_C = SVC()\n", "clf_D = LogisticRegression()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C, clf_D]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0102 | 0.0009 | 0.9922 | **0.7206** |\n", "| 200 | 0.0094 | 0.0008 | 0.9962 | 0.6977 |\n", "| 300 | 0.0107 | 0.0012 | 0.9951 | 0.6721 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 4 - Support Vector Machines SVC** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0038 | 0.0007 | 0.8671 | 0.7483 |\n", "| 200 | 0.0033 | 0.0013 | 0.8800 | 0.7724 |\n", "| 300 | 0.0053 | 0.0013 | 0.8793 | **0.7808** |\n", "\n", "* This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).\n", "* Prediction time linear with number of things to predict for training set sizes 200,300.\n", "\n", "** Classifer 5 - KNeighborsClassifier** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0006 | 0.0012 | 0.8345 | 0.7023 |\n", "| 200 | 0.0006 | 0.0014 | 0.8502 | 0.7121 |\n", "| 300 | 0.0007 | 0.0019 | 0.8731 | **0.7556** |\n", "\n", "\n", "** Classifer 6 - Decision Trees** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 1.0000 | 0.6667 |\n", "| 200 | 0.0013 | 0.0001 | 1.0000 | **0.7460** |\n", "| 300 | 0.0016 | 0.0002 | 1.0000 | 0.7424 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.\n", "\n", "** Classifer 7 - Stochastic Gradient Descent** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0091 | 0.0008 | 0.7832 | 0.7586 |\n", "| 200 | 0.0010 | 0.0002 | 0.5027 | 0.3902 |\n", "| 300 | 0.0010 | 0.0002 | 0.5981 | 0.4946 |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**The model is trained by** trying to fit an S-shaped curve to our data. This curve maps input features to the whether or not a student passed. The model picks this curve by minimising some error between the curve and our training data. This curve is expressed in the form of an equation (which becomes our model for prediction).\n", "\n", "**The model makes a prediction** putting the input features (have they failed before? Do they have access to Internet at home?) into an equation we got during training. The equation gives us an output which tells us the chance of this student passing. If we predict that the student is more likely to pass than to fail, they are classified as 'passed' and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/archive/student_intervention1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count labels column\n", "n_features = len(student_data.iloc[0]) -1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 30 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 30 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0516 seconds\n", "Score: 0.97\n", "Made predictions in 0.0039 seconds.\n", "F1 score for training set: 0.9774.\n", "Score: 0.652631578947\n", "Made predictions in 0.0024 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0095 seconds\n", "Score: 0.985\n", "Made predictions in 0.0027 seconds.\n", "F1 score for training set: 0.9889.\n", "Score: 0.684210526316\n", "Made predictions in 0.0018 seconds.\n", "F1 score for test set: 0.7727.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0146 seconds\n", "Score: 0.986666666667\n", "Made predictions in 0.0065 seconds.\n", "F1 score for training set: 0.9901.\n", "Score: 0.642105263158\n", "Made predictions in 0.0019 seconds.\n", "F1 score for test set: 0.7344.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0018 seconds\n", "Score: 0.82\n", "Made predictions in 0.0008 seconds.\n", "F1 score for training set: 0.8714.\n", "Score: 0.589473684211\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Score: 0.775\n", "Made predictions in 0.0062 seconds.\n", "F1 score for training set: 0.8421.\n", "Score: 0.578947368421\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0022 seconds\n", "Score: 0.743333333333\n", "Made predictions in 0.0044 seconds.\n", "F1 score for training set: 0.8180.\n", "Score: 0.6\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0039 seconds\n", "Score: 0.84\n", "Made predictions in 0.0043 seconds.\n", "F1 score for training set: 0.8857.\n", "Score: 0.642105263158\n", "Made predictions in 0.0005 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Score: 0.815\n", "Made predictions in 0.0005 seconds.\n", "F1 score for training set: 0.8720.\n", "Score: 0.610526315789\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0038 seconds\n", "Score: 0.783333333333\n", "Made predictions in 0.0007 seconds.\n", "F1 score for training set: 0.8513.\n", "Score: 0.631578947368\n", "Made predictions in 0.0004 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier(random_state=0)\n", "clf_B = GaussianNB()\n", "clf_C = LogisticRegression(random_state=0)\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0516 | 0.0024 | 0.9774 | 0.7556 |\n", "| 200 | 0.0095 | 0.0018 | 0.9889 | **0.7727** |\n", "| 300 | 0.0146 | 0.0019 | 0.9901 | 0.7344 |\n", "\n", "* High F1 score for train (0.97-0.99) vs lower F1 score for test (0.73-0.77) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (over 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0018 | 0.0007 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**The model is trained by** trying to fit an S-shaped curve to our data. This curve maps input features to the whether or not a student passed. The model picks this curve by minimising some error between the curve and our training data. This curve is expressed in the form of an equation (which becomes our model for prediction).\n", "\n", "**The model makes a prediction** putting the input features (have they failed before? Do they have access to Internet at home?) into an equation we got during training. The equation gives us an output which tells us the chance of this student passing. If we predict that the student is more likely to pass than to fail, they are classified as 'passed' and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/archive/student_intervention_py2.7.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: ** \n", "\n", "**Classification**.\n", "- The **inputs are discrete**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output. \n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print \"Student data read successfully!\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print \"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students: 395\n", "Number of features: 31\n", "Number of students who passed: 265\n", "Number of students who failed: 130\n", "Graduation rate of the class: 0.67%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "n_features = len(student_data.iloc[0])\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students\n", "\n", "# Print the results\n", "print \"Total number of students: {}\".format(n_students)\n", "print \"Number of features: {}\".format(n_features)\n", "print \"Number of students who passed: {}\".format(n_passed)\n", "print \"Number of students who failed: {}\".format(n_failed)\n", "print \"Graduation rate of the class: {:.2f}%\".format(grad_rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print \"Feature columns:\\n{}\".format(feature_cols)\n", "print \"\\nTarget column: {}\".format(target_col)\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print \"\\nFeature values:\"\n", "print X_all.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print \"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "num_test: 95\n", "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "print \"num_test: \", num_test\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_all, y_all = shuffle(X_all, y_all)\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print \"Training set has {} samples.\".format(X_train.shape[0])\n", "print \"Testing set has {} samples.\".format(X_test.shape[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "Description of data:\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 31 features (non-trivial)\n", "\n", "**Model 1: Naive Bayes**\n", "- Application: Text learning\n", "- Strengths:\n", " - Efficient: problem stated they cared about computational cost.\n", " - Can deal with many features. (31 features)\n", "- Weaknesses:\n", " - Can break...?\n", " - Independent features assumption may be false.\n", "- Why it's a good fit\n", " - Efficient -> Problem stated they care about computational cost.\n", " - Can deal with many features -> There are 31 (many) features in our dataset.\n", "\n", "**Model x: SVM**\n", "- works well in complicated domains where there is a clear margin of separation\n", "- doesn't work well with large datasets because training time is O(n^3) where n is the size of the dataset.\n", "- Don't work well with much noise (e.g. classes overlapping (or many features?)) -> Naive Bayes better.\n", "\n", "**Model 2: Random Forest**\n", "- It's just quite good\n", "- \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print \"Trained model in {:.4f} seconds\".format(end - start)\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print \"Made predictions in {:.4f} seconds.\".format(end - start)\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print \"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print \"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train))\n", " print \"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "# from sklearn import model_A\n", "# from sklearn import model_B\n", "# from skearln import model_C\n", "\n", "# TODO: Initialize the three models\n", "clf_A = None\n", "clf_B = None\n", "clf_C = None\n", "\n", "# TODO: Set up the training set sizes\n", "X_train_100 = None\n", "y_train_100 = None\n", "\n", "X_train_200 = None\n", "y_train_200 = None\n", "\n", "X_train_300 = None\n", "y_train_300 = None\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "# train_predict(clf, X_train, y_train, X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | EXAMPLE | | | |\n", "| 300 | | | | EXAMPLE |\n", "\n", "** Classifer 2 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | EXAMPLE | | | |\n", "| 300 | | | | EXAMPLE |\n", "\n", "** Classifer 3 - ?** \n", "\n", "| Training Set Size | Training Time | Prediction Time (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | | | | |\n", "| 200 | | | | |\n", "| 300 | | | | |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = None\n", "\n", "# TODO: Initialize the classifier\n", "clf = None\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = None\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = None\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = None\n", "\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print \"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train))\n", "print \"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p2-student-intervention/report.html ================================================ student_intervention

Machine Learning Engineer Nanodegree

Supervised Learning

Project 2: Building a Student Intervention System

Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with 'Implementation' in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO' statement. Please be sure to read the instructions carefully!

In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a 'Question X' header. Carefully read each question and provide thorough answers in the following text boxes that begin with 'Answer:'. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide.

Note: Code and Markdown cells can be executed using the Shift + Enter keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode.

Question 1 - Classification vs. Regression

Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?

Answer:

It is a classification problem.

  • The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.
  • Thus the output is discrete.
  • Regression deals with continuous output, whereas classification deals with discrete output.
  • So this supervised learning problem is a classification problem, specifically one with two classes.

If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem.

Exploring the Data

Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, 'passed', will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student.

In [3]:
# Import libraries
import numpy as np
import pandas as pd
from time import time
from sklearn.metrics import f1_score

# Read student data
student_data = pd.read_csv("student-data.csv")
print("Student data read successfully!")
Student data read successfully!

Implementation: Data Exploration

Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:

  • The total number of students, n_students.
  • The total number of features for each student, n_features.
  • The number of those students who passed, n_passed.
  • The number of those students who failed, n_failed.
  • The graduation rate of the class, grad_rate, in percent (%).
In [4]:
# TODO: Calculate number of students
n_students = len(student_data)

# TODO: Calculate number of features
# Don't count label column
n_features = len(student_data.iloc[0]) - 1

# TODO: Calculate passing students
n_passed = len(student_data[student_data['passed'] == 'yes'])

# TODO: Calculate failing students
n_failed = len(student_data[student_data['passed'] == 'no'])

# TODO: Calculate graduation rate
grad_rate = float(n_passed)/n_students * 100

# Print the results
print("Total number of students (number of datapoints): {}".format(n_students))
print("Number of features: {}".format(n_features))
print("Number of students who passed (graduates): {}".format(n_passed))
print("Number of students who failed (non-graduates): {}".format(n_failed))
print("Graduation rate of the class: {:.2f}%".format(grad_rate))
Total number of students (number of datapoints): 395
Number of features: 30
Number of students who passed (graduates): 265
Number of students who failed (non-graduates): 130
Graduation rate of the class: 67.09%
In [56]:
student_data.head()
Out[56]:
school sex age address famsize Pstatus Medu Fedu Mjob Fjob ... internet romantic famrel freetime goout Dalc Walc health absences passed
0 GP F 18 U GT3 A 4 4 at_home teacher ... no no 4 3 4 1 1 3 6 no
1 GP F 17 U GT3 T 1 1 at_home other ... yes no 5 3 3 1 1 3 4 no
2 GP F 15 U LE3 T 1 1 at_home other ... yes no 4 3 2 2 3 3 10 yes
3 GP F 15 U GT3 T 4 2 health services ... yes yes 3 2 2 1 1 5 2 yes
4 GP F 16 U GT3 T 3 3 other other ... no no 4 3 2 1 2 5 4 yes

5 rows × 31 columns

In [57]:
# Experiment to see if `failures` are a good predictor of `passed`

student_data[['failures', 'passed']]
pp, pf, fp, ff = 0, 0, 0, 0
for i in range(len(student_data)):
    if student_data.iloc[i]['failures'] > 0:
        if student_data.iloc[i]['passed'] == 'no':
            ff += 1
        else:
            fp += 1
    else:
        if student_data.iloc[i]['passed'] == 'no':
            pf += 1
        else:
            pp += 1
print("pp: ", pp, "pf: ", pf, "fp: ", fp, "ff: ", ff)
pp:  234 pf:  78 fp:  31 ff:  52

Preparing the Data

In this section, we will prepare the data for modeling, training and testing.

Identify feature and target columns

It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.

Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric.

In [58]:
# Extract feature columns
feature_cols = list(student_data.columns[:-1])

# Extract target column 'passed'
target_col = student_data.columns[-1] 

# Show the list of columns
print("Feature columns:\n{}".format(feature_cols))
print("\nTarget column: {}".format(target_col))

# Separate the data into feature data and target data (X_all and y_all, respectively)
X_all = student_data[feature_cols]
y_all = student_data[target_col]

# Show the feature information by printing the first five rows
print("\nFeature values:")
print(X_all.head())
Feature columns:
['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']

Target column: passed

Feature values:
  school sex  age address famsize Pstatus  Medu  Fedu     Mjob      Fjob  \
0     GP   F   18       U     GT3       A     4     4  at_home   teacher   
1     GP   F   17       U     GT3       T     1     1  at_home     other   
2     GP   F   15       U     LE3       T     1     1  at_home     other   
3     GP   F   15       U     GT3       T     4     2   health  services   
4     GP   F   16       U     GT3       T     3     3    other     other   

    ...    higher internet  romantic  famrel  freetime goout Dalc Walc health  \
0   ...       yes       no        no       4         3     4    1    1      3   
1   ...       yes      yes        no       5         3     3    1    1      3   
2   ...       yes      yes        no       4         3     2    2    3      3   
3   ...       yes      yes       yes       3         2     2    1    1      5   
4   ...       yes       no        no       4         3     2    1    2      5   

  absences  
0        6  
1        4  
2       10  
3        2  
4        4  

[5 rows x 30 columns]

Preprocess Feature Columns

As you can see, there are several non-numeric columns that need to be converted! Many of them are simply yes/no, e.g. internet. These can be reasonably converted into 1/0 (binary) values.

Other columns, like Mjob and Fjob, have more than two values, and are known as categorical variables. The recommended way to handle such a column is to create as many columns as possible values (e.g. Fjob_teacher, Fjob_other, Fjob_services, etc.), and assign a 1 to one of them and 0 to all others.

These generated columns are sometimes called dummy variables, and we will use the pandas.get_dummies() function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section.

In [59]:
def preprocess_features(X):
    ''' Preprocesses the student data and converts non-numeric binary variables into
        binary (0/1) variables. Converts categorical variables into dummy variables. '''
    
    # Initialize new output DataFrame
    output = pd.DataFrame(index = X.index)

    # Investigate each feature column for the data
    for col, col_data in X.iteritems():
        
        # If data type is non-numeric, replace all yes/no values with 1/0
        if col_data.dtype == object:
            col_data = col_data.replace(['yes', 'no'], [1, 0])

        # If data type is categorical, convert to dummy variables
        if col_data.dtype == object:
            # Example: 'school' => 'school_GP' and 'school_MS'
            col_data = pd.get_dummies(col_data, prefix = col)  
        
        # Collect the revised columns
        output = output.join(col_data)
    
    return output

X_all = preprocess_features(X_all)
print("Processed feature columns ({} total features):\n{}".format(len(X_all.columns), list(X_all.columns)))
Processed feature columns (48 total features):
['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']

Implementation: Training and Testing Data Split

So far, we have converted all categorical features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:

  • Randomly shuffle and split the data (X_all, y_all) into training and testing subsets.
    • Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).
    • Set a random_state for the function(s) you use, if provided.
    • Store the results in X_train, X_test, y_train, and y_test.
In [60]:
# TODO: Import any additional functionality you may need here
from sklearn.cross_validation import train_test_split
from sklearn.utils import shuffle

# TODO: Set the number of training points
num_train = 300

# Set the number of testing points
num_test = X_all.shape[0] - num_train

# TODO: Shuffle and split the dataset into the number of training and testing points above
X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)

# Show the results of the split
print("Training set has {} samples.".format(X_train.shape[0]))
print("Testing set has {} samples.".format(X_test.shape[0]))
Training set has 300 samples.
Testing set has 95 samples.

Training and Evaluating Models

In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in scikit-learn. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.

The following supervised learning models are currently available in scikit-learn that you may choose from:

  • Gaussian Naive Bayes (GaussianNB)
  • Decision Trees
  • Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)
  • K-Nearest Neighbors (KNeighbors)
  • Stochastic Gradient Descent (SGDC)
  • Support Vector Machines (SVM)
  • Logistic Regression

Question 2 - Model Application

List three supervised learning models that are appropriate for this problem. For each model chosen

  • Describe one real-world application in industry where the model can be applied. (You may need to do a small bit of research for this — give references!)
  • What are the strengths of the model; when does it perform well?
  • What are the weaknesses of the model; when does it perform poorly?
  • What makes this model a good candidate for the problem, given what you know about the data?

Answer:

Description of data:

  • 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)
  • 31 features (non-trivial but not high compared to text learning applications that may have 50,000 features)

Model 1: Random Forests

Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.
  • It is often quite accurate.

Model 2: Naive Bayes (GaussianNB)

Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 31 features in our dataset.

Model 3: Logistic Regression

Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).

Reference documents:

Setup

Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:

  • train_classifier - takes as input a classifier and training data and fits the classifier to the data.
  • predict_labels - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.
  • train_predict - takes as input a classifier, and the training and testing data, and performs train_clasifier and predict_labels.
    • This function will report the F1 score for both the training and testing data separately.
In [61]:
def train_classifier(clf, X_train, y_train):
    ''' Fits a classifier to the training data. '''
    
    # Start the clock, train the classifier, then stop the clock
    start = time()
    clf.fit(X_train, y_train)
    end = time()
    
    # Print the results
    print("Trained model in {:.4f} seconds".format(end - start))

    
def predict_labels(clf, features, target):
    ''' Makes predictions using a fit classifier based on F1 score. '''
    
    # Start the clock, make predictions, then stop the clock
    start = time()
    y_pred = clf.predict(features)
    end = time()
    
    # Print and return results
    print("Made predictions in {:.4f} seconds.".format(end - start))
    return f1_score(target.values, y_pred, pos_label='yes')


def train_predict(clf, X_train, y_train, X_test, y_test):
    ''' Train and predict using a classifer based on F1 score. '''
    
    # Indicate the classifier and the training set size
    print("Training a {} using a training set size of {}. . .".format(clf.__class__.__name__, len(X_train)))
    
    # Train the classifier
    train_classifier(clf, X_train, y_train)
    
    # Print the results of prediction for both training and testing
    print("F1 score for training set: {:.4f}.".format(predict_labels(clf, X_train, y_train)))
    print("F1 score for test set: {:.4f}.".format(predict_labels(clf, X_test, y_test)))
    print("\n")

Implementation: Model Performance Metrics

With the predefined functions above, you will now import the three supervised learning models of your choice and run the train_predict function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:

  • Import the three supervised learning models you've discussed in the previous section.
  • Initialize the three models and store them in clf_A, clf_B, and clf_C.
    • Use a random_state for each model you use, if provided.
    • Note: Use the default settings for each model — you will tune one specific model in a later section.
  • Create the different training set sizes to be used to train each model.
    • Do not reshuffle and resplit the data! The new training points should be drawn from X_train and y_train.
  • Fit each model with each training set size and make predictions on the test set (9 in total).
    Note: Three tables are provided after the following code cell which can be used to store your results.
In [62]:
# TODO: Import the three supervised learning models from sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression

# TODO: Initialize the three models
clf_A = RandomForestClassifier(random_state=0)
clf_B = GaussianNB()
clf_C = LogisticRegression(random_state=0)

# TODO: Set up the training set sizes
# Previously shuffled
X_train_100 = X_train[:100]
y_train_100 = y_train[:100]

X_train_200 = X_train[:200]
y_train_200 = y_train[:200]

X_train_300 = X_train
y_train_300 = y_train

# TODO: Execute the 'train_predict' function for each classifier and each training set size
for clf in [clf_A, clf_B, clf_C]:
    for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:
        train_predict(clf, j[0], j[1], X_test, y_test)
Training a RandomForestClassifier using a training set size of 100. . .
Trained model in 0.0242 seconds
Made predictions in 0.0018 seconds.
F1 score for training set: 1.0000.
Made predictions in 0.0022 seconds.
F1 score for test set: 0.6667.


Training a RandomForestClassifier using a training set size of 200. . .
Trained model in 0.0121 seconds
Made predictions in 0.0011 seconds.
F1 score for training set: 0.9964.
Made predictions in 0.0013 seconds.
F1 score for test set: 0.6563.


Training a RandomForestClassifier using a training set size of 300. . .
Trained model in 0.0140 seconds
Made predictions in 0.0012 seconds.
F1 score for training set: 0.9927.
Made predictions in 0.0009 seconds.
F1 score for test set: 0.6870.


Training a GaussianNB using a training set size of 100. . .
Trained model in 0.0017 seconds
Made predictions in 0.0003 seconds.
F1 score for training set: 0.8714.
Made predictions in 0.0003 seconds.
F1 score for test set: 0.6977.


Training a GaussianNB using a training set size of 200. . .
Trained model in 0.0009 seconds
Made predictions in 0.0003 seconds.
F1 score for training set: 0.8421.
Made predictions in 0.0003 seconds.
F1 score for test set: 0.6875.


Training a GaussianNB using a training set size of 300. . .
Trained model in 0.0008 seconds
Made predictions in 0.0003 seconds.
F1 score for training set: 0.8180.
Made predictions in 0.0003 seconds.
F1 score for test set: 0.7031.


Training a KNeighborsClassifier using a training set size of 100. . .
Trained model in 0.0077 seconds
Made predictions in 0.0071 seconds.
F1 score for training set: 0.8552.
Made predictions in 0.0014 seconds.
F1 score for test set: 0.7556.


Training a KNeighborsClassifier using a training set size of 200. . .
Trained model in 0.0008 seconds
Made predictions in 0.0030 seconds.
F1 score for training set: 0.8667.
Made predictions in 0.0014 seconds.
F1 score for test set: 0.7737.


Training a KNeighborsClassifier using a training set size of 300. . .
Trained model in 0.0008 seconds
Made predictions in 0.0047 seconds.
F1 score for training set: 0.8615.
Made predictions in 0.0017 seconds.
F1 score for test set: 0.7971.


In [63]:
# Models 4 - 7 for general comparison

# TODO: Import the three supervised learning models from sklearn
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import SGDClassifier


# TODO: Initialize the three models
clf_A = DecisionTreeClassifier(random_state=0)
clf_B = SGDClassifier(random_state=0)
clf_C = SVC(random_state=0)
clf_D = KNeighborsClassifier()

# TODO: Set up the training set sizes
# Previously shuffled
X_train_100 = X_train[:100]
y_train_100 = y_train[:100]

X_train_200 = X_train[:200]
y_train_200 = y_train[:200]

X_train_300 = X_train
y_train_300 = y_train

# TODO: Execute the 'train_predict' function for each classifier and each training set size
for clf in [clf_A, clf_B, clf_C, clf_D]:
    for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:
        train_predict(clf, j[0], j[1], X_test, y_test)
Training a DecisionTreeClassifier using a training set size of 100. . .
Trained model in 0.0022 seconds
Made predictions in 0.0003 seconds.
F1 score for training set: 1.0000.
Made predictions in 0.0008 seconds.
F1 score for test set: 0.6721.


Training a DecisionTreeClassifier using a training set size of 200. . .
Trained model in 0.0017 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 1.0000.
Made predictions in 0.0002 seconds.
F1 score for test set: 0.6667.


Training a DecisionTreeClassifier using a training set size of 300. . .
Trained model in 0.0018 seconds
Made predictions in 0.0003 seconds.
F1 score for training set: 1.0000.
Made predictions in 0.0002 seconds.
F1 score for test set: 0.6723.


Training a SGDClassifier using a training set size of 100. . .
Trained model in 0.0058 seconds
Made predictions in 0.0029 seconds.
F1 score for training set: 0.0000.
Made predictions in 0.0003 seconds.
F1 score for test set: 0.0000.


Training a SGDClassifier using a training set size of 200. . .
Trained model in 0.0009 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 0.8074.
Made predictions in 0.0001 seconds.
F1 score for test set: 0.7069.


Training a SGDClassifier using a training set size of 300. . .
Trained model in 0.0010 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 0.6268.
Made predictions in 0.0002 seconds.
F1 score for test set: 0.6847.


Training a SVC using a training set size of 100. . .
Trained model in 0.0042 seconds
Made predictions in 0.0016 seconds.
F1 score for training set: 0.8645.
Made predictions in 0.0007 seconds.
F1 score for test set: 0.7867.


Training a SVC using a training set size of 200. . .
Trained model in 0.0040 seconds
Made predictions in 0.0021 seconds.
F1 score for training set: 0.8698.
Made predictions in 0.0012 seconds.
F1 score for test set: 0.7785.


Training a SVC using a training set size of 300. . .
Trained model in 0.0068 seconds
Made predictions in 0.0040 seconds.
F1 score for training set: 0.8675.
Made predictions in 0.0015 seconds.
F1 score for test set: 0.7755.


Training a LogisticRegression using a training set size of 100. . .
Trained model in 0.0042 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 0.8857.
Made predictions in 0.0002 seconds.
F1 score for test set: 0.7385.


Training a LogisticRegression using a training set size of 200. . .
Trained model in 0.0015 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 0.8720.
Made predictions in 0.0001 seconds.
F1 score for test set: 0.7132.


Training a LogisticRegression using a training set size of 300. . .
Trained model in 0.0034 seconds
Made predictions in 0.0002 seconds.
F1 score for training set: 0.8513.
Made predictions in 0.0001 seconds.
F1 score for test set: 0.7407.


/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)

Tabular Results

Edit the cell below to see how a table can be designed in Markdown. You can record your results from above in the tables provided.

Classifer 1 - Random Forest

Training Set Size Training Time (s) Prediction Time (s) (test) F1 Score (train) F1 Score (test)
100 0.0102 0.0009 0.9922 0.7206
200 0.0094 0.0008 0.9962 0.6977
300 0.0107 0.0012 0.9951 0.6721
  • High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.
  • F1 test score decreases as training set size increases, again suggesting that there is overfitting.
  • Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)

Classifer 2 - GaussianNB

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0009 0.0004 0.8392 0.7591
200 0.0007 0.0002 0.8309 0.7424
300 0.0011 0.0003 0.8099 0.7463

Classifer 3 - Logistic Regression

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0027 0.0001 0.8872 0.7328
200 0.0017 0.0002 0.8489 0.7612
300 0.0026 0.0001 0.8337 0.7883

It's doing surprisingly well.

Classifer 4 - Support Vector Machines SVC

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0038 0.0007 0.8671 0.7483
200 0.0033 0.0013 0.8800 0.7724
300 0.0053 0.0013 0.8793 0.7808
  • This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).
  • Prediction time linear with number of things to predict for training set sizes 200,300.

Classifer 5 - KNeighborsClassifier

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0006 0.0012 0.8345 0.7023
200 0.0006 0.0014 0.8502 0.7121
300 0.0007 0.0019 0.8731 0.7556

Classifer 6 - Decision Trees

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0009 0.0004 1.0000 0.6667
200 0.0013 0.0001 1.0000 0.7460
300 0.0016 0.0002 1.0000 0.7424
  • High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.
  • F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.

Classifer 7 - Stochastic Gradient Descent

Training Set Size Training Time (s) Prediction Time (test) (s) F1 Score (train) F1 Score (test)
100 0.0091 0.0008 0.7832 0.7586
200 0.0010 0.0002 0.5027 0.3902
300 0.0010 0.0002 0.5981 0.4946

Choosing the Best Model

In this final section, you will choose from the three supervised learning models the best model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (X_train and y_train) by tuning at least one parameter to improve upon the untuned model's F1 score.

Question 3 - Choosing the Best Model

Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?

Answer:

I chose Logistic Regression.

  1. Performance (important): Logistic Regression had the highest F1 score.

    • F1 score is a combined measure of (the harmonic mean of) precision and recall.
      • Precision is X and
      • Recall is Y.
    • The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of 0.7883 and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.
  2. Cost (measured by training and prediction times):

    • Out of the two models with similar F1 score, Logistic Regression has the shorter training and prediction time at < 50% that af SVC's time (0.0026s to train, 0.0001s to predict vs SVC 0.0053s to train and 0.0013 to predict).
    • The training time is not too high and the prediction time is extremely low at 0.0001s.
    • Since minimising computational cost is a concern, Logistic Regression seems like a good choice.
  3. Available data

    • This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.

Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB

If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).

  • It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.

Note 2: This may not be the optimal model because we did not tune any parameters.

  • The default parameters for e.g. Decision Trees may just be really bad for this example.
  • If we wanted to choose the best model, we should compare versions of the models with tuned parameters.

Question 4 - Model in Layman's Terms

In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.

Answer:

Training Logistic regression will draw one single curve to relate characteristics like whether or not a student has access to Internet or whether to the predicted probability that they pass. For example, it may think that students who have little free time and are in romantic relationships are less likely to pass (an intuitive reason is because they have less time to study).

Prediction If the model guesses based on the student's characteristics they are more likely to pass than to fail, then it predicts that they will pass and vice versa.

Implementation: Model Tuning

Fine tune the chosen model. Use grid search (GridSearchCV) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:

  • Import sklearn.grid_search.gridSearchCV and sklearn.metrics.make_scorer.
  • Create a dictionary of parameters you wish to tune for the chosen model.
    • Example: parameters = {'parameter' : [list of values]}.
  • Initialize the classifier you've chosen and store it in clf.
  • Create the F1 scoring function using make_scorer and store it in f1_scorer.
    • Set the pos_label parameter to the correct value!
  • Perform grid search on the classifier clf using f1_scorer as the scoring method, and store it in grid_obj.
  • Fit the grid search object to the training data (X_train, y_train), and store it in grid_obj.
In [64]:
# TODO: Import 'GridSearchCV' and 'make_scorer'
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import make_scorer

def predict_labels(clf, features, target):
    ''' Makes predictions using a fit classifier based on F1 score. '''
    
    # Start the clock, make predictions, then stop the clock
    start = time()
    y_pred = clf.predict(features)
    score = clf.score(features, target.values)
    end = time()
    print("Score: ", score)
    
    # Print and return results
    print("Made predictions in {:.4f} seconds.".format(end - start))
    return f1_score(target.values, y_pred, pos_label='yes')


# TODO: Create the parameters list you wish to tune
parameters = { "penalty":["l2","l1"], 
              # "tol":[0.00001, 0.0001, 0.001, 0.1, 1], 
               "C":[1,10,100,1000],
              }

# TODO: Initialize the classifier
clf = LogisticRegression()

# TODO: Make an f1 scoring function using 'make_scorer' 
f1_scorer = make_scorer(f1_score, pos_label='yes')

# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method
grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)

# TODO: Fit the grid search object to the training data and find the optimal parameters
grid_obj = grid_obj.fit(X_train, y_train)
print(grid_obj)
# Get the estimator
clf = grid_obj.best_estimator_
print(clf)

# Report the final F1 score for training and testing after parameter tuning
print("Tuned model has a training F1 score of {:.4f}.".format(predict_labels(clf, X_train, y_train)))
print("Tuned model has a testing F1 score of {:.4f}.".format(predict_labels(clf, X_test, y_test)))
GridSearchCV(cv=None, error_score='raise',
       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False),
       fit_params={}, iid=True, n_jobs=1,
       param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},
       pre_dispatch='2*n_jobs', refit=True,
       scoring=make_scorer(f1_score, pos_label=yes), verbose=0)
LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,
          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
          penalty='l1', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False)
Score:  0.77
Made predictions in 0.0008 seconds.
Tuned model has a training F1 score of 0.8442.
Score:  0.621052631579
Made predictions in 0.0008 seconds.
Tuned model has a testing F1 score of 0.7313.

Question 5 - Final F1 Score

What is the final model's F1 score for training and testing? How does that score compare to the untuned model?

Answer:

AttemptF1 train scoreF1 test score
1 (allow "penalty" and "C" to vary)0.82880.7801
2 (only allow "C" to vary)0.83370.7883
0 (untuned model)0.83370.7883
  • The train and test scores are both lower than the untuned version if I allow both "penalty" and "C" to vary.
  • If I only allow "C" to vary, GridSearchCV chooses "C"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.
  • Why would GridSearchCV pick penalty="l1" if penalty="l2" produces better training F1 scores (all other factors held constant)?
    • One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the "penalty" and "C" values (as opposed to only "C"), the accuracy score was lower.

Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising).

# Try 1 parameters = {"penalty":("l1","l2"), "C":[1,10,100,1000], } LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, penalty='l1', random_state=None, solver='liblinear', tol=0.0001, verbose=0, warm_start=False) Score: 0.746666666667 Made predictions in 0.0047 seconds. Tuned model has a training F1 score of 0.8288. Score: 0.673684210526 Made predictions in 0.0006 seconds. Tuned model has a testing F1 score of 0.7801.# Try 2 parameters = {# "penalty":("l1","l2"), "C":[1,10,100,1000], } LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True, intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2', random_state=None, solver='liblinear', tol=0.0001, verbose=0, warm_start=False) Score: 0.756666666667 Made predictions in 0.0008 seconds. Tuned model has a training F1 score of 0.8337. Score: 0.694736842105 Made predictions in 0.0004 seconds. Tuned model has a testing F1 score of 0.7883.

Note: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to
File -> Download as -> HTML (.html). Include the finished document along with this notebook as your submission.

================================================ FILE: p2-student-intervention/student-data.csv ================================================ school,sex,age,address,famsize,Pstatus,Medu,Fedu,Mjob,Fjob,reason,guardian,traveltime,studytime,failures,schoolsup,famsup,paid,activities,nursery,higher,internet,romantic,famrel,freetime,goout,Dalc,Walc,health,absences,passed GP,F,18,U,GT3,A,4,4,at_home,teacher,course,mother,2,2,0,yes,no,no,no,yes,yes,no,no,4,3,4,1,1,3,6,no GP,F,17,U,GT3,T,1,1,at_home,other,course,father,1,2,0,no,yes,no,no,no,yes,yes,no,5,3,3,1,1,3,4,no GP,F,15,U,LE3,T,1,1,at_home,other,other,mother,1,2,3,yes,no,yes,no,yes,yes,yes,no,4,3,2,2,3,3,10,yes GP,F,15,U,GT3,T,4,2,health,services,home,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,yes,3,2,2,1,1,5,2,yes GP,F,16,U,GT3,T,3,3,other,other,home,father,1,2,0,no,yes,yes,no,yes,yes,no,no,4,3,2,1,2,5,4,yes GP,M,16,U,LE3,T,4,3,services,other,reputation,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,5,4,2,1,2,5,10,yes GP,M,16,U,LE3,T,2,2,other,other,home,mother,1,2,0,no,no,no,no,yes,yes,yes,no,4,4,4,1,1,3,0,yes GP,F,17,U,GT3,A,4,4,other,teacher,home,mother,2,2,0,yes,yes,no,no,yes,yes,no,no,4,1,4,1,1,1,6,no GP,M,15,U,LE3,A,3,2,services,other,home,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,2,2,1,1,1,0,yes GP,M,15,U,GT3,T,3,4,other,other,home,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,5,5,1,1,1,5,0,yes GP,F,15,U,GT3,T,4,4,teacher,health,reputation,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,3,3,3,1,2,2,0,no GP,F,15,U,GT3,T,2,1,services,other,reputation,father,3,3,0,no,yes,no,yes,yes,yes,yes,no,5,2,2,1,1,4,4,yes GP,M,15,U,LE3,T,4,4,health,services,course,father,1,1,0,no,yes,yes,yes,yes,yes,yes,no,4,3,3,1,3,5,2,yes GP,M,15,U,GT3,T,4,3,teacher,other,course,mother,2,2,0,no,yes,yes,no,yes,yes,yes,no,5,4,3,1,2,3,2,yes GP,M,15,U,GT3,A,2,2,other,other,home,other,1,3,0,no,yes,no,no,yes,yes,yes,yes,4,5,2,1,1,3,0,yes GP,F,16,U,GT3,T,4,4,health,other,home,mother,1,1,0,no,yes,no,no,yes,yes,yes,no,4,4,4,1,2,2,4,yes GP,F,16,U,GT3,T,4,4,services,services,reputation,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,no,3,2,3,1,2,2,6,yes GP,F,16,U,GT3,T,3,3,other,other,reputation,mother,3,2,0,yes,yes,no,yes,yes,yes,no,no,5,3,2,1,1,4,4,yes GP,M,17,U,GT3,T,3,2,services,services,course,mother,1,1,3,no,yes,no,yes,yes,yes,yes,no,5,5,5,2,4,5,16,no GP,M,16,U,LE3,T,4,3,health,other,home,father,1,1,0,no,no,yes,yes,yes,yes,yes,no,3,1,3,1,3,5,4,yes GP,M,15,U,GT3,T,4,3,teacher,other,reputation,mother,1,2,0,no,no,no,no,yes,yes,yes,no,4,4,1,1,1,1,0,yes GP,M,15,U,GT3,T,4,4,health,health,other,father,1,1,0,no,yes,yes,no,yes,yes,yes,no,5,4,2,1,1,5,0,yes GP,M,16,U,LE3,T,4,2,teacher,other,course,mother,1,2,0,no,no,no,yes,yes,yes,yes,no,4,5,1,1,3,5,2,yes GP,M,16,U,LE3,T,2,2,other,other,reputation,mother,2,2,0,no,yes,no,yes,yes,yes,yes,no,5,4,4,2,4,5,0,yes GP,F,15,R,GT3,T,2,4,services,health,course,mother,1,3,0,yes,yes,yes,yes,yes,yes,yes,no,4,3,2,1,1,5,2,no GP,F,16,U,GT3,T,2,2,services,services,home,mother,1,1,2,no,yes,yes,no,no,yes,yes,no,1,2,2,1,3,5,14,no GP,M,15,U,GT3,T,2,2,other,other,home,mother,1,1,0,no,yes,yes,no,yes,yes,yes,no,4,2,2,1,2,5,2,yes GP,M,15,U,GT3,T,4,2,health,services,other,mother,1,1,0,no,no,yes,no,yes,yes,yes,no,2,2,4,2,4,1,4,yes GP,M,16,U,LE3,A,3,4,services,other,home,mother,1,2,0,yes,yes,no,yes,yes,yes,yes,no,5,3,3,1,1,5,4,yes GP,M,16,U,GT3,T,4,4,teacher,teacher,home,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,yes,4,4,5,5,5,5,16,yes GP,M,15,U,GT3,T,4,4,health,services,home,mother,1,2,0,no,yes,yes,no,no,yes,yes,no,5,4,2,3,4,5,0,yes GP,M,15,U,GT3,T,4,4,services,services,reputation,mother,2,2,0,no,yes,no,yes,yes,yes,yes,no,4,3,1,1,1,5,0,yes GP,M,15,R,GT3,T,4,3,teacher,at_home,course,mother,1,2,0,no,yes,no,yes,yes,yes,yes,yes,4,5,2,1,1,5,0,yes GP,M,15,U,LE3,T,3,3,other,other,course,mother,1,2,0,no,no,no,yes,no,yes,yes,no,5,3,2,1,1,2,0,yes GP,M,16,U,GT3,T,3,2,other,other,home,mother,1,1,0,no,yes,yes,no,no,yes,yes,no,5,4,3,1,1,5,0,yes GP,F,15,U,GT3,T,2,3,other,other,other,father,2,1,0,no,yes,no,yes,yes,yes,no,no,3,5,1,1,1,5,0,no GP,M,15,U,LE3,T,4,3,teacher,services,home,mother,1,3,0,no,yes,no,yes,yes,yes,yes,no,5,4,3,1,1,4,2,yes GP,M,16,R,GT3,A,4,4,other,teacher,reputation,mother,2,3,0,no,yes,no,yes,yes,yes,yes,yes,2,4,3,1,1,5,7,yes GP,F,15,R,GT3,T,3,4,services,health,course,mother,1,3,0,yes,yes,yes,yes,yes,yes,yes,no,4,3,2,1,1,5,2,yes GP,F,15,R,GT3,T,2,2,at_home,other,reputation,mother,1,1,0,yes,yes,yes,yes,yes,yes,no,no,4,3,1,1,1,2,8,yes GP,F,16,U,LE3,T,2,2,other,other,home,mother,2,2,1,no,yes,no,yes,no,yes,yes,yes,3,3,3,1,2,3,25,yes GP,M,15,U,LE3,T,4,4,teacher,other,home,other,1,1,0,no,yes,no,no,no,yes,yes,yes,5,4,3,2,4,5,8,yes GP,M,15,U,GT3,T,4,4,services,teacher,course,father,1,2,0,no,yes,no,yes,yes,yes,yes,no,4,3,3,1,1,5,2,yes GP,M,15,U,GT3,T,2,2,services,services,course,father,1,1,0,yes,yes,no,no,yes,yes,yes,no,5,4,1,1,1,1,0,yes GP,F,16,U,LE3,T,2,2,other,at_home,course,father,2,2,1,yes,no,no,yes,yes,yes,yes,no,4,3,3,2,2,5,14,no GP,F,15,U,LE3,A,4,3,other,other,course,mother,1,2,0,yes,yes,yes,yes,yes,yes,yes,yes,5,2,2,1,1,5,8,no GP,F,16,U,LE3,A,3,3,other,services,home,mother,1,2,0,no,yes,no,no,yes,yes,yes,no,2,3,5,1,4,3,12,yes GP,M,16,U,GT3,T,4,3,health,services,reputation,mother,1,4,0,no,no,no,yes,yes,yes,yes,no,4,2,2,1,1,2,4,yes GP,M,15,U,GT3,T,4,2,teacher,other,home,mother,1,2,0,no,yes,yes,no,yes,yes,no,no,4,3,3,2,2,5,2,yes GP,F,15,U,GT3,T,4,4,services,teacher,other,father,1,2,1,yes,yes,no,yes,no,yes,yes,no,4,4,4,1,1,3,2,no GP,F,16,U,LE3,T,2,2,services,services,course,mother,3,2,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,2,3,4,2,yes GP,F,15,U,LE3,T,4,2,health,other,other,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,1,1,5,2,yes GP,M,15,U,LE3,A,4,2,health,health,other,father,2,1,1,no,no,no,no,yes,yes,no,no,5,5,5,3,4,5,6,yes GP,F,15,U,GT3,T,4,4,services,services,course,mother,1,1,0,yes,yes,yes,no,yes,yes,yes,no,3,3,4,2,3,5,0,yes GP,F,15,U,LE3,A,3,3,other,other,other,mother,1,1,0,no,no,yes,no,yes,yes,yes,no,5,3,4,4,4,1,6,yes GP,F,16,U,GT3,A,2,1,other,other,other,mother,1,2,0,no,no,yes,yes,yes,yes,yes,yes,5,3,4,1,1,2,8,yes GP,F,15,U,GT3,A,4,3,services,services,reputation,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,4,3,2,1,1,1,0,yes GP,M,15,U,GT3,T,4,4,teacher,health,reputation,mother,1,2,0,no,yes,no,yes,yes,yes,no,no,3,2,2,1,1,5,4,yes GP,M,15,U,LE3,T,1,2,other,at_home,home,father,1,2,0,yes,yes,no,yes,yes,yes,yes,no,4,3,2,1,1,5,2,no GP,F,16,U,GT3,T,4,2,services,other,course,mother,1,2,0,no,yes,no,no,yes,yes,yes,no,4,2,3,1,1,5,2,yes GP,F,16,R,GT3,T,4,4,health,teacher,other,mother,1,2,0,no,yes,no,yes,yes,yes,no,no,2,4,4,2,3,4,6,yes GP,F,16,U,GT3,T,1,1,services,services,course,father,4,1,0,yes,yes,no,yes,no,yes,yes,yes,5,5,5,5,5,5,6,yes GP,F,16,U,LE3,T,1,2,other,services,reputation,father,1,2,0,yes,no,no,yes,yes,yes,yes,no,4,4,3,1,1,1,4,no GP,F,16,U,GT3,T,4,3,teacher,health,home,mother,1,3,0,yes,yes,yes,yes,yes,yes,yes,no,3,4,4,2,4,4,2,no GP,F,15,U,LE3,T,4,3,services,services,reputation,father,1,2,0,yes,no,no,yes,yes,yes,yes,yes,4,4,4,2,4,2,0,yes GP,F,16,U,LE3,T,4,3,teacher,services,course,mother,3,2,0,no,yes,no,yes,yes,yes,yes,no,5,4,3,1,2,1,2,yes GP,M,15,U,GT3,A,4,4,other,services,reputation,mother,1,4,0,no,yes,no,yes,no,yes,yes,yes,1,3,3,5,5,3,4,yes GP,F,16,U,GT3,T,3,1,services,other,course,mother,1,4,0,yes,yes,yes,no,yes,yes,yes,no,4,3,3,1,2,5,4,no GP,F,15,R,LE3,T,2,2,health,services,reputation,mother,2,2,0,yes,yes,yes,no,yes,yes,yes,no,4,1,3,1,3,4,2,no GP,F,15,R,LE3,T,3,1,other,other,reputation,father,2,4,0,no,yes,no,no,no,yes,yes,no,4,4,2,2,3,3,12,yes GP,M,16,U,GT3,T,3,1,other,other,reputation,father,2,4,0,no,yes,yes,no,yes,yes,yes,no,4,3,2,1,1,5,0,yes GP,M,15,U,GT3,T,4,2,other,other,course,mother,1,4,0,no,no,no,no,yes,yes,yes,no,3,3,3,1,1,3,0,yes GP,F,15,R,GT3,T,1,1,other,other,reputation,mother,1,2,2,yes,yes,no,no,no,yes,yes,yes,3,3,4,2,4,5,2,no GP,M,16,U,GT3,T,3,1,other,other,reputation,mother,1,1,0,no,no,no,yes,yes,yes,no,no,5,3,2,2,2,5,2,yes GP,F,16,U,GT3,T,3,3,other,services,home,mother,1,2,0,yes,yes,yes,yes,yes,yes,yes,no,4,3,3,2,4,5,54,yes GP,M,15,U,GT3,T,4,3,teacher,other,home,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,4,3,3,2,3,5,6,yes GP,M,15,U,GT3,T,4,0,teacher,other,course,mother,2,4,0,no,no,no,yes,yes,yes,yes,no,3,4,3,1,1,1,8,yes GP,F,16,U,GT3,T,2,2,other,other,reputation,mother,1,4,0,no,no,yes,no,yes,yes,yes,yes,5,2,3,1,3,3,0,yes GP,M,17,U,GT3,T,2,1,other,other,home,mother,2,1,3,yes,yes,no,yes,yes,no,yes,no,4,5,1,1,1,3,2,yes GP,F,16,U,GT3,T,3,4,at_home,other,course,mother,1,2,0,no,yes,no,no,yes,yes,yes,no,2,4,3,1,2,3,12,no GP,M,15,U,GT3,T,2,3,other,services,course,father,1,1,0,yes,yes,yes,yes,no,yes,yes,yes,3,2,2,1,3,3,2,yes GP,M,15,U,GT3,T,2,3,other,other,home,mother,1,3,0,yes,no,yes,no,no,yes,yes,no,5,3,2,1,2,5,4,yes GP,F,15,U,LE3,T,3,2,services,other,reputation,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,4,4,1,1,5,10,no GP,M,15,U,LE3,T,2,2,services,services,home,mother,2,2,0,no,no,yes,yes,yes,yes,yes,no,5,3,3,1,3,4,4,yes GP,F,15,U,GT3,T,1,1,other,other,home,father,1,2,0,no,yes,no,yes,no,yes,yes,no,4,3,2,2,3,4,2,yes GP,F,15,U,GT3,T,4,4,services,services,reputation,father,2,2,2,no,no,yes,no,yes,yes,yes,yes,4,4,4,2,3,5,6,no GP,F,16,U,LE3,T,2,2,at_home,other,course,mother,1,2,0,no,yes,no,no,yes,yes,no,no,4,3,4,1,2,2,4,no GP,F,15,U,GT3,T,4,2,other,other,reputation,mother,1,3,0,no,yes,no,yes,yes,yes,yes,no,5,3,3,1,3,1,4,yes GP,M,16,U,GT3,T,2,2,services,other,reputation,father,2,2,1,no,no,yes,yes,no,yes,yes,no,4,4,2,1,1,3,12,yes GP,M,16,U,LE3,A,4,4,teacher,health,reputation,mother,1,2,0,no,yes,no,no,yes,yes,no,no,4,1,3,3,5,5,18,no GP,F,16,U,GT3,T,3,3,other,other,home,mother,1,3,0,no,yes,yes,no,yes,yes,yes,yes,4,3,3,1,3,4,0,no GP,F,15,U,GT3,T,4,3,services,other,reputation,mother,1,1,0,no,no,yes,yes,yes,yes,yes,no,4,5,5,1,3,1,4,yes GP,F,16,U,LE3,T,3,1,other,other,home,father,1,2,0,yes,yes,no,no,yes,yes,no,no,3,3,3,2,3,2,4,no GP,F,16,U,GT3,T,4,2,teacher,services,home,mother,2,2,0,no,yes,yes,yes,yes,yes,yes,no,5,3,3,1,1,1,0,yes GP,M,15,U,LE3,T,2,2,services,health,reputation,mother,1,4,0,no,yes,no,yes,yes,yes,yes,no,4,3,4,1,1,4,6,yes GP,F,15,R,GT3,T,1,1,at_home,other,home,mother,2,4,1,yes,yes,yes,yes,yes,yes,yes,no,3,1,2,1,1,1,2,yes GP,M,16,R,GT3,T,4,3,services,other,reputation,mother,2,1,0,yes,yes,no,yes,no,yes,yes,no,3,3,3,1,1,4,2,yes GP,F,16,U,GT3,T,2,1,other,other,course,mother,1,2,0,no,yes,yes,no,yes,yes,no,yes,4,3,5,1,1,5,2,yes GP,F,16,U,GT3,T,4,4,other,other,reputation,mother,1,1,0,no,no,no,yes,no,yes,yes,no,5,3,4,1,2,1,6,yes GP,F,16,U,GT3,T,4,3,other,at_home,course,mother,1,3,0,yes,yes,yes,no,yes,yes,yes,no,5,3,5,1,1,3,0,no GP,M,16,U,GT3,T,4,4,services,services,other,mother,1,1,0,yes,yes,yes,yes,yes,yes,yes,no,4,5,5,5,5,4,14,no GP,M,16,U,GT3,T,4,4,services,teacher,other,father,1,3,0,no,yes,no,yes,yes,yes,yes,yes,4,4,3,1,1,4,0,yes GP,M,15,U,GT3,T,4,4,services,other,course,mother,1,1,0,no,yes,no,yes,no,yes,yes,no,5,3,3,1,1,5,4,yes GP,F,15,U,GT3,T,3,2,services,other,home,mother,2,2,0,yes,yes,yes,no,yes,yes,yes,no,4,3,5,1,1,2,26,no GP,M,15,U,GT3,A,3,4,services,other,course,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,5,4,4,1,1,1,0,yes GP,F,15,U,GT3,A,3,3,other,health,reputation,father,1,4,0,yes,no,no,no,yes,yes,no,no,4,3,3,1,1,4,10,yes GP,F,15,U,GT3,T,2,2,other,other,course,mother,1,4,0,yes,yes,yes,no,yes,yes,yes,no,5,1,2,1,1,3,8,no GP,M,16,U,GT3,T,3,3,services,other,home,father,1,3,0,no,yes,no,yes,yes,yes,yes,no,5,3,3,1,1,5,2,yes GP,M,15,R,GT3,T,4,4,other,other,home,father,4,4,0,no,yes,yes,yes,yes,yes,yes,yes,1,3,5,3,5,1,6,yes GP,F,16,U,LE3,T,4,4,health,health,other,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,yes,5,4,5,1,1,4,4,yes GP,M,15,U,LE3,A,4,4,teacher,teacher,course,mother,1,1,0,no,no,no,yes,yes,yes,yes,no,5,5,3,1,1,4,6,yes GP,F,16,R,GT3,T,3,3,services,other,reputation,father,1,3,1,yes,yes,no,yes,yes,yes,yes,no,4,1,2,1,1,2,0,yes GP,F,16,U,GT3,T,2,2,at_home,other,home,mother,1,2,1,yes,no,no,yes,yes,yes,yes,no,3,1,2,1,1,5,6,yes GP,M,15,U,LE3,T,4,2,teacher,other,course,mother,1,1,0,no,no,no,no,yes,yes,yes,no,3,5,2,1,1,3,10,yes GP,M,15,R,GT3,T,2,1,health,services,reputation,mother,1,2,0,no,no,no,yes,yes,yes,yes,yes,5,4,2,1,1,5,8,no GP,M,16,U,GT3,T,4,4,teacher,teacher,course,father,1,2,0,no,yes,no,yes,yes,yes,yes,no,5,4,4,1,2,5,2,yes GP,M,15,U,GT3,T,4,4,other,teacher,reputation,father,2,2,0,no,yes,no,yes,yes,yes,no,no,4,4,3,1,1,2,2,yes GP,M,16,U,GT3,T,3,3,other,services,home,father,2,1,0,no,no,no,yes,yes,yes,yes,no,5,4,2,1,1,5,0,yes GP,M,17,R,GT3,T,1,3,other,other,course,father,3,2,1,no,yes,no,yes,yes,yes,yes,no,5,2,4,1,4,5,20,no GP,M,15,U,GT3,T,3,4,other,other,reputation,father,1,1,0,no,no,no,no,yes,yes,yes,no,3,4,3,1,2,4,6,yes GP,F,15,U,GT3,T,1,2,at_home,services,course,mother,1,2,0,no,no,no,no,no,yes,yes,no,3,2,3,1,2,1,2,yes GP,M,15,U,GT3,T,2,2,services,services,home,father,1,4,0,no,yes,yes,yes,yes,yes,yes,no,5,5,4,1,2,5,6,yes GP,F,16,U,LE3,T,2,4,other,health,course,father,2,2,0,no,yes,yes,yes,yes,yes,yes,yes,4,2,2,1,2,5,2,yes GP,M,16,U,GT3,T,4,4,health,other,course,mother,1,1,0,no,yes,no,yes,yes,yes,yes,no,3,4,4,1,4,5,18,yes GP,F,16,U,GT3,T,2,2,other,other,home,mother,1,2,0,no,no,yes,no,yes,yes,yes,yes,5,4,4,1,1,5,0,no GP,M,15,U,GT3,T,3,4,services,services,home,father,1,1,0,yes,no,no,no,yes,yes,yes,no,5,5,5,3,2,5,0,yes GP,F,15,U,LE3,A,3,4,other,other,home,mother,1,2,0,yes,no,no,yes,yes,yes,yes,yes,5,3,2,1,1,1,0,yes GP,F,19,U,GT3,T,0,1,at_home,other,course,other,1,2,3,no,yes,no,no,no,no,no,no,3,4,2,1,1,5,2,no GP,M,18,R,GT3,T,2,2,services,other,reputation,mother,1,1,2,no,yes,no,yes,yes,yes,yes,no,3,3,3,1,2,4,0,no GP,M,16,R,GT3,T,4,4,teacher,teacher,course,mother,1,1,0,no,no,yes,yes,yes,yes,yes,no,3,5,5,2,5,4,8,yes GP,F,15,R,GT3,T,3,4,services,teacher,course,father,2,3,2,no,yes,no,no,yes,yes,yes,yes,4,2,2,2,2,5,0,no GP,F,15,U,GT3,T,1,1,at_home,other,course,mother,3,1,0,no,yes,no,yes,no,yes,yes,yes,4,3,3,1,2,4,0,no GP,F,17,U,LE3,T,2,2,other,other,course,father,1,1,0,no,yes,no,no,yes,yes,yes,yes,3,4,4,1,3,5,12,yes GP,F,16,U,GT3,A,3,4,services,other,course,father,1,1,0,no,no,no,no,yes,yes,yes,no,3,2,1,1,4,5,16,yes GP,M,15,R,GT3,T,3,4,at_home,teacher,course,mother,4,2,0,no,yes,no,no,yes,yes,no,yes,5,3,3,1,1,5,0,no GP,F,15,U,GT3,T,4,4,services,at_home,course,mother,1,3,0,no,yes,no,yes,yes,yes,yes,yes,4,3,3,1,1,5,0,no GP,M,17,R,GT3,T,3,4,at_home,other,course,mother,3,2,0,no,no,no,no,yes,yes,no,no,5,4,5,2,4,5,0,no GP,F,16,U,GT3,A,3,3,other,other,course,other,2,1,2,no,yes,no,yes,no,yes,yes,yes,4,3,2,1,1,5,0,no GP,M,16,U,LE3,T,1,1,services,other,course,mother,1,2,1,no,no,no,no,yes,yes,no,yes,4,4,4,1,3,5,0,yes GP,F,15,U,GT3,T,4,4,teacher,teacher,course,mother,2,1,0,no,no,no,yes,yes,yes,yes,no,4,3,2,1,1,5,0,yes GP,M,15,U,GT3,T,4,3,teacher,services,course,father,2,4,0,yes,yes,no,no,yes,yes,yes,no,2,2,2,1,1,3,0,no GP,M,16,U,LE3,T,2,2,services,services,reputation,father,2,1,2,no,yes,no,yes,yes,yes,yes,no,2,3,3,2,2,2,8,no GP,F,15,U,GT3,T,4,4,teacher,services,course,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,no,4,2,2,1,1,5,2,yes GP,F,16,U,LE3,T,1,1,at_home,at_home,course,mother,1,1,0,no,no,no,no,yes,yes,yes,no,3,4,4,3,3,1,2,yes GP,M,17,U,GT3,T,2,1,other,other,home,mother,1,1,3,no,yes,no,no,yes,yes,yes,no,5,4,5,1,2,5,0,no GP,F,15,U,GT3,T,1,1,other,services,course,father,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,4,2,1,2,5,0,yes GP,F,15,U,GT3,T,3,2,health,services,home,father,1,2,3,no,yes,no,no,yes,yes,yes,no,3,3,2,1,1,3,0,no GP,F,15,U,GT3,T,1,2,at_home,other,course,mother,1,2,0,no,yes,yes,no,no,yes,yes,no,4,3,2,1,1,5,2,yes GP,M,16,U,GT3,T,4,4,teacher,teacher,course,mother,1,1,0,no,yes,no,no,yes,no,yes,yes,3,3,2,2,1,5,0,no GP,M,15,U,LE3,A,2,1,services,other,course,mother,4,1,3,no,no,no,no,yes,yes,yes,no,4,5,5,2,5,5,0,yes GP,M,18,U,LE3,T,1,1,other,other,course,mother,1,1,3,no,no,no,no,yes,no,yes,yes,2,3,5,2,5,4,0,no GP,M,16,U,LE3,T,2,1,at_home,other,course,mother,1,1,1,no,no,no,yes,yes,yes,no,yes,4,4,4,3,5,5,6,yes GP,F,15,R,GT3,T,3,3,services,services,reputation,other,2,3,2,no,yes,yes,yes,yes,yes,yes,yes,4,2,1,2,3,3,8,yes GP,M,19,U,GT3,T,3,2,services,at_home,home,mother,1,1,3,no,yes,no,no,yes,no,yes,yes,4,5,4,1,1,4,0,no GP,F,17,U,GT3,T,4,4,other,teacher,course,mother,1,1,0,yes,yes,no,no,yes,yes,no,yes,4,2,1,1,1,4,0,yes GP,M,15,R,GT3,T,2,3,at_home,services,course,mother,1,2,0,yes,no,yes,yes,yes,yes,no,no,4,4,4,1,1,1,2,no GP,M,17,R,LE3,T,1,2,other,other,reputation,mother,1,1,0,no,no,no,no,yes,yes,no,no,2,2,2,3,3,5,8,yes GP,F,18,R,GT3,T,1,1,at_home,other,course,mother,3,1,3,no,yes,no,yes,no,yes,no,no,5,2,5,1,5,4,6,yes GP,M,16,R,GT3,T,2,2,at_home,other,course,mother,3,1,0,no,no,no,no,no,yes,no,no,4,2,2,1,2,3,2,yes GP,M,16,U,GT3,T,3,3,other,services,course,father,1,2,1,no,yes,yes,no,yes,yes,yes,yes,4,5,5,4,4,5,4,yes GP,M,17,R,LE3,T,2,1,at_home,other,course,mother,2,1,2,no,no,no,yes,yes,no,yes,yes,3,3,2,2,2,5,0,no GP,M,15,R,GT3,T,3,2,other,other,course,mother,2,2,2,yes,yes,no,no,yes,yes,yes,yes,4,4,4,1,4,3,6,no GP,M,16,U,LE3,T,1,2,other,other,course,mother,2,1,1,no,no,no,yes,yes,yes,no,no,4,4,4,2,4,5,0,no GP,M,17,U,GT3,T,1,3,at_home,services,course,father,1,1,0,no,no,no,no,yes,no,yes,no,5,3,3,1,4,2,2,yes GP,M,17,R,LE3,T,1,1,other,services,course,mother,4,2,3,no,no,no,yes,yes,no,no,yes,5,3,5,1,5,5,0,no GP,M,16,U,GT3,T,3,2,services,services,course,mother,2,1,1,no,yes,no,yes,no,no,no,no,4,5,2,1,1,2,16,yes GP,M,16,U,GT3,T,2,2,other,other,course,father,1,2,0,no,no,no,no,yes,no,yes,no,4,3,5,2,4,4,4,yes GP,F,16,U,GT3,T,4,2,health,services,home,father,1,2,0,no,no,yes,no,yes,yes,yes,yes,4,2,3,1,1,3,0,yes GP,F,16,U,GT3,T,2,2,other,other,home,mother,1,2,0,no,yes,yes,no,no,yes,yes,no,5,1,5,1,1,4,0,no GP,F,16,U,GT3,T,4,4,health,health,reputation,mother,1,2,0,no,yes,yes,no,yes,yes,yes,yes,4,4,2,1,1,3,0,yes GP,M,16,U,GT3,T,3,4,other,other,course,father,3,1,2,no,yes,no,yes,no,yes,yes,no,3,4,5,2,4,2,0,no GP,M,16,U,GT3,T,1,0,other,other,reputation,mother,2,2,0,no,yes,yes,yes,yes,yes,yes,yes,4,3,2,1,1,3,2,yes GP,M,17,U,LE3,T,4,4,teacher,other,reputation,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,4,4,4,1,3,5,0,yes GP,F,16,U,GT3,T,1,3,at_home,services,home,mother,1,2,3,no,no,no,yes,no,yes,yes,yes,4,3,5,1,1,3,0,no GP,F,16,U,LE3,T,3,3,other,other,reputation,mother,2,2,0,no,yes,yes,yes,yes,yes,yes,no,4,4,5,1,1,4,4,no GP,M,17,U,LE3,T,4,3,teacher,other,course,mother,2,2,0,no,no,yes,yes,yes,yes,yes,no,4,4,4,4,4,4,4,no GP,F,16,U,GT3,T,2,2,services,other,reputation,mother,2,2,0,no,no,yes,yes,no,yes,yes,no,3,4,4,1,4,5,2,yes GP,M,17,U,GT3,T,3,3,other,other,reputation,father,1,2,0,no,no,no,yes,no,yes,yes,no,4,3,4,1,4,4,4,no GP,M,16,R,GT3,T,4,2,teacher,services,other,mother,1,1,0,no,yes,no,yes,yes,yes,yes,yes,4,3,3,3,4,3,10,no GP,M,17,U,GT3,T,4,3,other,other,course,mother,1,2,0,no,yes,no,yes,yes,yes,yes,yes,5,2,3,1,1,2,4,yes GP,M,16,U,GT3,T,4,3,teacher,other,home,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,3,4,3,2,3,3,10,no GP,M,16,U,GT3,T,3,3,services,other,home,mother,1,2,0,no,no,yes,yes,yes,yes,yes,yes,4,2,3,1,2,3,2,yes GP,F,17,U,GT3,T,2,4,services,services,reputation,father,1,2,0,no,yes,no,yes,yes,yes,no,no,5,4,2,2,3,5,0,yes GP,F,17,U,LE3,T,3,3,other,other,reputation,mother,1,2,0,no,yes,no,yes,yes,yes,yes,yes,5,3,3,2,3,1,56,no GP,F,16,U,GT3,T,3,2,other,other,reputation,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,1,2,2,1,2,1,14,yes GP,M,17,U,GT3,T,3,3,services,services,other,mother,1,2,0,no,yes,no,yes,yes,yes,yes,yes,4,3,4,2,3,4,12,yes GP,M,16,U,GT3,T,1,2,services,services,other,mother,1,1,0,no,yes,yes,yes,yes,yes,yes,yes,3,3,3,1,2,3,2,yes GP,M,16,U,LE3,T,2,1,other,other,course,mother,1,2,0,no,no,yes,yes,yes,yes,yes,yes,4,2,3,1,2,5,0,yes GP,F,17,U,GT3,A,3,3,health,other,reputation,mother,1,2,0,no,yes,no,no,no,yes,yes,yes,3,3,3,1,3,3,6,no GP,M,17,R,GT3,T,1,2,at_home,other,home,mother,1,2,0,no,no,no,no,yes,yes,no,no,3,1,3,1,5,3,4,yes GP,F,16,U,GT3,T,2,3,services,services,course,mother,1,2,0,no,no,no,no,yes,yes,yes,no,4,3,3,1,1,2,10,yes GP,F,17,U,GT3,T,1,1,at_home,services,course,mother,1,2,0,no,no,no,yes,yes,yes,yes,no,5,3,3,1,1,3,0,no GP,M,17,U,GT3,T,1,2,at_home,services,other,other,2,2,0,no,no,yes,yes,no,yes,yes,no,4,4,4,4,5,5,12,no GP,M,16,R,GT3,T,3,3,services,services,reputation,mother,1,1,0,no,yes,no,yes,yes,yes,yes,no,4,3,2,3,4,5,8,yes GP,M,16,U,GT3,T,2,3,other,other,home,father,2,1,0,no,no,no,no,yes,yes,yes,no,5,3,3,1,1,3,0,yes GP,F,17,U,LE3,T,2,4,services,services,course,father,1,2,0,no,no,no,yes,yes,yes,yes,yes,4,3,2,1,1,5,0,yes GP,M,17,U,GT3,T,4,4,services,teacher,home,mother,1,1,0,no,no,no,no,yes,yes,yes,no,5,2,3,1,2,5,4,yes GP,M,16,R,LE3,T,3,3,teacher,other,home,father,3,1,0,no,yes,yes,yes,yes,yes,yes,no,3,3,4,3,5,3,8,yes GP,F,17,U,GT3,T,4,4,services,teacher,home,mother,2,1,1,no,yes,no,no,yes,yes,yes,no,4,2,4,2,3,2,24,yes GP,F,16,U,LE3,T,4,4,teacher,teacher,reputation,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,5,2,1,2,3,0,yes GP,F,16,U,GT3,T,4,3,health,other,home,mother,1,2,0,no,yes,no,yes,yes,yes,yes,no,4,3,5,1,5,2,2,yes GP,F,16,U,GT3,T,2,3,other,other,reputation,mother,1,2,0,yes,yes,yes,yes,yes,yes,no,no,4,4,3,1,3,4,6,yes GP,F,17,U,GT3,T,1,1,other,other,course,mother,1,2,0,no,yes,yes,no,no,yes,no,no,4,4,4,1,3,1,4,yes GP,F,17,R,GT3,T,2,2,other,other,reputation,mother,1,1,0,no,yes,no,no,yes,yes,yes,no,5,3,2,1,2,3,18,no GP,F,16,R,GT3,T,2,2,services,services,reputation,mother,2,4,0,no,yes,yes,yes,no,yes,yes,no,5,3,5,1,1,5,6,yes GP,F,17,U,GT3,T,3,4,at_home,services,home,mother,1,3,1,no,yes,yes,no,yes,yes,yes,yes,4,4,3,3,4,5,28,no GP,F,16,U,GT3,A,3,1,services,other,course,mother,1,2,3,no,yes,yes,no,yes,yes,yes,no,2,3,3,2,2,4,5,no GP,F,16,U,GT3,T,4,3,teacher,other,other,mother,1,2,0,no,no,yes,yes,yes,yes,yes,yes,1,3,2,1,1,1,10,yes GP,F,16,U,GT3,T,1,1,at_home,other,home,mother,2,1,0,no,yes,yes,no,yes,yes,no,no,4,3,2,1,4,5,6,yes GP,F,17,R,GT3,T,4,3,teacher,other,reputation,mother,2,3,0,no,yes,yes,yes,yes,yes,yes,yes,4,4,2,1,1,4,6,no GP,F,19,U,GT3,T,3,3,other,other,reputation,other,1,4,0,no,yes,yes,yes,yes,yes,yes,no,4,3,3,1,2,3,10,no GP,M,17,U,LE3,T,4,4,services,other,home,mother,1,2,0,no,yes,yes,no,yes,yes,yes,yes,5,3,5,4,5,3,13,yes GP,F,16,U,GT3,A,2,2,other,other,reputation,mother,1,2,0,yes,yes,yes,no,yes,yes,yes,no,3,3,4,1,1,4,0,yes GP,M,18,U,GT3,T,2,2,services,other,home,mother,1,2,1,no,yes,yes,yes,yes,yes,yes,no,4,4,4,2,4,5,15,no GP,F,17,R,LE3,T,4,4,services,other,other,mother,1,1,0,no,yes,yes,no,yes,yes,no,no,5,2,1,1,2,3,12,yes GP,F,17,U,LE3,T,3,2,other,other,reputation,mother,2,2,0,no,no,yes,no,yes,yes,yes,no,4,4,4,1,3,1,2,yes GP,F,17,U,GT3,T,4,3,other,other,reputation,mother,1,2,2,no,no,yes,no,yes,yes,yes,yes,3,4,5,2,4,1,22,no GP,M,18,U,LE3,T,3,3,services,health,home,father,1,2,1,no,yes,yes,no,yes,yes,yes,no,3,2,4,2,4,4,13,no GP,F,17,U,GT3,T,2,3,at_home,other,home,father,2,1,0,no,yes,yes,no,yes,yes,no,no,3,3,3,1,4,3,3,no GP,F,17,U,GT3,T,2,2,at_home,at_home,course,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,no,4,3,3,1,1,4,4,yes GP,F,17,R,GT3,T,2,1,at_home,services,reputation,mother,2,2,0,no,yes,no,yes,yes,yes,yes,no,4,2,5,1,2,5,2,no GP,F,17,U,GT3,T,1,1,at_home,other,reputation,mother,1,3,1,no,yes,no,yes,yes,yes,no,yes,4,3,4,1,1,5,0,no GP,F,16,U,GT3,T,2,3,services,teacher,other,mother,1,2,0,yes,no,no,no,yes,yes,yes,no,2,3,1,1,1,3,2,yes GP,M,18,U,GT3,T,2,2,other,other,home,mother,2,2,0,no,yes,yes,no,yes,yes,yes,no,3,3,3,5,5,4,0,yes GP,F,16,U,GT3,T,4,4,teacher,services,home,mother,1,3,0,no,yes,no,yes,no,yes,yes,no,5,3,2,1,1,5,0,yes GP,F,18,R,GT3,T,3,1,other,other,reputation,mother,1,2,1,no,no,no,yes,yes,yes,yes,yes,5,3,3,1,1,4,16,no GP,F,17,U,GT3,T,3,2,other,other,course,mother,1,2,0,no,no,no,yes,no,yes,yes,no,5,3,4,1,3,3,10,yes GP,M,17,U,LE3,T,2,3,services,services,reputation,father,1,2,0,no,yes,yes,no,no,yes,yes,no,5,3,3,1,3,3,2,yes GP,M,18,U,LE3,T,2,1,at_home,other,course,mother,4,2,0,yes,yes,yes,yes,yes,yes,yes,yes,4,3,2,4,5,3,14,no GP,F,17,U,GT3,A,2,1,other,other,course,mother,2,3,0,no,no,no,yes,yes,yes,yes,yes,3,2,3,1,2,3,10,yes GP,F,17,U,LE3,T,4,3,health,other,reputation,father,1,2,0,no,no,no,yes,yes,yes,yes,yes,3,2,3,1,2,3,14,yes GP,M,17,R,GT3,T,2,2,other,other,course,father,2,2,0,no,yes,yes,yes,yes,yes,yes,no,4,5,2,1,1,1,4,yes GP,M,17,U,GT3,T,4,4,teacher,teacher,reputation,mother,1,2,0,yes,yes,no,yes,yes,yes,yes,yes,4,5,5,1,3,2,14,no GP,M,16,U,GT3,T,4,4,health,other,reputation,father,1,2,0,no,yes,yes,yes,yes,yes,yes,no,4,2,4,2,4,1,2,yes GP,M,16,U,LE3,T,1,1,other,other,home,mother,2,2,0,no,yes,yes,no,yes,yes,yes,no,3,4,2,1,1,5,18,no GP,M,16,U,GT3,T,3,2,at_home,other,reputation,mother,2,3,0,no,no,no,yes,yes,yes,yes,yes,5,3,3,1,3,2,10,yes GP,M,17,U,LE3,T,2,2,other,other,home,father,1,2,0,no,no,yes,yes,no,yes,yes,yes,4,4,2,5,5,4,4,yes GP,F,16,U,GT3,T,2,1,other,other,home,mother,1,1,0,no,no,no,no,yes,yes,yes,yes,4,5,2,1,1,5,20,yes GP,F,17,R,GT3,T,2,1,at_home,services,course,mother,3,2,0,no,no,no,yes,yes,yes,no,no,2,1,1,1,1,3,2,yes GP,M,18,U,GT3,T,2,2,other,services,reputation,father,1,2,1,no,no,no,no,yes,no,yes,no,5,5,4,3,5,2,0,no GP,M,17,U,LE3,T,4,3,health,other,course,mother,2,2,0,no,no,no,yes,yes,yes,yes,yes,2,5,5,1,4,5,14,yes GP,M,17,R,LE3,A,4,4,teacher,other,course,mother,2,2,0,no,yes,yes,no,yes,yes,yes,no,3,3,3,2,3,4,2,yes GP,M,16,U,LE3,T,4,3,teacher,other,course,mother,1,1,0,no,no,no,yes,no,yes,yes,no,5,4,5,1,1,3,0,no GP,M,16,U,GT3,T,4,4,services,services,course,mother,1,1,0,no,no,no,yes,yes,yes,yes,no,5,3,2,1,2,5,0,yes GP,F,18,U,GT3,T,2,1,other,other,course,other,2,3,0,no,yes,yes,no,no,yes,yes,yes,4,4,4,1,1,3,0,no GP,M,16,U,GT3,T,2,1,other,other,course,mother,3,1,0,no,no,no,no,yes,yes,yes,no,4,3,3,1,1,4,6,yes GP,M,17,U,GT3,T,2,3,other,other,course,father,2,1,0,no,no,no,no,yes,yes,yes,no,5,2,2,1,1,2,4,yes GP,M,22,U,GT3,T,3,1,services,services,other,mother,1,1,3,no,no,no,no,no,no,yes,yes,5,4,5,5,5,1,16,no GP,M,18,R,LE3,T,3,3,other,services,course,mother,1,2,1,no,yes,no,no,yes,yes,yes,yes,4,3,3,1,3,5,8,no GP,M,16,U,GT3,T,0,2,other,other,other,mother,1,1,0,no,no,yes,no,no,yes,yes,no,4,3,2,2,4,5,0,yes GP,M,18,U,GT3,T,3,2,services,other,course,mother,2,1,1,no,no,no,no,yes,no,yes,no,4,4,5,2,4,5,0,no GP,M,16,U,GT3,T,3,3,at_home,other,reputation,other,3,2,0,yes,yes,no,no,no,yes,yes,no,5,3,3,1,3,2,6,yes GP,M,18,U,GT3,T,2,1,services,services,other,mother,1,1,1,no,no,no,no,no,no,yes,no,3,2,5,2,5,5,4,no GP,M,16,R,GT3,T,2,1,other,other,course,mother,2,1,0,no,no,no,yes,no,yes,no,no,3,3,2,1,3,3,0,no GP,M,17,R,GT3,T,2,1,other,other,course,mother,1,1,0,no,no,no,no,no,yes,yes,no,4,4,2,2,4,5,0,yes GP,M,17,U,LE3,T,1,1,health,other,course,mother,2,1,1,no,yes,no,yes,yes,yes,yes,no,4,4,4,1,2,5,2,no GP,F,17,U,LE3,T,4,2,teacher,services,reputation,mother,1,4,0,no,yes,yes,yes,yes,yes,yes,no,4,2,3,1,1,4,6,yes GP,M,19,U,LE3,A,4,3,services,at_home,reputation,mother,1,2,0,no,yes,no,no,yes,yes,yes,no,4,3,1,1,1,1,12,yes GP,M,18,U,GT3,T,2,1,other,other,home,mother,1,2,0,no,no,no,yes,yes,yes,yes,no,5,2,4,1,2,4,8,yes GP,F,17,U,LE3,T,2,2,services,services,course,father,1,4,0,no,no,yes,yes,yes,yes,yes,yes,3,4,1,1,1,2,0,no GP,F,18,U,GT3,T,4,3,services,other,home,father,1,2,0,no,yes,yes,no,yes,yes,yes,yes,3,1,2,1,3,2,21,yes GP,M,18,U,GT3,T,4,3,teacher,other,course,mother,1,2,0,no,yes,yes,no,no,yes,yes,no,4,3,2,1,1,3,2,no GP,M,18,R,GT3,T,3,2,other,other,course,mother,1,3,0,no,no,no,yes,no,yes,no,no,5,3,2,1,1,3,1,yes GP,F,17,U,GT3,T,3,3,other,other,home,mother,1,3,0,no,no,no,yes,no,yes,no,no,3,2,3,1,1,4,4,no GP,F,18,U,GT3,T,2,2,at_home,services,home,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,yes,4,3,3,1,1,3,0,no GP,M,18,R,LE3,A,3,4,other,other,reputation,mother,2,2,0,no,yes,yes,yes,yes,yes,yes,no,4,2,5,3,4,1,13,yes GP,M,17,U,GT3,T,3,1,services,other,other,mother,1,2,0,no,no,yes,yes,yes,yes,yes,yes,5,4,4,3,4,5,2,yes GP,F,18,R,GT3,T,4,4,teacher,other,reputation,mother,2,2,0,no,no,yes,yes,yes,yes,yes,no,4,3,4,2,2,4,8,yes GP,M,18,U,GT3,T,4,2,health,other,reputation,father,1,2,0,no,yes,yes,yes,yes,yes,yes,yes,5,4,5,1,3,5,10,yes GP,F,18,R,GT3,T,2,1,other,other,reputation,mother,2,2,0,no,yes,no,no,yes,no,yes,yes,4,3,5,1,2,3,0,no GP,F,19,U,GT3,T,3,3,other,services,home,other,1,2,2,no,yes,yes,yes,yes,yes,yes,no,4,3,5,3,3,5,15,no GP,F,18,U,GT3,T,2,3,other,services,reputation,father,1,4,0,no,yes,yes,yes,yes,yes,yes,yes,4,5,5,1,3,2,4,yes GP,F,18,U,LE3,T,1,1,other,other,home,mother,2,2,0,no,yes,yes,no,no,yes,no,no,4,4,3,1,1,3,2,yes GP,M,17,R,GT3,T,1,2,at_home,at_home,home,mother,1,2,0,no,yes,yes,yes,no,yes,no,yes,3,5,2,2,2,1,2,yes GP,F,17,U,GT3,T,2,4,at_home,health,reputation,mother,2,2,0,no,yes,yes,no,yes,yes,yes,yes,4,3,3,1,1,1,2,yes GP,F,17,U,LE3,T,2,2,services,other,course,mother,2,2,0,yes,yes,yes,no,yes,yes,yes,yes,4,4,4,2,3,5,6,yes GP,F,18,R,GT3,A,3,2,other,services,home,mother,2,2,0,no,no,no,no,no,no,yes,yes,4,1,1,1,1,5,75,no GP,M,18,U,GT3,T,4,4,teacher,services,home,mother,2,1,0,no,no,yes,yes,yes,yes,yes,no,3,2,4,1,4,3,22,no GP,F,18,U,GT3,T,4,4,health,health,reputation,father,1,2,1,yes,yes,no,yes,yes,yes,yes,yes,2,4,4,1,1,4,15,no GP,M,18,U,LE3,T,4,3,teacher,services,course,mother,2,1,0,no,no,yes,yes,yes,yes,yes,no,4,2,3,1,2,1,8,yes GP,M,17,U,LE3,A,4,1,services,other,home,mother,2,1,0,no,no,yes,yes,yes,yes,yes,yes,4,5,4,2,4,5,30,no GP,M,17,U,LE3,A,3,2,teacher,services,home,mother,1,1,1,no,no,no,no,yes,yes,yes,no,4,4,4,3,4,3,19,yes GP,F,18,R,LE3,T,1,1,at_home,other,reputation,mother,2,4,0,no,yes,yes,yes,yes,yes,no,no,5,2,2,1,1,3,1,yes GP,F,18,U,GT3,T,1,1,other,other,home,mother,2,2,0,yes,no,no,yes,yes,yes,yes,no,5,4,4,1,1,4,4,yes GP,F,17,U,GT3,T,2,2,other,other,course,mother,1,2,0,no,yes,no,no,no,yes,yes,no,5,4,5,1,2,5,4,yes GP,M,17,U,GT3,T,1,1,other,other,reputation,father,1,2,0,no,no,yes,no,no,yes,yes,no,4,3,3,1,2,4,2,yes GP,F,18,U,GT3,T,2,2,at_home,at_home,other,mother,1,3,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,1,2,2,5,yes GP,F,17,U,GT3,T,1,1,services,teacher,reputation,mother,1,3,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,1,1,3,6,yes GP,M,18,U,GT3,T,2,1,services,services,reputation,mother,1,3,0,no,no,yes,yes,yes,yes,yes,no,4,2,4,1,3,2,6,yes GP,M,18,U,LE3,A,4,4,teacher,teacher,reputation,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,no,5,4,3,1,1,2,9,yes GP,M,18,U,GT3,T,4,2,teacher,other,home,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,yes,4,3,2,1,4,5,11,yes GP,F,17,U,GT3,T,4,3,health,services,reputation,mother,1,3,0,no,yes,yes,no,yes,yes,yes,no,4,2,2,1,2,3,0,yes GP,F,18,U,LE3,T,2,1,services,at_home,reputation,mother,1,2,1,no,no,no,no,yes,yes,yes,yes,5,4,3,1,1,5,12,yes GP,F,17,R,LE3,T,3,1,services,other,reputation,mother,2,4,0,no,yes,yes,no,yes,yes,no,no,3,1,2,1,1,3,6,yes GP,M,18,R,LE3,T,3,2,services,other,reputation,mother,2,3,0,no,yes,yes,yes,yes,yes,yes,no,5,4,2,1,1,4,8,yes GP,M,17,U,GT3,T,3,3,health,other,home,mother,1,1,0,no,yes,yes,no,yes,yes,yes,no,4,4,3,1,3,5,4,yes GP,F,19,U,GT3,T,4,4,health,other,reputation,other,2,2,0,no,yes,yes,yes,yes,yes,yes,no,2,3,4,2,3,2,0,no GP,F,18,U,LE3,T,4,3,other,other,home,other,2,2,0,no,yes,yes,no,yes,yes,yes,yes,4,4,5,1,2,2,10,no GP,F,18,U,GT3,T,4,3,other,other,reputation,father,1,4,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,1,1,3,0,yes GP,M,18,U,LE3,T,4,4,teacher,teacher,home,mother,1,1,0,no,yes,yes,no,yes,yes,yes,yes,1,4,2,2,2,1,5,yes GP,F,18,U,LE3,A,4,4,health,other,home,mother,1,2,0,no,yes,no,no,yes,yes,yes,yes,4,2,4,1,1,4,14,yes GP,M,17,U,LE3,T,4,4,other,teacher,home,father,2,1,0,no,no,yes,no,yes,yes,yes,no,4,1,1,2,2,5,0,yes GP,F,17,U,GT3,T,4,2,other,other,reputation,mother,2,3,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,1,1,3,0,yes GP,F,17,U,GT3,T,3,2,health,health,reputation,father,1,4,0,no,yes,yes,yes,no,yes,yes,no,5,2,2,1,2,5,0,yes GP,M,19,U,GT3,T,3,3,other,other,home,other,1,2,1,no,yes,no,yes,yes,yes,yes,yes,4,4,4,1,1,3,20,yes GP,F,18,U,GT3,T,2,4,services,at_home,reputation,other,1,2,1,no,yes,yes,yes,yes,yes,yes,no,4,4,3,1,1,3,8,yes GP,M,20,U,GT3,A,3,2,services,other,course,other,1,1,0,no,no,no,yes,yes,yes,no,no,5,5,3,1,1,5,0,yes GP,M,19,U,GT3,T,4,4,teacher,services,reputation,other,2,1,1,no,yes,yes,no,yes,yes,yes,yes,4,3,4,1,1,4,38,no GP,M,19,R,GT3,T,3,3,other,services,reputation,father,1,2,1,no,no,no,yes,yes,yes,no,yes,4,5,3,1,2,5,0,yes GP,F,19,U,LE3,T,1,1,at_home,other,reputation,other,1,2,1,yes,yes,no,yes,no,yes,yes,no,4,4,3,1,3,3,18,yes GP,F,19,U,LE3,T,1,2,services,services,home,other,1,2,1,no,no,no,yes,no,yes,no,yes,4,2,4,2,2,3,0,no GP,F,19,U,GT3,T,2,1,at_home,other,other,other,3,2,0,no,yes,no,no,yes,no,yes,yes,3,4,1,1,1,2,20,yes GP,M,19,U,GT3,T,1,2,other,services,course,other,1,2,1,no,no,no,no,no,yes,yes,no,4,5,2,2,2,4,3,yes GP,F,19,U,LE3,T,3,2,services,other,reputation,other,2,2,1,no,yes,yes,no,no,yes,yes,yes,4,2,2,1,2,1,22,yes GP,F,19,U,GT3,T,1,1,at_home,health,home,other,1,3,2,no,no,no,no,no,yes,yes,yes,4,1,2,1,1,3,14,yes GP,F,19,R,GT3,T,2,3,other,other,reputation,other,1,3,1,no,no,no,no,yes,yes,yes,yes,4,1,2,1,1,3,40,yes GP,F,18,U,GT3,T,2,1,services,other,course,mother,2,2,0,no,yes,yes,yes,yes,yes,yes,no,5,3,3,1,2,1,0,no GP,F,18,U,GT3,T,4,3,other,other,course,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,yes,4,3,4,1,1,5,9,no GP,F,17,R,GT3,T,3,4,at_home,services,course,father,1,3,0,no,yes,yes,yes,no,yes,yes,no,4,3,4,2,5,5,0,yes GP,F,18,U,GT3,T,4,4,teacher,other,course,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,4,4,3,3,5,2,yes GP,F,17,U,GT3,A,4,3,services,services,course,mother,1,2,0,no,yes,yes,no,yes,yes,yes,yes,5,2,2,1,2,5,23,yes GP,F,17,U,GT3,T,2,2,other,other,course,mother,1,2,0,no,yes,no,no,yes,yes,no,yes,4,2,2,1,1,3,12,no GP,F,17,R,LE3,T,2,2,services,services,course,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,no,3,3,2,2,2,3,3,yes GP,F,17,U,GT3,T,3,1,services,services,course,father,1,3,0,no,yes,no,no,no,yes,yes,no,3,4,3,2,3,5,1,yes GP,F,17,U,LE3,T,0,2,at_home,at_home,home,father,2,3,0,no,no,no,no,yes,yes,yes,no,3,3,3,2,3,2,0,yes GP,M,18,U,GT3,T,4,4,other,other,course,mother,1,3,0,no,no,no,yes,yes,yes,yes,no,4,3,3,2,2,3,3,yes GP,M,17,U,GT3,T,3,3,other,services,reputation,mother,1,1,0,no,no,no,yes,no,yes,yes,no,4,3,5,3,5,5,3,yes GP,M,17,R,GT3,T,2,2,services,other,course,mother,4,1,0,no,yes,no,no,yes,yes,yes,no,4,4,5,5,5,4,8,yes GP,F,17,U,GT3,T,4,4,teacher,services,course,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,no,5,4,4,1,3,4,7,no GP,F,17,U,GT3,T,4,4,teacher,teacher,course,mother,2,3,0,no,yes,yes,no,no,yes,yes,yes,4,3,3,1,2,4,4,yes GP,M,18,U,LE3,T,2,2,other,other,course,mother,1,4,0,no,yes,no,yes,yes,yes,yes,no,4,5,5,2,4,5,2,no GP,F,17,R,GT3,T,2,4,at_home,other,course,father,1,3,0,no,yes,no,no,yes,yes,yes,yes,4,4,3,1,1,5,7,yes GP,F,18,U,GT3,T,3,3,services,services,home,mother,1,2,0,no,no,no,yes,yes,yes,yes,no,5,3,4,1,1,4,0,no GP,F,18,U,LE3,T,2,2,other,other,home,other,1,2,0,no,no,no,yes,no,yes,yes,yes,4,3,3,1,1,2,0,no GP,F,18,R,GT3,T,2,2,at_home,other,course,mother,2,4,0,no,no,no,yes,yes,yes,no,no,4,4,4,1,1,4,0,no GP,F,17,U,GT3,T,3,4,services,other,course,mother,1,3,0,no,no,no,no,yes,yes,yes,no,4,4,5,1,3,5,16,yes GP,F,19,R,GT3,A,3,1,services,at_home,home,other,1,3,1,no,no,yes,no,yes,yes,no,no,5,4,3,1,2,5,12,yes GP,F,17,U,GT3,T,3,2,other,other,home,mother,1,2,0,no,yes,yes,no,yes,yes,yes,yes,4,3,2,2,3,2,0,no GP,F,18,U,LE3,T,3,3,services,services,home,mother,1,4,0,no,yes,no,no,yes,yes,yes,no,5,3,3,1,1,1,7,yes GP,F,17,R,GT3,A,3,2,other,other,home,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,3,3,2,3,2,4,yes GP,F,19,U,GT3,T,2,1,services,services,home,other,1,3,1,no,no,yes,yes,yes,yes,yes,yes,4,3,4,1,3,3,4,yes GP,M,18,U,GT3,T,4,4,teacher,services,home,father,1,2,1,no,yes,no,yes,yes,yes,yes,no,4,3,3,2,2,2,0,no GP,M,18,U,LE3,T,3,4,services,other,home,mother,1,2,0,no,no,no,yes,yes,yes,yes,yes,4,3,3,1,3,5,11,yes GP,F,17,U,GT3,A,2,2,at_home,at_home,home,father,1,2,1,no,yes,no,no,yes,yes,yes,yes,3,3,1,1,2,4,0,no GP,F,18,U,GT3,T,2,3,at_home,other,course,mother,1,3,0,no,yes,no,no,yes,yes,yes,no,4,3,3,1,2,3,4,yes GP,F,18,U,GT3,T,3,2,other,services,other,mother,1,3,0,no,no,no,no,yes,yes,yes,yes,5,4,3,2,3,1,7,yes GP,M,18,R,GT3,T,4,3,teacher,services,course,mother,1,3,0,no,no,no,no,yes,yes,yes,yes,5,3,2,1,2,4,9,yes GP,M,18,U,GT3,T,4,3,teacher,other,course,mother,1,3,0,no,yes,yes,no,yes,yes,yes,yes,5,4,5,2,3,5,0,no GP,F,17,U,GT3,T,4,3,health,other,reputation,mother,1,3,0,no,yes,yes,yes,yes,yes,yes,yes,4,4,3,1,3,4,0,yes MS,M,18,R,GT3,T,3,2,other,other,course,mother,2,1,1,no,yes,no,no,no,yes,yes,no,2,5,5,5,5,5,10,yes MS,M,19,R,GT3,T,1,1,other,services,home,other,3,2,3,no,no,no,no,yes,yes,yes,no,5,4,4,3,3,2,8,no MS,M,17,U,GT3,T,3,3,health,other,course,mother,2,2,0,no,yes,yes,no,yes,yes,yes,no,4,5,4,2,3,3,2,yes MS,M,18,U,LE3,T,1,3,at_home,services,course,mother,1,1,1,no,no,no,no,yes,no,yes,yes,4,3,3,2,3,3,7,no MS,M,19,R,GT3,T,1,1,other,other,home,other,3,1,1,no,yes,no,no,yes,yes,yes,no,4,4,4,3,3,5,4,no MS,M,17,R,GT3,T,4,3,services,other,home,mother,2,2,0,no,yes,yes,yes,no,yes,yes,yes,4,5,5,1,3,2,4,yes MS,F,18,U,GT3,T,3,3,services,services,course,father,1,2,0,no,yes,no,no,yes,yes,no,yes,5,3,4,1,1,5,0,no MS,F,17,R,GT3,T,4,4,teacher,services,other,father,2,2,0,no,yes,yes,yes,yes,yes,yes,no,4,3,3,1,2,5,4,yes MS,F,17,U,LE3,A,3,2,services,other,reputation,mother,2,2,0,no,no,no,no,yes,yes,no,yes,1,2,3,1,2,5,2,yes MS,M,18,U,LE3,T,1,1,other,services,home,father,2,1,0,no,no,no,no,no,yes,yes,yes,3,3,2,1,2,3,4,yes MS,F,18,U,LE3,T,1,1,at_home,services,course,father,2,3,0,no,no,no,no,yes,yes,yes,no,5,3,2,1,1,4,0,yes MS,F,18,R,LE3,A,1,4,at_home,other,course,mother,3,2,0,no,no,no,no,yes,yes,no,yes,4,3,4,1,4,5,0,yes MS,M,18,R,LE3,T,1,1,at_home,other,other,mother,2,2,1,no,no,no,yes,no,no,no,no,4,4,3,2,3,5,2,yes MS,F,18,U,GT3,T,3,3,services,services,other,mother,2,2,0,no,yes,no,no,yes,yes,yes,yes,4,3,2,1,3,3,0,yes MS,F,17,U,LE3,T,4,4,at_home,at_home,course,mother,1,2,0,no,yes,yes,yes,yes,yes,yes,yes,2,3,4,1,1,1,0,yes MS,F,17,R,GT3,T,1,2,other,services,course,father,2,2,0,no,no,no,no,no,yes,no,no,3,2,2,1,2,3,0,yes MS,M,18,R,GT3,T,1,3,at_home,other,course,mother,2,2,0,no,yes,yes,no,yes,yes,no,no,3,3,4,2,4,3,4,yes MS,M,18,U,LE3,T,4,4,teacher,services,other,mother,2,3,0,no,no,yes,no,yes,yes,yes,yes,4,2,2,2,2,5,0,yes MS,F,17,R,GT3,T,1,1,other,services,reputation,mother,3,1,1,no,yes,yes,no,yes,yes,yes,yes,5,2,1,1,2,1,0,no MS,F,18,U,GT3,T,2,3,at_home,services,course,father,2,1,0,no,yes,yes,no,yes,yes,yes,yes,5,2,3,1,2,4,0,yes MS,F,18,R,GT3,T,4,4,other,teacher,other,father,3,2,0,no,yes,yes,no,no,yes,yes,yes,3,2,2,4,2,5,10,yes MS,F,19,U,LE3,T,3,2,services,services,home,other,2,2,2,no,no,no,yes,yes,yes,no,yes,3,2,2,1,1,3,4,no MS,M,18,R,LE3,T,1,2,at_home,services,other,father,3,1,0,no,yes,yes,yes,yes,no,yes,yes,4,3,3,2,3,3,3,yes MS,F,17,U,GT3,T,2,2,other,at_home,home,mother,1,3,0,no,no,no,yes,yes,yes,no,yes,3,4,3,1,1,3,8,yes MS,F,17,R,GT3,T,1,2,other,other,course,mother,1,1,0,no,no,no,yes,yes,yes,yes,no,3,5,5,1,3,1,14,no MS,F,18,R,LE3,T,4,4,other,other,reputation,mother,2,3,0,no,no,no,no,yes,yes,yes,no,5,4,4,1,1,1,0,yes MS,F,18,R,GT3,T,1,1,other,other,home,mother,4,3,0,no,no,no,no,yes,yes,yes,no,4,3,2,1,2,4,2,yes MS,F,20,U,GT3,T,4,2,health,other,course,other,2,3,2,no,yes,yes,no,no,yes,yes,yes,5,4,3,1,1,3,4,yes MS,F,18,R,LE3,T,4,4,teacher,services,course,mother,1,2,0,no,no,yes,yes,yes,yes,yes,no,5,4,3,3,4,2,4,yes MS,F,18,U,GT3,T,3,3,other,other,home,mother,1,2,0,no,no,yes,no,yes,yes,yes,yes,4,1,3,1,2,1,0,yes MS,F,17,R,GT3,T,3,1,at_home,other,reputation,mother,1,2,0,no,yes,yes,yes,no,yes,yes,no,4,5,4,2,3,1,17,yes MS,M,18,U,GT3,T,4,4,teacher,teacher,home,father,1,2,0,no,no,yes,yes,no,yes,yes,no,3,2,4,1,4,2,4,yes MS,M,18,R,GT3,T,2,1,other,other,other,mother,2,1,0,no,no,no,yes,no,yes,yes,yes,4,4,3,1,3,5,5,no MS,M,17,U,GT3,T,2,3,other,services,home,father,2,2,0,no,no,no,yes,yes,yes,yes,no,4,4,3,1,1,3,2,yes MS,M,19,R,GT3,T,1,1,other,services,other,mother,2,1,1,no,no,no,no,yes,yes,no,no,4,3,2,1,3,5,0,no MS,M,18,R,GT3,T,4,2,other,other,home,father,2,1,1,no,no,yes,no,yes,yes,no,no,5,4,3,4,3,3,14,no MS,F,18,R,GT3,T,2,2,at_home,other,other,mother,2,3,0,no,no,yes,no,yes,yes,no,no,5,3,3,1,3,4,2,yes MS,F,18,R,GT3,T,4,4,teacher,at_home,reputation,mother,3,1,0,no,yes,yes,yes,yes,yes,yes,yes,4,4,3,2,2,5,7,no MS,F,19,R,GT3,T,2,3,services,other,course,mother,1,3,1,no,no,no,yes,no,yes,yes,no,5,4,2,1,2,5,0,no MS,F,18,U,LE3,T,3,1,teacher,services,course,mother,1,2,0,no,yes,yes,no,yes,yes,yes,no,4,3,4,1,1,1,0,no MS,F,18,U,GT3,T,1,1,other,other,course,mother,2,2,1,no,no,no,yes,yes,yes,no,no,1,1,1,1,1,5,0,no MS,M,20,U,LE3,A,2,2,services,services,course,other,1,2,2,no,yes,yes,no,yes,yes,no,no,5,5,4,4,5,4,11,no MS,M,17,U,LE3,T,3,1,services,services,course,mother,2,1,0,no,no,no,no,no,yes,yes,no,2,4,5,3,4,2,3,yes MS,M,21,R,GT3,T,1,1,other,other,course,other,1,1,3,no,no,no,no,no,yes,no,no,5,5,3,3,3,3,3,no MS,M,18,R,LE3,T,3,2,services,other,course,mother,3,1,0,no,no,no,no,no,yes,yes,no,4,4,1,3,4,5,0,yes MS,M,19,U,LE3,T,1,1,other,at_home,course,father,1,1,0,no,no,no,no,yes,yes,yes,no,3,2,3,3,3,5,5,no ================================================ FILE: p2-student-intervention/student_intervention.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Supervised Learning\n", "## Project 2: Building a Student Intervention System" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the second project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1 - Classification vs. Regression\n", "*Your goal for this project is to identify students who might need early intervention before they fail to graduate. Which type of supervised learning problem is this, classification or regression? Why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "It is a **classification problem**.\n", "- The output is binary. It is a Yes-no answer to the question 'Does the student need early intervention?'.\n", "- Thus **the output is discrete**.\n", "- Regression deals with continuous output, whereas classification deals with discrete output.\n", "- So this supervised learning problem is a classification problem, specifically one with **two classes**.\n", "\n", "If we had a continuous score ranging from 0 to 1 that indicated the extent to which students might need early intervention, this could be a regression problem. But we don't have this data for students, so it's not a regression problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploring the Data\n", "Run the code cell below to load necessary Python libraries and load the student data. Note that the last column from this dataset, `'passed'`, will be our target label (whether the student graduated or didn't graduate). All other columns are features about each student." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Student data read successfully!\n" ] } ], "source": [ "# Import libraries\n", "import numpy as np\n", "import pandas as pd\n", "from time import time\n", "from sklearn.metrics import f1_score\n", "\n", "# Read student data\n", "student_data = pd.read_csv(\"student-data.csv\")\n", "print(\"Student data read successfully!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Exploration\n", "Let's begin by investigating the dataset to determine how many students we have information on, and learn about the graduation rate among these students. In the code cell below, you will need to compute the following:\n", "- The total number of students, `n_students`.\n", "- The total number of features for each student, `n_features`.\n", "- The number of those students who passed, `n_passed`.\n", "- The number of those students who failed, `n_failed`.\n", "- The graduation rate of the class, `grad_rate`, in percent (%).\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total number of students (number of datapoints): 395\n", "Number of features: 30\n", "Number of students who passed (graduates): 265\n", "Number of students who failed (non-graduates): 130\n", "Graduation rate of the class: 67.09%\n" ] } ], "source": [ "# TODO: Calculate number of students\n", "n_students = len(student_data)\n", "\n", "# TODO: Calculate number of features\n", "# Don't count label column\n", "n_features = len(student_data.iloc[0]) - 1\n", "\n", "# TODO: Calculate passing students\n", "n_passed = len(student_data[student_data['passed'] == 'yes'])\n", "\n", "# TODO: Calculate failing students\n", "n_failed = len(student_data[student_data['passed'] == 'no'])\n", "\n", "# TODO: Calculate graduation rate\n", "grad_rate = float(n_passed)/n_students * 100\n", "\n", "# Print the results\n", "print(\"Total number of students (number of datapoints): {}\".format(n_students))\n", "print(\"Number of features: {}\".format(n_features))\n", "print(\"Number of students who passed (graduates): {}\".format(n_passed))\n", "print(\"Number of students who failed (non-graduates): {}\".format(n_failed))\n", "print(\"Graduation rate of the class: {:.2f}%\".format(grad_rate))" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
schoolsexageaddressfamsizePstatusMeduFeduMjobFjob...internetromanticfamrelfreetimegooutDalcWalchealthabsencespassed
0GPF18UGT3A44at_hometeacher...nono4341136no
1GPF17UGT3T11at_homeother...yesno5331134no
2GPF15ULE3T11at_homeother...yesno43223310yes
3GPF15UGT3T42healthservices...yesyes3221152yes
4GPF16UGT3T33otherother...nono4321254yes
\n", "

5 rows × 31 columns

\n", "
" ], "text/plain": [ " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... internet romantic famrel freetime goout Dalc Walc health absences \\\n", "0 ... no no 4 3 4 1 1 3 6 \n", "1 ... yes no 5 3 3 1 1 3 4 \n", "2 ... yes no 4 3 2 2 3 3 10 \n", "3 ... yes yes 3 2 2 1 1 5 2 \n", "4 ... no no 4 3 2 1 2 5 4 \n", "\n", " passed \n", "0 no \n", "1 no \n", "2 yes \n", "3 yes \n", "4 yes \n", "\n", "[5 rows x 31 columns]" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "student_data.head()" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pp: 234 pf: 78 fp: 31 ff: 52\n" ] } ], "source": [ "# Experiment to see if `failures` are a good predictor of `passed`\n", "\n", "student_data[['failures', 'passed']]\n", "pp, pf, fp, ff = 0, 0, 0, 0\n", "for i in range(len(student_data)):\n", " if student_data.iloc[i]['failures'] > 0:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " ff += 1\n", " else:\n", " fp += 1\n", " else:\n", " if student_data.iloc[i]['passed'] == 'no':\n", " pf += 1\n", " else:\n", " pp += 1\n", "print(\"pp: \", pp, \"pf: \", pf, \"fp: \", fp, \"ff: \", ff)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preparing the Data\n", "In this section, we will prepare the data for modeling, training and testing.\n", "\n", "### Identify feature and target columns\n", "It is often the case that the data you obtain contains non-numeric features. This can be a problem, as most machine learning algorithms expect numeric data to perform computations with.\n", "\n", "Run the code cell below to separate the student data into feature and target columns to see if any features are non-numeric." ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature columns:\n", "['school', 'sex', 'age', 'address', 'famsize', 'Pstatus', 'Medu', 'Fedu', 'Mjob', 'Fjob', 'reason', 'guardian', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n", "\n", "Target column: passed\n", "\n", "Feature values:\n", " school sex age address famsize Pstatus Medu Fedu Mjob Fjob \\\n", "0 GP F 18 U GT3 A 4 4 at_home teacher \n", "1 GP F 17 U GT3 T 1 1 at_home other \n", "2 GP F 15 U LE3 T 1 1 at_home other \n", "3 GP F 15 U GT3 T 4 2 health services \n", "4 GP F 16 U GT3 T 3 3 other other \n", "\n", " ... higher internet romantic famrel freetime goout Dalc Walc health \\\n", "0 ... yes no no 4 3 4 1 1 3 \n", "1 ... yes yes no 5 3 3 1 1 3 \n", "2 ... yes yes no 4 3 2 2 3 3 \n", "3 ... yes yes yes 3 2 2 1 1 5 \n", "4 ... yes no no 4 3 2 1 2 5 \n", "\n", " absences \n", "0 6 \n", "1 4 \n", "2 10 \n", "3 2 \n", "4 4 \n", "\n", "[5 rows x 30 columns]\n" ] } ], "source": [ "# Extract feature columns\n", "feature_cols = list(student_data.columns[:-1])\n", "\n", "# Extract target column 'passed'\n", "target_col = student_data.columns[-1] \n", "\n", "# Show the list of columns\n", "print(\"Feature columns:\\n{}\".format(feature_cols))\n", "print(\"\\nTarget column: {}\".format(target_col))\n", "\n", "# Separate the data into feature data and target data (X_all and y_all, respectively)\n", "X_all = student_data[feature_cols]\n", "y_all = student_data[target_col]\n", "\n", "# Show the feature information by printing the first five rows\n", "print(\"\\nFeature values:\")\n", "print(X_all.head())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Preprocess Feature Columns\n", "\n", "As you can see, there are several non-numeric columns that need to be converted! Many of them are simply `yes`/`no`, e.g. `internet`. These can be reasonably converted into `1`/`0` (binary) values.\n", "\n", "Other columns, like `Mjob` and `Fjob`, have more than two values, and are known as _categorical variables_. The recommended way to handle such a column is to create as many columns as possible values (e.g. `Fjob_teacher`, `Fjob_other`, `Fjob_services`, etc.), and assign a `1` to one of them and `0` to all others.\n", "\n", "These generated columns are sometimes called _dummy variables_, and we will use the [`pandas.get_dummies()`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html?highlight=get_dummies#pandas.get_dummies) function to perform this transformation. Run the code cell below to perform the preprocessing routine discussed in this section." ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed feature columns (48 total features):\n", "['school_GP', 'school_MS', 'sex_F', 'sex_M', 'age', 'address_R', 'address_U', 'famsize_GT3', 'famsize_LE3', 'Pstatus_A', 'Pstatus_T', 'Medu', 'Fedu', 'Mjob_at_home', 'Mjob_health', 'Mjob_other', 'Mjob_services', 'Mjob_teacher', 'Fjob_at_home', 'Fjob_health', 'Fjob_other', 'Fjob_services', 'Fjob_teacher', 'reason_course', 'reason_home', 'reason_other', 'reason_reputation', 'guardian_father', 'guardian_mother', 'guardian_other', 'traveltime', 'studytime', 'failures', 'schoolsup', 'famsup', 'paid', 'activities', 'nursery', 'higher', 'internet', 'romantic', 'famrel', 'freetime', 'goout', 'Dalc', 'Walc', 'health', 'absences']\n" ] } ], "source": [ "def preprocess_features(X):\n", " ''' Preprocesses the student data and converts non-numeric binary variables into\n", " binary (0/1) variables. Converts categorical variables into dummy variables. '''\n", " \n", " # Initialize new output DataFrame\n", " output = pd.DataFrame(index = X.index)\n", "\n", " # Investigate each feature column for the data\n", " for col, col_data in X.iteritems():\n", " \n", " # If data type is non-numeric, replace all yes/no values with 1/0\n", " if col_data.dtype == object:\n", " col_data = col_data.replace(['yes', 'no'], [1, 0])\n", "\n", " # If data type is categorical, convert to dummy variables\n", " if col_data.dtype == object:\n", " # Example: 'school' => 'school_GP' and 'school_MS'\n", " col_data = pd.get_dummies(col_data, prefix = col) \n", " \n", " # Collect the revised columns\n", " output = output.join(col_data)\n", " \n", " return output\n", "\n", "X_all = preprocess_features(X_all)\n", "print(\"Processed feature columns ({} total features):\\n{}\".format(len(X_all.columns), list(X_all.columns)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Training and Testing Data Split\n", "So far, we have converted all _categorical_ features into numeric values. For the next step, we split the data (both features and corresponding labels) into training and test sets. In the following code cell below, you will need to implement the following:\n", "- Randomly shuffle and split the data (`X_all`, `y_all`) into training and testing subsets.\n", " - Use 300 training points (approximately 75%) and 95 testing points (approximately 25%).\n", " - Set a `random_state` for the function(s) you use, if provided.\n", " - Store the results in `X_train`, `X_test`, `y_train`, and `y_test`." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set has 300 samples.\n", "Testing set has 95 samples.\n" ] } ], "source": [ "# TODO: Import any additional functionality you may need here\n", "from sklearn.cross_validation import train_test_split\n", "from sklearn.utils import shuffle\n", "\n", "# TODO: Set the number of training points\n", "num_train = 300\n", "\n", "# Set the number of testing points\n", "num_test = X_all.shape[0] - num_train\n", "\n", "# TODO: Shuffle and split the dataset into the number of training and testing points above\n", "X_train, X_test, y_train, y_test = train_test_split(X_all, y_all, train_size=num_train, test_size=num_test)\n", "\n", "# Show the results of the split\n", "print(\"Training set has {} samples.\".format(X_train.shape[0]))\n", "print(\"Testing set has {} samples.\".format(X_test.shape[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training and Evaluating Models\n", "In this section, you will choose 3 supervised learning models that are appropriate for this problem and available in `scikit-learn`. You will first discuss the reasoning behind choosing these three models by considering what you know about the data and each model's strengths and weaknesses. You will then fit the model to varying sizes of training data (100 data points, 200 data points, and 300 data points) and measure the F1 score. You will need to produce three tables (one for each model) that shows the training set size, training time, prediction time, F1 score on the training set, and F1 score on the testing set.\n", "\n", "**The following supervised learning models are currently available in** [`scikit-learn`](http://scikit-learn.org/stable/supervised_learning.html) **that you may choose from:**\n", "- Gaussian Naive Bayes (GaussianNB)\n", "- Decision Trees\n", "- Ensemble Methods (Bagging, AdaBoost, Random Forest, Gradient Boosting)\n", "- K-Nearest Neighbors (KNeighbors)\n", "- Stochastic Gradient Descent (SGDC)\n", "- Support Vector Machines (SVM)\n", "- Logistic Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2 - Model Application\n", "*List three supervised learning models that are appropriate for this problem. For each model chosen*\n", "- Describe one real-world application in industry where the model can be applied. *(You may need to do a small bit of research for this — give references!)* \n", "- What are the strengths of the model; when does it perform well? \n", "- What are the weaknesses of the model; when does it perform poorly?\n", "- What makes this model a good candidate for the problem, given what you know about the data?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Description of data:**\n", "- 395 datapoints (few) -> should not use that many features if we want an accurate, generalisable model (Curse of Dimensionality)\n", "- 31 features (non-trivial but not high compared to text learning applications that may have 50,000 features) \n", "\n", "**Model 1: Random Forests**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Random Forests
Application
Strengths
  • Handles binary features well because it is an ensemble of decision trees.
  • Handle high dimensional spaces and large numbers of training examples well.
  • Does not expect linear features or features that interact linearly.
Weaknesses
  • May overfit especially for noisy training data
Why it's a good candidate
  • Handles binary features well -> We have constructed the dataset such that we have many binary features.\n", "
  • It is often quite accurate.
\n", "\n", "\n", "**Model 2: Naive Bayes (GaussianNB)**\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Naive Bayes
Application
  • Text learning.
Strengths
  • Computationally efficient.
  • Can deal with many features (and so is used in text learning where there may be 50,000 features).
Weaknesses
  • Independent features assumption is likely false here.
  • E.g. `Medu` may be associated with `Fedu` because couples often meet at university or at workplaces where they may have similar jobs.
Why it's a good candidate
  • Efficient -> Problem stated they care about computational cost.
  • Can deal with many features -> There are 31 features in our dataset.
\n", " \n", "\n", "**Model 3: Logistic Regression**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Logistic Regression
Application
Strengths
  • Is simple and has low variance -> robust to noise and is less likely to over-fit.
Weaknesses
  • Assumes there is one smooth linear decision boundary (features are linearly separable).
Why it's a good candidate
  • Output is binary (which is what we want).
  • Efficient (we care about computational cost).
  • Output can be interpreted as a probability, so it may be useful in prioritising students for intervention later on.
  • Unlikely to overfit (Good to compare with Random Forests).
\n", "\n", "Reference documents:\n", "* [What are the advantages of different classification algorithms?](https://www.quora.com/What-are-the-advantages-of-different-classification-algorithms)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup\n", "Run the code cell below to initialize three helper functions which you can use for training and testing the three supervised learning models you've chosen above. The functions are as follows:\n", "- `train_classifier` - takes as input a classifier and training data and fits the classifier to the data.\n", "- `predict_labels` - takes as input a fit classifier, features, and a target labeling and makes predictions using the F1 score.\n", "- `train_predict` - takes as input a classifier, and the training and testing data, and performs `train_clasifier` and `predict_labels`.\n", " - This function will report the F1 score for both the training and testing data separately." ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def train_classifier(clf, X_train, y_train):\n", " ''' Fits a classifier to the training data. '''\n", " \n", " # Start the clock, train the classifier, then stop the clock\n", " start = time()\n", " clf.fit(X_train, y_train)\n", " end = time()\n", " \n", " # Print the results\n", " print(\"Trained model in {:.4f} seconds\".format(end - start))\n", "\n", " \n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " end = time()\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "def train_predict(clf, X_train, y_train, X_test, y_test):\n", " ''' Train and predict using a classifer based on F1 score. '''\n", " \n", " # Indicate the classifier and the training set size\n", " print(\"Training a {} using a training set size of {}. . .\".format(clf.__class__.__name__, len(X_train)))\n", " \n", " # Train the classifier\n", " train_classifier(clf, X_train, y_train)\n", " \n", " # Print the results of prediction for both training and testing\n", " print(\"F1 score for training set: {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", " print(\"F1 score for test set: {:.4f}.\".format(predict_labels(clf, X_test, y_test)))\n", " print(\"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Performance Metrics\n", "With the predefined functions above, you will now import the three supervised learning models of your choice and run the `train_predict` function for each one. Remember that you will need to train and predict on each classifier for three different training set sizes: 100, 200, and 300. Hence, you should expect to have 9 different outputs below — 3 for each model using the varying training set sizes. In the following code cell, you will need to implement the following:\n", "- Import the three supervised learning models you've discussed in the previous section.\n", "- Initialize the three models and store them in `clf_A`, `clf_B`, and `clf_C`.\n", " - Use a `random_state` for each model you use, if provided.\n", " - **Note:** Use the default settings for each model — you will tune one specific model in a later section.\n", "- Create the different training set sizes to be used to train each model.\n", " - *Do not reshuffle and resplit the data! The new training points should be drawn from `X_train` and `y_train`.*\n", "- Fit each model with each training set size and make predictions on the test set (9 in total). \n", "**Note:** Three tables are provided after the following code cell which can be used to store your results." ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a RandomForestClassifier using a training set size of 100. . .\n", "Trained model in 0.0242 seconds\n", "Made predictions in 0.0018 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0022 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 200. . .\n", "Trained model in 0.0121 seconds\n", "Made predictions in 0.0011 seconds.\n", "F1 score for training set: 0.9964.\n", "Made predictions in 0.0013 seconds.\n", "F1 score for test set: 0.6563.\n", "\n", "\n", "Training a RandomForestClassifier using a training set size of 300. . .\n", "Trained model in 0.0140 seconds\n", "Made predictions in 0.0012 seconds.\n", "F1 score for training set: 0.9927.\n", "Made predictions in 0.0009 seconds.\n", "F1 score for test set: 0.6870.\n", "\n", "\n", "Training a GaussianNB using a training set size of 100. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8714.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6977.\n", "\n", "\n", "Training a GaussianNB using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8421.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.6875.\n", "\n", "\n", "Training a GaussianNB using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 0.8180.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.7031.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 100. . .\n", "Trained model in 0.0077 seconds\n", "Made predictions in 0.0071 seconds.\n", "F1 score for training set: 0.8552.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7556.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 200. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0030 seconds.\n", "F1 score for training set: 0.8667.\n", "Made predictions in 0.0014 seconds.\n", "F1 score for test set: 0.7737.\n", "\n", "\n", "Training a KNeighborsClassifier using a training set size of 300. . .\n", "Trained model in 0.0008 seconds\n", "Made predictions in 0.0047 seconds.\n", "F1 score for training set: 0.8615.\n", "Made predictions in 0.0017 seconds.\n", "F1 score for test set: 0.7971.\n", "\n", "\n" ] } ], "source": [ "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# TODO: Initialize the three models\n", "clf_A = RandomForestClassifier(random_state=0)\n", "clf_B = GaussianNB()\n", "clf_C = LogisticRegression(random_state=0)\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training a DecisionTreeClassifier using a training set size of 100. . .\n", "Trained model in 0.0022 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0008 seconds.\n", "F1 score for test set: 0.6721.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 200. . .\n", "Trained model in 0.0017 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6667.\n", "\n", "\n", "Training a DecisionTreeClassifier using a training set size of 300. . .\n", "Trained model in 0.0018 seconds\n", "Made predictions in 0.0003 seconds.\n", "F1 score for training set: 1.0000.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6723.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 100. . .\n", "Trained model in 0.0058 seconds\n", "Made predictions in 0.0029 seconds.\n", "F1 score for training set: 0.0000.\n", "Made predictions in 0.0003 seconds.\n", "F1 score for test set: 0.0000.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 200. . .\n", "Trained model in 0.0009 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8074.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7069.\n", "\n", "\n", "Training a SGDClassifier using a training set size of 300. . .\n", "Trained model in 0.0010 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.6268.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.6847.\n", "\n", "\n", "Training a SVC using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0016 seconds.\n", "F1 score for training set: 0.8645.\n", "Made predictions in 0.0007 seconds.\n", "F1 score for test set: 0.7867.\n", "\n", "\n", "Training a SVC using a training set size of 200. . .\n", "Trained model in 0.0040 seconds\n", "Made predictions in 0.0021 seconds.\n", "F1 score for training set: 0.8698.\n", "Made predictions in 0.0012 seconds.\n", "F1 score for test set: 0.7785.\n", "\n", "\n", "Training a SVC using a training set size of 300. . .\n", "Trained model in 0.0068 seconds\n", "Made predictions in 0.0040 seconds.\n", "F1 score for training set: 0.8675.\n", "Made predictions in 0.0015 seconds.\n", "F1 score for test set: 0.7755.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 100. . .\n", "Trained model in 0.0042 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8857.\n", "Made predictions in 0.0002 seconds.\n", "F1 score for test set: 0.7385.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 200. . .\n", "Trained model in 0.0015 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8720.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7132.\n", "\n", "\n", "Training a LogisticRegression using a training set size of 300. . .\n", "Trained model in 0.0034 seconds\n", "Made predictions in 0.0002 seconds.\n", "F1 score for training set: 0.8513.\n", "Made predictions in 0.0001 seconds.\n", "F1 score for test set: 0.7407.\n", "\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/classification.py:1074: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.\n", " 'precision', 'predicted', average, warn_for)\n" ] } ], "source": [ "# Models 4 - 7 for general comparison\n", "\n", "# TODO: Import the three supervised learning models from sklearn\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.tree import DecisionTreeClassifier\n", "from sklearn.linear_model import SGDClassifier\n", "\n", "\n", "# TODO: Initialize the three models\n", "clf_A = DecisionTreeClassifier(random_state=0)\n", "clf_B = SGDClassifier(random_state=0)\n", "clf_C = SVC(random_state=0)\n", "clf_D = KNeighborsClassifier()\n", "\n", "# TODO: Set up the training set sizes\n", "# Previously shuffled\n", "X_train_100 = X_train[:100]\n", "y_train_100 = y_train[:100]\n", "\n", "X_train_200 = X_train[:200]\n", "y_train_200 = y_train[:200]\n", "\n", "X_train_300 = X_train\n", "y_train_300 = y_train\n", "\n", "# TODO: Execute the 'train_predict' function for each classifier and each training set size\n", "for clf in [clf_A, clf_B, clf_C, clf_D]:\n", " for j in [(X_train_100, y_train_100), (X_train_200, y_train_200), (X_train_300, y_train_300)]:\n", " train_predict(clf, j[0], j[1], X_test, y_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Tabular Results\n", "Edit the cell below to see how a table can be designed in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#tables). You can record your results from above in the tables provided." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 1 - Random Forest** \n", "\n", "| Training Set Size | Training Time (s) | Prediction Time (s) (test) | F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0102 | 0.0009 | 0.9922 | **0.7206** |\n", "| 200 | 0.0094 | 0.0008 | 0.9962 | 0.6977 |\n", "| 300 | 0.0107 | 0.0012 | 0.9951 | 0.6721 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 test score decreases as training set size increases, again suggesting that there is overfitting.\n", "* Training time is high. (about 10x that of GaussianNB, KNeighborsClassifier)\n", "\n", "** Classifer 2 - GaussianNB** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 0.8392 | **0.7591** |\n", "| 200 | 0.0007 | 0.0002 | 0.8309 | 0.7424 |\n", "| 300 | 0.0011 | 0.0003 | 0.8099 | 0.7463 |\n", "\n", "** Classifer 3 - Logistic Regression** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0027 | 0.0001 | 0.8872 | 0.7328 |\n", "| 200 | 0.0017 | 0.0002 | 0.8489 | 0.7612 |\n", "| 300 | 0.0026 | 0.0001 | 0.8337 | **0.7883** |\n", "\n", "It's doing surprisingly well." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Classifer 4 - Support Vector Machines SVC** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0038 | 0.0007 | 0.8671 | 0.7483 |\n", "| 200 | 0.0033 | 0.0013 | 0.8800 | 0.7724 |\n", "| 300 | 0.0053 | 0.0013 | 0.8793 | **0.7808** |\n", "\n", "* This also did surprisingly well compared to expectations. I thought SVM wasn't great with data that had many features. Maybe this dataset doesn't actually have that many features (vs 50,000 features for some text learning applications).\n", "* Prediction time linear with number of things to predict for training set sizes 200,300.\n", "\n", "** Classifer 5 - KNeighborsClassifier** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0006 | 0.0012 | 0.8345 | 0.7023 |\n", "| 200 | 0.0006 | 0.0014 | 0.8502 | 0.7121 |\n", "| 300 | 0.0007 | 0.0019 | 0.8731 | **0.7556** |\n", "\n", "\n", "** Classifer 6 - Decision Trees** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0009 | 0.0004 | 1.0000 | 0.6667 |\n", "| 200 | 0.0013 | 0.0001 | 1.0000 | **0.7460** |\n", "| 300 | 0.0016 | 0.0002 | 1.0000 | 0.7424 |\n", "\n", "* High F1 score for train (1.0000) vs lower F1 score for test (0.6667 to 0.7460) indicates there is overfitting and that the model is not generalising well.\n", "* F1 score peaks at 200 training points and decreases slightly at 300 training points, suggesting there is overfitting at 300 training points.\n", "\n", "** Classifer 7 - Stochastic Gradient Descent** \n", "\n", "| Training Set Size | Training Time (s)| Prediction Time (test) (s)| F1 Score (train) | F1 Score (test) |\n", "| :---------------: | :---------------------: | :--------------------: | :--------------: | :-------------: |\n", "| 100 | 0.0091 | 0.0008 | 0.7832 | 0.7586 |\n", "| 200 | 0.0010 | 0.0002 | 0.5027 | 0.3902 |\n", "| 300 | 0.0010 | 0.0002 | 0.5981 | 0.4946 |\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Choosing the Best Model\n", "In this final section, you will choose from the three supervised learning models the *best* model to use on the student data. You will then perform a grid search optimization for the model over the entire training set (`X_train` and `y_train`) by tuning at least one parameter to improve upon the untuned model's F1 score. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3 - Choosing the Best Model\n", "*Based on the experiments you performed earlier, in one to two paragraphs, explain to the board of supervisors what single model you chose as the best model. Which model is generally the most appropriate based on the available data, limited resources, cost, and performance?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "I chose **Logistic Regression**.\n", "\n", "1. **Performance (important)**: Logistic Regression had the **highest F1 score**. \n", " * F1 score is a combined measure of (the harmonic mean of) precision and recall.\n", " - Precision is X and \n", " - Recall is Y.\n", " * The other comparable model is SVC. Logistic Regression and SVC have maximum F1 scores of **0.7883** and 0.7808 respectively, with both attaining F1 max at 300 training points. They are significantly higher than the third highest F1 score at 0.7591 for GaussianNB.\n", "\n", "2. **Cost** (measured by training and prediction times):\n", " * Out of the two models with similar F1 score, Logistic Regression has the **shorter training and prediction time** at < 50% that af SVC's time (**0.0026s to train, 0.0001s to predict** vs SVC 0.0053s to train and 0.0013 to predict). \n", " * The training time is not too high and the prediction time is extremely low at 0.0001s.\n", " * Since minimising computational cost is a concern, Logistic Regression seems like a good choice.\n", "\n", "3. **Available data**\n", " * This is taken into account by the F1 scores used to assess the models. Three models - KNeighborsClassifier, SVC and Logistic Regression - have F1 scores that increase as the number of training datapoints increases. These models may perform even better if we had, say, 500 training data points. One of SVC or KNeighborsClassifier might outperform Logistic Regression. But we only have 300 data points, so we need to make choices based on the F1 scores in the tables.\n", "\n", "**Note 1: Backup in case even Logistic Regression is too computationally expensive: GaussianNB**\n", "\n", "If the computational cost is considered too great, we choose KNeighborsClassifier, which has a training time of 0.0009s, a prediction time of 0.0004s and an F1 score of 0.7591 on 100 training points, the third highest F1 score and the shortest (training time + prediction time).\n", "* It is only trained on 100 datapoints which makes it feel a bit dodgy. I considered choosing KNeighborsClassifier which has the fourth highest F1 score (max at 300 training points) and a shorter training time, but its prediction time of 0.0019s is quite high, making computational cost high.\n", "\n", "**Note 2: This may not be the optimal model because we did not tune any parameters.**\n", "* The default parameters for e.g. Decision Trees may just be really bad for this example.\n", "* If we wanted to choose the best model, we should compare versions of the models with tuned parameters." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4 - Model in Layman's Terms\n", "*In one to two paragraphs, explain to the board of directors in layman's terms how the final model chosen is supposed to work. Be sure that you are describing the major qualities of the model, such as how the model is trained and how the model makes a prediction. Avoid using advanced mathematical or technical jargon, such as describing equations or discussing the algorithm implementation.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **\n", "\n", "**Training** Logistic regression will draw one single curve to relate characteristics like whether or not a student has access to Internet or whether to the predicted probability that they pass. For example, it may think that students who have little free time and are in romantic relationships are less likely to pass (an intuitive reason is because they have less time to study). \n", "\n", "\n", "**Prediction** If the model guesses based on the student's characteristics they are more likely to pass than to fail, then it predicts that they will pass and vice versa." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Model Tuning\n", "Fine tune the chosen model. Use grid search (`GridSearchCV`) with at least one important parameter tuned with at least 3 different values. You will need to use the entire training set for this. In the code cell below, you will need to implement the following:\n", "- Import [`sklearn.grid_search.gridSearchCV`](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) and [`sklearn.metrics.make_scorer`](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.make_scorer.html).\n", "- Create a dictionary of parameters you wish to tune for the chosen model.\n", " - Example: `parameters = {'parameter' : [list of values]}`.\n", "- Initialize the classifier you've chosen and store it in `clf`.\n", "- Create the F1 scoring function using `make_scorer` and store it in `f1_scorer`.\n", " - Set the `pos_label` parameter to the correct value!\n", "- Perform grid search on the classifier `clf` using `f1_scorer` as the scoring method, and store it in `grid_obj`.\n", "- Fit the grid search object to the training data (`X_train`, `y_train`), and store it in `grid_obj`." ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "GridSearchCV(cv=None, error_score='raise',\n", " estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False),\n", " fit_params={}, iid=True, n_jobs=1,\n", " param_grid={'penalty': ['l2', 'l1'], 'C': [1, 10, 100, 1000]},\n", " pre_dispatch='2*n_jobs', refit=True,\n", " scoring=make_scorer(f1_score, pos_label=yes), verbose=0)\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.77\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8442.\n", "Score: 0.621052631579\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a testing F1 score of 0.7313.\n" ] } ], "source": [ "# TODO: Import 'GridSearchCV' and 'make_scorer'\n", "from sklearn.grid_search import GridSearchCV\n", "from sklearn.metrics import make_scorer\n", "\n", "def predict_labels(clf, features, target):\n", " ''' Makes predictions using a fit classifier based on F1 score. '''\n", " \n", " # Start the clock, make predictions, then stop the clock\n", " start = time()\n", " y_pred = clf.predict(features)\n", " score = clf.score(features, target.values)\n", " end = time()\n", " print(\"Score: \", score)\n", " \n", " # Print and return results\n", " print(\"Made predictions in {:.4f} seconds.\".format(end - start))\n", " return f1_score(target.values, y_pred, pos_label='yes')\n", "\n", "\n", "# TODO: Create the parameters list you wish to tune\n", "parameters = { \"penalty\":[\"l2\",\"l1\"], \n", " # \"tol\":[0.00001, 0.0001, 0.001, 0.1, 1], \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "# TODO: Initialize the classifier\n", "clf = LogisticRegression()\n", "\n", "# TODO: Make an f1 scoring function using 'make_scorer' \n", "f1_scorer = make_scorer(f1_score, pos_label='yes')\n", "\n", "# TODO: Perform grid search on the classifier using the f1_scorer as the scoring method\n", "grid_obj = GridSearchCV(clf, parameters, scoring=f1_scorer)\n", "\n", "# TODO: Fit the grid search object to the training data and find the optimal parameters\n", "grid_obj = grid_obj.fit(X_train, y_train)\n", "print(grid_obj)\n", "# Get the estimator\n", "clf = grid_obj.best_estimator_\n", "print(clf)\n", "\n", "# Report the final F1 score for training and testing after parameter tuning\n", "print(\"Tuned model has a training F1 score of {:.4f}.\".format(predict_labels(clf, X_train, y_train)))\n", "print(\"Tuned model has a testing F1 score of {:.4f}.\".format(predict_labels(clf, X_test, y_test)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5 - Final F1 Score\n", "*What is the final model's F1 score for training and testing? How does that score compare to the untuned model?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer: **" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "
AttemptF1 train scoreF1 test score
1 (allow \"penalty\" and \"C\" to vary)0.82880.7801
2 (only allow \"C\" to vary)0.83370.7883
0 (untuned model)0.83370.7883
\n", "\n", "- The train and test scores are both lower than the untuned version if I allow both \"penalty\" and \"C\" to vary.\n", "- If I only allow \"C\" to vary, GridSearchCV chooses \"C\"=1, which is the same as that of the untuned model. The train and test scores are thus the same as the untuned version.\n", "- Why would GridSearchCV pick `penalty=\"l1\"` if `penalty=\"l2\"` produces better training F1 scores (all other factors held constant)?\n", " - One hypothesis was that it might be maximising another metric. This was not the case. I also printed the accuracy score and found that when I allowed GridSearchCV to choose the \"penalty\" and \"C\" values (as opposed to only \"C\"), the accuracy score was lower.\n", "\n", "\n", "Note: We need to be wary of optimising for the testing set's F1 score. The test set is supposed to be a stand-in for future cases (generalising)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 1\n", "parameters = {\"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", " \n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l1', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.746666666667\n", "Made predictions in 0.0047 seconds.\n", "Tuned model has a training F1 score of 0.8288.\n", "Score: 0.673684210526\n", "Made predictions in 0.0006 seconds.\n", "Tuned model has a testing F1 score of 0.7801." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Try 2\n", "parameters = {# \"penalty\":(\"l1\",\"l2\"), \n", " \"C\":[1,10,100,1000],\n", " }\n", "\n", "LogisticRegression(C=1, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n", " penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n", " verbose=0, warm_start=False)\n", "Score: 0.756666666667\n", "Made predictions in 0.0008 seconds.\n", "Tuned model has a training F1 score of 0.8337.\n", "Score: 0.694736842105\n", "Made predictions in 0.0004 seconds.\n", "Tuned model has a testing F1 score of 0.7883." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p3-creating-customer-segments/.ipynb_checkpoints/customer_segments-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Unsupervised Learning\n", "## Project 3: Creating Customer Segments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the third project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", "\n", "In this project, you will analyze a dataset containing data on various customers' annual spending amounts (reported in *monetary units*) of diverse product categories for internal structure. One goal of this project is to best describe the variation in the different types of customers that a wholesale distributor interacts with. Doing so would equip the distributor with insight into how to best structure their delivery service to meet the needs of each customer.\n", "\n", "The dataset for this project can be found on the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Wholesale+customers). For the purposes of this project, the features `'Channel'` and `'Region'` will be excluded in the analysis — with focus instead on the six product categories recorded for customers.\n", "\n", "Run the code block below to load the wholesale customers dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wholesale customers dataset has 440 samples with 6 features each.\n" ] } ], "source": [ "# Import libraries necessary for this project\n", "import numpy as np\n", "import pandas as pd\n", "import renders_py3 as rs\n", "from IPython.display import display # Allows the use of display() for DataFrames\n", "\n", "# Show matplotlib plots inline (nicely formatted in the notebook)\n", "%matplotlib inline\n", "\n", "# Load the wholesale customers dataset\n", "try:\n", " data = pd.read_csv(\"customers.csv\")\n", " data.drop(['Region', 'Channel'], axis = 1, inplace = True)\n", " print(\"Wholesale customers dataset has {} samples with {} features each.\".format(*data.shape))\n", "except:\n", " print(\"Dataset could not be loaded. Is the dataset missing?\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "In this section, you will begin exploring the data through visualizations and code to understand how each feature is related to the others. You will observe a statistical description of the dataset, consider the relevance of each feature, and select a few sample data points from the dataset which you will track through the course of this project.\n", "\n", "Run the code block below to observe a statistical description of the dataset. Note that the dataset is composed of six important product categories: **'Fresh'**, **'Milk'**, **'Grocery'**, **'Frozen'**, **'Detergents_Paper'**, and **'Delicatessen'**. Consider what each category represents in terms of products you could purchase." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
count440.000000440.000000440.000000440.000000440.000000440.000000
mean12000.2977275796.2659097951.2772733071.9318182881.4931821524.870455
std12647.3288657380.3771759503.1628294854.6733334767.8544482820.105937
min3.00000055.0000003.00000025.0000003.0000003.000000
25%3127.7500001533.0000002153.000000742.250000256.750000408.250000
50%8504.0000003627.0000004755.5000001526.000000816.500000965.500000
75%16933.7500007190.25000010655.7500003554.2500003922.0000001820.250000
max112151.00000073498.00000092780.00000060869.00000040827.00000047943.000000
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen \\\n", "count 440.000000 440.000000 440.000000 440.000000 \n", "mean 12000.297727 5796.265909 7951.277273 3071.931818 \n", "std 12647.328865 7380.377175 9503.162829 4854.673333 \n", "min 3.000000 55.000000 3.000000 25.000000 \n", "25% 3127.750000 1533.000000 2153.000000 742.250000 \n", "50% 8504.000000 3627.000000 4755.500000 1526.000000 \n", "75% 16933.750000 7190.250000 10655.750000 3554.250000 \n", "max 112151.000000 73498.000000 92780.000000 60869.000000 \n", "\n", " Detergents_Paper Delicatessen \n", "count 440.000000 440.000000 \n", "mean 2881.493182 1524.870455 \n", "std 4767.854448 2820.105937 \n", "min 3.000000 3.000000 \n", "25% 256.750000 408.250000 \n", "50% 816.500000 965.500000 \n", "75% 3922.000000 1820.250000 \n", "max 40827.000000 47943.000000 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display a description of the dataset\n", "display(data.describe())" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
0126699656756121426741338
1705798109568176232931776
2635388087684240535167844
3132651196422164045071788
42261554107198391517775185
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 12669 9656 7561 214 2674 1338\n", "1 7057 9810 9568 1762 3293 1776\n", "2 6353 8808 7684 2405 3516 7844\n", "3 13265 1196 4221 6404 507 1788\n", "4 22615 5410 7198 3915 1777 5185" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Selecting Samples\n", "To get a better understanding of the customers and how their data will transform through the analysis, it would be best to select a few sample data points and explore them in more detail. In the code block below, add **three** indices of your choice to the `indices` list which will represent the customers to track. It is suggested to try different sets of samples until you obtain customers that vary significantly from one another." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Chosen samples of wholesale customers dataset:\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
01611746197927801026408272944
111215129627181481674549488550
2333370211560115550
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 16117 46197 92780 1026 40827 2944\n", "1 112151 29627 18148 16745 4948 8550\n", "2 3 333 7021 15601 15 550" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Select three indices of your choice you wish to sample from the dataset\n", "indices = [85, 181, 338]\n", "\n", "# Create a DataFrame of the chosen samples\n", "samples = pd.DataFrame(data.loc[indices], columns = data.keys()).reset_index(drop = True)\n", "print(\"Chosen samples of wholesale customers dataset:\")\n", "display(samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "Consider the total purchase cost of each product category and the statistical description of the dataset above for your sample customers. \n", "*What kind of establishment (customer) could each of the three samples you've chosen represent?* \n", "**Hint:** Examples of establishments include places like markets, cafes, and retailers, among many others. Avoid using names for establishments, such as saying *\"McDonalds\"* when describing a sample customer as a restaurant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "1. Index 85: Retailer\n", " - Highest spending on (1) detergents and paper and (2) groceries (each) of all customers in dataset. (1) -> May have a large 'home goods' focus.\n", " - Milk: Spends more than the median amount \n", " - Frozen: Spends less than the median customer\n", "\n", "2. Index 181: Large market\n", " - High spending on most product categories: 8000+ MUs spent on each of all food-related goods, nearly 5000 MUs spent on detergents and paper (highest quartile for spending in all good categories).\n", " - Highest spending on fresh goods of all customers in dataset\n", " - Focus on fresh goods, which means it likely has a large market component.\n", " - Little emphasis on detergent and paper, which indicates it is unlikely to be a shopping mall type shop.\n", "\n", "3. Index 338: Restaurant\n", " - Much smaller scale than the previous two customers discussed.\n", " - Amount spent on Fresh is least in dataset.\n", " - Spending on each of Milk, Detergents and Paper is in the bottom quartile.\n", " - Needs groceries and frozen food to produce food for customers. May serve delicatessen type meats. Needs milk for coffee and tea.\n", " - May be cheaper so it doesn't need much fresh food." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Relevance\n", "One interesting thought to consider is if one (or more) of the six product categories is actually relevant for understanding customer purchasing. That is to say, is it possible to determine whether customers purchasing some amount of one category of products will necessarily purchase some proportional amount of another category of products? We can make this determination quite easily by training a supervised regression learner on a subset of the data with one feature removed, and then score how well that model can predict the removed feature.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign `new_data` a copy of the data by removing a feature of your choice using the `DataFrame.drop` function.\n", " - Use `sklearn.cross_validation.train_test_split` to split the dataset into training and testing sets.\n", " - Use the removed feature as your target label. Set a `test_size` of `0.25` and set a `random_state`.\n", " - Import a decision tree regressor, set a `random_state`, and fit the learner to the training data.\n", " - Report the prediction score of the testing set using the regressor's `score` function." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Score of prediction on test set: 0.602801978878\n" ] } ], "source": [ "# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature\n", "new_data = data.drop(\"Grocery\", axis=1)\n", "new_data\n", "\n", "\n", "# TODO: Split the data into training and testing sets using the given feature as the target\n", "from sklearn.cross_validation import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(new_data, data[\"Grocery\"], test_size=0.25, random_state=0)\n", "\n", "# TODO: Create a decision tree regressor and fit it to the training set\n", "from sklearn.tree import DecisionTreeRegressor\n", "regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)\n", "\n", "# TODO: Report the score of the prediction using the testing set\n", "score = regressor.score(X_test, y_test)\n", "print(\"Score of prediction on test set: \", score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "*Which feature did you attempt to predict? What was the reported prediction score? Is this feature is necessary for identifying customers' spending habits?* \n", "**Hint:** The coefficient of determination, `R^2`, is scored between 0 and 1, with 1 being a perfect fit. A negative `R^2` implies the model fails to fit the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- I attempted to predict the **`Grocery`** feature. \n", "- The reported prediction score was **0.6028**. \n", "- This feature is **not absolutely necessary** to identify customers' spending habits because it appears loosely correlated with the other five features, but the `R^2` score is not sufficiently high for us to be confident in dropping it. \n", "\n", "I compared `Grocery`'s `R^2` score with the other features' `R^2` scores below:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature is: Fresh\n", "Score of prediction on test set: -0.252469807688\n", "Feature is: Milk\n", "Score of prediction on test set: 0.365725292736\n", "Feature is: Grocery\n", "Score of prediction on test set: 0.602801978878\n", "Feature is: Frozen\n", "Score of prediction on test set: 0.253973446697\n", "Feature is: Detergents_Paper\n", "Score of prediction on test set: 0.728655181254\n", "Feature is: Delicatessen\n", "Score of prediction on test set: -11.6636871594\n" ] } ], "source": [ "# For experimentation's sake\n", "features_list = [\"Fresh\",\"Milk\",\"Grocery\",\"Frozen\",\"Detergents_Paper\",\"Delicatessen\"]\n", "\n", "for feature in features_list:\n", " # TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature\n", " new_data = data.drop(feature, axis=1)\n", " new_data\n", " print(\"Feature is: \", feature)\n", "\n", " # TODO: Split the data into training and testing sets using the given feature as the target\n", " X_train, X_test, y_train, y_test = train_test_split(new_data, data[feature], test_size=0.25, random_state=0)\n", "\n", " # TODO: Create a decision tree regressor and fit it to the training set\n", " regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)\n", "\n", " # TODO: Report the score of the prediction using the testing set\n", " score = regressor.score(X_test, y_test)\n", " print(\"Score of prediction on test set: \", score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**:\n", "- Notice that the Delicatessen R^2 score is very negative and the Fresh R^2 score is quite negative, so those definitely cannot be dropped as the model fails to fit the data. \n", "- The feature that might be okay to remove is Detergents_Paper, followed by Grocery. \n", "- Milk and Frozen are loosely correlated with the others but not enough to say much." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize Feature Distributions\n", "To get a better understanding of the dataset, we can construct a scatter matrix of each of the six product features present in the data. If you found that the feature you attempted to predict above is relevant for identifying a specific customer, then the scatter matrix below may not show any correlation between that feature and the others. Conversely, if you believe that feature is not relevant for identifying a specific customer, the scatter matrix might show a correlation between that feature and another feature in the data. Run the code block below to produce a scatter matrix." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nNy7+WPF7swAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Produce a scatter matrix for each pair of features in the data\n", "pd.scatter_matrix(data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "*Are there any pairs of features which exhibit some degree of correlation? Does this confirm or deny your suspicions about the relevance of the feature you attempted to predict? How is the data for those features distributed?* \n", "**Hint:** Is the data normally distributed? Where do most of the data points lie? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "* The pair (`Detergents_Paper`, `Grocery`) exhibits a high degree of correlation. The pairs (`Milk`,`Grocery`) and (`Milk`,`Detergents_Paper`) also exhibit some degree of correlation.\n", "* This confirms that `Grocery` might not be that relevant (necessary).\n", "* The data is not normally distributed - it is positively skewed. The features more closely resemble the log-normal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Preprocessing\n", "In this section, you will preprocess the data to create a better representation of customers by performing a scaling on the data and detecting (and optionally removing) outliers. Preprocessing data is often times a critical step in assuring that results you obtain from your analysis are significant and meaningful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Scaling\n", "If data is not normally distributed, especially if the mean and median vary significantly (indicating a large skew), it is most [often appropriate](http://econbrowser.com/archives/2014/02/use-of-logarithms-in-economics) to apply a non-linear scaling — particularly for financial data. One way to achieve this scaling is by using a [Box-Cox test](http://scipy.github.io/devdocs/generated/scipy.stats.boxcox.html), which calculates the best power transformation of the data that reduces skewness. A simpler approach which can work in most cases would be applying the natural logarithm.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign a copy of the data to `log_data` after applying a logarithm scaling. Use the `np.log` function for this.\n", " - Assign a copy of the sample data to `log_samples` after applying a logrithm scaling. Again, use `np.log`." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Scale the data using the natural logarithm\n", "log_data = np.log(data)\n", "\n", "# TODO: Scale the sample data using the natural logarithm\n", "log_samples = np.log(samples)\n", "\n", "# Produce a scatter matrix for each pair of newly-transformed features\n", "pd.scatter_matrix(log_data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "After applying a natural logarithm scaling to the data, the distribution of each feature should appear much more normal. For any pairs of features you may have identified earlier as being correlated, observe here whether that correlation is still present (and whether it is now stronger or weaker than before).\n", "\n", "* The correlations are still present and appear stronger than before.\n", "\n", "Run the code below to see how the sample data has changed after having the natural logarithm applied to it." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
09.68763010.74067011.4379866.93342310.6170997.987524
111.62760110.2964419.8063169.7258558.5067399.053687
21.0986125.8081428.8566619.6550902.7080506.309918
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 9.687630 10.740670 11.437986 6.933423 10.617099 7.987524\n", "1 11.627601 10.296441 9.806316 9.725855 8.506739 9.053687\n", "2 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the log-transformed sample data\n", "display(log_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Outlier Detection\n", "Detecting outliers in the data is extremely important in the data preprocessing step of any analysis. The presence of outliers can often skew results which take into consideration these data points. There are many \"rules of thumb\" for what constitutes an outlier in a dataset. Here, we will use [Tukey's Method for identfying outliers](http://datapigtechnologies.com/blog/index.php/highlighting-outliers-in-your-data-with-the-tukey-method/): An *outlier step* is calculated as 1.5 times the interquartile range (IQR). A data point with a feature that is beyond an outlier step outside of the IQR for that feature is considered abnormal.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the value of the 25th percentile for the given feature to `Q1`. Use `np.percentile` for this.\n", " - Assign the value of the 75th percentile for the given feature to `Q3`. Again, use `np.percentile`.\n", " - Assign the calculation of an outlier step for the given feature to `step`.\n", " - Optionally remove data points from the dataset by adding indices to the `outliers` list.\n", "\n", "**NOTE:** If you choose to remove any outliers, ensure that the sample data does not contain any of these points! \n", "Once you have performed this implementation, the dataset will be stored in the variable `good_data`." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Fresh':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
654.4426519.95032310.7326513.58351910.0953887.260523
662.1972257.3356348.9115305.1647868.1513333.295837
815.3890729.1632499.5751925.6454478.9641845.049856
951.0986127.9793398.7406576.0867755.4071726.563856
963.1354947.8694029.0018394.9767348.2620435.379897
1284.9416429.0878348.2487914.9558276.9679091.098612
1715.29831710.1605309.8942456.4785109.0794348.740337
1935.1929578.1562239.9179826.8658918.6337316.501290
2182.8903728.9231919.6293807.1585148.4757468.759669
3045.0814048.91731110.1175106.4248699.3744137.787382
3055.4930619.4680019.0883996.6833618.2710375.351858
3381.0986125.8081428.8566619.6550902.7080506.309918
3534.7621748.7425749.9618985.4293469.0690077.013016
3555.2470246.5889267.6068855.5012585.2149364.844187
3573.6109187.15070110.0110864.9199818.8168534.700480
4124.5747118.1900779.4254524.5849677.9963174.127134
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523\n", "66 2.197225 7.335634 8.911530 5.164786 8.151333 3.295837\n", "81 5.389072 9.163249 9.575192 5.645447 8.964184 5.049856\n", "95 1.098612 7.979339 8.740657 6.086775 5.407172 6.563856\n", "96 3.135494 7.869402 9.001839 4.976734 8.262043 5.379897\n", "128 4.941642 9.087834 8.248791 4.955827 6.967909 1.098612\n", "171 5.298317 10.160530 9.894245 6.478510 9.079434 8.740337\n", "193 5.192957 8.156223 9.917982 6.865891 8.633731 6.501290\n", "218 2.890372 8.923191 9.629380 7.158514 8.475746 8.759669\n", "304 5.081404 8.917311 10.117510 6.424869 9.374413 7.787382\n", "305 5.493061 9.468001 9.088399 6.683361 8.271037 5.351858\n", "338 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918\n", "353 4.762174 8.742574 9.961898 5.429346 9.069007 7.013016\n", "355 5.247024 6.588926 7.606885 5.501258 5.214936 4.844187\n", "357 3.610918 7.150701 10.011086 4.919981 8.816853 4.700480\n", "412 4.574711 8.190077 9.425452 4.584967 7.996317 4.127134" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Milk':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
8610.03998311.20501310.3770476.8946709.9069816.805723
986.2205904.7184996.6567276.7968244.0253524.882802
1546.4329404.0073334.9199814.3174881.9459102.079442
35610.0295034.8978405.3844958.0573772.1972256.306275
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "86 10.039983 11.205013 10.377047 6.894670 9.906981 6.805723\n", "98 6.220590 4.718499 6.656727 6.796824 4.025352 4.882802\n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442\n", "356 10.029503 4.897840 5.384495 8.057377 2.197225 6.306275" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Grocery':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
759.9231927.0361481.0986128.3909491.0986126.882437
1546.4329404.0073334.9199814.3174881.9459102.079442
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437\n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Frozen':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
388.4318539.6632619.7237033.4965088.8473606.070738
578.5972979.2036189.2578923.6375868.9322137.156177
654.4426519.95032310.7326513.58351910.0953887.260523
14510.0005699.03408010.4571433.7376709.4407388.396155
1757.7591878.9676329.3821063.9512448.3418877.436617
2646.9782149.1777149.6450414.1108748.6961767.142827
32510.3956509.7281819.51973511.0164797.1483468.632128
4208.4020078.5690269.4900153.2188768.8273217.239215
4299.0603317.4673718.1831183.8501484.4308177.824446
4397.9327217.4372067.8280384.1743876.1675163.951244
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "38 8.431853 9.663261 9.723703 3.496508 8.847360 6.070738\n", "57 8.597297 9.203618 9.257892 3.637586 8.932213 7.156177\n", "65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523\n", "145 10.000569 9.034080 10.457143 3.737670 9.440738 8.396155\n", "175 7.759187 8.967632 9.382106 3.951244 8.341887 7.436617\n", "264 6.978214 9.177714 9.645041 4.110874 8.696176 7.142827\n", "325 10.395650 9.728181 9.519735 11.016479 7.148346 8.632128\n", "420 8.402007 8.569026 9.490015 3.218876 8.827321 7.239215\n", "429 9.060331 7.467371 8.183118 3.850148 4.430817 7.824446\n", "439 7.932721 7.437206 7.828038 4.174387 6.167516 3.951244" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Detergents_Paper':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
759.9231927.0361481.0986128.3909491.0986126.882437
1619.4281906.2915695.6454476.9957661.0986127.711101
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437\n", "161 9.428190 6.291569 5.645447 6.995766 1.098612 7.711101" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Delicatessen':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
662.1972257.3356348.9115305.1647868.1513333.295837
1097.2485049.72489910.2745686.5117456.7286291.098612
1284.9416429.0878348.2487914.9558276.9679091.098612
1378.0349558.9971479.0218406.4937546.5806393.583519
14210.5196468.8751479.0183328.0047002.9957321.098612
1546.4329404.0073334.9199814.3174881.9459102.079442
18310.51452910.6908089.91195210.5059995.47646410.777768
1845.7899606.8221978.4574434.3040655.8111412.397895
1877.7989338.9874479.1920758.7433728.1487351.098612
2036.3681876.5294197.7034596.1506036.8606642.890372
2336.8710918.5139888.1065156.8426836.0137151.945910
28510.6029656.4614688.1886896.9488976.0776422.890372
28910.6639665.6559926.1548587.2356193.4657363.091042
3437.4318928.84850910.1779327.2834489.6465933.610918
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper \\\n", "66 2.197225 7.335634 8.911530 5.164786 8.151333 \n", "109 7.248504 9.724899 10.274568 6.511745 6.728629 \n", "128 4.941642 9.087834 8.248791 4.955827 6.967909 \n", "137 8.034955 8.997147 9.021840 6.493754 6.580639 \n", "142 10.519646 8.875147 9.018332 8.004700 2.995732 \n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 \n", "183 10.514529 10.690808 9.911952 10.505999 5.476464 \n", "184 5.789960 6.822197 8.457443 4.304065 5.811141 \n", "187 7.798933 8.987447 9.192075 8.743372 8.148735 \n", "203 6.368187 6.529419 7.703459 6.150603 6.860664 \n", "233 6.871091 8.513988 8.106515 6.842683 6.013715 \n", "285 10.602965 6.461468 8.188689 6.948897 6.077642 \n", "289 10.663966 5.655992 6.154858 7.235619 3.465736 \n", "343 7.431892 8.848509 10.177932 7.283448 9.646593 \n", "\n", " Delicatessen \n", "66 3.295837 \n", "109 1.098612 \n", "128 1.098612 \n", "137 3.583519 \n", "142 1.098612 \n", "154 2.079442 \n", "183 10.777768 \n", "184 2.397895 \n", "187 1.098612 \n", "203 2.890372 \n", "233 1.945910 \n", "285 2.890372 \n", "289 3.091042 \n", "343 3.610918 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "potential_outliers = []\n", "\n", "# For each feature find the data points with extreme high or low values\n", "for feature in log_data.keys():\n", " \n", " # TODO: Calculate Q1 (25th percentile of the data) for the given feature\n", " Q1 = np.percentile(log_data[feature],25)\n", " \n", " # TODO: Calculate Q3 (75th percentile of the data) for the given feature\n", " Q3 = np.percentile(log_data[feature],75)\n", " \n", " # TODO: Use the interquartile range to calculate an outlier step (1.5 times the interquartile range)\n", " step = 1.5 * (Q3-Q1)\n", " \n", " # Display the outliers\n", " print(\"Data points considered outliers for the feature '{}':\".format(feature))\n", " display(log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))])\n", " list = log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))].index.tolist()\n", " potential_outliers.append(list)\n", " \n", "# OPTIONAL: Select the indices for data points you wish to remove\n", "outliers = []\n", "\n", "# Remove the outliers, if any were specified\n", "good_data = log_data.drop(log_data.index[outliers]).reset_index(drop = True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 4\n", "*Are there any data points considered outliers for more than one feature based on the definition above? Should these data points be removed from the dataset? If any data points were added to the `outliers` list to be removed, explain why.* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "Datapoints considered outliers for more than one feature: rows 65, 66, 75, 128, 154. (Rough work below.)\n", "\n", "These data points look a bit suspicious. E.g. Row 75 spent 3 monetary units on Grocery and Detergents_Paper but spent a lot more (up to around 20k in Fresh) in other categories.\n", "\n", "But they should not be removed from the dataset. They could still be genuine datapoints because it is plausible shops don't use much of these categories of goods. (Detergents_Paper seems less plausible though.)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
6585209594582836242311423
66915347417175346827
75203981137344073975
1281408847382314210623
154622551377578
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "65 85 20959 45828 36 24231 1423\n", "66 9 1534 7417 175 3468 27\n", "75 20398 1137 3 4407 3 975\n", "128 140 8847 3823 142 1062 3\n", "154 622 55 137 75 7 8" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.iloc[[65,66,75,128,154]]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[[65, 66, 81, 95, 96, 128, 171, 193, 218, 304, 305, 338, 353, 355, 357, 412],\n", " [86, 98, 154, 356],\n", " [75, 154],\n", " [38, 57, 65, 145, 175, 264, 325, 420, 429, 439],\n", " [75, 161],\n", " [66, 109, 128, 137, 142, 154, 183, 184, 187, 203, 233, 285, 289, 343]]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rough work\n", "potential_outliers" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{128: {0, 5}, 65: {0, 3}, 66: {0, 5}, 75: {2, 4}, 154: {1, 2, 5}}\n" ] } ], "source": [ "mult_outlier_indices_dict = {}\n", "\n", "for i in range(len(potential_outliers)):\n", " current_feature_ol = potential_outliers[i]\n", " for po in current_feature_ol:\n", " mult_ol = set()\n", " mult_ol.add(i)\n", " if po not in mult_outlier_indices_dict.keys():\n", " for other_feat in range(i, len(potential_outliers)):\n", " if po in potential_outliers[other_feat]:\n", " mult_ol.add(other_feat)\n", " if len(mult_ol) > 1:\n", " mult_outlier_indices_dict[po] = mult_ol\n", " \n", "print(mult_outlier_indices_dict)\n", "\n", "for v in mult_outlier_indices_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature Transformation\n", "In this section you will use principal component analysis (PCA) to draw conclusions about the underlying structure of the wholesale customer data. Since using PCA on a dataset calculates the dimensions which best maximize variance, we will find which compound combinations of features best describe customers." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Implementation: PCA\n", "\n", "Now that the data has been scaled to a more normal distribution and has had any necessary outliers removed, we can now apply PCA to the `good_data` to discover which dimensions about the data best maximize the variance of features involved. In addition to finding these dimensions, PCA will also report the *explained variance ratio* of each dimension — how much variance within the data is explained by that dimension alone. Note that a component (dimension) from PCA can be considered a new \"feature\" of the space, however it is a composition of the original features present in the data.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Import `sklearn.decomposition.PCA` and assign the results of fitting PCA in six dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nssdoZnMzsZ5Daq/v9tfHJz7xCWbMmMGpp57KkUceyeabb86cOXM49dRT2W233Tj//PPXWueMM87g\nwx/+MHPmzGHixIl86EMf4qijjgLgPe95D4899hiHHnooy5YtY9asWVx44YW0trby05/+lI9//OPM\nnj2b559/np122ol///d/HzK+3XffnaamJnbddde1TrWTJBVTa2szHR3V/S9tbV2//4uS1AhRebrW\naBcROdDxRARj6TgbYc899+T9738/Rx99dKNDGVHMLRVRRLB4cXVtOzrwNSKtp4iAeVU2nudrbKwy\nD2qn/Pkt+i8vZI+R1s8NN9zAzTffzKJFixodiiRJklQTXmOkIX3gAx9g77335vTTT++7+awkSZI0\n1thjpCFdcMEFjQ5BkiRJqjl7jCRJkiQVnoWRJEmSpMLzVDpJkiRphGme3kzvvOqGxG+e7pD4w8HC\nSJIkSRpheh7oaXQIheOpdJIkSZIKz8JIkiRJUuEVsjBqaWsjImo2tbS1VR3LrFmzmDRpElOmTGHy\n5MlMmTKFnh67TiVJkqR6KuQ1Rr3d3bB4ce2239FRdduI4PLLL6djiHVWrlzJuHHjhiM0SZIkSQMo\nZI/RSJOZL3rc1dVFU1MT5513HjNnzmTPPfcEYNGiRbziFa9g2rRp7LHHHtx1110AfP/73+/rbZoy\nZQqbbbYZe+yxBwDPP/88J510EjNnzmS77bbj+OOP57nnngPg6quvprW1la9+9as0Nzczffp0b+gq\nSZKkQrIwGsGuueYa7rrrLn7xi19wzz33cOihh3LGGWfw8MMPs++++7L//vvzwgsvcNBBB7F8+XKe\nfPJJli5dypw5czj00EMBOPnkk7n33nu59dZbuffee1m6dClf+tKX+vbR09PD8uXLWbZsGd/+9rc5\n4YQT+Nvf/taoQ5YkSZIawsJoBHjXu97FtGnTmDZtGgceeGDf8vnz5zNx4kQ23XRTFi5cyH777cce\ne+zBuHHjOOmkk/j73//Ob3/72772mckhhxzCHnvswTHHHAPAOeecw9e+9jWmTp3K5ptvzqc+9Sku\nvvjivnU22WQTPv/5zzNu3Dj23XdftthiC+6+++76HbwkSZI0AhTyGqOR5tJLL33RNUZdXV1EBDNm\nzOhbtmzZMmbOnNn3OCJobW1l6dKlfcs+85nP8PTTT3P66acD8PDDD/PMM8/wmte8pq/NqlWrXnTq\n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\nAZSWyKm8CV39AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Apply PCA by fitting the good data with the same number of dimensions as features\n", "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=6)\n", "pca.fit(good_data)\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = pca.transform(log_samples)\n", "\n", "# Generate PCA results plot\n", "pca_results = rs.pca_results(good_data, pca)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 5\n", "*How much variance in the data is explained* ***in total*** *by the first and second principal component? What about the first four principal components? Using the visualization provided above, discuss what the first four dimensions best represent in terms of customer spending.* \n", "**Hint:** A positive increase in a specific dimension corresponds with an *increase* of the *positive-weighted* features and a *decrease* of the *negative-weighted* features. The rate of increase or decrease is based on the indivdual feature weights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "- First and second PCs explain **71.90%** of the variance in the data.\n", "- First four PCs explain **93.14%** of the variation in the data.\n", "- What the first four dimensions best represent in terms of customer spending:\n", " - Dim 1: Detergents_Paper, Grocery and Milk: -> Utilities\n", " - Dim 2: Fresh, Frozen, Delicatessen -> Food\n", " - Dim 3: Fresh - Delicatessen: Market-y stuff, food that must be sold on the day\n", " - Dim 4: Frozen - Fresh - Delicatessen: Food that can be kept for ages\n" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.7190000000000001\n", "0.9314\n" ] } ], "source": [ "# Rough calculation\n", "print(0.4424+0.2766)\n", "print(0.4424+0.2766+0.1162+0.0962)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it in six dimensions. Observe the numerical value for the first four dimensions of the sample points. Consider if this is consistent with your initial interpretation of the sample points." ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Dimension 1Dimension 2Dimension 3Dimension 4Dimension 5Dimension 6
05.34591.94420.7429-0.2108-0.52970.2928
12.19744.90480.06860.5623-0.5195-0.2369
2-2.8963-4.7798-6.38172.9243-0.76292.2292
\n", "
" ], "text/plain": [ " Dimension 1 Dimension 2 Dimension 3 Dimension 4 Dimension 5 \\\n", "0 5.3459 1.9442 0.7429 -0.2108 -0.5297 \n", "1 2.1974 4.9048 0.0686 0.5623 -0.5195 \n", "2 -2.8963 -4.7798 -6.3817 2.9243 -0.7629 \n", "\n", " Dimension 6 \n", "0 0.2928 \n", "1 -0.2369 \n", "2 2.2292 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display sample log-data after having a PCA transformation applied\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Dimensionality Reduction\n", "When using principal component analysis, one of the main goals is to reduce the dimensionality of the data — in effect, reducing the complexity of the problem. Dimensionality reduction comes at a cost: Fewer dimensions used implies less of the total variance in the data is being explained. Because of this, the *cumulative explained variance ratio* is extremely important for knowing how many dimensions are necessary for the problem. Additionally, if a signifiant amount of variance is explained by only two or three dimensions, the reduced data can be visualized afterwards.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the results of fitting PCA in two dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of `good_data` using `pca.transform`, and assign the reuslts to `reduced_data`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Apply PCA by fitting the good data with only two dimensions\n", "pca = PCA(n_components=2)\n", "pca.fit(good_data)\n", "\n", "# TODO: Transform the good data using the PCA fit above\n", "reduced_data = pca.transform(good_data)\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = pca.transform(log_samples)\n", "\n", "# Create a DataFrame for the reduced data\n", "reduced_data = pd.DataFrame(reduced_data, columns = ['Dimension 1', 'Dimension 2'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it using only two dimensions. Observe how the **values for the first two dimensions remains unchanged when compared to a PCA transformation in six dimensions**." ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Dimension 1Dimension 2
05.34591.9442
12.19744.9048
2-2.8963-4.7798
\n", "
" ], "text/plain": [ " Dimension 1 Dimension 2\n", "0 5.3459 1.9442\n", "1 2.1974 4.9048\n", "2 -2.8963 -4.7798" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display sample log-data after applying PCA transformation in two dimensions\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = ['Dimension 1', 'Dimension 2']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering\n", "\n", "In this section, you will choose to use either a K-Means clustering algorithm or a Gaussian Mixture Model clustering algorithm to identify the various customer segments hidden in the data. You will then recover specific data points from the clusters to understand their significance by transforming them back into their original dimension and scale. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6\n", "*What are the advantages to using a K-Means clustering algorithm? What are the advantages to using a Gaussian Mixture Model clustering algorithm? Given your observations about the wholesale customer data so far, which of the two algorithms will you use and why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "**Advantages to using K-Means clustering**\n", "- Hard labelling so all datapoints are in certain clusters\n", "- Less computationally expensive (than a Gaussian Mixture Model)\n", "- Guaranteed to converge\n", "- Scale-invariant\n", "- Consistent\n", "\n", "**Advantages to using Gaussian Mixture Model clustering**\n", "- One point can be shared between clusters because points are assigned probabilities of belonging to each cluster (soft) as opposed to hard labels\n", "- More information: Can look at probabilities to know how sure the algorithm is that each point is in each cluster\n", "- Can model all elliptical clusters (vs K-Means which assumes clusters are spherical)\n", "\n", "**Chosen algorithm**\n", "- Gausssian Mixture.\n", "- The data does not seem to be separated into clear clusters. There may be groups that are in-betweens.\n", "\n", "Reference: https://www.quora.com/What-is-the-difference-between-K-means-and-the-mixture-model-of-Gaussian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Creating Clusters\n", "Depending on the problem, the number of clusters that you expect to be in the data may already be known. When the number of clusters is not known *a priori*, there is no guarantee that a given number of clusters best segments the data, since it is unclear what structure exists in the data — if any. However, we can quantify the \"goodness\" of a clustering by calculating each data point's *silhouette coefficient*. The [silhouette coefficient](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html) for a data point measures how similar it is to its assigned cluster from -1 (dissimilar) to 1 (similar). Calculating the ***mean* silhouette coefficient provides for a simple scoring method of a given clustering**.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Fit a clustering algorithm to the `reduced_data` and assign it to `clusterer`.\n", " - Predict the cluster for each data point in `reduced_data` using `clusterer.predict` and assign them to `preds`.\n", " - Find the cluster centers using the algorithm's respective attribute and assign them to `centers`.\n", " - Predict the cluster for each sample data point in `pca_samples` and assign them `sample_preds`.\n", " - Import sklearn.metrics.silhouette_score and calculate the silhouette score of `reduced_data` against `preds`.\n", " - Assign the silhouette score to `score` and print the result." ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of components: 2\n", "Cluster centres: [[-0.71464435 0.31923966]\n", " [ 1.01432429 -0.45311006]]\n", "Sample Preds: [1 1 1]\n", "Silhouette score: 0.316017379116 \n", "\n", "Number of components: 3\n", "Cluster centres: [[ 1.53837521 0.35814931]\n", " [-1.53264671 0.28309436]\n", " [-0.42189675 -1.47049155]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.375222595239 \n", "\n", "Number of components: 4\n", "Cluster centres: [[ 0.04260476 -1.75483254]\n", " [-1.19364513 0.61758051]\n", " [-1.65040023 -0.34386088]\n", " [ 2.12094466 0.18950015]]\n", "Sample Preds: [3 3 0]\n", "Silhouette score: 0.336237830562 \n", "\n", "Number of components: 5\n", "Cluster centres: [[-1.52420475 -0.16175761]\n", " [ 2.61449466 -0.91376362]\n", " [-1.70036028 -1.83457833]\n", " [-0.89574454 1.08330732]\n", " [ 1.92949643 0.40524309]]\n", "Sample Preds: [4 1 2]\n", "Silhouette score: 0.31202624062 \n", "\n", "Number of components: 6\n", "Cluster centres: [[ 1.74491709 0.94152474]\n", " [-1.5625887 0.15170505]\n", " [-0.38366704 -3.6751244 ]\n", " [ 2.78898903 -1.01811609]\n", " [-0.96577157 -0.2125656 ]\n", " [-0.10568062 1.18412939]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.269277095938 \n", "\n" ] } ], "source": [ "# TODO: Apply your clustering algorithm of choice to the reduced data \n", "from sklearn.mixture import GMM\n", "from sklearn.metrics import silhouette_score\n", "\n", "# Loop through different cluster numbers to see which \n", "# gives th ehighest silhouette score.\n", "for i in range(2,7):\n", " print(\"Number of components: \", i)\n", " clusterer = GMM(random_state=0, n_components=i)\n", " clusterer.fit(reduced_data)\n", "\n", " # TODO: Predict the cluster for each data point\n", " preds = clusterer.predict(reduced_data)\n", " # TODO: Find the cluster centers\n", " centers = clusterer.means_\n", " print(\"Cluster centres: \",centers)\n", "\n", " # TODO: Predict the cluster for each transformed sample data point\n", " sample_preds = clusterer.predict(pca_samples)\n", " print(\"Sample Preds: \", sample_preds)\n", "\n", " # TODO: Calculate the mean silhouette coefficient for the number of clusters chosen\n", " score = silhouette_score(reduced_data, preds)\n", " print(\"Silhouette score: \", score, \"\\n\")\n", "\n", "# Note: Variable values reassigned below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7\n", "*Report the silhouette score for several cluster numbers you tried. Of these, which number of clusters has the best silhouette score?* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Cluster numberSilhouette score
20.316
**3****0.375**
40.336
50.312
60.269
\n", "\n", "Cluster number 3 has the best silhouette score." ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cluster centres: [[ 1.53837521 0.35814931]\n", " [-1.53264671 0.28309436]\n", " [-0.42189675 -1.47049155]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.375222595239 \n", "\n" ] } ], "source": [ "# Reassign variable values with n_components = 3\n", "\n", "clusterer = GMM(random_state=0, n_components=3)\n", "clusterer.fit(reduced_data)\n", "\n", "# TODO: Predict the cluster for each data point\n", "preds = clusterer.predict(reduced_data)\n", "# TODO: Find the cluster centers\n", "centers = clusterer.means_\n", "print(\"Cluster centres: \",centers)\n", "\n", "# TODO: Predict the cluster for each transformed sample data point\n", "sample_preds = clusterer.predict(pca_samples)\n", "print(\"Sample Preds: \", sample_preds)\n", "\n", "# TODO: Calculate the mean silhouette coefficient for the number of clusters chosen\n", "score = silhouette_score(reduced_data, preds)\n", "print(\"Silhouette score: \", score, \"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cluster Visualization\n", "Once you've chosen the optimal number of clusters for your clustering algorithm using the scoring metric above, you can now visualize the results by executing the code block below. Note that, for experimentation purposes, you are welcome to adjust the number of clusters for your clustering algorithm to see various visualizations. The final visualization provided should, however, correspond with the optimal number of clusters. " ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nk+6d7Zy7CsAfTSc/lmUSERGgdoM/SAyZWS7egASVDTYgItJsxbQJnJn1xps9ey3QG68z8kTnXGGl\nG4qIiIiIiNRArAOgM4EVeLO0rzJv8rg859zUkHT6JVJERERERCrlnKuyCXesR4H7Esh1zq3y3z9P\nhKE/nXN61cNr6tSpMS9DvL50bnVem9pL51bntim+dG51bpvaS+e1/l7RimkA5LzZoHNLx/rHm2Nh\nbQyLJCIiIiIicawxjAJ3A96M2Yl4801cHePyiIiIiIhInIp5AOSc+wDoG+tyNFcDBw6MdRHils5t\n/dB5rT86t/VH57b+6NzWH53b+qHzGnsxnwg1GmbmmkI5RUREREQkNswMF8UgCDGvARIRERERaSpO\nOOEENm3SHMOx1L17d7744osab68aIBERERGRKPm1DLEuRrMW6RpEWwMU62GwRUREREREGowCIBER\nERERaTYUAImIiIiISLOhAEhERERERJoNBUAiIiIiIs3AtGnTGDNmTKyLEXMKgEREREREGsCWLVtY\ntmwZ+fn59baP7Oxs+vbtS9u2benatSsXXHABy5YtK1tvVuUgaZXatGkTgUCAkpKS2ha1nNWrV9On\nTx/atGlD3759+eCDD+o0/2AKgEREREREask5x/r169m4cWOFdUVFRYwdOZrTv3UKk4ZmcMKxXXjo\ngQfqvAwzZ84kMzOT22+/na1bt7J582bGjx/PSy+9VGf7cM7VaijwQ4cOVVhWVFRERkYGV1xxBbt3\n7+aKK65g+PDhFBcX17a4YSkAEhERERGphXXr1tGnR08G9v4eZ53WmwG9epebLPX+++5j84JFbNrf\njXfyO7GqsAu/u/VX5OTklKUpLi7mySef5PKMnzLp2uv46KOPqlWG/Px8pk6dyuzZsxk+fDitW7cm\nISGB9PR07rnnngrply5dSkpKSrllJ554Im+88QYAK1eupG/fviQnJ9OlSxduuukmAM455xwA2rdv\nT7t27cqO4dFHH6Vnz5507NiRoUOHsnnz5rJ8A4EAs2fPJjU1ldTU1AplWbJkCYcOHeKGG24gMTGR\nCRMm4JwrK0tdUwAkIiIiIlJDJSUlXDT4fK76LI/N+7ryZeHxDF/7DZelDyurJcn+66PcUZhEkv/o\nfRJHcG1ha555/AnAq1W59IJh/OW6Gzl3wQraP/x3ftSvP4sXL466HMuXL+fAgQNkZGREvU1lzeEm\nTpzIpEmTyMvLY8OGDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJb\nsGABK1cfoaKiAAAgAElEQVSuZO3atRX29dFHH3H66aeXW9a7d+9qB4HRUgAkIiIiIlJD7733Hod2\n7OJ6l0wAIwEjq+QovvpiE+vWrYsqj6VLl/Lpsnf4996j+TntueNQBx7e155fXnd91OXYsWMHnTp1\nIhCom8f7I444gvXr17Njxw6OPPJI+vXrV259cBO4OXPmcMstt5CamkogEGDKlCmsXr2a3NzcsjS3\n3norycnJtGzZssK+CgoKSE5OLresXbt27Nmzp06OJZQCIBERkSYiNzeXyRMmMLjfACZPmFDu4UJE\nYqO4uJiWloBxuDbFgEQLlPVhGXXNWO5oXUAB3sABGznIn1oXMvKqKwF49913GXwgkcSgPIaRxHuf\nfRp1X5uOHTuyffv2Ohuc4JFHHuHTTz+lR48epKWl8fLLL0dMu2nTJiZOnEiHDh3o0KEDHTt2xMzY\nsmVLWZrjjz8+4vZJSUkVBobIy8ujbdu2tT+QMBQAiYiINAG5ubn0730GgTnPkblyC4E5z9G/9xkK\ngkRirE+fPuS1asELHH6Af4J8WnfqQM+ePQG48aab6DZ8CN1b5dKv3Xb6tP6aW+6+k7S0NABOOeUU\nclqV4Dgc7KygkG8de1zUo7YNGDCAli1bMn/+/KjSt2nThn379pW9P3ToENu2bSt7f/LJJ5Odnc22\nbdvIysrikksuobCwMGx5unXrxpw5c9i5cyc7d+5k165dFBQU0L9//7I0lR3Hqaeeyocfflhu2Ycf\nfsipp54a1bFUlwIgERGRJmDW9OmMKmjBfUUdOZ8k7ivqyKiCRGZNnx7rook0ay1atOD5V/7JjZ0O\ncmbbrZzRdit3Hgvz/rGg7KE/MTGRR56Zy4fr1/HAwgV88b+vGT9xYlke6enpHEo5litb7uBt9pFN\nHqOP3MXUe38XdTnatWvHtGnTGD9+PAsWLKCwsJDi4mJeffVVpkyZUiF9amoq+/fv59VXX6W4uJi7\n7rqLgwcPlq2fO3cu27dvByA5ORkzIxAI0LlzZwKBABs2bChLO27cOO6+++6y/j15eXk8//zzUZd9\n4MCBJCQk8OCDD3Lw4EH+8Ic/EAgEOPfcc6POozpa1EuuIiIiUqfW5Kwis6h82/lBRUcw851VMSqR\niJTq06cPG77awvLly0lISKB///4kJCRUSNe1a1e6du1aYXmLFi14fdl/uO/uu5n04kt0PqY7s2/5\nJenp6dUqR2ZmJl26dOGuu+7i8ssvp23btpx55pncdtttFdK2a9eO2bNnM3bsWEpKSsjKyirXTG3h\nwoVkZmZSWFhI9+7defbZZ8v679x2222cddZZFBcXs3DhQjIyMti7dy8jRoxg8+bNJCcnc95553HJ\nJZcAVc89lJiYyPz58xk7dixTpkzhO9/5DgsWLKBFi/oJVaymY3g3JDNzTaGcIiIi9WXyhAkE5jzH\nfUUdy5bdnLiTknGXMuPBB2NYMpHmpTZz4EjdiHQN/OVVthlUACQiItIElPYBGlXQgkFFLVmceJDs\npCJWfLC6wlweIlJ/FADFXm0DIPUBEhERaQJSUlJY8cFqSsZdxsx+XSkZd6mCHxGRGlANkIiIiIhI\nlFQDFHuqARIREREREYmSAiARERGJC9H+Kq9f70WaNwVAIiIi0uTt37+fYcOGMW/evErTzZs3j2HD\nhrF///4GKpmINDaaB0hERESatP3795ORkcGiRYtYuHAhACNGjKiQbt68eYwePZqSkhIyMjKYP38+\nrVq1aujiikiMqQZIREREmiznHBdffDGLFi0CoKSkhNGjR1eoCQoOfgAWLVrExRdfrOZwIs2QAiAR\nERFpssyMMWPGEAgcfqQJDYJCgx+AQCDAmDFjqpyhXiSeTJs2jTFjxsS6GDGnAEhERESatBEjRjB3\n7twKQdCoUaM4+qgOjBo1qkLwM3fu3LDN5ETq05YtW1i2bBn5+fn1to/s7Gz69u1L27Zt6dq1Kxdc\ncAHLli0rW1/boH/Tpk0EAoFyn6m6MG7cOHr06EFCQgJPPvlkneYdSgGQiIiINHnhgiDnHNt27yrX\nzE3Bj9QX5xzr169n48aNFdYVFRUxcuwVfOv0ngyddCXHnpDCAw89WOdlmDlzJpmZmdx+++1s3bqV\nzZs3M378eF566aU624dzrlZzIR06dCjs8jPOOIM//elPnHnmmbUpXlQUAImIiEhcKA2CIv3CbWYK\nfqRerFu3jh59etN7YH9OO6sPvQb0YdOmTWXr77t/Bgs2r2L/pl+S/87/o3DVeG793TRycnLK0hQX\nF/Pkk0+ScfllXDvpej766KNqlSE/P5+pU6cye/Zshg8fTuvWrUlISCA9PZ177rmnQvqlS5eSkpJS\nbtmJJ57IG2+8AcDKlSvp27cvycnJdOnShZtuugmAc845B4D27dvTrl27smN49NFH6dmzJx07dmTo\n0KFs3ry5LN9AIMDs2bNJTU0lNTU1bPmvvfZafvSjH9GyZctqHXdNKAASERGRuDFixAg6JbcPu65T\ncnsFP1LnSkpKGHzRMD676mT2bf4lhV/ewtrhx5J+2UVltSR/zX6SwjvOhST/4f6kjhRe24/Hn3ka\n8GpVLrg0g+v+chcLzjUebr+efj/6AYsXL466HMuXL+fAgQNkZGREvU1lzeEmTpzIpEmTyMvLY8OG\nDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJbsGABK1euZO3atVGX\nr74oABIREZG4MW/ePLbn7Q67bnve7irnCRKprvfee48dh/bhrj8LAgFICFCSdQ5ffJXLunXrospj\n6dKlLPv0A/b++//g5/04dMd57Hs4g+t+eWPU5dixYwedOnUq1wy0No444gjWr1/Pjh07OPLII+nX\nr1+59cFN4ObMmcMtt9xCamoqgUCAKVOmsHr1anJzc8vS3HrrrSQnJzdIDU9VFACJiIhIXCgd7S1S\n3wTnXNghskVqo7i4GGvZAoJrU8ywxASKi4sBuGbUFbS+4w0oOOCt37iD1n96h6tGXg7Au+++y4HB\nJ0NiwuE8hvXks/f+G3Vfm44dO7J9+/Y6G5zgkUce4dNPP6VHjx6kpaXx8ssvR0y7adMmJk6cSIcO\nHejQoQMdO3bEzNiyZUtZmuOPP75OylUXFACJiIhIkxduqGszo3P7o8o184k0T5BITfXp04dWecXw\nwoeHFz6xik6t29GzZ08AbrpxMsO79aFV93tp1+/PtO7zEHffMpW0tDQATjnlFFrlbIHgYGfFJo79\nVveoR20bMGAALVu2ZP78+VGlb9OmDfv27St7f+jQIbZt21b2/uSTTyY7O5tt27aRlZXFJZdcQmFh\nYdjydOvWjTlz5rBz50527tzJrl27KCgooH///mVpGtOQ8wqAREREpEmLNM9PdnY2W3ftJDs7u9J5\ngkRqo0WLFrzy/Hw63fg6bc98iLZn/JFj71zOP+a9UPbQn5iYyDOPPMn6D9ey8IEn+d8XuUwcP6Es\nj/T0dFIOJdHyyr/B259D9nscOfpv3Dv1N1GXo127dkybNo3x48ezYMECCgsLKS4u5tVXX2XKlCkV\n0qemprJ//35effVViouLueuuuzh48GDZ+rlz57J9+3YAkpOTMTMCgQCdO3cmEAiwYcOGsrTjxo3j\n7rvvLuvfk5eXx/PPP1+t81hUVMT+/ftxznHw4EEOHDhQfxMVO+ca/csrpoiIiEh5JSUlLj093QFl\nr0Ag4J555ply6Z555hkXCATKpUtPT3clJSUxKrk0VZGeSw8ePOiWLl3q/vOf/7ji4uJq57t7926X\nddsUd0qfXu4HQwe5l19+uUbly87Odn369HFJSUmuS5cubtiwYW758uXOOefuuOMON2bMmLK0Tzzx\nhOvSpYs75phj3IwZM9yJJ57oFi9e7Jxz7vLLL3dHH320a9u2rTvttNPcSy+9VLbd1KlTXefOnd1R\nRx3lcnJynHPOPf30065Xr14uOTnZdevWzY0dO7YsfSAQcBs2bKi03AMHDnRm5gKBQNlr6dKlYdNG\nugb+8ipjC3P1FVnVITNzTaGcIiIi0vD2799PRkYGixYtqnSen+CaoiFDhjB//nxatWoVgxJLU1ab\nOXCkbkS6Bv7yKtvaKQASERGRJm///v1cfPHFjBkzptKhrufNm8dTTz3FCy+8oOBHakQBUOwpABIR\nERHh8Az1dZVOJBwFQLFX2wBIgyCIiIhIXIg2qFHwI9K8KQASEREREZFmQwGQiIiIiIg0GwqARERE\nRESk2VAAJCIiIiIizYYCIBERERERaTYUAImIiIiINAPTpk1jzJgxsS5GzCkAEhERiWO5ublMnjCB\nwf0GMHnCBHJzc2NdJJFma8uWLSxbtoz8/Px620d2djZ9+/albdu2dO3alQsuuIBly5aVra/tMPCb\nNm0iEAhQUlJS26KW+eyzz8jIyODoo4+mU6dODB06lHXr1tVZ/qEUAImIiMSp3Nxc+vc+g8Cc58hc\nuYXAnOfo3/sMBUEi9cA5x/r169m4cWOFdUVFRYwdeRWnf+s0Jg39BScc242HHvhjnZdh5syZZGZm\ncvvtt7N161Y2b97M+PHjeemll+psH6UTCdd0MthDhw5VWLZ7926GDx/OunXr+Oabb+jbty/Dhw+v\nbVEjUgAkIiISp2ZNn86oghbcV9SR80nivqKOjCpIZNb06bEumkhcWbduHX16fJeBvX/AWaelMaBX\nPzZt2lS2/v77ZrJ5wVo27c/mnfw/sqpwNr+79S5ycnLK0hQXF/Pkk09yecZIJl17Ax999FG1ypCf\nn8/UqVOZPXs2w4cPp3Xr1iQkJJCens4999xTIf3SpUtJSUkpt+zEE0/kjTfeAGDlypX07duX5ORk\nunTpwk033QTAOeecA0D79u1p165d2TE8+uij9OzZk44dOzJ06FA2b95clm8gEGD27NmkpqaSmppa\noSx9+/bl6quvpn379iQkJHDjjTfy6aefsmvXrmqdg2gpABIREYlTa3JWMaioZbllg4qOYM07q2JU\nIpH4U1JSwkWDL+Sqz37I5n3ZfFk4j+Frz+Cy9IvLakmy//o0dxSOIYnWAJzEcVxbOIxnHp8LeLUq\nl17wU/5y3UzOXZBC+4fz+VG/H7J48eKoy7F8+XIOHDhARkZG1NtU1hxu4sSJTJo0iby8PDZs2MBl\nl10GwJtvvgl4AVd+fj5paWksWLCAe+65h/nz57Nt2zbOPvtsRo4cWS6/BQsWsHLlStauXVtluZYu\nXUqXLl046qijoj6W6lAAJCIiEqd6pfVhceKBcssWJx6kV78+MSqRSPx57733OLTjANe7iwgQIIEE\nskpG8NUXW6Lux7J06VI+XfYR/977e35OOnccuoqH993IL6+7Kepy7Nixg06dOhEI1M3j/RFHHMH6\n9evZsWMHRx55JP369Su3PrgJ3Jw5c7jllltITU0lEAgwZcoUVq9eXa657a233kpycjItW5b/USbU\nl19+yfXXX8/9999fJ8cRjgIgERGRODUpK4vspGJuTtzBQgq4OXEn2UlFTMrKinXRROJGcXExLe0I\njMO1KYaRaC0oLi4GYNQ1l3NH66cooBCAjXzFn1r/k5FXjQbg3XffZfCB75FIi7I8hjGA9z77IOq+\nNh07dmT79u11NjjBI488wqeffkqPHj1IS0vj5Zdfjph206ZNTJw4kQ4dOtChQwc6duyImbFly5ay\nNMcff3yV+9y2bRtDhgzh+uuvL6txqg8KgEREROJUSkoKKz5YTcm4y5jZrysl4y5lxQerK7T7F5Ga\n69OnD3mtCnmBpWXLnmARrTu1oWfPngDceFMm3Yb3pHurUfRrdz19Wl/HLXffTlpaGgCnnHIKOa0+\nxXE42FnBWr517IlRj9o2YMAAWrZsyfz586NK36ZNG/bt21f2/tChQ2zbtq3s/cknn0x2djbbtm0j\nKyuLSy65hMLCwrDl6datG3PmzGHnzp3s3LmTXbt2UVBQQP/+/cvSVHUcu3fvZsiQIWRkZDBlypSo\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the results of the clustering from implementation\n", "rs.cluster_results(reduced_data, preds, centers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's okayish." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Recovery\n", "Each cluster present in the visualization above has a central point. These centers (or means) are not specifically data points from the data, but rather the *averages* of all the data points predicted in the respective clusters. For the problem of creating customer segments, a cluster's center point corresponds to *the average customer of that segment*. Since the data is currently reduced in dimension and scaled by a logarithm, we can recover the representative customer spending from these data points by applying the inverse transformations.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Apply the inverse transform to `centers` using `pca.inverse_transform` and assign the new centers to `log_centers`.\n", " - Apply the inverse function of `np.log` to `log_centers` using `np.exp` and assign the true centers to `true_centers`.\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
Segment 06055.06542.09557.01354.02830.01185.0
Segment 19806.01925.02355.02216.0286.0721.0
Segment 22432.02244.03455.0778.0608.0348.0
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "Segment 0 6055.0 6542.0 9557.0 1354.0 2830.0 1185.0\n", "Segment 1 9806.0 1925.0 2355.0 2216.0 286.0 721.0\n", "Segment 2 2432.0 2244.0 3455.0 778.0 608.0 348.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Inverse transform the centers\n", "log_centers = pca.inverse_transform(centers)\n", "\n", "# TODO: Exponentiate the centers\n", "true_centers = np.exp(log_centers)\n", "\n", "# Display the true centers\n", "segments = ['Segment {}'.format(i) for i in range(0,len(centers))]\n", "true_centers = pd.DataFrame(np.round(true_centers), columns = data.keys())\n", "true_centers.index = segments\n", "display(true_centers)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 8\n", "Consider the total purchase cost of each product category for the representative data points above, and reference the statistical description of the dataset at the beginning of this project. *What set of establishments could each of the customer segments represent?* \n", "**Hint:** A customer who is assigned to `'Cluster X'` should best identify with the establishments represented by the feature set of `'Segment X'`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Segment 0 could represent supermarkets.\n", " - Their spendings for all categories except Frozen are above the median.\n", "- Segment 1 could represent a fresh food market.\n", " - Their spending for Fresh and Frozen are above the median, but their spending for Grocery, Milk and Detergents_Paper are below the median as those are often kept in fridges or placed in boxes on shelves. Delicatessen spending is also below the median - that is often fancier stuff that isn't found in street markets.\n", " - Frozen products are often sold in markets placed in big boxes lined with ice cubes.\n", "- Segment 2 could represent a corner store.\n", " - Their spending on Fresh and Delicatessen are in the bottom quartile.\n", " - Their spending on Detergents_Paper, Frozen, Grocery and Milk are below the median." ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
count440.000000440.000000440.000000440.000000440.000000440.000000
mean12000.2977275796.2659097951.2772733071.9318182881.4931821524.870455
std12647.3288657380.3771759503.1628294854.6733334767.8544482820.105937
min3.00000055.0000003.00000025.0000003.0000003.000000
25%3127.7500001533.0000002153.000000742.250000256.750000408.250000
50%8504.0000003627.0000004755.5000001526.000000816.500000965.500000
75%16933.7500007190.25000010655.7500003554.2500003922.0000001820.250000
max112151.00000073498.00000092780.00000060869.00000040827.00000047943.000000
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen \\\n", "count 440.000000 440.000000 440.000000 440.000000 \n", "mean 12000.297727 5796.265909 7951.277273 3071.931818 \n", "std 12647.328865 7380.377175 9503.162829 4854.673333 \n", "min 3.000000 55.000000 3.000000 25.000000 \n", "25% 3127.750000 1533.000000 2153.000000 742.250000 \n", "50% 8504.000000 3627.000000 4755.500000 1526.000000 \n", "75% 16933.750000 7190.250000 10655.750000 3554.250000 \n", "max 112151.000000 73498.000000 92780.000000 60869.000000 \n", "\n", " Detergents_Paper Delicatessen \n", "count 440.000000 440.000000 \n", "mean 2881.493182 1524.870455 \n", "std 4767.854448 2820.105937 \n", "min 3.000000 3.000000 \n", "25% 256.750000 408.250000 \n", "50% 816.500000 965.500000 \n", "75% 3922.000000 1820.250000 \n", "max 40827.000000 47943.000000 " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 9\n", "*For each sample point, which customer segment from* ***Question 8*** *best represents it? Are the predictions for each sample point consistent with this?*\n", "\n", "Run the code block below to find which cluster each sample point is predicted to be." ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sample point 0 predicted to be in Cluster 0\n", "Sample point 1 predicted to be in Cluster 0\n", "Sample point 2 predicted to be in Cluster 2\n" ] } ], "source": [ "# Display the predictions\n", "for i, pred in enumerate(sample_preds):\n", " print(\"Sample point\", i, \"predicted to be in Cluster\", pred)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "**Answer:**\n", "1. Sample point 0: Supermarket\n", " - Original guess: Retailer <- I'm surprised it was put in the same category as Sample point 1. I thought it was quite different. The clusters are large though, which may explain both being in the same cluster.\n", "2. Sample point 1: Supermarket\n", " - Original guess: Market <- The same!\n", "3. Sample point 2: Corner store\n", " - Original guess: Restaurant. <- Reasonable: I was going for something relatively small. This is in line with the things grouped under Cluster 2 in the visualisation." ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
01611746197927801026408272944
111215129627181481674549488550
2333370211560115550
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 16117 46197 92780 1026 40827 2944\n", "1 112151 29627 18148 16745 4948 8550\n", "2 3 333 7021 15601 15 550" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this final section, you will investigate ways that you can make use of the clustered data. First, you will consider how the different groups of customers, the ***customer segments***, may be affected differently by a specific delivery scheme. Next, you will consider how giving a label to each customer (which *segment* that customer belongs to) can provide for additional features about the customer data. Finally, you will compare the ***customer segments*** to a hidden variable present in the data, to see whether the clustering identified certain relationships." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Question 10\n", "Companies will often run [A/B tests](https://en.wikipedia.org/wiki/A/B_testing) when making small changes to their products or services to determine whether making that change will affect its customers positively or negatively. The wholesale distributor is considering changing its delivery service from currently 5 days a week to 3 days a week. However, the distributor will only make this change in delivery service for customers that react positively. *How can the wholesale distributor use the customer segments to determine which customers, if any, would react positively to the change in delivery service?* \n", "**Hint:** Can we assume the change affects all customers equally? How can we determine which group of customers it affects the most?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "- Make this change in delivery service for 10% of the customers in each cluster (select this 10% randomly) for e.g. 2 weeks. Mark these customers as customers in Cluster 0', 1' and 2' respectively.\n", " - Make sure there are a statistically significant number of customers in each cluster i'.\n", "- Note down whether these customers react positively or negatively (this can be a +1 or -1 value, or some value from -1 to +1, with -1 meaning they reacted strongly negatively and +1 meaning they reacted strongly positively).\n", "- Take the mean of the values assigned for each cluster 0', 1' and 2'. \n", "- If the mean value for a cluster is positive, then the distributor can consider making the change in delivery service for more customers in that segment. \n", " - This inference assumes that customers in that segment may behave similarly.\n", "- By testing on a smaller group of customers first, the distributor can test their hypotheses without risking making a lot of customers angry (if they react negatively)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 11\n", "Additional structure is derived from originally unlabeled data when using clustering techniques. Since each customer has a ***customer segment*** it best identifies with (depending on the clustering algorithm applied), we can consider *'customer segment'* as an **engineered feature** for the data. Assume the wholesale distributor recently acquired ten new customers and each provided estimates for anticipated annual spending of each product category. Knowing these estimates, the wholesale distributor wants to classify each new customer to a ***customer segment*** to determine the most appropriate delivery service. \n", "*How can the wholesale distributor label the new customers using only their estimated product spending and the* ***customer segment*** *data?* \n", "**Hint:** A supervised learner could be used to train on the original customers. What would be the target variable?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- Use a supervised learning algorithm with the **estimated product spending as features (6 features) and customer segment as the target variable**.\n", " - This would be a **classification problem** because the target variable has finitely many discrete labels (3). \n", " - **K Nearest Neighbours** might be a good choice of algorithm because there is no obvious underlying mathematical relationship between the customer segment and product spending.\n", "- The training and test sets would come from existing customers with those labels assigned." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualizing Underlying Distributions\n", "\n", "At the beginning of this project, it was discussed that the `'Channel'` and `'Region'` features would be excluded from the dataset so that the customer product categories were emphasized in the analysis. By reintroducing the `'Channel'` feature to the dataset, an interesting structure emerges when considering the same PCA dimensionality reduction applied earlier to the original dataset.\n", "\n", "Run the code block below to see how each data point is labeled either `'HoReCa'` (Hotel/Restaurant/Cafe) or `'Retail'` the reduced space. In addition, you will find the sample points are circled in the plot, which will identify their labeling." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\nWbFCa5/t0ypFR9q2qV8bKhbosc5nAqwMAFDMWAgVAALy85//XJdccokGBt4blD9//nytXLlS0WhU\nL7/8stra2nTgh537779f77zzjh588EHNmjVLbW0/Gwk/fX19mj9/vsxM8+efrr6+14J4SJMSryxX\nW88Orcq8F4CYkAAAkC/oAQKAabR3716dddZZeuuttyRJp5xyilpaWnT11VcrEomMbLdz507dcsst\nuvfee0favvnNb+rSSy/V8uXLJUmx2Dl63/tO0OBgRv/5n8/p2muv1913/++ZfUDH4NAxQNkJCViU\nFACQQ5wCBwABuOOOO9TQ0CBJOumkk9TR0THuZAfurptuukkbNmyQJH34wx/W22+/o3ffPUvSedmt\nSiSVqrT0ad155036/Oc/n/sHMQ2YkAAAMNMIQAAww9xd55xzjl555RVJ0l133aXrrrtO0vjTQmcy\nGZ155pnq6+uTJF199TWKRk+QNPb9u7S0ROvW/bVOO+20GX1MAAAUCgIQAMyw3t7ekZnaPvCBD2jX\nrl2KRqNHnRb61ltv1bp16yRJV111lR566KEgHwYAAAVpogGoZCaKAYAw2LVr18jliooKRaPDkwC0\nJJOq7S9Vc6ZMqxRVc6ZMtf0RtSSTkqRPfepTI7d78803Z7ZoAABChgAEANNk//79I5dnz549cjnV\n2a2azJwx29ZkZivV1S1JY6a/HhwczHGVAACEGwEIAKZJWdl7C38+//zzI4EoXlmutsjAmG1HTwv9\n3HPPHXYfAABg+hGAAGCaLF++XCeeeKKk4fV7HnnkEUlSQyKh1uigmiK7tU39aorsUWs0o4ZEQu6u\nTZs2jezjkksuCaR2AADCggAEANNkzpw5+tznPjdy/Wtf+5p+//vfKxaLqaO3R0N1a7ShYoGG6laP\nTIDQ2tqqnp4eSdLxxx+vz372s0GVDwBAKDALHABMo507d2rRokUjY3kuvPBCfe973ztk+ur9+/fr\nnnvu0fXXX699+/ZJkq699lrdfffdM14zAADFgGmwASAgd955p2644YaR67NmzdKVV16pyy+/XNFo\nVC+//LI2b96s1157bWSbs88+W7/4xS80b968ACoGAKDwEYAAIEC33367mpqaJrTtueeeq0cffZRF\nTgEAmALWAQKAAN1000366U9/qurq6nG3mTdvnhKJhJ5++mnCDwAAM4QeIADIsRdffFFbtmzRG2+8\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the clustering results based on 'Channel' data\n", "rs.channel_results(reduced_data, outliers, pca_samples)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\nk+6d7Zy7CsAfTSc/lmUSERGgdoM/SAyZWS7egASVDTYgItJsxbQJnJn1xps9ey3QG68z8kTnXGGl\nG4qIiIiIiNRArAOgM4EVeLO0rzJv8rg859zUkHT6JVJERERERCrlnKuyCXesR4H7Esh1zq3y3z9P\nhKE/nXN61cNr6tSpMS9DvL50bnVem9pL51bntim+dG51bpvaS+e1/l7RimkA5LzZoHNLx/rHm2Nh\nbQyLJCIiIiIicawxjAJ3A96M2Yl4801cHePyiIiIiIhInIp5AOSc+wDoG+tyNFcDBw6MdRHils5t\n/dB5rT86t/VH57b+6NzWH53b+qHzGnsxnwg1GmbmmkI5RUREREQkNswMF8UgCDGvARIRERERaSpO\nOOEENm3SHMOx1L17d7744osab68aIBERERGRKPm1DLEuRrMW6RpEWwMU62GwRUREREREGowCIBER\nERERaTYUAImIiIiISLOhAEhERERERJoNBUAiIiIiIs3AtGnTGDNmTKyLEXMKgEREREREGsCWLVtY\ntmwZ+fn59baP7Oxs+vbtS9u2benatSsXXHABy5YtK1tvVuUgaZXatGkTgUCAkpKS2ha1nNWrV9On\nTx/atGlD3759+eCDD+o0/2AKgEREREREask5x/r169m4cWOFdUVFRYwdOZrTv3UKk4ZmcMKxXXjo\ngQfqvAwzZ84kMzOT22+/na1bt7J582bGjx/PSy+9VGf7cM7VaijwQ4cOVVhWVFRERkYGV1xxBbt3\n7+aKK65g+PDhFBcX17a4YSkAEhERERGphXXr1tGnR08G9v4eZ53WmwG9epebLPX+++5j84JFbNrf\njXfyO7GqsAu/u/VX5OTklKUpLi7mySef5PKMnzLp2uv46KOPqlWG/Px8pk6dyuzZsxk+fDitW7cm\nISGB9PR07rnnngrply5dSkpKSrllJ554Im+88QYAK1eupG/fviQnJ9OlSxduuukmAM455xwA2rdv\nT7t27cqO4dFHH6Vnz5507NiRoUOHsnnz5rJ8A4EAs2fPJjU1ldTU1AplWbJkCYcOHeKGG24gMTGR\nCRMm4JwrK0tdUwAkIiIiIlJDJSUlXDT4fK76LI/N+7ryZeHxDF/7DZelDyurJcn+66PcUZhEkv/o\nfRJHcG1ha555/AnAq1W59IJh/OW6Gzl3wQraP/x3ftSvP4sXL466HMuXL+fAgQNkZGREvU1lzeEm\n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\nbtmJJ57IG2+8AcDKlSvp27cvycnJdOnShZtuugmAc845B4D27dvTrl27smN49NFH6dmzJx07dmTo\n0KFs3ry5LN9AIMDs2bNJTU0lNTU1bPmvvfZafvSjH9GyZctqHXdNKAASERGRuDFixAg6JbcPu65T\ncnsFP1LnSkpKGHzRMD676mT2bf4lhV/ewtrhx5J+2UVltSR/zX6SwjvOhST/4f6kjhRe24/Hn3ka\n8GpVLrg0g+v+chcLzjUebr+efj/6AYsXL466HMuXL+fAgQNkZGREvU1lzeEmTpzIpEmTyMvLY8OG\nDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJbsGABK1euZO3atVGX\nr74oABIREZG4MW/ePLbn7Q67bnve7irnCRKprvfee48dh/bhrj8LAgFICFCSdQ5ffJXLunXrospj\n6dKlLPv0A/b++//g5/04dMd57Hs4g+t+eWPU5dixYwedOnUq1wy0No444gjWr1/Pjh07OPLII+nX\nr1+59cFN4ObMmcMtt9xCamoqgUCAKVOmsHr1anJzc8vS3HrrrSQnJzdIDU9VFACJiIhIXCgd7S1S\n3wTnXNghskVqo7i4GGvZAoJrU8ywxASKi4sBuGbUFbS+4w0oOOCt37iD1n96h6tGXg7Au+++y4HB\nJ0NiwuE8hvXks/f+G3Vfm44dO7J9+/Y6G5zgkUce4dNPP6VHjx6kpaXx8ssvR0y7adMmJk6cSIcO\nHejQoQMdO3bEzNiyZUtZmuOPP75OylUXFACJiIhIkxduqGszo3P7o8o184k0T5BITfXp04dWecXw\nwoeHFz6xik6t29GzZ08AbrpxMsO79aFV93tp1+/PtO7zEHffMpW0tDQATjnlFFrlbIHgYGfFJo79\nVveoR20bMGAALVu2ZP78+VGlb9OmDfv27St7f+jQIbZt21b2/uSTTyY7O5tt27aRlZXFJZdcQmFh\nYdjydOvWjTlz5rBz50527tzJrl27KCgooH///mVpGtOQ8wqAREREpEmLNM9PdnY2W3ftJDs7u9J5\ngkRqo0WLFrzy/Hw63fg6bc98iLZn/JFj71zOP+a9UPbQn5iYyDOPPMn6D9ey8IEn+d8XuUwcP6Es\nj/T0dFIOJdHyyr/B259D9nscOfpv3Dv1N1GXo127dkybNo3x48ezYMECCgsLKS4u5tVXX2XKlCkV\n0qemprJ//35effVViouLueuuuzh48GDZ+rlz57J9+3YAkpOTMTMCgQCdO3cmEAiwYcOGsrTjxo3j\n7rvvLuvfk5eXx/PPP1+t81hUVMT+/ftxznHw4EEOHDhQfxMVO+ca/csrpoiIiEh5JSUlLj093QFl\nr0Ag4J555ply6Z555hkXCATKpUtPT3clJSUxKrk0VZGeSw8ePOiWLl3q/vOf/7ji4uJq57t7926X\nddsUd0qfXu4HQwe5l19+uUbly87Odn369HFJSUmuS5cubtiwYW758uXOOefuuOMON2bMmLK0Tzzx\nhOvSpYs75phj3IwZM9yJJ57oFi9e7Jxz7vLLL3dHH320a9u2rTvttNPcSy+9VLbd1KlTXefOnd1R\nRx3lcnJynHPOPf30065Xr14uOTnZdevWzY0dO7YsfSAQcBs2bKi03AMHDnRm5gKBQNlr6dKlYdNG\nugb+8ipjC3P1FVnVITNzTaGcIiIi0vD2799PRkYGixYtqnSen+CaoiFDhjB//nxatWoVgxJLU1ab\nOXCkbkS6Bv7yKtvaKQASERGRJm///v1cfPHFjBkzptKhrufNm8dTTz3FCy+8oOBHakQBUOwpABIR\nERHh8Az1dZVOJBwFQLFX2wBIgyCIiIhIXIg2qFHwI9K8KQASEREREZFmQwGQiIiIiIg0GwqARERE\nRESk2VAAJCIiIiIizYYCIBERERERaTYUAImIiIiINAPTpk1jzJgxsS5GzCkAEhERiWO5ublMnjCB\nwf0GMHnCBHJzc2NdJJFma8uWLSxbtoz8/Px620d2djZ9+/albdu2dO3alQsuuIBly5aVra/tMPCb\nNm0iEAhQUlJS26KW+eyzz8jIyODoo4+mU6dODB06lHXr1tVZ/qEUAImIiMSp3Nxc+vc+g8Cc58hc\nuYXAnOfo3/sMBUEi9cA5x/r169m4cWOFdUVFRYwdeRWnf+s0Jg39BScc242HHvhjnZdh5syZZGZm\ncvvtt7N161Y2b97M+PHjeemll+psH6UTCdd0MthDhw5VWLZ7926GDx/OunXr+Oabb+jbty/Dhw+v\nbVEjUgAkIiISp2ZNn86oghbcV9SR80nivqKOjCpIZNb06bEumkhcWbduHX16fJeBvX/AWaelMaBX\nPzZt2lS2/v77ZrJ5wVo27c/mnfw/sqpwNr+79S5ycnLK0hQXF/Pkk09yecZIJl17Ax999FG1ypCf\nn8/UqVOZPXs2w4cPp3Xr1iQkJJCens4999xTIf3SpUtJSUkpt+zEE0/kjTfeAGDlypX07duX5ORk\nunTpwk033QTAOeecA0D79u1p165d2TE8+uij9OzZk44dOzJ06FA2b95clm8gEGD27NmkpqaSmppa\noSx9+/bl6quvpn379iQkJHDjjTfy6aefsmvXrmqdg2gpABIREYlTa3JWMaioZbllg4qOYM07q2JU\nIpH4U1JSwkWDL+Sqz37I5n3ZfFk4j+Frz+Cy9IvLakmy//o0dxSOIYnWAJzEcVxbOIxnHp8LeLUq\nl17wU/5y3UzOXZBC+4fz+VG/H7J48eKoy7F8+XIOHDhARkZG1NtU1hxu4sSJTJo0iby8PDZs2MBl\nl10GwJtvvgl4AVd+fj5paWksWLCAe+65h/nz57Nt2zbOPvtsRo4cWS6/BQsWsHLlStauXVtluZYu\nXUqXLl046qijoj6W6lAAJCIiEqd6pfVhceKBcssWJx6kV78+MSqRSPx57733OLTjANe7iwgQIIEE\nskpG8NUXW6Lux7J06VI+XfYR/977e35OOnccuoqH993IL6+7Kepy7Nixg06dOhEI1M3j/RFHHMH6\n9evZsWMHRx55JP369Su3PrgJ3Jw5c7jllltITU0lEAgwZcoUVq9eXa657a233kpycjItW5b/USbU\nl19+yfXXX8/9999fJ8cRjgIgERGRODUpK4vspGJuTtzBQgq4OXEn2UlFTMrKinXRROJGcXExLe0I\njMO1KYaRaC0oLi4GYNQ1l3NH66cooBCAjXzFn1r/k5FXjQbg3XffZfCB75FIi7I8hjGA9z77IOq+\nNh07dmT79u11NjjBI488wqeffkqPHj1IS0vj5Zdfjph206ZNTJw4kQ4dOtChQwc6duyImbFly5ay\nNMcff3yV+9y2bRtDhgzh+uuvL6txqg8KgEREROJUSkoKKz5YTcm4y5jZrysl4y5lxQerK7T7F5Ga\n69OnD3mtCnmBpWXLnmARrTu1oWfPngDceFMm3Yb3pHurUfRrdz19Wl/HLXffTlpaGgCnnHIKOa0+\nxXE42FnBWr517IlRj9o2YMAAWrZsyfz586NK36ZNG/bt21f2/tChQ2zbtq3s/cknn0x2djbbtm0j\nKyuLSy65hMLCwrDl6datG3PmzGHnzp3s3LmTXbt2UVBQQP/+/cvSVHUcu3fvZsiQIWRkZDBlypSo\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Clustering plot\n", "\n", "rs.cluster_results(reduced_data, preds, centers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 12\n", "*How well does the clustering algorithm and number of clusters you've chosen compare to this underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers? Are there customer segments that would be classified as purely 'Retailers' or 'Hotels/Restaurants/Cafes' by this distribution? Would you consider these classifications as consistent with your previous definition of the customer segments?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- The previous clustering does a moderately good job of clustering the data above the (Dimension 2 > -2) line, with Retailer corresponding to Cluster 0 and Hotel/Restaurant/Cafe corresponding to Cluster 1. Below the (Dimension 2 > -2) line, however, the previous clustering does not distinguish between the Ho/Re/Ca and Retailer, instead grouping them together in one different cluster.\n", "- The customer segment 0 would be classified almost entirely as Retailer and the customer segment 1 would be classified almost entirely as Ho/Re/Ca by this distribution.\n", "- These classifications are consistent with previous definitions of the customer segments to some extent. \n", " - Some sentiments are the same, e.g. \n", " - The exact labels (e.g. 'Retailer') used are not the same, but that's because I had a different understanding of 'Retailers' before seeing this distribution. It's good to have a data-based (i.e. example-based) definition of the word to make sure everyone is on the same page. :D\n", "\n", "- This is a positive result, because this means that customers in Ho/Re/Ca have similar spending patterns to some extent, and likewise with Retailers.\n", "\n", "- It looks possible to have clustered the data into two clusters that are similar to the channels provided. The only points that would've been harder to classify 'correctly' would be the mix of red points invading the bottom right territory of the green points." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p3-creating-customer-segments/README.md ================================================ # Project 3: Unsupervised Learning ## Creating Customer Segments ### Install This project requires **Python 2.7** and the following Python libraries installed: - [NumPy](http://www.numpy.org/) - [Pandas](http://pandas.pydata.org) - [matplotlib](http://matplotlib.org/) - [scikit-learn](http://scikit-learn.org/stable/) You will also need to have software installed to run and execute an [iPython Notebook](http://ipython.org/notebook.html) Udacity recommends our students install [Anaconda](https://www.continuum.io/downloads), a pre-packaged Python distribution that contains all of the necessary libraries and software for this project. ### Code Template code is provided in the notebook `customer_segments.ipynb` notebook file. Additional supporting code can be found in `renders.py`. While some code has already been implemented to get you started, you will need to implement additional functionality when requested to successfully complete the project. ### Run In a terminal or command window, navigate to the top-level project directory `creating_customer_segments/` (that contains this README) and run one of the following commands: ```ipython notebook customer_segments.ipynb``` ```jupyter notebook customer_segments.ipynb``` This will open the iPython Notebook software and project file in your browser. ## Data The dataset used in this project is included as `customers.csv`. You can find more information on this dataset on the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Wholesale+customers) page. ================================================ FILE: p3-creating-customer-segments/archive/customer_segments_python2.7.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Unsupervised Learning\n", "## Project 3: Creating Customer Segments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the third project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", "\n", "In this project, you will analyze a dataset containing data on various customers' annual spending amounts (reported in *monetary units*) of diverse product categories for internal structure. One goal of this project is to best describe the variation in the different types of customers that a wholesale distributor interacts with. Doing so would equip the distributor with insight into how to best structure their delivery service to meet the needs of each customer.\n", "\n", "The dataset for this project can be found on the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Wholesale+customers). For the purposes of this project, the features `'Channel'` and `'Region'` will be excluded in the analysis — with focus instead on the six product categories recorded for customers.\n", "\n", "Run the code block below to load the wholesale customers dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import libraries necessary for this project\n", "import numpy as np\n", "import pandas as pd\n", "import renders as rs\n", "from IPython.display import display # Allows the use of display() for DataFrames\n", "\n", "# Show matplotlib plots inline (nicely formatted in the notebook)\n", "%matplotlib inline\n", "\n", "# Load the wholesale customers dataset\n", "try:\n", " data = pd.read_csv(\"customers.csv\")\n", " data.drop(['Region', 'Channel'], axis = 1, inplace = True)\n", " print \"Wholesale customers dataset has {} samples with {} features each.\".format(*data.shape)\n", "except:\n", " print \"Dataset could not be loaded. Is the dataset missing?\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "In this section, you will begin exploring the data through visualizations and code to understand how each feature is related to the others. You will observe a statistical description of the dataset, consider the relevance of each feature, and select a few sample data points from the dataset which you will track through the course of this project.\n", "\n", "Run the code block below to observe a statistical description of the dataset. Note that the dataset is composed of six important product categories: **'Fresh'**, **'Milk'**, **'Grocery'**, **'Frozen'**, **'Detergents_Paper'**, and **'Delicatessen'**. Consider what each category represents in terms of products you could purchase." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display a description of the dataset\n", "display(data.describe())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Selecting Samples\n", "To get a better understanding of the customers and how their data will transform through the analysis, it would be best to select a few sample data points and explore them in more detail. In the code block below, add **three** indices of your choice to the `indices` list which will represent the customers to track. It is suggested to try different sets of samples until you obtain customers that vary significantly from one another." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Select three indices of your choice you wish to sample from the dataset\n", "indices = []\n", "\n", "# Create a DataFrame of the chosen samples\n", "samples = pd.DataFrame(data.loc[indices], columns = data.keys()).reset_index(drop = True)\n", "print \"Chosen samples of wholesale customers dataset:\"\n", "display(samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "Consider the total purchase cost of each product category and the statistical description of the dataset above for your sample customers. \n", "*What kind of establishment (customer) could each of the three samples you've chosen represent?* \n", "**Hint:** Examples of establishments include places like markets, cafes, and retailers, among many others. Avoid using names for establishments, such as saying *\"McDonalds\"* when describing a sample customer as a restaurant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Relevance\n", "One interesting thought to consider is if one (or more) of the six product categories is actually relevant for understanding customer purchasing. That is to say, is it possible to determine whether customers purchasing some amount of one category of products will necessarily purchase some proportional amount of another category of products? We can make this determination quite easily by training a supervised regression learner on a subset of the data with one feature removed, and then score how well that model can predict the removed feature.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign `new_data` a copy of the data by removing a feature of your choice using the `DataFrame.drop` function.\n", " - Use `sklearn.cross_validation.train_test_split` to split the dataset into training and testing sets.\n", " - Use the removed feature as your target label. Set a `test_size` of `0.25` and set a `random_state`.\n", " - Import a decision tree regressor, set a `random_state`, and fit the learner to the training data.\n", " - Report the prediction score of the testing set using the regressor's `score` function." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature\n", "new_data = None\n", "\n", "# TODO: Split the data into training and testing sets using the given feature as the target\n", "X_train, X_test, y_train, y_test = (None, None, None, None)\n", "\n", "# TODO: Create a decision tree regressor and fit it to the training set\n", "regressor = None\n", "\n", "# TODO: Report the score of the prediction using the testing set\n", "score = None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "*Which feature did you attempt to predict? What was the reported prediction score? Is this feature is necessary for identifying customers' spending habits?* \n", "**Hint:** The coefficient of determination, `R^2`, is scored between 0 and 1, with 1 being a perfect fit. A negative `R^2` implies the model fails to fit the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize Feature Distributions\n", "To get a better understanding of the dataset, we can construct a scatter matrix of each of the six product features present in the data. If you found that the feature you attempted to predict above is relevant for identifying a specific customer, then the scatter matrix below may not show any correlation between that feature and the others. Conversely, if you believe that feature is not relevant for identifying a specific customer, the scatter matrix might show a correlation between that feature and another feature in the data. Run the code block below to produce a scatter matrix." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Produce a scatter matrix for each pair of features in the data\n", "pd.scatter_matrix(data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "*Are there any pairs of features which exhibit some degree of correlation? Does this confirm or deny your suspicions about the relevance of the feature you attempted to predict? How is the data for those features distributed?* \n", "**Hint:** Is the data normally distributed? Where do most of the data points lie? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Preprocessing\n", "In this section, you will preprocess the data to create a better representation of customers by performing a scaling on the data and detecting (and optionally removing) outliers. Preprocessing data is often times a critical step in assuring that results you obtain from your analysis are significant and meaningful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Scaling\n", "If data is not normally distributed, especially if the mean and median vary significantly (indicating a large skew), it is most [often appropriate](http://econbrowser.com/archives/2014/02/use-of-logarithms-in-economics) to apply a non-linear scaling — particularly for financial data. One way to achieve this scaling is by using a [Box-Cox test](http://scipy.github.io/devdocs/generated/scipy.stats.boxcox.html), which calculates the best power transformation of the data that reduces skewness. A simpler approach which can work in most cases would be applying the natural logarithm.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign a copy of the data to `log_data` after applying a logarithm scaling. Use the `np.log` function for this.\n", " - Assign a copy of the sample data to `log_samples` after applying a logrithm scaling. Again, use `np.log`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Scale the data using the natural logarithm\n", "log_data = None\n", "\n", "# TODO: Scale the sample data using the natural logarithm\n", "log_samples = None\n", "\n", "# Produce a scatter matrix for each pair of newly-transformed features\n", "pd.scatter_matrix(log_data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "After applying a natural logarithm scaling to the data, the distribution of each feature should appear much more normal. For any pairs of features you may have identified earlier as being correlated, observe here whether that correlation is still present (and whether it is now stronger or weaker than before).\n", "\n", "Run the code below to see how the sample data has changed after having the natural logarithm applied to it." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display the log-transformed sample data\n", "display(log_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Outlier Detection\n", "Detecting outliers in the data is extremely important in the data preprocessing step of any analysis. The presence of outliers can often skew results which take into consideration these data points. There are many \"rules of thumb\" for what constitutes an outlier in a dataset. Here, we will use [Tukey's Method for identfying outliers](http://datapigtechnologies.com/blog/index.php/highlighting-outliers-in-your-data-with-the-tukey-method/): An *outlier step* is calculated as 1.5 times the interquartile range (IQR). A data point with a feature that is beyond an outlier step outside of the IQR for that feature is considered abnormal.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the value of the 25th percentile for the given feature to `Q1`. Use `np.percentile` for this.\n", " - Assign the value of the 75th percentile for the given feature to `Q3`. Again, use `np.percentile`.\n", " - Assign the calculation of an outlier step for the given feature to `step`.\n", " - Optionally remove data points from the dataset by adding indices to the `outliers` list.\n", "\n", "**NOTE:** If you choose to remove any outliers, ensure that the sample data does not contain any of these points! \n", "Once you have performed this implementation, the dataset will be stored in the variable `good_data`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# For each feature find the data points with extreme high or low values\n", "for feature in log_data.keys():\n", " \n", " # TODO: Calculate Q1 (25th percentile of the data) for the given feature\n", " Q1 = None\n", " \n", " # TODO: Calculate Q3 (75th percentile of the data) for the given feature\n", " Q3 = None\n", " \n", " # TODO: Use the interquartile range to calculate an outlier step (1.5 times the interquartile range)\n", " step = None\n", " \n", " # Display the outliers\n", " print \"Data points considered outliers for the feature '{}':\".format(feature)\n", " display(log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))])\n", " \n", "# OPTIONAL: Select the indices for data points you wish to remove\n", "outliers = []\n", "\n", "# Remove the outliers, if any were specified\n", "good_data = log_data.drop(log_data.index[outliers]).reset_index(drop = True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 4\n", "*Are there any data points considered outliers for more than one feature based on the definition above? Should these data points be removed from the dataset? If any data points were added to the `outliers` list to be removed, explain why.* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature Transformation\n", "In this section you will use principal component analysis (PCA) to draw conclusions about the underlying structure of the wholesale customer data. Since using PCA on a dataset calculates the dimensions which best maximize variance, we will find which compound combinations of features best describe customers." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Implementation: PCA\n", "\n", "Now that the data has been scaled to a more normal distribution and has had any necessary outliers removed, we can now apply PCA to the `good_data` to discover which dimensions about the data best maximize the variance of features involved. In addition to finding these dimensions, PCA will also report the *explained variance ratio* of each dimension — how much variance within the data is explained by that dimension alone. Note that a component (dimension) from PCA can be considered a new \"feature\" of the space, however it is a composition of the original features present in the data.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Import `sklearn.decomposition.PCA` and assign the results of fitting PCA in six dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Apply PCA by fitting the good data with the same number of dimensions as features\n", "pca = None\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = None\n", "\n", "# Generate PCA results plot\n", "pca_results = rs.pca_results(good_data, pca)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 5\n", "*How much variance in the data is explained* ***in total*** *by the first and second principal component? What about the first four principal components? Using the visualization provided above, discuss what the first four dimensions best represent in terms of customer spending.* \n", "**Hint:** A positive increase in a specific dimension corresponds with an *increase* of the *positive-weighted* features and a *decrease* of the *negative-weighted* features. The rate of increase or decrease is based on the indivdual feature weights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it in six dimensions. Observe the numerical value for the first four dimensions of the sample points. Consider if this is consistent with your initial interpretation of the sample points." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display sample log-data after having a PCA transformation applied\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Dimensionality Reduction\n", "When using principal component analysis, one of the main goals is to reduce the dimensionality of the data — in effect, reducing the complexity of the problem. Dimensionality reduction comes at a cost: Fewer dimensions used implies less of the total variance in the data is being explained. Because of this, the *cumulative explained variance ratio* is extremely important for knowing how many dimensions are necessary for the problem. Additionally, if a signifiant amount of variance is explained by only two or three dimensions, the reduced data can be visualized afterwards.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the results of fitting PCA in two dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of `good_data` using `pca.transform`, and assign the reuslts to `reduced_data`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Apply PCA by fitting the good data with only two dimensions\n", "pca = None\n", "\n", "# TODO: Transform the good data using the PCA fit above\n", "reduced_data = None\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = None\n", "\n", "# Create a DataFrame for the reduced data\n", "reduced_data = pd.DataFrame(reduced_data, columns = ['Dimension 1', 'Dimension 2'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it using only two dimensions. Observe how the values for the first two dimensions remains unchanged when compared to a PCA transformation in six dimensions." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display sample log-data after applying PCA transformation in two dimensions\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = ['Dimension 1', 'Dimension 2']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering\n", "\n", "In this section, you will choose to use either a K-Means clustering algorithm or a Gaussian Mixture Model clustering algorithm to identify the various customer segments hidden in the data. You will then recover specific data points from the clusters to understand their significance by transforming them back into their original dimension and scale. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6\n", "*What are the advantages to using a K-Means clustering algorithm? What are the advantages to using a Gaussian Mixture Model clustering algorithm? Given your observations about the wholesale customer data so far, which of the two algorithms will you use and why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Creating Clusters\n", "Depending on the problem, the number of clusters that you expect to be in the data may already be known. When the number of clusters is not known *a priori*, there is no guarantee that a given number of clusters best segments the data, since it is unclear what structure exists in the data — if any. However, we can quantify the \"goodness\" of a clustering by calculating each data point's *silhouette coefficient*. The [silhouette coefficient](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html) for a data point measures how similar it is to its assigned cluster from -1 (dissimilar) to 1 (similar). Calculating the *mean* silhouette coefficient provides for a simple scoring method of a given clustering.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Fit a clustering algorithm to the `reduced_data` and assign it to `clusterer`.\n", " - Predict the cluster for each data point in `reduced_data` using `clusterer.predict` and assign them to `preds`.\n", " - Find the cluster centers using the algorithm's respective attribute and assign them to `centers`.\n", " - Predict the cluster for each sample data point in `pca_samples` and assign them `sample_preds`.\n", " - Import sklearn.metrics.silhouette_score and calculate the silhouette score of `reduced_data` against `preds`.\n", " - Assign the silhouette score to `score` and print the result." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Apply your clustering algorithm of choice to the reduced data \n", "clusterer = None\n", "\n", "# TODO: Predict the cluster for each data point\n", "preds = None\n", "\n", "# TODO: Find the cluster centers\n", "centers = None\n", "\n", "# TODO: Predict the cluster for each transformed sample data point\n", "sample_preds = None\n", "\n", "# TODO: Calculate the mean silhouette coefficient for the number of clusters chosen\n", "score = None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7\n", "*Report the silhouette score for several cluster numbers you tried. Of these, which number of clusters has the best silhouette score?* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cluster Visualization\n", "Once you've chosen the optimal number of clusters for your clustering algorithm using the scoring metric above, you can now visualize the results by executing the code block below. Note that, for experimentation purposes, you are welcome to adjust the number of clusters for your clustering algorithm to see various visualizations. The final visualization provided should, however, correspond with the optimal number of clusters. " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display the results of the clustering from implementation\n", "rs.cluster_results(reduced_data, preds, centers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Recovery\n", "Each cluster present in the visualization above has a central point. These centers (or means) are not specifically data points from the data, but rather the *averages* of all the data points predicted in the respective clusters. For the problem of creating customer segments, a cluster's center point corresponds to *the average customer of that segment*. Since the data is currently reduced in dimension and scaled by a logarithm, we can recover the representative customer spending from these data points by applying the inverse transformations.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Apply the inverse transform to `centers` using `pca.inverse_transform` and assign the new centers to `log_centers`.\n", " - Apply the inverse function of `np.log` to `log_centers` using `np.exp` and assign the true centers to `true_centers`.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Inverse transform the centers\n", "log_centers = None\n", "\n", "# TODO: Exponentiate the centers\n", "true_centers = None\n", "\n", "# Display the true centers\n", "segments = ['Segment {}'.format(i) for i in range(0,len(centers))]\n", "true_centers = pd.DataFrame(np.round(true_centers), columns = data.keys())\n", "true_centers.index = segments\n", "display(true_centers)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 8\n", "Consider the total purchase cost of each product category for the representative data points above, and reference the statistical description of the dataset at the beginning of this project. *What set of establishments could each of the customer segments represent?* \n", "**Hint:** A customer who is assigned to `'Cluster X'` should best identify with the establishments represented by the feature set of `'Segment X'`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 9\n", "*For each sample point, which customer segment from* ***Question 8*** *best represents it? Are the predictions for each sample point consistent with this?*\n", "\n", "Run the code block below to find which cluster each sample point is predicted to be." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Display the predictions\n", "for i, pred in enumerate(sample_preds):\n", " print \"Sample point\", i, \"predicted to be in Cluster\", pred" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this final section, you will investigate ways that you can make use of the clustered data. First, you will consider how the different groups of customers, the ***customer segments***, may be affected differently by a specific delivery scheme. Next, you will consider how giving a label to each customer (which *segment* that customer belongs to) can provide for additional features about the customer data. Finally, you will compare the ***customer segments*** to a hidden variable present in the data, to see whether the clustering identified certain relationships." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Question 10\n", "Companies will often run [A/B tests](https://en.wikipedia.org/wiki/A/B_testing) when making small changes to their products or services to determine whether making that change will affect its customers positively or negatively. The wholesale distributor is considering changing its delivery service from currently 5 days a week to 3 days a week. However, the distributor will only make this change in delivery service for customers that react positively. *How can the wholesale distributor use the customer segments to determine which customers, if any, would react positively to the change in delivery service?* \n", "**Hint:** Can we assume the change affects all customers equally? How can we determine which group of customers it affects the most?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 11\n", "Additional structure is derived from originally unlabeled data when using clustering techniques. Since each customer has a ***customer segment*** it best identifies with (depending on the clustering algorithm applied), we can consider *'customer segment'* as an **engineered feature** for the data. Assume the wholesale distributor recently acquired ten new customers and each provided estimates for anticipated annual spending of each product category. Knowing these estimates, the wholesale distributor wants to classify each new customer to a ***customer segment*** to determine the most appropriate delivery service. \n", "*How can the wholesale distributor label the new customers using only their estimated product spending and the* ***customer segment*** *data?* \n", "**Hint:** A supervised learner could be used to train on the original customers. What would be the target variable?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualizing Underlying Distributions\n", "\n", "At the beginning of this project, it was discussed that the `'Channel'` and `'Region'` features would be excluded from the dataset so that the customer product categories were emphasized in the analysis. By reintroducing the `'Channel'` feature to the dataset, an interesting structure emerges when considering the same PCA dimensionality reduction applied earlier to the original dataset.\n", "\n", "Run the code block below to see how each data point is labeled either `'HoReCa'` (Hotel/Restaurant/Cafe) or `'Retail'` the reduced space. In addition, you will find the sample points are circled in the plot, which will identify their labeling." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [], "source": [ "# Display the clustering results based on 'Channel' data\n", "rs.channel_results(reduced_data, outliers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 12\n", "*How well does the clustering algorithm and number of clusters you've chosen compare to this underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers? Are there customer segments that would be classified as purely 'Retailers' or 'Hotels/Restaurants/Cafes' by this distribution? Would you consider these classifications as consistent with your previous definition of the customer segments?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p3-creating-customer-segments/customer_segments.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Machine Learning Engineer Nanodegree\n", "## Unsupervised Learning\n", "## Project 3: Creating Customer Segments" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Welcome to the third project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with **'Implementation'** in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a `'TODO'` statement. Please be sure to read the instructions carefully!\n", "\n", "In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a **'Question X'** header. Carefully read each question and provide thorough answers in the following text boxes that begin with **'Answer:'**. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide. \n", "\n", ">**Note:** Code and Markdown cells can be executed using the **Shift + Enter** keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Getting Started\n", "\n", "In this project, you will analyze a dataset containing data on various customers' annual spending amounts (reported in *monetary units*) of diverse product categories for internal structure. One goal of this project is to best describe the variation in the different types of customers that a wholesale distributor interacts with. Doing so would equip the distributor with insight into how to best structure their delivery service to meet the needs of each customer.\n", "\n", "The dataset for this project can be found on the [UCI Machine Learning Repository](https://archive.ics.uci.edu/ml/datasets/Wholesale+customers). For the purposes of this project, the features `'Channel'` and `'Region'` will be excluded in the analysis — with focus instead on the six product categories recorded for customers.\n", "\n", "Run the code block below to load the wholesale customers dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wholesale customers dataset has 440 samples with 6 features each.\n" ] } ], "source": [ "# Import libraries necessary for this project\n", "import numpy as np\n", "import pandas as pd\n", "import renders_py3 as rs\n", "from IPython.display import display # Allows the use of display() for DataFrames\n", "\n", "# Show matplotlib plots inline (nicely formatted in the notebook)\n", "%matplotlib inline\n", "\n", "# Load the wholesale customers dataset\n", "try:\n", " data = pd.read_csv(\"customers.csv\")\n", " data.drop(['Region', 'Channel'], axis = 1, inplace = True)\n", " print(\"Wholesale customers dataset has {} samples with {} features each.\".format(*data.shape))\n", "except:\n", " print(\"Dataset could not be loaded. Is the dataset missing?\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "In this section, you will begin exploring the data through visualizations and code to understand how each feature is related to the others. You will observe a statistical description of the dataset, consider the relevance of each feature, and select a few sample data points from the dataset which you will track through the course of this project.\n", "\n", "Run the code block below to observe a statistical description of the dataset. Note that the dataset is composed of six important product categories: **'Fresh'**, **'Milk'**, **'Grocery'**, **'Frozen'**, **'Detergents_Paper'**, and **'Delicatessen'**. Consider what each category represents in terms of products you could purchase." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
count440.000000440.000000440.000000440.000000440.000000440.000000
mean12000.2977275796.2659097951.2772733071.9318182881.4931821524.870455
std12647.3288657380.3771759503.1628294854.6733334767.8544482820.105937
min3.00000055.0000003.00000025.0000003.0000003.000000
25%3127.7500001533.0000002153.000000742.250000256.750000408.250000
50%8504.0000003627.0000004755.5000001526.000000816.500000965.500000
75%16933.7500007190.25000010655.7500003554.2500003922.0000001820.250000
max112151.00000073498.00000092780.00000060869.00000040827.00000047943.000000
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen \\\n", "count 440.000000 440.000000 440.000000 440.000000 \n", "mean 12000.297727 5796.265909 7951.277273 3071.931818 \n", "std 12647.328865 7380.377175 9503.162829 4854.673333 \n", "min 3.000000 55.000000 3.000000 25.000000 \n", "25% 3127.750000 1533.000000 2153.000000 742.250000 \n", "50% 8504.000000 3627.000000 4755.500000 1526.000000 \n", "75% 16933.750000 7190.250000 10655.750000 3554.250000 \n", "max 112151.000000 73498.000000 92780.000000 60869.000000 \n", "\n", " Detergents_Paper Delicatessen \n", "count 440.000000 440.000000 \n", "mean 2881.493182 1524.870455 \n", "std 4767.854448 2820.105937 \n", "min 3.000000 3.000000 \n", "25% 256.750000 408.250000 \n", "50% 816.500000 965.500000 \n", "75% 3922.000000 1820.250000 \n", "max 40827.000000 47943.000000 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display a description of the dataset\n", "display(data.describe())" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
0126699656756121426741338
1705798109568176232931776
2635388087684240535167844
3132651196422164045071788
42261554107198391517775185
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 12669 9656 7561 214 2674 1338\n", "1 7057 9810 9568 1762 3293 1776\n", "2 6353 8808 7684 2405 3516 7844\n", "3 13265 1196 4221 6404 507 1788\n", "4 22615 5410 7198 3915 1777 5185" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Selecting Samples\n", "To get a better understanding of the customers and how their data will transform through the analysis, it would be best to select a few sample data points and explore them in more detail. In the code block below, add **three** indices of your choice to the `indices` list which will represent the customers to track. It is suggested to try different sets of samples until you obtain customers that vary significantly from one another." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Chosen samples of wholesale customers dataset:\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
01611746197927801026408272944
111215129627181481674549488550
2333370211560115550
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 16117 46197 92780 1026 40827 2944\n", "1 112151 29627 18148 16745 4948 8550\n", "2 3 333 7021 15601 15 550" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Select three indices of your choice you wish to sample from the dataset\n", "indices = [85, 181, 338]\n", "\n", "# Create a DataFrame of the chosen samples\n", "samples = pd.DataFrame(data.loc[indices], columns = data.keys()).reset_index(drop = True)\n", "print(\"Chosen samples of wholesale customers dataset:\")\n", "display(samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "Consider the total purchase cost of each product category and the statistical description of the dataset above for your sample customers. \n", "*What kind of establishment (customer) could each of the three samples you've chosen represent?* \n", "**Hint:** Examples of establishments include places like markets, cafes, and retailers, among many others. Avoid using names for establishments, such as saying *\"McDonalds\"* when describing a sample customer as a restaurant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "1. Index 85: Retailer\n", " - Highest spending on (1) detergents and paper and (2) groceries (each) of all customers in dataset. (1) -> May have a large 'home goods' focus.\n", " - Milk: Spends more than the median amount \n", " - Frozen: Spends less than the median customer\n", "\n", "2. Index 181: Large market\n", " - High spending on most product categories: 8000+ MUs spent on each of all food-related goods, nearly 5000 MUs spent on detergents and paper (highest quartile for spending in all good categories).\n", " - Highest spending on fresh goods of all customers in dataset\n", " - Focus on fresh goods, which means it likely has a large market component.\n", " - Little emphasis on detergent and paper, which indicates it is unlikely to be a shopping mall type shop.\n", "\n", "3. Index 338: Restaurant\n", " - Much smaller scale than the previous two customers discussed.\n", " - Amount spent on Fresh is least in dataset.\n", " - Spending on each of Milk, Detergents and Paper is in the bottom quartile.\n", " - Needs groceries and frozen food to produce food for customers. May serve delicatessen type meats. Needs milk for coffee and tea.\n", " - May be cheaper so it doesn't need much fresh food." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Relevance\n", "One interesting thought to consider is if one (or more) of the six product categories is actually relevant for understanding customer purchasing. That is to say, is it possible to determine whether customers purchasing some amount of one category of products will necessarily purchase some proportional amount of another category of products? We can make this determination quite easily by training a supervised regression learner on a subset of the data with one feature removed, and then score how well that model can predict the removed feature.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign `new_data` a copy of the data by removing a feature of your choice using the `DataFrame.drop` function.\n", " - Use `sklearn.cross_validation.train_test_split` to split the dataset into training and testing sets.\n", " - Use the removed feature as your target label. Set a `test_size` of `0.25` and set a `random_state`.\n", " - Import a decision tree regressor, set a `random_state`, and fit the learner to the training data.\n", " - Report the prediction score of the testing set using the regressor's `score` function." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Score of prediction on test set: 0.602801978878\n" ] } ], "source": [ "# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature\n", "new_data = data.drop(\"Grocery\", axis=1)\n", "new_data\n", "\n", "\n", "# TODO: Split the data into training and testing sets using the given feature as the target\n", "from sklearn.cross_validation import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(new_data, data[\"Grocery\"], test_size=0.25, random_state=0)\n", "\n", "# TODO: Create a decision tree regressor and fit it to the training set\n", "from sklearn.tree import DecisionTreeRegressor\n", "regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)\n", "\n", "# TODO: Report the score of the prediction using the testing set\n", "score = regressor.score(X_test, y_test)\n", "print(\"Score of prediction on test set: \", score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2\n", "*Which feature did you attempt to predict? What was the reported prediction score? Is this feature is necessary for identifying customers' spending habits?* \n", "**Hint:** The coefficient of determination, `R^2`, is scored between 0 and 1, with 1 being a perfect fit. A negative `R^2` implies the model fails to fit the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- I attempted to predict the **`Grocery`** feature. \n", "- The reported prediction score was **0.6028**. \n", "- This feature is **not absolutely necessary** to identify customers' spending habits because it appears loosely correlated with the other five features, but the `R^2` score is not sufficiently high for us to be confident in dropping it. \n", "\n", "I compared `Grocery`'s `R^2` score with the other features' `R^2` scores below:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Feature is: Fresh\n", "Score of prediction on test set: -0.252469807688\n", "Feature is: Milk\n", "Score of prediction on test set: 0.365725292736\n", "Feature is: Grocery\n", "Score of prediction on test set: 0.602801978878\n", "Feature is: Frozen\n", "Score of prediction on test set: 0.253973446697\n", "Feature is: Detergents_Paper\n", "Score of prediction on test set: 0.728655181254\n", "Feature is: Delicatessen\n", "Score of prediction on test set: -11.6636871594\n" ] } ], "source": [ "# For experimentation's sake\n", "features_list = [\"Fresh\",\"Milk\",\"Grocery\",\"Frozen\",\"Detergents_Paper\",\"Delicatessen\"]\n", "\n", "for feature in features_list:\n", " # TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature\n", " new_data = data.drop(feature, axis=1)\n", " new_data\n", " print(\"Feature is: \", feature)\n", "\n", " # TODO: Split the data into training and testing sets using the given feature as the target\n", " X_train, X_test, y_train, y_test = train_test_split(new_data, data[feature], test_size=0.25, random_state=0)\n", "\n", " # TODO: Create a decision tree regressor and fit it to the training set\n", " regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)\n", "\n", " # TODO: Report the score of the prediction using the testing set\n", " score = regressor.score(X_test, y_test)\n", " print(\"Score of prediction on test set: \", score)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**:\n", "- Notice that the Delicatessen R^2 score is very negative and the Fresh R^2 score is quite negative, so those definitely cannot be dropped as the model fails to fit the data. \n", "- The feature that might be okay to remove is Detergents_Paper, followed by Grocery. \n", "- Milk and Frozen are loosely correlated with the others but not enough to say much." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize Feature Distributions\n", "To get a better understanding of the dataset, we can construct a scatter matrix of each of the six product features present in the data. If you found that the feature you attempted to predict above is relevant for identifying a specific customer, then the scatter matrix below may not show any correlation between that feature and the others. Conversely, if you believe that feature is not relevant for identifying a specific customer, the scatter matrix might show a correlation between that feature and another feature in the data. Run the code block below to produce a scatter matrix." ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nNy7+WPF7swAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Produce a scatter matrix for each pair of features in the data\n", "pd.scatter_matrix(data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3\n", "*Are there any pairs of features which exhibit some degree of correlation? Does this confirm or deny your suspicions about the relevance of the feature you attempted to predict? How is the data for those features distributed?* \n", "**Hint:** Is the data normally distributed? Where do most of the data points lie? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "* The pair (`Detergents_Paper`, `Grocery`) exhibits a high degree of correlation. The pairs (`Milk`,`Grocery`) and (`Milk`,`Detergents_Paper`) also exhibit some degree of correlation.\n", "* This confirms that `Grocery` might not be that relevant (necessary).\n", "* The data is not normally distributed - it is positively skewed. The features more closely resemble the log-normal distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Preprocessing\n", "In this section, you will preprocess the data to create a better representation of customers by performing a scaling on the data and detecting (and optionally removing) outliers. Preprocessing data is often times a critical step in assuring that results you obtain from your analysis are significant and meaningful." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Feature Scaling\n", "If data is not normally distributed, especially if the mean and median vary significantly (indicating a large skew), it is most [often appropriate](http://econbrowser.com/archives/2014/02/use-of-logarithms-in-economics) to apply a non-linear scaling — particularly for financial data. One way to achieve this scaling is by using a [Box-Cox test](http://scipy.github.io/devdocs/generated/scipy.stats.boxcox.html), which calculates the best power transformation of the data that reduces skewness. A simpler approach which can work in most cases would be applying the natural logarithm.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign a copy of the data to `log_data` after applying a logarithm scaling. Use the `np.log` function for this.\n", " - Assign a copy of the sample data to `log_samples` after applying a logrithm scaling. Again, use `np.log`." ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Scale the data using the natural logarithm\n", "log_data = np.log(data)\n", "\n", "# TODO: Scale the sample data using the natural logarithm\n", "log_samples = np.log(samples)\n", "\n", "# Produce a scatter matrix for each pair of newly-transformed features\n", "pd.scatter_matrix(log_data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "After applying a natural logarithm scaling to the data, the distribution of each feature should appear much more normal. For any pairs of features you may have identified earlier as being correlated, observe here whether that correlation is still present (and whether it is now stronger or weaker than before).\n", "\n", "* The correlations are still present and appear stronger than before.\n", "\n", "Run the code below to see how the sample data has changed after having the natural logarithm applied to it." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
09.68763010.74067011.4379866.93342310.6170997.987524
111.62760110.2964419.8063169.7258558.5067399.053687
21.0986125.8081428.8566619.6550902.7080506.309918
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 9.687630 10.740670 11.437986 6.933423 10.617099 7.987524\n", "1 11.627601 10.296441 9.806316 9.725855 8.506739 9.053687\n", "2 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the log-transformed sample data\n", "display(log_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Outlier Detection\n", "Detecting outliers in the data is extremely important in the data preprocessing step of any analysis. The presence of outliers can often skew results which take into consideration these data points. There are many \"rules of thumb\" for what constitutes an outlier in a dataset. Here, we will use [Tukey's Method for identfying outliers](http://datapigtechnologies.com/blog/index.php/highlighting-outliers-in-your-data-with-the-tukey-method/): An *outlier step* is calculated as 1.5 times the interquartile range (IQR). A data point with a feature that is beyond an outlier step outside of the IQR for that feature is considered abnormal.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the value of the 25th percentile for the given feature to `Q1`. Use `np.percentile` for this.\n", " - Assign the value of the 75th percentile for the given feature to `Q3`. Again, use `np.percentile`.\n", " - Assign the calculation of an outlier step for the given feature to `step`.\n", " - Optionally remove data points from the dataset by adding indices to the `outliers` list.\n", "\n", "**NOTE:** If you choose to remove any outliers, ensure that the sample data does not contain any of these points! \n", "Once you have performed this implementation, the dataset will be stored in the variable `good_data`." ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Fresh':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
654.4426519.95032310.7326513.58351910.0953887.260523
662.1972257.3356348.9115305.1647868.1513333.295837
815.3890729.1632499.5751925.6454478.9641845.049856
951.0986127.9793398.7406576.0867755.4071726.563856
963.1354947.8694029.0018394.9767348.2620435.379897
1284.9416429.0878348.2487914.9558276.9679091.098612
1715.29831710.1605309.8942456.4785109.0794348.740337
1935.1929578.1562239.9179826.8658918.6337316.501290
2182.8903728.9231919.6293807.1585148.4757468.759669
3045.0814048.91731110.1175106.4248699.3744137.787382
3055.4930619.4680019.0883996.6833618.2710375.351858
3381.0986125.8081428.8566619.6550902.7080506.309918
3534.7621748.7425749.9618985.4293469.0690077.013016
3555.2470246.5889267.6068855.5012585.2149364.844187
3573.6109187.15070110.0110864.9199818.8168534.700480
4124.5747118.1900779.4254524.5849677.9963174.127134
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523\n", "66 2.197225 7.335634 8.911530 5.164786 8.151333 3.295837\n", "81 5.389072 9.163249 9.575192 5.645447 8.964184 5.049856\n", "95 1.098612 7.979339 8.740657 6.086775 5.407172 6.563856\n", "96 3.135494 7.869402 9.001839 4.976734 8.262043 5.379897\n", "128 4.941642 9.087834 8.248791 4.955827 6.967909 1.098612\n", "171 5.298317 10.160530 9.894245 6.478510 9.079434 8.740337\n", "193 5.192957 8.156223 9.917982 6.865891 8.633731 6.501290\n", "218 2.890372 8.923191 9.629380 7.158514 8.475746 8.759669\n", "304 5.081404 8.917311 10.117510 6.424869 9.374413 7.787382\n", "305 5.493061 9.468001 9.088399 6.683361 8.271037 5.351858\n", "338 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918\n", "353 4.762174 8.742574 9.961898 5.429346 9.069007 7.013016\n", "355 5.247024 6.588926 7.606885 5.501258 5.214936 4.844187\n", "357 3.610918 7.150701 10.011086 4.919981 8.816853 4.700480\n", "412 4.574711 8.190077 9.425452 4.584967 7.996317 4.127134" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Milk':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
8610.03998311.20501310.3770476.8946709.9069816.805723
986.2205904.7184996.6567276.7968244.0253524.882802
1546.4329404.0073334.9199814.3174881.9459102.079442
35610.0295034.8978405.3844958.0573772.1972256.306275
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "86 10.039983 11.205013 10.377047 6.894670 9.906981 6.805723\n", "98 6.220590 4.718499 6.656727 6.796824 4.025352 4.882802\n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442\n", "356 10.029503 4.897840 5.384495 8.057377 2.197225 6.306275" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Grocery':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
759.9231927.0361481.0986128.3909491.0986126.882437
1546.4329404.0073334.9199814.3174881.9459102.079442
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437\n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Frozen':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
388.4318539.6632619.7237033.4965088.8473606.070738
578.5972979.2036189.2578923.6375868.9322137.156177
654.4426519.95032310.7326513.58351910.0953887.260523
14510.0005699.03408010.4571433.7376709.4407388.396155
1757.7591878.9676329.3821063.9512448.3418877.436617
2646.9782149.1777149.6450414.1108748.6961767.142827
32510.3956509.7281819.51973511.0164797.1483468.632128
4208.4020078.5690269.4900153.2188768.8273217.239215
4299.0603317.4673718.1831183.8501484.4308177.824446
4397.9327217.4372067.8280384.1743876.1675163.951244
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "38 8.431853 9.663261 9.723703 3.496508 8.847360 6.070738\n", "57 8.597297 9.203618 9.257892 3.637586 8.932213 7.156177\n", "65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523\n", "145 10.000569 9.034080 10.457143 3.737670 9.440738 8.396155\n", "175 7.759187 8.967632 9.382106 3.951244 8.341887 7.436617\n", "264 6.978214 9.177714 9.645041 4.110874 8.696176 7.142827\n", "325 10.395650 9.728181 9.519735 11.016479 7.148346 8.632128\n", "420 8.402007 8.569026 9.490015 3.218876 8.827321 7.239215\n", "429 9.060331 7.467371 8.183118 3.850148 4.430817 7.824446\n", "439 7.932721 7.437206 7.828038 4.174387 6.167516 3.951244" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Detergents_Paper':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
759.9231927.0361481.0986128.3909491.0986126.882437
1619.4281906.2915695.6454476.9957661.0986127.711101
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437\n", "161 9.428190 6.291569 5.645447 6.995766 1.098612 7.711101" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Data points considered outliers for the feature 'Delicatessen':\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
662.1972257.3356348.9115305.1647868.1513333.295837
1097.2485049.72489910.2745686.5117456.7286291.098612
1284.9416429.0878348.2487914.9558276.9679091.098612
1378.0349558.9971479.0218406.4937546.5806393.583519
14210.5196468.8751479.0183328.0047002.9957321.098612
1546.4329404.0073334.9199814.3174881.9459102.079442
18310.51452910.6908089.91195210.5059995.47646410.777768
1845.7899606.8221978.4574434.3040655.8111412.397895
1877.7989338.9874479.1920758.7433728.1487351.098612
2036.3681876.5294197.7034596.1506036.8606642.890372
2336.8710918.5139888.1065156.8426836.0137151.945910
28510.6029656.4614688.1886896.9488976.0776422.890372
28910.6639665.6559926.1548587.2356193.4657363.091042
3437.4318928.84850910.1779327.2834489.6465933.610918
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper \\\n", "66 2.197225 7.335634 8.911530 5.164786 8.151333 \n", "109 7.248504 9.724899 10.274568 6.511745 6.728629 \n", "128 4.941642 9.087834 8.248791 4.955827 6.967909 \n", "137 8.034955 8.997147 9.021840 6.493754 6.580639 \n", "142 10.519646 8.875147 9.018332 8.004700 2.995732 \n", "154 6.432940 4.007333 4.919981 4.317488 1.945910 \n", "183 10.514529 10.690808 9.911952 10.505999 5.476464 \n", "184 5.789960 6.822197 8.457443 4.304065 5.811141 \n", "187 7.798933 8.987447 9.192075 8.743372 8.148735 \n", "203 6.368187 6.529419 7.703459 6.150603 6.860664 \n", "233 6.871091 8.513988 8.106515 6.842683 6.013715 \n", "285 10.602965 6.461468 8.188689 6.948897 6.077642 \n", "289 10.663966 5.655992 6.154858 7.235619 3.465736 \n", "343 7.431892 8.848509 10.177932 7.283448 9.646593 \n", "\n", " Delicatessen \n", "66 3.295837 \n", "109 1.098612 \n", "128 1.098612 \n", "137 3.583519 \n", "142 1.098612 \n", "154 2.079442 \n", "183 10.777768 \n", "184 2.397895 \n", "187 1.098612 \n", "203 2.890372 \n", "233 1.945910 \n", "285 2.890372 \n", "289 3.091042 \n", "343 3.610918 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "potential_outliers = []\n", "\n", "# For each feature find the data points with extreme high or low values\n", "for feature in log_data.keys():\n", " \n", " # TODO: Calculate Q1 (25th percentile of the data) for the given feature\n", " Q1 = np.percentile(log_data[feature],25)\n", " \n", " # TODO: Calculate Q3 (75th percentile of the data) for the given feature\n", " Q3 = np.percentile(log_data[feature],75)\n", " \n", " # TODO: Use the interquartile range to calculate an outlier step (1.5 times the interquartile range)\n", " step = 1.5 * (Q3-Q1)\n", " \n", " # Display the outliers\n", " print(\"Data points considered outliers for the feature '{}':\".format(feature))\n", " display(log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))])\n", " list = log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))].index.tolist()\n", " potential_outliers.append(list)\n", " \n", "# OPTIONAL: Select the indices for data points you wish to remove\n", "outliers = []\n", "\n", "# Remove the outliers, if any were specified\n", "good_data = log_data.drop(log_data.index[outliers]).reset_index(drop = True)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 4\n", "*Are there any data points considered outliers for more than one feature based on the definition above? Should these data points be removed from the dataset? If any data points were added to the `outliers` list to be removed, explain why.* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "Datapoints considered outliers for more than one feature: rows 65, 66, 75, 128, 154. (Rough work below.)\n", "\n", "These data points look a bit suspicious. E.g. Row 75 spent 3 monetary units on Grocery and Detergents_Paper but spent a lot more (up to around 20k in Fresh) in other categories.\n", "\n", "But they should not be removed from the dataset. They could still be genuine datapoints because it is plausible shops don't use much of these categories of goods. (Detergents_Paper seems less plausible though.)" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
6585209594582836242311423
66915347417175346827
75203981137344073975
1281408847382314210623
154622551377578
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "65 85 20959 45828 36 24231 1423\n", "66 9 1534 7417 175 3468 27\n", "75 20398 1137 3 4407 3 975\n", "128 140 8847 3823 142 1062 3\n", "154 622 55 137 75 7 8" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.iloc[[65,66,75,128,154]]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "[[65, 66, 81, 95, 96, 128, 171, 193, 218, 304, 305, 338, 353, 355, 357, 412],\n", " [86, 98, 154, 356],\n", " [75, 154],\n", " [38, 57, 65, 145, 175, 264, 325, 420, 429, 439],\n", " [75, 161],\n", " [66, 109, 128, 137, 142, 154, 183, 184, 187, 203, 233, 285, 289, 343]]" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rough work\n", "potential_outliers" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{128: {0, 5}, 65: {0, 3}, 66: {0, 5}, 75: {2, 4}, 154: {1, 2, 5}}\n" ] } ], "source": [ "mult_outlier_indices_dict = {}\n", "\n", "for i in range(len(potential_outliers)):\n", " current_feature_ol = potential_outliers[i]\n", " for po in current_feature_ol:\n", " mult_ol = set()\n", " mult_ol.add(i)\n", " if po not in mult_outlier_indices_dict.keys():\n", " for other_feat in range(i, len(potential_outliers)):\n", " if po in potential_outliers[other_feat]:\n", " mult_ol.add(other_feat)\n", " if len(mult_ol) > 1:\n", " mult_outlier_indices_dict[po] = mult_ol\n", " \n", "print(mult_outlier_indices_dict)\n", "\n", "for v in mult_outlier_indices_dict" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature Transformation\n", "In this section you will use principal component analysis (PCA) to draw conclusions about the underlying structure of the wholesale customer data. Since using PCA on a dataset calculates the dimensions which best maximize variance, we will find which compound combinations of features best describe customers." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Implementation: PCA\n", "\n", "Now that the data has been scaled to a more normal distribution and has had any necessary outliers removed, we can now apply PCA to the `good_data` to discover which dimensions about the data best maximize the variance of features involved. In addition to finding these dimensions, PCA will also report the *explained variance ratio* of each dimension — how much variance within the data is explained by that dimension alone. Note that a component (dimension) from PCA can be considered a new \"feature\" of the space, however it is a composition of the original features present in the data.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Import `sklearn.decomposition.PCA` and assign the results of fitting PCA in six dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": 68, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nssdoZnMzsZ5Daq/v9tfHJz7xCWbMmMGpp57KkUceyeabb86cOXM49dRT2W233Tj//PPXWueMM87g\nwx/+MHPmzGHixIl86EMf4qijjgLgPe95D4899hiHHnooy5YtY9asWVx44YW0trby05/+lI9//OPM\nnj2b559/np122ol///d/HzK+3XffnaamJnbddde1TrWTJBVTa2szHR3V/S9tbV2//4uS1AhRebrW\naBcROdDxRARj6TgbYc899+T9738/Rx99dKNDGVHMLRVRRLB4cXVtOzrwNSKtp4iAeVU2nudrbKwy\nD2qn/Pkt+i8vZI+R1s8NN9zAzTffzKJFixodiiRJklQTXmOkIX3gAx9g77335vTTT++7+awkSZI0\n1thjpCFdcMEFjQ5BkiRJqjl7jCRJkiQVnoWRJEmSpMLzVDpJkiRphGme3kzvvOqGxG+e7pD4w8HC\nSJIkSRpheh7oaXQIheOpdJIkSZIKz8JIkiRJUuEVsjBqaWsjImo2tbS1VR3LrFmzmDRpElOmTGHy\n5MlMmTKFnh67TiVJkqR6KuQ1Rr3d3bB4ce2239FRdduI4PLLL6djiHVWrlzJuHHjhiM0SZIkSQMo\nZI/RSJOZL3rc1dVFU1MT5513HjNnzmTPPfcEYNGiRbziFa9g2rRp7LHHHtx1110AfP/73+/rbZoy\nZQqbbbYZe+yxBwDPP/88J510EjNnzmS77bbj+OOP57nnngPg6quvprW1la9+9as0Nzczffp0b+gq\nSZKkQrIwGsGuueYa7rrrLn7xi19wzz33cOihh3LGGWfw8MMPs++++7L//vvzwgsvcNBBB7F8+XKe\nfPJJli5dypw5czj00EMBOPnkk7n33nu59dZbuffee1m6dClf+tKX+vbR09PD8uXLWbZsGd/+9rc5\n4YQT+Nvf/taoQ5YkSZIawsJoBHjXu97FtGnTmDZtGgceeGDf8vnz5zNx4kQ23XRTFi5cyH777cce\ne+zBuHHjOOmkk/j73//Ob3/72772mckhhxzCHnvswTHHHAPAOeecw9e+9jWmTp3K5ptvzqc+9Sku\nvvjivnU22WQTPv/5zzNu3Dj23XdftthiC+6+++76HbwkSZI0AhTyGqOR5tJLL33RNUZdXV1EBDNm\nzOhbtmzZMmbOnNn3OCJobW1l6dKlfcs+85nP8PTTT3P66acD8PDDD/PMM8/wmte8pq/NqlWrXnTq\n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\nAZSWyKm8CV39AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Apply PCA by fitting the good data with the same number of dimensions as features\n", "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=6)\n", "pca.fit(good_data)\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = pca.transform(log_samples)\n", "\n", "# Generate PCA results plot\n", "pca_results = rs.pca_results(good_data, pca)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 5\n", "*How much variance in the data is explained* ***in total*** *by the first and second principal component? What about the first four principal components? Using the visualization provided above, discuss what the first four dimensions best represent in terms of customer spending.* \n", "**Hint:** A positive increase in a specific dimension corresponds with an *increase* of the *positive-weighted* features and a *decrease* of the *negative-weighted* features. The rate of increase or decrease is based on the indivdual feature weights." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "- First and second PCs explain **71.90%** of the variance in the data.\n", "- First four PCs explain **93.14%** of the variation in the data.\n", "- What the first four dimensions best represent in terms of customer spending:\n", " - Dim 1: Detergents_Paper, Grocery and Milk: -> Utilities\n", " - Dim 2: Fresh, Frozen, Delicatessen -> Food\n", " - Dim 3: Fresh - Delicatessen: Market-y stuff, food that must be sold on the day\n", " - Dim 4: Frozen - Fresh - Delicatessen: Food that can be kept for ages\n" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.7190000000000001\n", "0.9314\n" ] } ], "source": [ "# Rough calculation\n", "print(0.4424+0.2766)\n", "print(0.4424+0.2766+0.1162+0.0962)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it in six dimensions. Observe the numerical value for the first four dimensions of the sample points. Consider if this is consistent with your initial interpretation of the sample points." ] }, { "cell_type": "code", "execution_count": 71, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Dimension 1Dimension 2Dimension 3Dimension 4Dimension 5Dimension 6
05.34591.94420.7429-0.2108-0.52970.2928
12.19744.90480.06860.5623-0.5195-0.2369
2-2.8963-4.7798-6.38172.9243-0.76292.2292
\n", "
" ], "text/plain": [ " Dimension 1 Dimension 2 Dimension 3 Dimension 4 Dimension 5 \\\n", "0 5.3459 1.9442 0.7429 -0.2108 -0.5297 \n", "1 2.1974 4.9048 0.0686 0.5623 -0.5195 \n", "2 -2.8963 -4.7798 -6.3817 2.9243 -0.7629 \n", "\n", " Dimension 6 \n", "0 0.2928 \n", "1 -0.2369 \n", "2 2.2292 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display sample log-data after having a PCA transformation applied\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Dimensionality Reduction\n", "When using principal component analysis, one of the main goals is to reduce the dimensionality of the data — in effect, reducing the complexity of the problem. Dimensionality reduction comes at a cost: Fewer dimensions used implies less of the total variance in the data is being explained. Because of this, the *cumulative explained variance ratio* is extremely important for knowing how many dimensions are necessary for the problem. Additionally, if a signifiant amount of variance is explained by only two or three dimensions, the reduced data can be visualized afterwards.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Assign the results of fitting PCA in two dimensions with `good_data` to `pca`.\n", " - Apply a PCA transformation of `good_data` using `pca.transform`, and assign the reuslts to `reduced_data`.\n", " - Apply a PCA transformation of the sample log-data `log_samples` using `pca.transform`, and assign the results to `pca_samples`." ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# TODO: Apply PCA by fitting the good data with only two dimensions\n", "pca = PCA(n_components=2)\n", "pca.fit(good_data)\n", "\n", "# TODO: Transform the good data using the PCA fit above\n", "reduced_data = pca.transform(good_data)\n", "\n", "# TODO: Transform the sample log-data using the PCA fit above\n", "pca_samples = pca.transform(log_samples)\n", "\n", "# Create a DataFrame for the reduced data\n", "reduced_data = pd.DataFrame(reduced_data, columns = ['Dimension 1', 'Dimension 2'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Observation\n", "Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it using only two dimensions. Observe how the **values for the first two dimensions remains unchanged when compared to a PCA transformation in six dimensions**." ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Dimension 1Dimension 2
05.34591.9442
12.19744.9048
2-2.8963-4.7798
\n", "
" ], "text/plain": [ " Dimension 1 Dimension 2\n", "0 5.3459 1.9442\n", "1 2.1974 4.9048\n", "2 -2.8963 -4.7798" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display sample log-data after applying PCA transformation in two dimensions\n", "display(pd.DataFrame(np.round(pca_samples, 4), columns = ['Dimension 1', 'Dimension 2']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering\n", "\n", "In this section, you will choose to use either a K-Means clustering algorithm or a Gaussian Mixture Model clustering algorithm to identify the various customer segments hidden in the data. You will then recover specific data points from the clusters to understand their significance by transforming them back into their original dimension and scale. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6\n", "*What are the advantages to using a K-Means clustering algorithm? What are the advantages to using a Gaussian Mixture Model clustering algorithm? Given your observations about the wholesale customer data so far, which of the two algorithms will you use and why?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "**Advantages to using K-Means clustering**\n", "- Hard labelling so all datapoints are in certain clusters\n", "- Less computationally expensive (than a Gaussian Mixture Model)\n", "- Guaranteed to converge\n", "- Scale-invariant\n", "- Consistent\n", "\n", "**Advantages to using Gaussian Mixture Model clustering**\n", "- One point can be shared between clusters because points are assigned probabilities of belonging to each cluster (soft) as opposed to hard labels\n", "- More information: Can look at probabilities to know how sure the algorithm is that each point is in each cluster\n", "- Can model all elliptical clusters (vs K-Means which assumes clusters are spherical)\n", "\n", "**Chosen algorithm**\n", "- Gausssian Mixture.\n", "- The data does not seem to be separated into clear clusters. There may be groups that are in-betweens.\n", "\n", "Reference: https://www.quora.com/What-is-the-difference-between-K-means-and-the-mixture-model-of-Gaussian" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Creating Clusters\n", "Depending on the problem, the number of clusters that you expect to be in the data may already be known. When the number of clusters is not known *a priori*, there is no guarantee that a given number of clusters best segments the data, since it is unclear what structure exists in the data — if any. However, we can quantify the \"goodness\" of a clustering by calculating each data point's *silhouette coefficient*. The [silhouette coefficient](http://scikit-learn.org/stable/modules/generated/sklearn.metrics.silhouette_score.html) for a data point measures how similar it is to its assigned cluster from -1 (dissimilar) to 1 (similar). Calculating the ***mean* silhouette coefficient provides for a simple scoring method of a given clustering**.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Fit a clustering algorithm to the `reduced_data` and assign it to `clusterer`.\n", " - Predict the cluster for each data point in `reduced_data` using `clusterer.predict` and assign them to `preds`.\n", " - Find the cluster centers using the algorithm's respective attribute and assign them to `centers`.\n", " - Predict the cluster for each sample data point in `pca_samples` and assign them `sample_preds`.\n", " - Import sklearn.metrics.silhouette_score and calculate the silhouette score of `reduced_data` against `preds`.\n", " - Assign the silhouette score to `score` and print the result." ] }, { "cell_type": "code", "execution_count": 86, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of components: 2\n", "Cluster centres: [[-0.71464435 0.31923966]\n", " [ 1.01432429 -0.45311006]]\n", "Sample Preds: [1 1 1]\n", "Silhouette score: 0.316017379116 \n", "\n", "Number of components: 3\n", "Cluster centres: [[ 1.53837521 0.35814931]\n", " [-1.53264671 0.28309436]\n", " [-0.42189675 -1.47049155]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.375222595239 \n", "\n", "Number of components: 4\n", "Cluster centres: [[ 0.04260476 -1.75483254]\n", " [-1.19364513 0.61758051]\n", " [-1.65040023 -0.34386088]\n", " [ 2.12094466 0.18950015]]\n", "Sample Preds: [3 3 0]\n", "Silhouette score: 0.336237830562 \n", "\n", "Number of components: 5\n", "Cluster centres: [[-1.52420475 -0.16175761]\n", " [ 2.61449466 -0.91376362]\n", " [-1.70036028 -1.83457833]\n", " [-0.89574454 1.08330732]\n", " [ 1.92949643 0.40524309]]\n", "Sample Preds: [4 1 2]\n", "Silhouette score: 0.31202624062 \n", "\n", "Number of components: 6\n", "Cluster centres: [[ 1.74491709 0.94152474]\n", " [-1.5625887 0.15170505]\n", " [-0.38366704 -3.6751244 ]\n", " [ 2.78898903 -1.01811609]\n", " [-0.96577157 -0.2125656 ]\n", " [-0.10568062 1.18412939]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.269277095938 \n", "\n" ] } ], "source": [ "# TODO: Apply your clustering algorithm of choice to the reduced data \n", "from sklearn.mixture import GMM\n", "from sklearn.metrics import silhouette_score\n", "\n", "# Loop through different cluster numbers to see which \n", "# gives th ehighest silhouette score.\n", "for i in range(2,7):\n", " print(\"Number of components: \", i)\n", " clusterer = GMM(random_state=0, n_components=i)\n", " clusterer.fit(reduced_data)\n", "\n", " # TODO: Predict the cluster for each data point\n", " preds = clusterer.predict(reduced_data)\n", " # TODO: Find the cluster centers\n", " centers = clusterer.means_\n", " print(\"Cluster centres: \",centers)\n", "\n", " # TODO: Predict the cluster for each transformed sample data point\n", " sample_preds = clusterer.predict(pca_samples)\n", " print(\"Sample Preds: \", sample_preds)\n", "\n", " # TODO: Calculate the mean silhouette coefficient for the number of clusters chosen\n", " score = silhouette_score(reduced_data, preds)\n", " print(\"Silhouette score: \", score, \"\\n\")\n", "\n", "# Note: Variable values reassigned below." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 7\n", "*Report the silhouette score for several cluster numbers you tried. Of these, which number of clusters has the best silhouette score?* " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Cluster numberSilhouette score
20.316
**3****0.375**
40.336
50.312
60.269
\n", "\n", "Cluster number 3 has the best silhouette score." ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cluster centres: [[ 1.53837521 0.35814931]\n", " [-1.53264671 0.28309436]\n", " [-0.42189675 -1.47049155]]\n", "Sample Preds: [0 0 2]\n", "Silhouette score: 0.375222595239 \n", "\n" ] } ], "source": [ "# Reassign variable values with n_components = 3\n", "\n", "clusterer = GMM(random_state=0, n_components=3)\n", "clusterer.fit(reduced_data)\n", "\n", "# TODO: Predict the cluster for each data point\n", "preds = clusterer.predict(reduced_data)\n", "# TODO: Find the cluster centers\n", "centers = clusterer.means_\n", "print(\"Cluster centres: \",centers)\n", "\n", "# TODO: Predict the cluster for each transformed sample data point\n", "sample_preds = clusterer.predict(pca_samples)\n", "print(\"Sample Preds: \", sample_preds)\n", "\n", "# TODO: Calculate the mean silhouette coefficient for the number of clusters chosen\n", "score = silhouette_score(reduced_data, preds)\n", "print(\"Silhouette score: \", score, \"\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Cluster Visualization\n", "Once you've chosen the optimal number of clusters for your clustering algorithm using the scoring metric above, you can now visualize the results by executing the code block below. Note that, for experimentation purposes, you are welcome to adjust the number of clusters for your clustering algorithm to see various visualizations. The final visualization provided should, however, correspond with the optimal number of clusters. " ] }, { "cell_type": "code", "execution_count": 88, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nk+6d7Zy7CsAfTSc/lmUSERGgdoM/SAyZWS7egASVDTYgItJsxbQJnJn1xps9ey3QG68z8kTnXGGl\nG4qIiIiIiNRArAOgM4EVeLO0rzJv8rg859zUkHT6JVJERERERCrlnKuyCXesR4H7Esh1zq3y3z9P\nhKE/nXN61cNr6tSpMS9DvL50bnVem9pL51bntim+dG51bpvaS+e1/l7RimkA5LzZoHNLx/rHm2Nh\nbQyLJCIiIiIicawxjAJ3A96M2Yl4801cHePyiIiIiIhInIp5AOSc+wDoG+tyNFcDBw6MdRHils5t\n/dB5rT86t/VH57b+6NzWH53b+qHzGnsxnwg1GmbmmkI5RUREREQkNswMF8UgCDGvARIRERERaSpO\nOOEENm3SHMOx1L17d7744osab68aIBERERGRKPm1DLEuRrMW6RpEWwMU62GwRUREREREGowCIBER\nERERaTYUAImIiIiISLOhAEhERERERJoNBUAiIiIiIs3AtGnTGDNmTKyLEXMKgEREREREGsCWLVtY\ntmwZ+fn59baP7Oxs+vbtS9u2benatSsXXHABy5YtK1tvVuUgaZXatGkTgUCAkpKS2ha1nNWrV9On\nTx/atGlD3759+eCDD+o0/2AKgEREREREask5x/r169m4cWOFdUVFRYwdOZrTv3UKk4ZmcMKxXXjo\ngQfqvAwzZ84kMzOT22+/na1bt7J582bGjx/PSy+9VGf7cM7VaijwQ4cOVVhWVFRERkYGV1xxBbt3\n7+aKK65g+PDhFBcX17a4YSkAEhERERGphXXr1tGnR08G9v4eZ53WmwG9epebLPX+++5j84JFbNrf\njXfyO7GqsAu/u/VX5OTklKUpLi7mySef5PKMnzLp2uv46KOPqlWG/Px8pk6dyuzZsxk+fDitW7cm\nISGB9PR07rnnngrply5dSkpKSrllJ554Im+88QYAK1eupG/fviQnJ9OlSxduuukmAM455xwA2rdv\nT7t27cqO4dFHH6Vnz5507NiRoUOHsnnz5rJ8A4EAs2fPJjU1ldTU1AplWbJkCYcOHeKGG24gMTGR\nCRMm4JwrK0tdUwAkIiIiIlJDJSUlXDT4fK76LI/N+7ryZeHxDF/7DZelDyurJcn+66PcUZhEkv/o\nfRJHcG1ha555/AnAq1W59IJh/OW6Gzl3wQraP/x3ftSvP4sXL466HMuXL+fAgQNkZGREvU1lzeEm\nTpzIpEmTyMvLY8OGDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJb\nsGABK1cfoaKiAAAgAElEQVSuZO3atRX29dFHH3H66aeXW9a7d+9qB4HRUgAkIiIiIlJD7733Hod2\n7OJ6l0wAIwEjq+QovvpiE+vWrYsqj6VLl/Lpsnf4996j+TntueNQBx7e155fXnd91OXYsWMHnTp1\nIhCom8f7I444gvXr17Njxw6OPPJI+vXrV259cBO4OXPmcMstt5CamkogEGDKlCmsXr2a3NzcsjS3\n3norycnJtGzZssK+CgoKSE5OLresXbt27Nmzp06OJZQCIBERkSYiNzeXyRMmMLjfACZPmFDu4UJE\nYqO4uJiWloBxuDbFgEQLlPVhGXXNWO5oXUAB3sABGznIn1oXMvKqKwF49913GXwgkcSgPIaRxHuf\nfRp1X5uOHTuyffv2Ohuc4JFHHuHTTz+lR48epKWl8fLLL0dMu2nTJiZOnEiHDh3o0KEDHTt2xMzY\nsmVLWZrjjz8+4vZJSUkVBobIy8ujbdu2tT+QMBQAiYiINAG5ubn0730GgTnPkblyC4E5z9G/9xkK\ngkRirE+fPuS1asELHH6Af4J8WnfqQM+ePQG48aab6DZ8CN1b5dKv3Xb6tP6aW+6+k7S0NABOOeUU\nclqV4Dgc7KygkG8de1zUo7YNGDCAli1bMn/+/KjSt2nThn379pW9P3ToENu2bSt7f/LJJ5Odnc22\nbdvIysrikksuobCwMGx5unXrxpw5c9i5cyc7d+5k165dFBQU0L9//7I0lR3Hqaeeyocfflhu2Ycf\nfsipp54a1bFUlwIgERGRJmDW9OmMKmjBfUUdOZ8k7ivqyKiCRGZNnx7rook0ay1atOD5V/7JjZ0O\ncmbbrZzRdit3Hgvz/rGg7KE/MTGRR56Zy4fr1/HAwgV88b+vGT9xYlke6enpHEo5litb7uBt9pFN\nHqOP3MXUe38XdTnatWvHtGnTGD9+PAsWLKCwsJDi4mJeffVVpkyZUiF9amoq+/fv59VXX6W4uJi7\n7rqLgwcPlq2fO3cu27dvByA5ORkzIxAI0LlzZwKBABs2bChLO27cOO6+++6y/j15eXk8//zzUZd9\n4MCBJCQk8OCDD3Lw4EH+8Ic/EAgEOPfcc6POozpa1EuuIiIiUqfW5Kwis6h82/lBRUcw851VMSqR\niJTq06cPG77awvLly0lISKB///4kJCRUSNe1a1e6du1aYXmLFi14fdl/uO/uu5n04kt0PqY7s2/5\nJenp6dUqR2ZmJl26dOGuu+7i8ssvp23btpx55pncdtttFdK2a9eO2bNnM3bsWEpKSsjKyirXTG3h\nwoVkZmZSWFhI9+7defbZZ8v679x2222cddZZFBcXs3DhQjIyMti7dy8jRoxg8+bNJCcnc95553HJ\nJZcAVc89lJiYyPz58xk7dixTpkzhO9/5DgsWLKBFi/oJVaymY3g3JDNzTaGcIiIi9WXyhAkE5jzH\nfUUdy5bdnLiTknGXMuPBB2NYMpHmpTZz4EjdiHQN/OVVthlUACQiItIElPYBGlXQgkFFLVmceJDs\npCJWfLC6wlweIlJ/FADFXm0DIPUBEhERaQJSUlJY8cFqSsZdxsx+XSkZd6mCHxGRGlANkIiIiIhI\nlFQDFHuqARIREREREYmSAiARERGJC9H+Kq9f70WaNwVAIiIi0uTt37+fYcOGMW/evErTzZs3j2HD\nhrF///4GKpmINDaaB0hERESatP3795ORkcGiRYtYuHAhACNGjKiQbt68eYwePZqSkhIyMjKYP38+\nrVq1aujiikiMqQZIREREmiznHBdffDGLFi0CoKSkhNGjR1eoCQoOfgAWLVrExRdfrOZwIs2QAiAR\nERFpssyMMWPGEAgcfqQJDYJCgx+AQCDAmDFjqpyhXiSeTJs2jTFjxsS6GDGnAEhERESatBEjRjB3\n7twKQdCoUaM4+qgOjBo1qkLwM3fu3LDN5ETq05YtW1i2bBn5+fn1to/s7Gz69u1L27Zt6dq1Kxdc\ncAHLli0rW1/boH/Tpk0EAoFyn6m6MG7cOHr06EFCQgJPPvlkneYdSgGQiIiINHnhgiDnHNt27yrX\nzE3Bj9QX5xzr169n48aNFdYVFRUxcuwVfOv0ngyddCXHnpDCAw89WOdlmDlzJpmZmdx+++1s3bqV\nzZs3M378eF566aU624dzrlZzIR06dCjs8jPOOIM//elPnHnmmbUpXlQUAImIiEhcKA2CIv3CbWYK\nfqRerFu3jh59etN7YH9OO6sPvQb0YdOmTWXr77t/Bgs2r2L/pl+S/87/o3DVeG793TRycnLK0hQX\nF/Pkk0+ScfllXDvpej766KNqlSE/P5+pU6cye/Zshg8fTuvWrUlISCA9PZ177rmnQvqlS5eSkpJS\nbtmJJ57IG2+8AcDKlSvp27cvycnJdOnShZtuugmAc845B4D27dvTrl27smN49NFH6dmzJx07dmTo\n0KFs3ry5LN9AIMDs2bNJTU0lNTU1bPmvvfZafvSjH9GyZctqHXdNKAASERGRuDFixAg6JbcPu65T\ncnsFP1LnSkpKGHzRMD676mT2bf4lhV/ewtrhx5J+2UVltSR/zX6SwjvOhST/4f6kjhRe24/Hn3ka\n8GpVLrg0g+v+chcLzjUebr+efj/6AYsXL466HMuXL+fAgQNkZGREvU1lzeEmTpzIpEmTyMvLY8OG\nDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJbsGABK1euZO3atVGX\nr74oABIREZG4MW/ePLbn7Q67bnve7irnCRKprvfee48dh/bhrj8LAgFICFCSdQ5ffJXLunXrospj\n6dKlLPv0A/b++//g5/04dMd57Hs4g+t+eWPU5dixYwedOnUq1wy0No444gjWr1/Pjh07OPLII+nX\nr1+59cFN4ObMmcMtt9xCamoqgUCAKVOmsHr1anJzc8vS3HrrrSQnJzdIDU9VFACJiIhIXCgd7S1S\n3wTnXNghskVqo7i4GGvZAoJrU8ywxASKi4sBuGbUFbS+4w0oOOCt37iD1n96h6tGXg7Au+++y4HB\nJ0NiwuE8hvXks/f+G3Vfm44dO7J9+/Y6G5zgkUce4dNPP6VHjx6kpaXx8ssvR0y7adMmJk6cSIcO\nHejQoQMdO3bEzNiyZUtZmuOPP75OylUXFACJiIhIkxduqGszo3P7o8o184k0T5BITfXp04dWecXw\nwoeHFz6xik6t29GzZ08AbrpxMsO79aFV93tp1+/PtO7zEHffMpW0tDQATjnlFFrlbIHgYGfFJo79\nVveoR20bMGAALVu2ZP78+VGlb9OmDfv27St7f+jQIbZt21b2/uSTTyY7O5tt27aRlZXFJZdcQmFh\nYdjydOvWjTlz5rBz50527tzJrl27KCgooH///mVpGtOQ8wqAREREpEmLNM9PdnY2W3ftJDs7u9J5\ngkRqo0WLFrzy/Hw63fg6bc98iLZn/JFj71zOP+a9UPbQn5iYyDOPPMn6D9ey8IEn+d8XuUwcP6Es\nj/T0dFIOJdHyyr/B259D9nscOfpv3Dv1N1GXo127dkybNo3x48ezYMECCgsLKS4u5tVXX2XKlCkV\n0qemprJ//35effVViouLueuuuzh48GDZ+rlz57J9+3YAkpOTMTMCgQCdO3cmEAiwYcOGsrTjxo3j\n7rvvLuvfk5eXx/PPP1+t81hUVMT+/ftxznHw4EEOHDhQfxMVO+ca/csrpoiIiEh5JSUlLj093QFl\nr0Ag4J555ply6Z555hkXCATKpUtPT3clJSUxKrk0VZGeSw8ePOiWLl3q/vOf/7ji4uJq57t7926X\nddsUd0qfXu4HQwe5l19+uUbly87Odn369HFJSUmuS5cubtiwYW758uXOOefuuOMON2bMmLK0Tzzx\nhOvSpYs75phj3IwZM9yJJ57oFi9e7Jxz7vLLL3dHH320a9u2rTvttNPcSy+9VLbd1KlTXefOnd1R\nRx3lcnJynHPOPf30065Xr14uOTnZdevWzY0dO7YsfSAQcBs2bKi03AMHDnRm5gKBQNlr6dKlYdNG\nugb+8ipjC3P1FVnVITNzTaGcIiIi0vD2799PRkYGixYtqnSen+CaoiFDhjB//nxatWoVgxJLU1ab\nOXCkbkS6Bv7yKtvaKQASERGRJm///v1cfPHFjBkzptKhrufNm8dTTz3FCy+8oOBHakQBUOwpABIR\nERHh8Az1dZVOJBwFQLFX2wBIgyCIiIhIXIg2qFHwI9K8KQASEREREZFmQwGQiIiIiIg0GwqARERE\nRESk2VAAJCIiIiIizYYCIBERERERaTYUAImIiIiINAPTpk1jzJgxsS5GzCkAEhERiWO5ublMnjCB\nwf0GMHnCBHJzc2NdJJFma8uWLSxbtoz8/Px620d2djZ9+/albdu2dO3alQsuuIBly5aVra/tMPCb\nNm0iEAhQUlJS26KW+eyzz8jIyODoo4+mU6dODB06lHXr1tVZ/qEUAImIiMSp3Nxc+vc+g8Cc58hc\nuYXAnOfo3/sMBUEi9cA5x/r169m4cWOFdUVFRYwdeRWnf+s0Jg39BScc242HHvhjnZdh5syZZGZm\ncvvtt7N161Y2b97M+PHjeemll+psH6UTCdd0MthDhw5VWLZ7926GDx/OunXr+Oabb+jbty/Dhw+v\nbVEjUgAkIiISp2ZNn86oghbcV9SR80nivqKOjCpIZNb06bEumkhcWbduHX16fJeBvX/AWaelMaBX\nPzZt2lS2/v77ZrJ5wVo27c/mnfw/sqpwNr+79S5ycnLK0hQXF/Pkk09yecZIJl17Ax999FG1ypCf\nn8/UqVOZPXs2w4cPp3Xr1iQkJJCens4999xTIf3SpUtJSUkpt+zEE0/kjTfeAGDlypX07duX5ORk\nunTpwk033QTAOeecA0D79u1p165d2TE8+uij9OzZk44dOzJ06FA2b95clm8gEGD27NmkpqaSmppa\noSx9+/bl6quvpn379iQkJHDjjTfy6aefsmvXrmqdg2gpABIREYlTa3JWMaioZbllg4qOYM07q2JU\nIpH4U1JSwkWDL+Sqz37I5n3ZfFk4j+Frz+Cy9IvLakmy//o0dxSOIYnWAJzEcVxbOIxnHp8LeLUq\nl17wU/5y3UzOXZBC+4fz+VG/H7J48eKoy7F8+XIOHDhARkZG1NtU1hxu4sSJTJo0iby8PDZs2MBl\nl10GwJtvvgl4AVd+fj5paWksWLCAe+65h/nz57Nt2zbOPvtsRo4cWS6/BQsWsHLlStauXVtluZYu\nXUqXLl046qijoj6W6lAAJCIiEqd6pfVhceKBcssWJx6kV78+MSqRSPx57733OLTjANe7iwgQIIEE\nskpG8NUXW6Lux7J06VI+XfYR/977e35OOnccuoqH993IL6+7Kepy7Nixg06dOhEI1M3j/RFHHMH6\n9evZsWMHRx55JP369Su3PrgJ3Jw5c7jllltITU0lEAgwZcoUVq9eXa657a233kpycjItW5b/USbU\nl19+yfXXX8/9999fJ8cRjgIgERGRODUpK4vspGJuTtzBQgq4OXEn2UlFTMrKinXRROJGcXExLe0I\njMO1KYaRaC0oLi4GYNQ1l3NH66cooBCAjXzFn1r/k5FXjQbg3XffZfCB75FIi7I8hjGA9z77IOq+\nNh07dmT79u11NjjBI488wqeffkqPHj1IS0vj5Zdfjph206ZNTJw4kQ4dOtChQwc6duyImbFly5ay\nNMcff3yV+9y2bRtDhgzh+uuvL6txqg8KgEREROJUSkoKKz5YTcm4y5jZrysl4y5lxQerK7T7F5Ga\n69OnD3mtCnmBpWXLnmARrTu1oWfPngDceFMm3Yb3pHurUfRrdz19Wl/HLXffTlpaGgCnnHIKOa0+\nxXE42FnBWr517IlRj9o2YMAAWrZsyfz586NK36ZNG/bt21f2/tChQ2zbtq3s/cknn0x2djbbtm0j\nKyuLSy65hMLCwrDl6datG3PmzGHnzp3s3LmTXbt2UVBQQP/+/cvSVHUcu3fvZsiQIWRkZDBlypSo\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the results of the clustering from implementation\n", "rs.cluster_results(reduced_data, preds, centers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It's okayish." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Implementation: Data Recovery\n", "Each cluster present in the visualization above has a central point. These centers (or means) are not specifically data points from the data, but rather the *averages* of all the data points predicted in the respective clusters. For the problem of creating customer segments, a cluster's center point corresponds to *the average customer of that segment*. Since the data is currently reduced in dimension and scaled by a logarithm, we can recover the representative customer spending from these data points by applying the inverse transformations.\n", "\n", "In the code block below, you will need to implement the following:\n", " - Apply the inverse transform to `centers` using `pca.inverse_transform` and assign the new centers to `log_centers`.\n", " - Apply the inverse function of `np.log` to `log_centers` using `np.exp` and assign the true centers to `true_centers`.\n" ] }, { "cell_type": "code", "execution_count": 90, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
Segment 06055.06542.09557.01354.02830.01185.0
Segment 19806.01925.02355.02216.0286.0721.0
Segment 22432.02244.03455.0778.0608.0348.0
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "Segment 0 6055.0 6542.0 9557.0 1354.0 2830.0 1185.0\n", "Segment 1 9806.0 1925.0 2355.0 2216.0 286.0 721.0\n", "Segment 2 2432.0 2244.0 3455.0 778.0 608.0 348.0" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# TODO: Inverse transform the centers\n", "log_centers = pca.inverse_transform(centers)\n", "\n", "# TODO: Exponentiate the centers\n", "true_centers = np.exp(log_centers)\n", "\n", "# Display the true centers\n", "segments = ['Segment {}'.format(i) for i in range(0,len(centers))]\n", "true_centers = pd.DataFrame(np.round(true_centers), columns = data.keys())\n", "true_centers.index = segments\n", "display(true_centers)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 8\n", "Consider the total purchase cost of each product category for the representative data points above, and reference the statistical description of the dataset at the beginning of this project. *What set of establishments could each of the customer segments represent?* \n", "**Hint:** A customer who is assigned to `'Cluster X'` should best identify with the establishments represented by the feature set of `'Segment X'`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Segment 0 could represent supermarkets.\n", " - Their spendings for all categories except Frozen are above the median.\n", "- Segment 1 could represent a fresh food market.\n", " - Their spending for Fresh and Frozen are above the median, but their spending for Grocery, Milk and Detergents_Paper are below the median as those are often kept in fridges or placed in boxes on shelves. Delicatessen spending is also below the median - that is often fancier stuff that isn't found in street markets.\n", " - Frozen products are often sold in markets placed in big boxes lined with ice cubes.\n", "- Segment 2 could represent a corner store.\n", " - Their spending on Fresh and Delicatessen are in the bottom quartile.\n", " - Their spending on Detergents_Paper, Frozen, Grocery and Milk are below the median." ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
count440.000000440.000000440.000000440.000000440.000000440.000000
mean12000.2977275796.2659097951.2772733071.9318182881.4931821524.870455
std12647.3288657380.3771759503.1628294854.6733334767.8544482820.105937
min3.00000055.0000003.00000025.0000003.0000003.000000
25%3127.7500001533.0000002153.000000742.250000256.750000408.250000
50%8504.0000003627.0000004755.5000001526.000000816.500000965.500000
75%16933.7500007190.25000010655.7500003554.2500003922.0000001820.250000
max112151.00000073498.00000092780.00000060869.00000040827.00000047943.000000
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen \\\n", "count 440.000000 440.000000 440.000000 440.000000 \n", "mean 12000.297727 5796.265909 7951.277273 3071.931818 \n", "std 12647.328865 7380.377175 9503.162829 4854.673333 \n", "min 3.000000 55.000000 3.000000 25.000000 \n", "25% 3127.750000 1533.000000 2153.000000 742.250000 \n", "50% 8504.000000 3627.000000 4755.500000 1526.000000 \n", "75% 16933.750000 7190.250000 10655.750000 3554.250000 \n", "max 112151.000000 73498.000000 92780.000000 60869.000000 \n", "\n", " Detergents_Paper Delicatessen \n", "count 440.000000 440.000000 \n", "mean 2881.493182 1524.870455 \n", "std 4767.854448 2820.105937 \n", "min 3.000000 3.000000 \n", "25% 256.750000 408.250000 \n", "50% 816.500000 965.500000 \n", "75% 3922.000000 1820.250000 \n", "max 40827.000000 47943.000000 " ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe()" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Question 9\n", "*For each sample point, which customer segment from* ***Question 8*** *best represents it? Are the predictions for each sample point consistent with this?*\n", "\n", "Run the code block below to find which cluster each sample point is predicted to be." ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Sample point 0 predicted to be in Cluster 0\n", "Sample point 1 predicted to be in Cluster 0\n", "Sample point 2 predicted to be in Cluster 2\n" ] } ], "source": [ "# Display the predictions\n", "for i, pred in enumerate(sample_preds):\n", " print(\"Sample point\", i, \"predicted to be in Cluster\", pred)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "**Answer:**\n", "1. Sample point 0: Supermarket\n", " - Original guess: Retailer <- I'm surprised it was put in the same category as Sample point 1. I thought it was quite different. The clusters are large though, which may explain both being in the same cluster.\n", "2. Sample point 1: Supermarket\n", " - Original guess: Market <- The same!\n", "3. Sample point 2: Corner store\n", " - Original guess: Restaurant. <- Reasonable: I was going for something relatively small. This is in line with the things grouped under Cluster 2 in the visualisation." ] }, { "cell_type": "code", "execution_count": 95, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
FreshMilkGroceryFrozenDetergents_PaperDelicatessen
01611746197927801026408272944
111215129627181481674549488550
2333370211560115550
\n", "
" ], "text/plain": [ " Fresh Milk Grocery Frozen Detergents_Paper Delicatessen\n", "0 16117 46197 92780 1026 40827 2944\n", "1 112151 29627 18148 16745 4948 8550\n", "2 3 333 7021 15601 15 550" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "samples" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this final section, you will investigate ways that you can make use of the clustered data. First, you will consider how the different groups of customers, the ***customer segments***, may be affected differently by a specific delivery scheme. Next, you will consider how giving a label to each customer (which *segment* that customer belongs to) can provide for additional features about the customer data. Finally, you will compare the ***customer segments*** to a hidden variable present in the data, to see whether the clustering identified certain relationships." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Question 10\n", "Companies will often run [A/B tests](https://en.wikipedia.org/wiki/A/B_testing) when making small changes to their products or services to determine whether making that change will affect its customers positively or negatively. The wholesale distributor is considering changing its delivery service from currently 5 days a week to 3 days a week. However, the distributor will only make this change in delivery service for customers that react positively. *How can the wholesale distributor use the customer segments to determine which customers, if any, would react positively to the change in delivery service?* \n", "**Hint:** Can we assume the change affects all customers equally? How can we determine which group of customers it affects the most?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "- Make this change in delivery service for 10% of the customers in each cluster (select this 10% randomly) for e.g. 2 weeks. Mark these customers as customers in Cluster 0', 1' and 2' respectively.\n", " - Make sure there are a statistically significant number of customers in each cluster i'.\n", "- Note down whether these customers react positively or negatively (this can be a +1 or -1 value, or some value from -1 to +1, with -1 meaning they reacted strongly negatively and +1 meaning they reacted strongly positively).\n", "- Take the mean of the values assigned for each cluster 0', 1' and 2'. \n", "- If the mean value for a cluster is positive, then the distributor can consider making the change in delivery service for more customers in that segment. \n", " - This inference assumes that customers in that segment may behave similarly.\n", "- By testing on a smaller group of customers first, the distributor can test their hypotheses without risking making a lot of customers angry (if they react negatively)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 11\n", "Additional structure is derived from originally unlabeled data when using clustering techniques. Since each customer has a ***customer segment*** it best identifies with (depending on the clustering algorithm applied), we can consider *'customer segment'* as an **engineered feature** for the data. Assume the wholesale distributor recently acquired ten new customers and each provided estimates for anticipated annual spending of each product category. Knowing these estimates, the wholesale distributor wants to classify each new customer to a ***customer segment*** to determine the most appropriate delivery service. \n", "*How can the wholesale distributor label the new customers using only their estimated product spending and the* ***customer segment*** *data?* \n", "**Hint:** A supervised learner could be used to train on the original customers. What would be the target variable?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- Use a supervised learning algorithm with the **estimated product spending as features (6 features) and customer segment as the target variable**.\n", " - This would be a **classification problem** because the target variable has finitely many discrete labels (3). \n", " - **K Nearest Neighbours** might be a good choice of algorithm because there is no obvious underlying mathematical relationship between the customer segment and product spending.\n", "- The training and test sets would come from existing customers with those labels assigned." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualizing Underlying Distributions\n", "\n", "At the beginning of this project, it was discussed that the `'Channel'` and `'Region'` features would be excluded from the dataset so that the customer product categories were emphasized in the analysis. By reintroducing the `'Channel'` feature to the dataset, an interesting structure emerges when considering the same PCA dimensionality reduction applied earlier to the original dataset.\n", "\n", "Run the code block below to see how each data point is labeled either `'HoReCa'` (Hotel/Restaurant/Cafe) or `'Retail'` the reduced space. In addition, you will find the sample points are circled in the plot, which will identify their labeling." ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "data": { "image/png": "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\nWbFCa5/t0ypFR9q2qV8bKhbosc5nAqwMAFDMWAgVAALy85//XJdccokGBt4blD9//nytXLlS0WhU\nL7/8stra2nTgh537779f77zzjh588EHNmjVLbW0/Gwk/fX19mj9/vsxM8+efrr6+14J4SJMSryxX\nW88Orcq8F4CYkAAAkC/oAQKAabR3716dddZZeuuttyRJp5xyilpaWnT11VcrEomMbLdz507dcsst\nuvfee0favvnNb+rSSy/V8uXLJUmx2Dl63/tO0OBgRv/5n8/p2muv1913/++ZfUDH4NAxQNkJCViU\nFACQQ5wCBwABuOOOO9TQ0CBJOumkk9TR0THuZAfurptuukkbNmyQJH34wx/W22+/o3ffPUvSedmt\nSiSVqrT0ad155036/Oc/n/sHMQ2YkAAAMNMIQAAww9xd55xzjl555RVJ0l133aXrrrtO0vjTQmcy\nGZ155pnq6+uTJF199TWKRk+QNPb9u7S0ROvW/bVOO+20GX1MAAAUCgIQAMyw3t7ekZnaPvCBD2jX\nrl2KRqNHnRb61ltv1bp16yRJV111lR566KEgHwYAAAVpogGoZCaKAYAw2LVr18jliooKRaPDkwC0\nJJOq7S9Vc6ZMqxRVc6ZMtf0RtSSTkqRPfepTI7d78803Z7ZoAABChgAEANNk//79I5dnz549cjnV\n2a2azJwx29ZkZivV1S1JY6a/HhwczHGVAACEGwEIAKZJWdl7C38+//zzI4EoXlmutsjAmG1HTwv9\n3HPPHXYfAABg+hGAAGCaLF++XCeeeKKk4fV7HnnkEUlSQyKh1uigmiK7tU39aorsUWs0o4ZEQu6u\nTZs2jezjkksuCaR2AADCggAEANNkzpw5+tznPjdy/Wtf+5p+//vfKxaLqaO3R0N1a7ShYoGG6laP\nTIDQ2tqqnp4eSdLxxx+vz372s0GVDwBAKDALHABMo507d2rRokUjY3kuvPBCfe973ztk+ur9+/fr\nnnvu0fXXX699+/ZJkq699lrdfffdM14zAADFgGmwASAgd955p2644YaR67NmzdKVV16pyy+/XNFo\nVC+//LI2b96s1157bWSbs88+W7/4xS80b968ACoGAKDwEYAAIEC33367mpqaJrTtueeeq0cffZRF\nTgEAmALWAQKAAN1000366U9/qurq6nG3mTdvnhKJhJ5++mnCDwAAM4QeIADIsRdffFFbtmzRG2+8\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Display the clustering results based on 'Channel' data\n", "rs.channel_results(reduced_data, outliers, pca_samples)" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\nk+6d7Zy7CsAfTSc/lmUSERGgdoM/SAyZWS7egASVDTYgItJsxbQJnJn1xps9ey3QG68z8kTnXGGl\nG4qIiIiIiNRArAOgM4EVeLO0rzJv8rg859zUkHT6JVJERERERCrlnKuyCXesR4H7Esh1zq3y3z9P\nhKE/nXN61cNr6tSpMS9DvL50bnVem9pL51bntim+dG51bpvaS+e1/l7RimkA5LzZoHNLx/rHm2Nh\nbQyLJCIiIiIicawxjAJ3A96M2Yl4801cHePyiIiIiIhInIp5AOSc+wDoG+tyNFcDBw6MdRHils5t\n/dB5rT86t/VH57b+6NzWH53b+qHzGnsxnwg1GmbmmkI5RUREREQkNswMF8UgCDGvARIRERERaSpO\nOOEENm3SHMOx1L17d7744osab68aIBERERGRKPm1DLEuRrMW6RpEWwMU62GwRUREREREGowCIBER\nERERaTYUAImIiIiISLOhAEhERERERJoNBUAiIiIiIs3AtGnTGDNmTKyLEXMKgEREREREGsCWLVtY\ntmwZ+fn59baP7Oxs+vbtS9u2benatSsXXHABy5YtK1tvVuUgaZXatGkTgUCAkpKS2ha1nNWrV9On\nTx/atGlD3759+eCDD+o0/2AKgEREREREask5x/r169m4cWOFdUVFRYwdOZrTv3UKk4ZmcMKxXXjo\ngQfqvAwzZ84kMzOT22+/na1bt7J582bGjx/PSy+9VGf7cM7VaijwQ4cOVVhWVFRERkYGV1xxBbt3\n7+aKK65g+PDhFBcX17a4YSkAEhERERGphXXr1tGnR08G9v4eZ53WmwG9epebLPX+++5j84JFbNrf\njXfyO7GqsAu/u/VX5OTklKUpLi7mySef5PKMnzLp2uv46KOPqlWG/Px8pk6dyuzZsxk+fDitW7cm\nISGB9PR07rnnngrply5dSkpKSrllJ554Im+88QYAK1eupG/fviQnJ9OlSxduuukmAM455xwA2rdv\nT7t27cqO4dFHH6Vnz5507NiRoUOHsnnz5rJ8A4EAs2fPJjU1ldTU1AplWbJkCYcOHeKGG24gMTGR\nCRMm4JwrK0tdUwAkIiIiIlJDJSUlXDT4fK76LI/N+7ryZeHxDF/7DZelDyurJcn+66PcUZhEkv/o\nfRJHcG1ha555/AnAq1W59IJh/OW6Gzl3wQraP/x3ftSvP4sXL466HMuXL+fAgQNkZGREvU1lzeEm\n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\nbtmJJ57IG2+8AcDKlSvp27cvycnJdOnShZtuugmAc845B4D27dvTrl27smN49NFH6dmzJx07dmTo\n0KFs3ry5LN9AIMDs2bNJTU0lNTU1bPmvvfZafvSjH9GyZctqHXdNKAASERGRuDFixAg6JbcPu65T\ncnsFP1LnSkpKGHzRMD676mT2bf4lhV/ewtrhx5J+2UVltSR/zX6SwjvOhST/4f6kjhRe24/Hn3ka\n8GpVLrg0g+v+chcLzjUebr+efj/6AYsXL466HMuXL+fAgQNkZGREvU1lzeEmTpzIpEmTyMvLY8OG\nDVx22WUAvPnmm4AXcOXn55OWlsaCBQu45557mD9/Ptu2bePss89m5MiR5fJbsGABK1euZO3atVGX\nr74oABIREZG4MW/ePLbn7Q67bnve7irnCRKprvfee48dh/bhrj8LAgFICFCSdQ5ffJXLunXrospj\n6dKlLPv0A/b++//g5/04dMd57Hs4g+t+eWPU5dixYwedOnUq1wy0No444gjWr1/Pjh07OPLII+nX\nr1+59cFN4ObMmcMtt9xCamoqgUCAKVOmsHr1anJzc8vS3HrrrSQnJzdIDU9VFACJiIhIXCgd7S1S\n3wTnXNghskVqo7i4GGvZAoJrU8ywxASKi4sBuGbUFbS+4w0oOOCt37iD1n96h6tGXg7Au+++y4HB\nJ0NiwuE8hvXks/f+G3Vfm44dO7J9+/Y6G5zgkUce4dNPP6VHjx6kpaXx8ssvR0y7adMmJk6cSIcO\nHejQoQMdO3bEzNiyZUtZmuOPP75OylUXFACJiIhIkxduqGszo3P7o8o184k0T5BITfXp04dWecXw\nwoeHFz6xik6t29GzZ08AbrpxMsO79aFV93tp1+/PtO7zEHffMpW0tDQATjnlFFrlbIHgYGfFJo79\nVveoR20bMGAALVu2ZP78+VGlb9OmDfv27St7f+jQIbZt21b2/uSTTyY7O5tt27aRlZXFJZdcQmFh\nYdjydOvWjTlz5rBz50527tzJrl27KCgooH///mVpGtOQ8wqAREREpEmLNM9PdnY2W3ftJDs7u9J5\ngkRqo0WLFrzy/Hw63fg6bc98iLZn/JFj71zOP+a9UPbQn5iYyDOPPMn6D9ey8IEn+d8XuUwcP6Es\nj/T0dFIOJdHyyr/B259D9nscOfpv3Dv1N1GXo127dkybNo3x48ezYMECCgsLKS4u5tVXX2XKlCkV\n0qemprJ//35effVViouLueuuuzh48GDZ+rlz57J9+3YAkpOTMTMCgQCdO3cmEAiwYcOGsrTjxo3j\n7rvvLuvfk5eXx/PPP1+t81hUVMT+/ftxznHw4EEOHDhQfxMVO+ca/csrpoiIiEh5JSUlLj093QFl\nr0Ag4J555ply6Z555hkXCATKpUtPT3clJSUxKrk0VZGeSw8ePOiWLl3q/vOf/7ji4uJq57t7926X\nddsUd0qfXu4HQwe5l19+uUbly87Odn369HFJSUmuS5cubtiwYW758uXOOefuuOMON2bMmLK0Tzzx\nhOvSpYs75phj3IwZM9yJJ57oFi9e7Jxz7vLLL3dHH320a9u2rTvttNPcSy+9VLbd1KlTXefOnd1R\nRx3lcnJynHPOPf30065Xr14uOTnZdevWzY0dO7YsfSAQcBs2bKi03AMHDnRm5gKBQNlr6dKlYdNG\nugb+8ipjC3P1FVnVITNzTaGcIiIi0vD2799PRkYGixYtqnSen+CaoiFDhjB//nxatWoVgxJLU1ab\nOXCkbkS6Bv7yKtvaKQASERGRJm///v1cfPHFjBkzptKhrufNm8dTTz3FCy+8oOBHakQBUOwpABIR\nERHh8Az1dZVOJBwFQLFX2wBIgyCIiIhIXIg2qFHwI9K8KQASEREREZFmQwGQiIiIiIg0GwqARERE\nRESk2VAAJCIiIiIizYYCIBERERERaTYUAImIiIiINAPTpk1jzJgxsS5GzCkAEhERiWO5ublMnjCB\nwf0GMHnCBHJzc2NdJJFma8uWLSxbtoz8/Px620d2djZ9+/albdu2dO3alQsuuIBly5aVra/tMPCb\nNm0iEAhQUlJS26KW+eyzz8jIyODoo4+mU6dODB06lHXr1tVZ/qEUAImIiMSp3Nxc+vc+g8Cc58hc\nuYXAnOfo3/sMBUEi9cA5x/r169m4cWOFdUVFRYwdeRWnf+s0Jg39BScc242HHvhjnZdh5syZZGZm\ncvvtt7N161Y2b97M+PHjeemll+psH6UTCdd0MthDhw5VWLZ7926GDx/OunXr+Oabb+jbty/Dhw+v\nbVEjUgAkIiISp2ZNn86oghbcV9SR80nivqKOjCpIZNb06bEumkhcWbduHX16fJeBvX/AWaelMaBX\nPzZt2lS2/v77ZrJ5wVo27c/mnfw/sqpwNr+79S5ycnLK0hQXF/Pkk09yecZIJl17Ax999FG1ypCf\nn8/UqVOZPXs2w4cPp3Xr1iQkJJCens4999xTIf3SpUtJSUkpt+zEE0/kjTfeAGDlypX07duX5ORk\nunTpwk033QTAOeecA0D79u1p165d2TE8+uij9OzZk44dOzJ06FA2b95clm8gEGD27NmkpqaSmppa\noSx9+/bl6quvpn379iQkJHDjjTfy6aefsmvXrmqdg2gpABIREYlTa3JWMaioZbllg4qOYM07q2JU\nIpH4U1JSwkWDL+Sqz37I5n3ZfFk4j+Frz+Cy9IvLakmy//o0dxSOIYnWAJzEcVxbOIxnHp8LeLUq\nl17wU/5y3UzOXZBC+4fz+VG/H7J48eKoy7F8+XIOHDhARkZG1NtU1hxu4sSJTJo0iby8PDZs2MBl\nl10GwJtvvgl4AVd+fj5paWksWLCAe+65h/nz57Nt2zbOPvtsRo4cWS6/BQsWsHLlStauXVtluZYu\nXUqXLl046qijoj6W6lAAJCIiEqd6pfVhceKBcssWJx6kV78+MSqRSPx57733OLTjANe7iwgQIIEE\nskpG8NUXW6Lux7J06VI+XfYR/977e35OOnccuoqH993IL6+7Kepy7Nixg06dOhEI1M3j/RFHHMH6\n9evZsWMHRx55JP369Su3PrgJ3Jw5c7jllltITU0lEAgwZcoUVq9eXa657a233kpycjItW5b/USbU\nl19+yfXXX8/9999fJ8cRjgIgERGRODUpK4vspGJuTtzBQgq4OXEn2UlFTMrKinXRROJGcXExLe0I\njMO1KYaRaC0oLi4GYNQ1l3NH66cooBCAjXzFn1r/k5FXjQbg3XffZfCB75FIi7I8hjGA9z77IOq+\nNh07dmT79u11NjjBI488wqeffkqPHj1IS0vj5Zdfjph206ZNTJw4kQ4dOtChQwc6duyImbFly5ay\nNMcff3yV+9y2bRtDhgzh+uuvL6txqg8KgEREROJUSkoKKz5YTcm4y5jZrysl4y5lxQerK7T7F5Ga\n69OnD3mtCnmBpWXLnmARrTu1oWfPngDceFMm3Yb3pHurUfRrdz19Wl/HLXffTlpaGgCnnHIKOa0+\nxXE42FnBWr517IlRj9o2YMAAWrZsyfz586NK36ZNG/bt21f2/tChQ2zbtq3s/cknn0x2djbbtm0j\nKyuLSy65hMLCwrDl6datG3PmzGHnzp3s3LmTXbt2UVBQQP/+/cvSVHUcu3fvZsiQIWRkZDBlypSo\n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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Clustering plot\n", "\n", "rs.cluster_results(reduced_data, preds, centers, pca_samples)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 12\n", "*How well does the clustering algorithm and number of clusters you've chosen compare to this underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers? Are there customer segments that would be classified as purely 'Retailers' or 'Hotels/Restaurants/Cafes' by this distribution? Would you consider these classifications as consistent with your previous definition of the customer segments?*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Answer:**\n", "\n", "- The previous clustering does a moderately good job of clustering the data above the (Dimension 2 > -2) line, with Retailer corresponding to Cluster 0 and Hotel/Restaurant/Cafe corresponding to Cluster 1. Below the (Dimension 2 > -2) line, however, the previous clustering does not distinguish between the Ho/Re/Ca and Retailer, instead grouping them together in one different cluster.\n", "- The customer segment 0 would be classified almost entirely as Retailer and the customer segment 1 would be classified almost entirely as Ho/Re/Ca by this distribution.\n", "- These classifications are consistent with previous definitions of the customer segments to some extent. \n", " - Some sentiments are the same, e.g. \n", " - The exact labels (e.g. 'Retailer') used are not the same, but that's because I had a different understanding of 'Retailers' before seeing this distribution. It's good to have a data-based (i.e. example-based) definition of the word to make sure everyone is on the same page. :D\n", "\n", "- This is a positive result, because this means that customers in Ho/Re/Ca have similar spending patterns to some extent, and likewise with Retailers.\n", "\n", "- It looks possible to have clustered the data into two clusters that are similar to the channels provided. The only points that would've been harder to classify 'correctly' would be the mix of red points invading the bottom right territory of the green points." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **Note**: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to \n", "**File -> Download as -> HTML (.html)**. Include the finished document along with this notebook as your submission." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p3-creating-customer-segments/customers.csv ================================================ Channel,Region,Fresh,Milk,Grocery,Frozen,Detergents_Paper,Delicatessen 2,3,12669,9656,7561,214,2674,1338 2,3,7057,9810,9568,1762,3293,1776 2,3,6353,8808,7684,2405,3516,7844 1,3,13265,1196,4221,6404,507,1788 2,3,22615,5410,7198,3915,1777,5185 2,3,9413,8259,5126,666,1795,1451 2,3,12126,3199,6975,480,3140,545 2,3,7579,4956,9426,1669,3321,2566 1,3,5963,3648,6192,425,1716,750 2,3,6006,11093,18881,1159,7425,2098 2,3,3366,5403,12974,4400,5977,1744 2,3,13146,1124,4523,1420,549,497 2,3,31714,12319,11757,287,3881,2931 2,3,21217,6208,14982,3095,6707,602 2,3,24653,9465,12091,294,5058,2168 1,3,10253,1114,3821,397,964,412 2,3,1020,8816,12121,134,4508,1080 1,3,5876,6157,2933,839,370,4478 2,3,18601,6327,10099,2205,2767,3181 1,3,7780,2495,9464,669,2518,501 2,3,17546,4519,4602,1066,2259,2124 1,3,5567,871,2010,3383,375,569 1,3,31276,1917,4469,9408,2381,4334 2,3,26373,36423,22019,5154,4337,16523 2,3,22647,9776,13792,2915,4482,5778 2,3,16165,4230,7595,201,4003,57 1,3,9898,961,2861,3151,242,833 1,3,14276,803,3045,485,100,518 2,3,4113,20484,25957,1158,8604,5206 1,3,43088,2100,2609,1200,1107,823 1,3,18815,3610,11107,1148,2134,2963 1,3,2612,4339,3133,2088,820,985 1,3,21632,1318,2886,266,918,405 1,3,29729,4786,7326,6130,361,1083 1,3,1502,1979,2262,425,483,395 2,3,688,5491,11091,833,4239,436 1,3,29955,4362,5428,1729,862,4626 2,3,15168,10556,12477,1920,6506,714 2,3,4591,15729,16709,33,6956,433 1,3,56159,555,902,10002,212,2916 1,3,24025,4332,4757,9510,1145,5864 1,3,19176,3065,5956,2033,2575,2802 2,3,10850,7555,14961,188,6899,46 2,3,630,11095,23998,787,9529,72 2,3,9670,7027,10471,541,4618,65 2,3,5181,22044,21531,1740,7353,4985 2,3,3103,14069,21955,1668,6792,1452 2,3,44466,54259,55571,7782,24171,6465 2,3,11519,6152,10868,584,5121,1476 2,3,4967,21412,28921,1798,13583,1163 1,3,6269,1095,1980,3860,609,2162 1,3,3347,4051,6996,239,1538,301 2,3,40721,3916,5876,532,2587,1278 2,3,491,10473,11532,744,5611,224 1,3,27329,1449,1947,2436,204,1333 1,3,5264,3683,5005,1057,2024,1130 2,3,4098,29892,26866,2616,17740,1340 2,3,5417,9933,10487,38,7572,1282 1,3,13779,1970,1648,596,227,436 1,3,6137,5360,8040,129,3084,1603 2,3,8590,3045,7854,96,4095,225 2,3,35942,38369,59598,3254,26701,2017 2,3,7823,6245,6544,4154,4074,964 2,3,9396,11601,15775,2896,7677,1295 1,3,4760,1227,3250,3724,1247,1145 2,3,85,20959,45828,36,24231,1423 1,3,9,1534,7417,175,3468,27 2,3,19913,6759,13462,1256,5141,834 1,3,2446,7260,3993,5870,788,3095 1,3,8352,2820,1293,779,656,144 1,3,16705,2037,3202,10643,116,1365 1,3,18291,1266,21042,5373,4173,14472 1,3,4420,5139,2661,8872,1321,181 2,3,19899,5332,8713,8132,764,648 2,3,8190,6343,9794,1285,1901,1780 1,3,20398,1137,3,4407,3,975 1,3,717,3587,6532,7530,529,894 2,3,12205,12697,28540,869,12034,1009 1,3,10766,1175,2067,2096,301,167 1,3,1640,3259,3655,868,1202,1653 1,3,7005,829,3009,430,610,529 2,3,219,9540,14403,283,7818,156 2,3,10362,9232,11009,737,3537,2342 1,3,20874,1563,1783,2320,550,772 2,3,11867,3327,4814,1178,3837,120 2,3,16117,46197,92780,1026,40827,2944 2,3,22925,73498,32114,987,20070,903 1,3,43265,5025,8117,6312,1579,14351 1,3,7864,542,4042,9735,165,46 1,3,24904,3836,5330,3443,454,3178 1,3,11405,596,1638,3347,69,360 1,3,12754,2762,2530,8693,627,1117 2,3,9198,27472,32034,3232,18906,5130 1,3,11314,3090,2062,35009,71,2698 2,3,5626,12220,11323,206,5038,244 1,3,3,2920,6252,440,223,709 2,3,23,2616,8118,145,3874,217 1,3,403,254,610,774,54,63 1,3,503,112,778,895,56,132 1,3,9658,2182,1909,5639,215,323 2,3,11594,7779,12144,3252,8035,3029 2,3,1420,10810,16267,1593,6766,1838 2,3,2932,6459,7677,2561,4573,1386 1,3,56082,3504,8906,18028,1480,2498 1,3,14100,2132,3445,1336,1491,548 1,3,15587,1014,3970,910,139,1378 2,3,1454,6337,10704,133,6830,1831 2,3,8797,10646,14886,2471,8969,1438 2,3,1531,8397,6981,247,2505,1236 2,3,1406,16729,28986,673,836,3 1,3,11818,1648,1694,2276,169,1647 2,3,12579,11114,17569,805,6457,1519 1,3,19046,2770,2469,8853,483,2708 1,3,14438,2295,1733,3220,585,1561 1,3,18044,1080,2000,2555,118,1266 1,3,11134,793,2988,2715,276,610 1,3,11173,2521,3355,1517,310,222 1,3,6990,3880,5380,1647,319,1160 1,3,20049,1891,2362,5343,411,933 1,3,8258,2344,2147,3896,266,635 1,3,17160,1200,3412,2417,174,1136 1,3,4020,3234,1498,2395,264,255 1,3,12212,201,245,1991,25,860 2,3,11170,10769,8814,2194,1976,143 1,3,36050,1642,2961,4787,500,1621 1,3,76237,3473,7102,16538,778,918 1,3,19219,1840,1658,8195,349,483 2,3,21465,7243,10685,880,2386,2749 1,3,140,8847,3823,142,1062,3 1,3,42312,926,1510,1718,410,1819 1,3,7149,2428,699,6316,395,911 1,3,2101,589,314,346,70,310 1,3,14903,2032,2479,576,955,328 1,3,9434,1042,1235,436,256,396 1,3,7388,1882,2174,720,47,537 1,3,6300,1289,2591,1170,199,326 1,3,4625,8579,7030,4575,2447,1542 1,3,3087,8080,8282,661,721,36 1,3,13537,4257,5034,155,249,3271 1,3,5387,4979,3343,825,637,929 1,3,17623,4280,7305,2279,960,2616 1,3,30379,13252,5189,321,51,1450 1,3,37036,7152,8253,2995,20,3 1,3,10405,1596,1096,8425,399,318 1,3,18827,3677,1988,118,516,201 2,3,22039,8384,34792,42,12591,4430 1,3,7769,1936,2177,926,73,520 1,3,9203,3373,2707,1286,1082,526 1,3,5924,584,542,4052,283,434 1,3,31812,1433,1651,800,113,1440 1,3,16225,1825,1765,853,170,1067 1,3,1289,3328,2022,531,255,1774 1,3,18840,1371,3135,3001,352,184 1,3,3463,9250,2368,779,302,1627 1,3,622,55,137,75,7,8 2,3,1989,10690,19460,233,11577,2153 2,3,3830,5291,14855,317,6694,3182 1,3,17773,1366,2474,3378,811,418 2,3,2861,6570,9618,930,4004,1682 2,3,355,7704,14682,398,8077,303 2,3,1725,3651,12822,824,4424,2157 1,3,12434,540,283,1092,3,2233 1,3,15177,2024,3810,2665,232,610 2,3,5531,15726,26870,2367,13726,446 2,3,5224,7603,8584,2540,3674,238 2,3,15615,12653,19858,4425,7108,2379 2,3,4822,6721,9170,993,4973,3637 1,3,2926,3195,3268,405,1680,693 1,3,5809,735,803,1393,79,429 1,3,5414,717,2155,2399,69,750 2,3,260,8675,13430,1116,7015,323 2,3,200,25862,19816,651,8773,6250 1,3,955,5479,6536,333,2840,707 2,3,514,7677,19805,937,9836,716 1,3,286,1208,5241,2515,153,1442 2,3,2343,7845,11874,52,4196,1697 1,3,45640,6958,6536,7368,1532,230 1,3,12759,7330,4533,1752,20,2631 1,3,11002,7075,4945,1152,120,395 1,3,3157,4888,2500,4477,273,2165 1,3,12356,6036,8887,402,1382,2794 1,3,112151,29627,18148,16745,4948,8550 1,3,694,8533,10518,443,6907,156 1,3,36847,43950,20170,36534,239,47943 1,3,327,918,4710,74,334,11 1,3,8170,6448,1139,2181,58,247 1,3,3009,521,854,3470,949,727 1,3,2438,8002,9819,6269,3459,3 2,3,8040,7639,11687,2758,6839,404 2,3,834,11577,11522,275,4027,1856 1,3,16936,6250,1981,7332,118,64 1,3,13624,295,1381,890,43,84 1,3,5509,1461,2251,547,187,409 2,3,180,3485,20292,959,5618,666 1,3,7107,1012,2974,806,355,1142 1,3,17023,5139,5230,7888,330,1755 1,1,30624,7209,4897,18711,763,2876 2,1,2427,7097,10391,1127,4314,1468 1,1,11686,2154,6824,3527,592,697 1,1,9670,2280,2112,520,402,347 2,1,3067,13240,23127,3941,9959,731 2,1,4484,14399,24708,3549,14235,1681 1,1,25203,11487,9490,5065,284,6854 1,1,583,685,2216,469,954,18 1,1,1956,891,5226,1383,5,1328 2,1,1107,11711,23596,955,9265,710 1,1,6373,780,950,878,288,285 2,1,2541,4737,6089,2946,5316,120 1,1,1537,3748,5838,1859,3381,806 2,1,5550,12729,16767,864,12420,797 1,1,18567,1895,1393,1801,244,2100 2,1,12119,28326,39694,4736,19410,2870 1,1,7291,1012,2062,1291,240,1775 1,1,3317,6602,6861,1329,3961,1215 2,1,2362,6551,11364,913,5957,791 1,1,2806,10765,15538,1374,5828,2388 2,1,2532,16599,36486,179,13308,674 1,1,18044,1475,2046,2532,130,1158 2,1,18,7504,15205,1285,4797,6372 1,1,4155,367,1390,2306,86,130 1,1,14755,899,1382,1765,56,749 1,1,5396,7503,10646,91,4167,239 1,1,5041,1115,2856,7496,256,375 2,1,2790,2527,5265,5612,788,1360 1,1,7274,659,1499,784,70,659 1,1,12680,3243,4157,660,761,786 2,1,20782,5921,9212,1759,2568,1553 1,1,4042,2204,1563,2286,263,689 1,1,1869,577,572,950,4762,203 1,1,8656,2746,2501,6845,694,980 2,1,11072,5989,5615,8321,955,2137 1,1,2344,10678,3828,1439,1566,490 1,1,25962,1780,3838,638,284,834 1,1,964,4984,3316,937,409,7 1,1,15603,2703,3833,4260,325,2563 1,1,1838,6380,2824,1218,1216,295 1,1,8635,820,3047,2312,415,225 1,1,18692,3838,593,4634,28,1215 1,1,7363,475,585,1112,72,216 1,1,47493,2567,3779,5243,828,2253 1,1,22096,3575,7041,11422,343,2564 1,1,24929,1801,2475,2216,412,1047 1,1,18226,659,2914,3752,586,578 1,1,11210,3576,5119,561,1682,2398 1,1,6202,7775,10817,1183,3143,1970 2,1,3062,6154,13916,230,8933,2784 1,1,8885,2428,1777,1777,430,610 1,1,13569,346,489,2077,44,659 1,1,15671,5279,2406,559,562,572 1,1,8040,3795,2070,6340,918,291 1,1,3191,1993,1799,1730,234,710 2,1,6134,23133,33586,6746,18594,5121 1,1,6623,1860,4740,7683,205,1693 1,1,29526,7961,16966,432,363,1391 1,1,10379,17972,4748,4686,1547,3265 1,1,31614,489,1495,3242,111,615 1,1,11092,5008,5249,453,392,373 1,1,8475,1931,1883,5004,3593,987 1,1,56083,4563,2124,6422,730,3321 1,1,53205,4959,7336,3012,967,818 1,1,9193,4885,2157,327,780,548 1,1,7858,1110,1094,6818,49,287 1,1,23257,1372,1677,982,429,655 1,1,2153,1115,6684,4324,2894,411 2,1,1073,9679,15445,61,5980,1265 1,1,5909,23527,13699,10155,830,3636 2,1,572,9763,22182,2221,4882,2563 1,1,20893,1222,2576,3975,737,3628 2,1,11908,8053,19847,1069,6374,698 1,1,15218,258,1138,2516,333,204 1,1,4720,1032,975,5500,197,56 1,1,2083,5007,1563,1120,147,1550 1,1,514,8323,6869,529,93,1040 1,3,36817,3045,1493,4802,210,1824 1,3,894,1703,1841,744,759,1153 1,3,680,1610,223,862,96,379 1,3,27901,3749,6964,4479,603,2503 1,3,9061,829,683,16919,621,139 1,3,11693,2317,2543,5845,274,1409 2,3,17360,6200,9694,1293,3620,1721 1,3,3366,2884,2431,977,167,1104 2,3,12238,7108,6235,1093,2328,2079 1,3,49063,3965,4252,5970,1041,1404 1,3,25767,3613,2013,10303,314,1384 1,3,68951,4411,12609,8692,751,2406 1,3,40254,640,3600,1042,436,18 1,3,7149,2247,1242,1619,1226,128 1,3,15354,2102,2828,8366,386,1027 1,3,16260,594,1296,848,445,258 1,3,42786,286,471,1388,32,22 1,3,2708,2160,2642,502,965,1522 1,3,6022,3354,3261,2507,212,686 1,3,2838,3086,4329,3838,825,1060 2,2,3996,11103,12469,902,5952,741 1,2,21273,2013,6550,909,811,1854 2,2,7588,1897,5234,417,2208,254 1,2,19087,1304,3643,3045,710,898 2,2,8090,3199,6986,1455,3712,531 2,2,6758,4560,9965,934,4538,1037 1,2,444,879,2060,264,290,259 2,2,16448,6243,6360,824,2662,2005 2,2,5283,13316,20399,1809,8752,172 2,2,2886,5302,9785,364,6236,555 2,2,2599,3688,13829,492,10069,59 2,2,161,7460,24773,617,11783,2410 2,2,243,12939,8852,799,3909,211 2,2,6468,12867,21570,1840,7558,1543 1,2,17327,2374,2842,1149,351,925 1,2,6987,1020,3007,416,257,656 2,2,918,20655,13567,1465,6846,806 1,2,7034,1492,2405,12569,299,1117 1,2,29635,2335,8280,3046,371,117 2,2,2137,3737,19172,1274,17120,142 1,2,9784,925,2405,4447,183,297 1,2,10617,1795,7647,1483,857,1233 2,2,1479,14982,11924,662,3891,3508 1,2,7127,1375,2201,2679,83,1059 1,2,1182,3088,6114,978,821,1637 1,2,11800,2713,3558,2121,706,51 2,2,9759,25071,17645,1128,12408,1625 1,2,1774,3696,2280,514,275,834 1,2,9155,1897,5167,2714,228,1113 1,2,15881,713,3315,3703,1470,229 1,2,13360,944,11593,915,1679,573 1,2,25977,3587,2464,2369,140,1092 1,2,32717,16784,13626,60869,1272,5609 1,2,4414,1610,1431,3498,387,834 1,2,542,899,1664,414,88,522 1,2,16933,2209,3389,7849,210,1534 1,2,5113,1486,4583,5127,492,739 1,2,9790,1786,5109,3570,182,1043 2,2,11223,14881,26839,1234,9606,1102 1,2,22321,3216,1447,2208,178,2602 2,2,8565,4980,67298,131,38102,1215 2,2,16823,928,2743,11559,332,3486 2,2,27082,6817,10790,1365,4111,2139 1,2,13970,1511,1330,650,146,778 1,2,9351,1347,2611,8170,442,868 1,2,3,333,7021,15601,15,550 1,2,2617,1188,5332,9584,573,1942 2,3,381,4025,9670,388,7271,1371 2,3,2320,5763,11238,767,5162,2158 1,3,255,5758,5923,349,4595,1328 2,3,1689,6964,26316,1456,15469,37 1,3,3043,1172,1763,2234,217,379 1,3,1198,2602,8335,402,3843,303 2,3,2771,6939,15541,2693,6600,1115 2,3,27380,7184,12311,2809,4621,1022 1,3,3428,2380,2028,1341,1184,665 2,3,5981,14641,20521,2005,12218,445 1,3,3521,1099,1997,1796,173,995 2,3,1210,10044,22294,1741,12638,3137 1,3,608,1106,1533,830,90,195 2,3,117,6264,21203,228,8682,1111 1,3,14039,7393,2548,6386,1333,2341 1,3,190,727,2012,245,184,127 1,3,22686,134,218,3157,9,548 2,3,37,1275,22272,137,6747,110 1,3,759,18664,1660,6114,536,4100 1,3,796,5878,2109,340,232,776 1,3,19746,2872,2006,2601,468,503 1,3,4734,607,864,1206,159,405 1,3,2121,1601,2453,560,179,712 1,3,4627,997,4438,191,1335,314 1,3,2615,873,1524,1103,514,468 2,3,4692,6128,8025,1619,4515,3105 1,3,9561,2217,1664,1173,222,447 1,3,3477,894,534,1457,252,342 1,3,22335,1196,2406,2046,101,558 1,3,6211,337,683,1089,41,296 2,3,39679,3944,4955,1364,523,2235 1,3,20105,1887,1939,8164,716,790 1,3,3884,3801,1641,876,397,4829 2,3,15076,6257,7398,1504,1916,3113 1,3,6338,2256,1668,1492,311,686 1,3,5841,1450,1162,597,476,70 2,3,3136,8630,13586,5641,4666,1426 1,3,38793,3154,2648,1034,96,1242 1,3,3225,3294,1902,282,68,1114 2,3,4048,5164,10391,130,813,179 1,3,28257,944,2146,3881,600,270 1,3,17770,4591,1617,9927,246,532 1,3,34454,7435,8469,2540,1711,2893 1,3,1821,1364,3450,4006,397,361 1,3,10683,21858,15400,3635,282,5120 1,3,11635,922,1614,2583,192,1068 1,3,1206,3620,2857,1945,353,967 1,3,20918,1916,1573,1960,231,961 1,3,9785,848,1172,1677,200,406 1,3,9385,1530,1422,3019,227,684 1,3,3352,1181,1328,5502,311,1000 1,3,2647,2761,2313,907,95,1827 1,3,518,4180,3600,659,122,654 1,3,23632,6730,3842,8620,385,819 1,3,12377,865,3204,1398,149,452 1,3,9602,1316,1263,2921,841,290 2,3,4515,11991,9345,2644,3378,2213 1,3,11535,1666,1428,6838,64,743 1,3,11442,1032,582,5390,74,247 1,3,9612,577,935,1601,469,375 1,3,4446,906,1238,3576,153,1014 1,3,27167,2801,2128,13223,92,1902 1,3,26539,4753,5091,220,10,340 1,3,25606,11006,4604,127,632,288 1,3,18073,4613,3444,4324,914,715 1,3,6884,1046,1167,2069,593,378 1,3,25066,5010,5026,9806,1092,960 2,3,7362,12844,18683,2854,7883,553 2,3,8257,3880,6407,1646,2730,344 1,3,8708,3634,6100,2349,2123,5137 1,3,6633,2096,4563,1389,1860,1892 1,3,2126,3289,3281,1535,235,4365 1,3,97,3605,12400,98,2970,62 1,3,4983,4859,6633,17866,912,2435 1,3,5969,1990,3417,5679,1135,290 2,3,7842,6046,8552,1691,3540,1874 2,3,4389,10940,10908,848,6728,993 1,3,5065,5499,11055,364,3485,1063 2,3,660,8494,18622,133,6740,776 1,3,8861,3783,2223,633,1580,1521 1,3,4456,5266,13227,25,6818,1393 2,3,17063,4847,9053,1031,3415,1784 1,3,26400,1377,4172,830,948,1218 2,3,17565,3686,4657,1059,1803,668 2,3,16980,2884,12232,874,3213,249 1,3,11243,2408,2593,15348,108,1886 1,3,13134,9347,14316,3141,5079,1894 1,3,31012,16687,5429,15082,439,1163 1,3,3047,5970,4910,2198,850,317 1,3,8607,1750,3580,47,84,2501 1,3,3097,4230,16483,575,241,2080 1,3,8533,5506,5160,13486,1377,1498 1,3,21117,1162,4754,269,1328,395 1,3,1982,3218,1493,1541,356,1449 1,3,16731,3922,7994,688,2371,838 1,3,29703,12051,16027,13135,182,2204 1,3,39228,1431,764,4510,93,2346 2,3,14531,15488,30243,437,14841,1867 1,3,10290,1981,2232,1038,168,2125 1,3,2787,1698,2510,65,477,52 ================================================ FILE: p3-creating-customer-segments/renders.py ================================================ import matplotlib.pyplot as plt import matplotlib.cm as cm import pandas as pd import numpy as np from sklearn.decomposition import pca def pca_results(good_data, pca): ''' Create a DataFrame of the PCA results Includes dimension feature weights and explained variance Visualizes the PCA results ''' # Dimension indexing dimensions = dimensions = ['Dimension {}'.format(i) for i in range(1,len(pca.components_)+1)] # PCA components components = pd.DataFrame(np.round(pca.components_, 4), columns = good_data.keys()) components.index = dimensions # PCA explained variance ratios = pca.explained_variance_ratio_.reshape(len(pca.components_), 1) variance_ratios = pd.DataFrame(np.round(ratios, 4), columns = ['Explained Variance']) variance_ratios.index = dimensions # Create a bar plot visualization fig, ax = plt.subplots(figsize = (14,8)) # Plot the feature weights as a function of the components components.plot(ax = ax, kind = 'bar'); ax.set_ylabel("Feature Weights") ax.set_xticklabels(dimensions, rotation=0) # Display the explained variance ratios for i, ev in enumerate(pca.explained_variance_ratio_): ax.text(i-0.40, ax.get_ylim()[1] + 0.05, "Explained Variance\n %.4f"%(ev)) # Return a concatenated DataFrame return pd.concat([variance_ratios, components], axis = 1) def cluster_results(reduced_data, preds, centers, pca_samples): ''' Visualizes the PCA-reduced cluster data in two dimensions Adds cues for cluster centers and student-selected sample data ''' predictions = pd.DataFrame(preds, columns = ['Cluster']) plot_data = pd.concat([predictions, reduced_data], axis = 1) # Generate the cluster plot fig, ax = plt.subplots(figsize = (14,8)) # Color map cmap = cm.get_cmap('gist_rainbow') # Color the points based on assigned cluster for i, cluster in plot_data.groupby('Cluster'): cluster.plot(ax = ax, kind = 'scatter', x = 'Dimension 1', y = 'Dimension 2', \ color = cmap((i)*1.0/(len(centers)-1)), label = 'Cluster %i'%(i), s=30); # Plot centers with indicators for i, c in enumerate(centers): ax.scatter(x = c[0], y = c[1], color = 'white', edgecolors = 'black', \ alpha = 1, linewidth = 2, marker = 'o', s=200); ax.scatter(x = c[0], y = c[1], marker='$%d$'%(i), alpha = 1, s=100); # Plot transformed sample points ax.scatter(x = pca_samples[:,0], y = pca_samples[:,1], \ s = 150, linewidth = 4, color = 'black', marker = 'x'); # Set plot title ax.set_title("Cluster Learning on PCA-Reduced Data - Centroids Marked by Number\nTransformed Sample Data Marked by Black Cross"); def channel_results(reduced_data, outliers, pca_samples): ''' Visualizes the PCA-reduced cluster data in two dimensions using the full dataset Data is labeled by "Channel" and cues added for student-selected sample data ''' # Check that the dataset is loadable try: full_data = pd.read_csv("customers.csv") except: print "Dataset could not be loaded. Is the file missing?" return False # Create the Channel DataFrame channel = pd.DataFrame(full_data['Channel'], columns = ['Channel']) channel = channel.drop(channel.index[outliers]).reset_index(drop = True) labeled = pd.concat([reduced_data, channel], axis = 1) # Generate the cluster plot fig, ax = plt.subplots(figsize = (14,8)) # Color map cmap = cm.get_cmap('gist_rainbow') # Color the points based on assigned Channel labels = ['Hotel/Restaurant/Cafe', 'Retailer'] grouped = labeled.groupby('Channel') for i, channel in grouped: channel.plot(ax = ax, kind = 'scatter', x = 'Dimension 1', y = 'Dimension 2', \ color = cmap((i-1)*1.0/2), label = labels[i-1], s=30); # Plot transformed sample points for i, sample in enumerate(pca_samples): ax.scatter(x = sample[0], y = sample[1], \ s = 200, linewidth = 3, color = 'black', marker = 'o', facecolors = 'none'); ax.scatter(x = sample[0]+0.25, y = sample[1]+0.3, marker='$%d$'%(i), alpha = 1, s=125); # Set plot title ax.set_title("PCA-Reduced Data Labeled by 'Channel'\nTransformed Sample Data Circled"); ================================================ FILE: p3-creating-customer-segments/renders_py3.py ================================================ import matplotlib.pyplot as plt import matplotlib.cm as cm import pandas as pd import numpy as np from sklearn.decomposition import pca def pca_results(good_data, pca): ''' Create a DataFrame of the PCA results Includes dimension feature weights and explained variance Visualizes the PCA results ''' # Dimension indexing dimensions = dimensions = ['Dimension {}'.format(i) for i in range(1,len(pca.components_)+1)] # PCA components components = pd.DataFrame(np.round(pca.components_, 4), columns = good_data.keys()) components.index = dimensions # PCA explained variance ratios = pca.explained_variance_ratio_.reshape(len(pca.components_), 1) variance_ratios = pd.DataFrame(np.round(ratios, 4), columns = ['Explained Variance']) variance_ratios.index = dimensions # Create a bar plot visualization fig, ax = plt.subplots(figsize = (14,8)) # Plot the feature weights as a function of the components components.plot(ax = ax, kind = 'bar'); ax.set_ylabel("Feature Weights") ax.set_xticklabels(dimensions, rotation=0) # Display the explained variance ratios for i, ev in enumerate(pca.explained_variance_ratio_): ax.text(i-0.40, ax.get_ylim()[1] + 0.05, "Explained Variance\n %.4f"%(ev)) # Return a concatenated DataFrame return pd.concat([variance_ratios, components], axis = 1) def cluster_results(reduced_data, preds, centers, pca_samples): ''' Visualizes the PCA-reduced cluster data in two dimensions Adds cues for cluster centers and student-selected sample data ''' predictions = pd.DataFrame(preds, columns = ['Cluster']) plot_data = pd.concat([predictions, reduced_data], axis = 1) # Generate the cluster plot fig, ax = plt.subplots(figsize = (14,8)) # Color map cmap = cm.get_cmap('gist_rainbow') # Color the points based on assigned cluster for i, cluster in plot_data.groupby('Cluster'): cluster.plot(ax = ax, kind = 'scatter', x = 'Dimension 1', y = 'Dimension 2', \ color = cmap((i)*1.0/(len(centers)-1)), label = 'Cluster %i'%(i), s=30); # Plot centers with indicators for i, c in enumerate(centers): ax.scatter(x = c[0], y = c[1], color = 'white', edgecolors = 'black', \ alpha = 1, linewidth = 2, marker = 'o', s=200); ax.scatter(x = c[0], y = c[1], marker='$%d$'%(i), alpha = 1, s=100); # Plot transformed sample points ax.scatter(x = pca_samples[:,0], y = pca_samples[:,1], \ s = 150, linewidth = 4, color = 'black', marker = 'x'); # Set plot title ax.set_title("Cluster Learning on PCA-Reduced Data - Centroids Marked by Number\nTransformed Sample Data Marked by Black Cross"); def channel_results(reduced_data, outliers, pca_samples): ''' Visualizes the PCA-reduced cluster data in two dimensions using the full dataset Data is labeled by "Channel" and cues added for student-selected sample data ''' # Check that the dataset is loadable try: full_data = pd.read_csv("customers.csv") except: print("Dataset could not be loaded. Is the file missing?") return False # Create the Channel DataFrame channel = pd.DataFrame(full_data['Channel'], columns = ['Channel']) channel = channel.drop(channel.index[outliers]).reset_index(drop = True) labeled = pd.concat([reduced_data, channel], axis = 1) # Generate the cluster plot fig, ax = plt.subplots(figsize = (14,8)) # Color map cmap = cm.get_cmap('gist_rainbow') # Color the points based on assigned Channel labels = ['Hotel/Restaurant/Cafe', 'Retailer'] grouped = labeled.groupby('Channel') for i, channel in grouped: channel.plot(ax = ax, kind = 'scatter', x = 'Dimension 1', y = 'Dimension 2', \ color = cmap((i-1)*1.0/2), label = labels[i-1], s=30); # Plot transformed sample points for i, sample in enumerate(pca_samples): ax.scatter(x = sample[0], y = sample[1], \ s = 200, linewidth = 3, color = 'black', marker = 'o', facecolors = 'none'); ax.scatter(x = sample[0]+0.25, y = sample[1]+0.3, marker='$%d$'%(i), alpha = 1, s=125); # Set plot title ax.set_title("PCA-Reduced Data Labeled by 'Channel'\nTransformed Sample Data Circled"); ================================================ FILE: p3-creating-customer-segments/report.html ================================================ customer_segments

Machine Learning Engineer Nanodegree

Unsupervised Learning

Project 3: Creating Customer Segments

Welcome to the third project of the Machine Learning Engineer Nanodegree! In this notebook, some template code has already been provided for you, and it will be your job to implement the additional functionality necessary to successfully complete this project. Sections that begin with 'Implementation' in the header indicate that the following block of code will require additional functionality which you must provide. Instructions will be provided for each section and the specifics of the implementation are marked in the code block with a 'TODO' statement. Please be sure to read the instructions carefully!

In addition to implementing code, there will be questions that you must answer which relate to the project and your implementation. Each section where you will answer a question is preceded by a 'Question X' header. Carefully read each question and provide thorough answers in the following text boxes that begin with 'Answer:'. Your project submission will be evaluated based on your answers to each of the questions and the implementation you provide.

Note: Code and Markdown cells can be executed using the Shift + Enter keyboard shortcut. In addition, Markdown cells can be edited by typically double-clicking the cell to enter edit mode.

Getting Started

In this project, you will analyze a dataset containing data on various customers' annual spending amounts (reported in monetary units) of diverse product categories for internal structure. One goal of this project is to best describe the variation in the different types of customers that a wholesale distributor interacts with. Doing so would equip the distributor with insight into how to best structure their delivery service to meet the needs of each customer.

The dataset for this project can be found on the UCI Machine Learning Repository. For the purposes of this project, the features 'Channel' and 'Region' will be excluded in the analysis — with focus instead on the six product categories recorded for customers.

Run the code block below to load the wholesale customers dataset, along with a few of the necessary Python libraries required for this project. You will know the dataset loaded successfully if the size of the dataset is reported.

In [9]:
# Import libraries necessary for this project
import numpy as np
import pandas as pd
import renders_py3 as rs
from IPython.display import display # Allows the use of display() for DataFrames

# Show matplotlib plots inline (nicely formatted in the notebook)
%matplotlib inline

# Load the wholesale customers dataset
try:
    data = pd.read_csv("customers.csv")
    data.drop(['Region', 'Channel'], axis = 1, inplace = True)
    print("Wholesale customers dataset has {} samples with {} features each.".format(*data.shape))
except:
    print("Dataset could not be loaded. Is the dataset missing?")
Wholesale customers dataset has 440 samples with 6 features each.

Data Exploration

In this section, you will begin exploring the data through visualizations and code to understand how each feature is related to the others. You will observe a statistical description of the dataset, consider the relevance of each feature, and select a few sample data points from the dataset which you will track through the course of this project.

Run the code block below to observe a statistical description of the dataset. Note that the dataset is composed of six important product categories: 'Fresh', 'Milk', 'Grocery', 'Frozen', 'Detergents_Paper', and 'Delicatessen'. Consider what each category represents in terms of products you could purchase.

In [10]:
# Display a description of the dataset
display(data.describe())
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
count 440.000000 440.000000 440.000000 440.000000 440.000000 440.000000
mean 12000.297727 5796.265909 7951.277273 3071.931818 2881.493182 1524.870455
std 12647.328865 7380.377175 9503.162829 4854.673333 4767.854448 2820.105937
min 3.000000 55.000000 3.000000 25.000000 3.000000 3.000000
25% 3127.750000 1533.000000 2153.000000 742.250000 256.750000 408.250000
50% 8504.000000 3627.000000 4755.500000 1526.000000 816.500000 965.500000
75% 16933.750000 7190.250000 10655.750000 3554.250000 3922.000000 1820.250000
max 112151.000000 73498.000000 92780.000000 60869.000000 40827.000000 47943.000000
In [13]:
data.head()
Out[13]:
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
0 12669 9656 7561 214 2674 1338
1 7057 9810 9568 1762 3293 1776
2 6353 8808 7684 2405 3516 7844
3 13265 1196 4221 6404 507 1788
4 22615 5410 7198 3915 1777 5185

Implementation: Selecting Samples

To get a better understanding of the customers and how their data will transform through the analysis, it would be best to select a few sample data points and explore them in more detail. In the code block below, add three indices of your choice to the indices list which will represent the customers to track. It is suggested to try different sets of samples until you obtain customers that vary significantly from one another.

In [32]:
# TODO: Select three indices of your choice you wish to sample from the dataset
indices = [85, 181, 338]

# Create a DataFrame of the chosen samples
samples = pd.DataFrame(data.loc[indices], columns = data.keys()).reset_index(drop = True)
print("Chosen samples of wholesale customers dataset:")
display(samples)
Chosen samples of wholesale customers dataset:
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
0 16117 46197 92780 1026 40827 2944
1 112151 29627 18148 16745 4948 8550
2 3 333 7021 15601 15 550

Question 1

Consider the total purchase cost of each product category and the statistical description of the dataset above for your sample customers.
What kind of establishment (customer) could each of the three samples you've chosen represent?
Hint: Examples of establishments include places like markets, cafes, and retailers, among many others. Avoid using names for establishments, such as saying "McDonalds" when describing a sample customer as a restaurant.

Answer:

  1. Index 85: Retailer

    • Highest spending on (1) detergents and paper and (2) groceries (each) of all customers in dataset. (1) -> May have a large 'home goods' focus.
    • Milk: Spends more than the median amount
    • Frozen: Spends less than the median customer
  2. Index 181: Large market

    • High spending on most product categories: 8000+ MUs spent on each of all food-related goods, nearly 5000 MUs spent on detergents and paper (highest quartile for spending in all good categories).
    • Highest spending on fresh goods of all customers in dataset
    • Focus on fresh goods, which means it likely has a large market component.
    • Little emphasis on detergent and paper, which indicates it is unlikely to be a shopping mall type shop.
  3. Index 338: Restaurant

    • Much smaller scale than the previous two customers discussed.
      • Amount spent on Fresh is least in dataset.
      • Spending on each of Milk, Detergents and Paper is in the bottom quartile.
    • Needs groceries and frozen food to produce food for customers. May serve delicatessen type meats. Needs milk for coffee and tea.
    • May be cheaper so it doesn't need much fresh food.

Implementation: Feature Relevance

One interesting thought to consider is if one (or more) of the six product categories is actually relevant for understanding customer purchasing. That is to say, is it possible to determine whether customers purchasing some amount of one category of products will necessarily purchase some proportional amount of another category of products? We can make this determination quite easily by training a supervised regression learner on a subset of the data with one feature removed, and then score how well that model can predict the removed feature.

In the code block below, you will need to implement the following:

  • Assign new_data a copy of the data by removing a feature of your choice using the DataFrame.drop function.
  • Use sklearn.cross_validation.train_test_split to split the dataset into training and testing sets.
    • Use the removed feature as your target label. Set a test_size of 0.25 and set a random_state.
  • Import a decision tree regressor, set a random_state, and fit the learner to the training data.
  • Report the prediction score of the testing set using the regressor's score function.
In [36]:
# TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature
new_data = data.drop("Grocery", axis=1)
new_data


# TODO: Split the data into training and testing sets using the given feature as the target
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(new_data, data["Grocery"], test_size=0.25, random_state=0)

# TODO: Create a decision tree regressor and fit it to the training set
from sklearn.tree import DecisionTreeRegressor
regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)

# TODO: Report the score of the prediction using the testing set
score = regressor.score(X_test, y_test)
print("Score of prediction on test set: ", score)
Score of prediction on test set:  0.602801978878

Question 2

Which feature did you attempt to predict? What was the reported prediction score? Is this feature is necessary for identifying customers' spending habits?
Hint: The coefficient of determination, R^2, is scored between 0 and 1, with 1 being a perfect fit. A negative R^2 implies the model fails to fit the data.

Answer:

  • I attempted to predict the Grocery feature.
  • The reported prediction score was 0.6028.
  • This feature is not absolutely necessary to identify customers' spending habits because it appears loosely correlated with the other five features, but the R^2 score is not sufficiently high for us to be confident in dropping it.

I compared Grocery's R^2 score with the other features' R^2 scores below:

In [37]:
# For experimentation's sake
features_list = ["Fresh","Milk","Grocery","Frozen","Detergents_Paper","Delicatessen"]

for feature in features_list:
    # TODO: Make a copy of the DataFrame, using the 'drop' function to drop the given feature
    new_data = data.drop(feature, axis=1)
    new_data
    print("Feature is: ", feature)

    # TODO: Split the data into training and testing sets using the given feature as the target
    X_train, X_test, y_train, y_test = train_test_split(new_data, data[feature], test_size=0.25, random_state=0)

    # TODO: Create a decision tree regressor and fit it to the training set
    regressor = DecisionTreeRegressor(random_state=0).fit(X_train, y_train)

    # TODO: Report the score of the prediction using the testing set
    score = regressor.score(X_test, y_test)
    print("Score of prediction on test set: ", score)
Feature is:  Fresh
Score of prediction on test set:  -0.252469807688
Feature is:  Milk
Score of prediction on test set:  0.365725292736
Feature is:  Grocery
Score of prediction on test set:  0.602801978878
Feature is:  Frozen
Score of prediction on test set:  0.253973446697
Feature is:  Detergents_Paper
Score of prediction on test set:  0.728655181254
Feature is:  Delicatessen
Score of prediction on test set:  -11.6636871594

Observations:

  • Notice that the Delicatessen R^2 score is very negative and the Fresh R^2 score is quite negative, so those definitely cannot be dropped as the model fails to fit the data.
  • The feature that might be okay to remove is Detergents_Paper, followed by Grocery.
  • Milk and Frozen are loosely correlated with the others but not enough to say much.

Visualize Feature Distributions

To get a better understanding of the dataset, we can construct a scatter matrix of each of the six product features present in the data. If you found that the feature you attempted to predict above is relevant for identifying a specific customer, then the scatter matrix below may not show any correlation between that feature and the others. Conversely, if you believe that feature is not relevant for identifying a specific customer, the scatter matrix might show a correlation between that feature and another feature in the data. Run the code block below to produce a scatter matrix.

In [38]:
# Produce a scatter matrix for each pair of features in the data
pd.scatter_matrix(data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');

Question 3

Are there any pairs of features which exhibit some degree of correlation? Does this confirm or deny your suspicions about the relevance of the feature you attempted to predict? How is the data for those features distributed?
Hint: Is the data normally distributed? Where do most of the data points lie?

Answer:

  • The pair (Detergents_Paper, Grocery) exhibits a high degree of correlation. The pairs (Milk,Grocery) and (Milk,Detergents_Paper) also exhibit some degree of correlation.
  • This confirms that Grocery might not be that relevant (necessary).
  • The data is not normally distributed - it is positively skewed. The features more closely resemble the log-normal distribution.

Data Preprocessing

In this section, you will preprocess the data to create a better representation of customers by performing a scaling on the data and detecting (and optionally removing) outliers. Preprocessing data is often times a critical step in assuring that results you obtain from your analysis are significant and meaningful.

Implementation: Feature Scaling

If data is not normally distributed, especially if the mean and median vary significantly (indicating a large skew), it is most often appropriate to apply a non-linear scaling — particularly for financial data. One way to achieve this scaling is by using a Box-Cox test, which calculates the best power transformation of the data that reduces skewness. A simpler approach which can work in most cases would be applying the natural logarithm.

In the code block below, you will need to implement the following:

  • Assign a copy of the data to log_data after applying a logarithm scaling. Use the np.log function for this.
  • Assign a copy of the sample data to log_samples after applying a logrithm scaling. Again, use np.log.
In [39]:
# TODO: Scale the data using the natural logarithm
log_data = np.log(data)

# TODO: Scale the sample data using the natural logarithm
log_samples = np.log(samples)

# Produce a scatter matrix for each pair of newly-transformed features
pd.scatter_matrix(log_data, alpha = 0.3, figsize = (14,8), diagonal = 'kde');

Observation

After applying a natural logarithm scaling to the data, the distribution of each feature should appear much more normal. For any pairs of features you may have identified earlier as being correlated, observe here whether that correlation is still present (and whether it is now stronger or weaker than before).

  • The correlations are still present and appear stronger than before.

Run the code below to see how the sample data has changed after having the natural logarithm applied to it.

In [40]:
# Display the log-transformed sample data
display(log_samples)
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
0 9.687630 10.740670 11.437986 6.933423 10.617099 7.987524
1 11.627601 10.296441 9.806316 9.725855 8.506739 9.053687
2 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918

Implementation: Outlier Detection

Detecting outliers in the data is extremely important in the data preprocessing step of any analysis. The presence of outliers can often skew results which take into consideration these data points. There are many "rules of thumb" for what constitutes an outlier in a dataset. Here, we will use Tukey's Method for identfying outliers: An outlier step is calculated as 1.5 times the interquartile range (IQR). A data point with a feature that is beyond an outlier step outside of the IQR for that feature is considered abnormal.

In the code block below, you will need to implement the following:

  • Assign the value of the 25th percentile for the given feature to Q1. Use np.percentile for this.
  • Assign the value of the 75th percentile for the given feature to Q3. Again, use np.percentile.
  • Assign the calculation of an outlier step for the given feature to step.
  • Optionally remove data points from the dataset by adding indices to the outliers list.

NOTE: If you choose to remove any outliers, ensure that the sample data does not contain any of these points!
Once you have performed this implementation, the dataset will be stored in the variable good_data.

In [45]:
potential_outliers = []

# For each feature find the data points with extreme high or low values
for feature in log_data.keys():
    
    # TODO: Calculate Q1 (25th percentile of the data) for the given feature
    Q1 = np.percentile(log_data[feature],25)
    
    # TODO: Calculate Q3 (75th percentile of the data) for the given feature
    Q3 = np.percentile(log_data[feature],75)
    
    # TODO: Use the interquartile range to calculate an outlier step (1.5 times the interquartile range)
    step = 1.5 * (Q3-Q1)
    
    # Display the outliers
    print("Data points considered outliers for the feature '{}':".format(feature))
    display(log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))])
    list = log_data[~((log_data[feature] >= Q1 - step) & (log_data[feature] <= Q3 + step))].index.tolist()
    potential_outliers.append(list)
    
# OPTIONAL: Select the indices for data points you wish to remove
outliers  = []

# Remove the outliers, if any were specified
good_data = log_data.drop(log_data.index[outliers]).reset_index(drop = True)
Data points considered outliers for the feature 'Fresh':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523
66 2.197225 7.335634 8.911530 5.164786 8.151333 3.295837
81 5.389072 9.163249 9.575192 5.645447 8.964184 5.049856
95 1.098612 7.979339 8.740657 6.086775 5.407172 6.563856
96 3.135494 7.869402 9.001839 4.976734 8.262043 5.379897
128 4.941642 9.087834 8.248791 4.955827 6.967909 1.098612
171 5.298317 10.160530 9.894245 6.478510 9.079434 8.740337
193 5.192957 8.156223 9.917982 6.865891 8.633731 6.501290
218 2.890372 8.923191 9.629380 7.158514 8.475746 8.759669
304 5.081404 8.917311 10.117510 6.424869 9.374413 7.787382
305 5.493061 9.468001 9.088399 6.683361 8.271037 5.351858
338 1.098612 5.808142 8.856661 9.655090 2.708050 6.309918
353 4.762174 8.742574 9.961898 5.429346 9.069007 7.013016
355 5.247024 6.588926 7.606885 5.501258 5.214936 4.844187
357 3.610918 7.150701 10.011086 4.919981 8.816853 4.700480
412 4.574711 8.190077 9.425452 4.584967 7.996317 4.127134
Data points considered outliers for the feature 'Milk':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
86 10.039983 11.205013 10.377047 6.894670 9.906981 6.805723
98 6.220590 4.718499 6.656727 6.796824 4.025352 4.882802
154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442
356 10.029503 4.897840 5.384495 8.057377 2.197225 6.306275
Data points considered outliers for the feature 'Grocery':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437
154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442
Data points considered outliers for the feature 'Frozen':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
38 8.431853 9.663261 9.723703 3.496508 8.847360 6.070738
57 8.597297 9.203618 9.257892 3.637586 8.932213 7.156177
65 4.442651 9.950323 10.732651 3.583519 10.095388 7.260523
145 10.000569 9.034080 10.457143 3.737670 9.440738 8.396155
175 7.759187 8.967632 9.382106 3.951244 8.341887 7.436617
264 6.978214 9.177714 9.645041 4.110874 8.696176 7.142827
325 10.395650 9.728181 9.519735 11.016479 7.148346 8.632128
420 8.402007 8.569026 9.490015 3.218876 8.827321 7.239215
429 9.060331 7.467371 8.183118 3.850148 4.430817 7.824446
439 7.932721 7.437206 7.828038 4.174387 6.167516 3.951244
Data points considered outliers for the feature 'Detergents_Paper':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
75 9.923192 7.036148 1.098612 8.390949 1.098612 6.882437
161 9.428190 6.291569 5.645447 6.995766 1.098612 7.711101
Data points considered outliers for the feature 'Delicatessen':
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
66 2.197225 7.335634 8.911530 5.164786 8.151333 3.295837
109 7.248504 9.724899 10.274568 6.511745 6.728629 1.098612
128 4.941642 9.087834 8.248791 4.955827 6.967909 1.098612
137 8.034955 8.997147 9.021840 6.493754 6.580639 3.583519
142 10.519646 8.875147 9.018332 8.004700 2.995732 1.098612
154 6.432940 4.007333 4.919981 4.317488 1.945910 2.079442
183 10.514529 10.690808 9.911952 10.505999 5.476464 10.777768
184 5.789960 6.822197 8.457443 4.304065 5.811141 2.397895
187 7.798933 8.987447 9.192075 8.743372 8.148735 1.098612
203 6.368187 6.529419 7.703459 6.150603 6.860664 2.890372
233 6.871091 8.513988 8.106515 6.842683 6.013715 1.945910
285 10.602965 6.461468 8.188689 6.948897 6.077642 2.890372
289 10.663966 5.655992 6.154858 7.235619 3.465736 3.091042
343 7.431892 8.848509 10.177932 7.283448 9.646593 3.610918

Question 4

Are there any data points considered outliers for more than one feature based on the definition above? Should these data points be removed from the dataset? If any data points were added to the outliers list to be removed, explain why.

Answer:

Datapoints considered outliers for more than one feature: rows 65, 66, 75, 128, 154. (Rough work below.)

These data points look a bit suspicious. E.g. Row 75 spent 3 monetary units on Grocery and Detergents_Paper but spent a lot more (up to around 20k in Fresh) in other categories.

But they should not be removed from the dataset. They could still be genuine datapoints because it is plausible shops don't use much of these categories of goods. (Detergents_Paper seems less plausible though.)

In [67]:
data.iloc[[65,66,75,128,154]]
Out[67]:
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
65 85 20959 45828 36 24231 1423
66 9 1534 7417 175 3468 27
75 20398 1137 3 4407 3 975
128 140 8847 3823 142 1062 3
154 622 55 137 75 7 8
In [46]:
# Rough work
potential_outliers
Out[46]:
[[65, 66, 81, 95, 96, 128, 171, 193, 218, 304, 305, 338, 353, 355, 357, 412],
 [86, 98, 154, 356],
 [75, 154],
 [38, 57, 65, 145, 175, 264, 325, 420, 429, 439],
 [75, 161],
 [66, 109, 128, 137, 142, 154, 183, 184, 187, 203, 233, 285, 289, 343]]
In [66]:
mult_outlier_indices_dict = {}

for i in range(len(potential_outliers)):
    current_feature_ol = potential_outliers[i]
    for po in current_feature_ol:
        mult_ol = set()
        mult_ol.add(i)
        if po not in mult_outlier_indices_dict.keys():
            for other_feat in range(i, len(potential_outliers)):
                if po in potential_outliers[other_feat]:
                    mult_ol.add(other_feat)
        if len(mult_ol) > 1:
            mult_outlier_indices_dict[po] = mult_ol
            
print(mult_outlier_indices_dict)

for v in mult_outlier_indices_dict
{128: {0, 5}, 65: {0, 3}, 66: {0, 5}, 75: {2, 4}, 154: {1, 2, 5}}

Feature Transformation

In this section you will use principal component analysis (PCA) to draw conclusions about the underlying structure of the wholesale customer data. Since using PCA on a dataset calculates the dimensions which best maximize variance, we will find which compound combinations of features best describe customers.

Implementation: PCA

Now that the data has been scaled to a more normal distribution and has had any necessary outliers removed, we can now apply PCA to the good_data to discover which dimensions about the data best maximize the variance of features involved. In addition to finding these dimensions, PCA will also report the explained variance ratio of each dimension — how much variance within the data is explained by that dimension alone. Note that a component (dimension) from PCA can be considered a new "feature" of the space, however it is a composition of the original features present in the data.

In the code block below, you will need to implement the following:

  • Import sklearn.decomposition.PCA and assign the results of fitting PCA in six dimensions with good_data to pca.
  • Apply a PCA transformation of the sample log-data log_samples using pca.transform, and assign the results to pca_samples.
In [68]:
# TODO: Apply PCA by fitting the good data with the same number of dimensions as features
from sklearn.decomposition import PCA
pca = PCA(n_components=6)
pca.fit(good_data)

# TODO: Transform the sample log-data using the PCA fit above
pca_samples = pca.transform(log_samples)

# Generate PCA results plot
pca_results = rs.pca_results(good_data, pca)

Question 5

How much variance in the data is explained in total by the first and second principal component? What about the first four principal components? Using the visualization provided above, discuss what the first four dimensions best represent in terms of customer spending.
Hint: A positive increase in a specific dimension corresponds with an increase of the positive-weighted features and a decrease of the negative-weighted features. The rate of increase or decrease is based on the indivdual feature weights.

Answer:

  • First and second PCs explain 71.90% of the variance in the data.
  • First four PCs explain 93.14% of the variation in the data.
  • What the first four dimensions best represent in terms of customer spending:
    • Dim 1: Detergents_Paper, Grocery and Milk: -> Utilities
    • Dim 2: Fresh, Frozen, Delicatessen -> Food
    • Dim 3: Fresh - Delicatessen: Market-y stuff, food that must be sold on the day
    • Dim 4: Frozen - Fresh - Delicatessen: Food that can be kept for ages
In [70]:
# Rough calculation
print(0.4424+0.2766)
print(0.4424+0.2766+0.1162+0.0962)
0.7190000000000001
0.9314

Observation

Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it in six dimensions. Observe the numerical value for the first four dimensions of the sample points. Consider if this is consistent with your initial interpretation of the sample points.

In [71]:
# Display sample log-data after having a PCA transformation applied
display(pd.DataFrame(np.round(pca_samples, 4), columns = pca_results.index.values))
Dimension 1 Dimension 2 Dimension 3 Dimension 4 Dimension 5 Dimension 6
0 5.3459 1.9442 0.7429 -0.2108 -0.5297 0.2928
1 2.1974 4.9048 0.0686 0.5623 -0.5195 -0.2369
2 -2.8963 -4.7798 -6.3817 2.9243 -0.7629 2.2292

Implementation: Dimensionality Reduction

When using principal component analysis, one of the main goals is to reduce the dimensionality of the data — in effect, reducing the complexity of the problem. Dimensionality reduction comes at a cost: Fewer dimensions used implies less of the total variance in the data is being explained. Because of this, the cumulative explained variance ratio is extremely important for knowing how many dimensions are necessary for the problem. Additionally, if a signifiant amount of variance is explained by only two or three dimensions, the reduced data can be visualized afterwards.

In the code block below, you will need to implement the following:

  • Assign the results of fitting PCA in two dimensions with good_data to pca.
  • Apply a PCA transformation of good_data using pca.transform, and assign the reuslts to reduced_data.
  • Apply a PCA transformation of the sample log-data log_samples using pca.transform, and assign the results to pca_samples.
In [72]:
# TODO: Apply PCA by fitting the good data with only two dimensions
pca = PCA(n_components=2)
pca.fit(good_data)

# TODO: Transform the good data using the PCA fit above
reduced_data = pca.transform(good_data)

# TODO: Transform the sample log-data using the PCA fit above
pca_samples = pca.transform(log_samples)

# Create a DataFrame for the reduced data
reduced_data = pd.DataFrame(reduced_data, columns = ['Dimension 1', 'Dimension 2'])

Observation

Run the code below to see how the log-transformed sample data has changed after having a PCA transformation applied to it using only two dimensions. Observe how the values for the first two dimensions remains unchanged when compared to a PCA transformation in six dimensions.

In [73]:
# Display sample log-data after applying PCA transformation in two dimensions
display(pd.DataFrame(np.round(pca_samples, 4), columns = ['Dimension 1', 'Dimension 2']))
Dimension 1 Dimension 2
0 5.3459 1.9442
1 2.1974 4.9048
2 -2.8963 -4.7798

Clustering

In this section, you will choose to use either a K-Means clustering algorithm or a Gaussian Mixture Model clustering algorithm to identify the various customer segments hidden in the data. You will then recover specific data points from the clusters to understand their significance by transforming them back into their original dimension and scale.

Question 6

What are the advantages to using a K-Means clustering algorithm? What are the advantages to using a Gaussian Mixture Model clustering algorithm? Given your observations about the wholesale customer data so far, which of the two algorithms will you use and why?

Answer:

Advantages to using K-Means clustering

  • Hard labelling so all datapoints are in certain clusters
  • Less computationally expensive (than a Gaussian Mixture Model)
  • Guaranteed to converge
  • Scale-invariant
  • Consistent

Advantages to using Gaussian Mixture Model clustering

  • One point can be shared between clusters because points are assigned probabilities of belonging to each cluster (soft) as opposed to hard labels
  • More information: Can look at probabilities to know how sure the algorithm is that each point is in each cluster
  • Can model all elliptical clusters (vs K-Means which assumes clusters are spherical)

Chosen algorithm

  • Gausssian Mixture.
  • The data does not seem to be separated into clear clusters. There may be groups that are in-betweens.

Reference: https://www.quora.com/What-is-the-difference-between-K-means-and-the-mixture-model-of-Gaussian

Implementation: Creating Clusters

Depending on the problem, the number of clusters that you expect to be in the data may already be known. When the number of clusters is not known a priori, there is no guarantee that a given number of clusters best segments the data, since it is unclear what structure exists in the data — if any. However, we can quantify the "goodness" of a clustering by calculating each data point's silhouette coefficient. The silhouette coefficient for a data point measures how similar it is to its assigned cluster from -1 (dissimilar) to 1 (similar). Calculating the mean silhouette coefficient provides for a simple scoring method of a given clustering.

In the code block below, you will need to implement the following:

  • Fit a clustering algorithm to the reduced_data and assign it to clusterer.
  • Predict the cluster for each data point in reduced_data using clusterer.predict and assign them to preds.
  • Find the cluster centers using the algorithm's respective attribute and assign them to centers.
  • Predict the cluster for each sample data point in pca_samples and assign them sample_preds.
  • Import sklearn.metrics.silhouette_score and calculate the silhouette score of reduced_data against preds.
    • Assign the silhouette score to score and print the result.
In [86]:
# TODO: Apply your clustering algorithm of choice to the reduced data 
from sklearn.mixture import GMM
from sklearn.metrics import silhouette_score

# Loop through different cluster numbers to see which 
# gives th ehighest silhouette score.
for i in range(2,7):
    print("Number of components: ", i)
    clusterer = GMM(random_state=0, n_components=i)
    clusterer.fit(reduced_data)

    # TODO: Predict the cluster for each data point
    preds = clusterer.predict(reduced_data)
    # TODO: Find the cluster centers
    centers = clusterer.means_
    print("Cluster centres: ",centers)

    # TODO: Predict the cluster for each transformed sample data point
    sample_preds = clusterer.predict(pca_samples)
    print("Sample Preds: ", sample_preds)

    # TODO: Calculate the mean silhouette coefficient for the number of clusters chosen
    score = silhouette_score(reduced_data, preds)
    print("Silhouette score: ", score, "\n")

# Note: Variable values reassigned below.
Number of components:  2
Cluster centres:  [[-0.71464435  0.31923966]
 [ 1.01432429 -0.45311006]]
Sample Preds:  [1 1 1]
Silhouette score:  0.316017379116 

Number of components:  3
Cluster centres:  [[ 1.53837521  0.35814931]
 [-1.53264671  0.28309436]
 [-0.42189675 -1.47049155]]
Sample Preds:  [0 0 2]
Silhouette score:  0.375222595239 

Number of components:  4
Cluster centres:  [[ 0.04260476 -1.75483254]
 [-1.19364513  0.61758051]
 [-1.65040023 -0.34386088]
 [ 2.12094466  0.18950015]]
Sample Preds:  [3 3 0]
Silhouette score:  0.336237830562 

Number of components:  5
Cluster centres:  [[-1.52420475 -0.16175761]
 [ 2.61449466 -0.91376362]
 [-1.70036028 -1.83457833]
 [-0.89574454  1.08330732]
 [ 1.92949643  0.40524309]]
Sample Preds:  [4 1 2]
Silhouette score:  0.31202624062 

Number of components:  6
Cluster centres:  [[ 1.74491709  0.94152474]
 [-1.5625887   0.15170505]
 [-0.38366704 -3.6751244 ]
 [ 2.78898903 -1.01811609]
 [-0.96577157 -0.2125656 ]
 [-0.10568062  1.18412939]]
Sample Preds:  [0 0 2]
Silhouette score:  0.269277095938 

Question 7

Report the silhouette score for several cluster numbers you tried. Of these, which number of clusters has the best silhouette score?

Answer:

Cluster numberSilhouette score
20.316
**3****0.375**
40.336
50.312
60.269

Cluster number 3 has the best silhouette score.

In [87]:
# Reassign variable values with n_components = 3

clusterer = GMM(random_state=0, n_components=3)
clusterer.fit(reduced_data)

# TODO: Predict the cluster for each data point
preds = clusterer.predict(reduced_data)
# TODO: Find the cluster centers
centers = clusterer.means_
print("Cluster centres: ",centers)

# TODO: Predict the cluster for each transformed sample data point
sample_preds = clusterer.predict(pca_samples)
print("Sample Preds: ", sample_preds)

# TODO: Calculate the mean silhouette coefficient for the number of clusters chosen
score = silhouette_score(reduced_data, preds)
print("Silhouette score: ", score, "\n")
Cluster centres:  [[ 1.53837521  0.35814931]
 [-1.53264671  0.28309436]
 [-0.42189675 -1.47049155]]
Sample Preds:  [0 0 2]
Silhouette score:  0.375222595239 

Cluster Visualization

Once you've chosen the optimal number of clusters for your clustering algorithm using the scoring metric above, you can now visualize the results by executing the code block below. Note that, for experimentation purposes, you are welcome to adjust the number of clusters for your clustering algorithm to see various visualizations. The final visualization provided should, however, correspond with the optimal number of clusters.

In [88]:
# Display the results of the clustering from implementation
rs.cluster_results(reduced_data, preds, centers, pca_samples)

It's okayish.

Implementation: Data Recovery

Each cluster present in the visualization above has a central point. These centers (or means) are not specifically data points from the data, but rather the averages of all the data points predicted in the respective clusters. For the problem of creating customer segments, a cluster's center point corresponds to the average customer of that segment. Since the data is currently reduced in dimension and scaled by a logarithm, we can recover the representative customer spending from these data points by applying the inverse transformations.

In the code block below, you will need to implement the following:

  • Apply the inverse transform to centers using pca.inverse_transform and assign the new centers to log_centers.
  • Apply the inverse function of np.log to log_centers using np.exp and assign the true centers to true_centers.
In [90]:
# TODO: Inverse transform the centers
log_centers = pca.inverse_transform(centers)

# TODO: Exponentiate the centers
true_centers = np.exp(log_centers)

# Display the true centers
segments = ['Segment {}'.format(i) for i in range(0,len(centers))]
true_centers = pd.DataFrame(np.round(true_centers), columns = data.keys())
true_centers.index = segments
display(true_centers)
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
Segment 0 6055.0 6542.0 9557.0 1354.0 2830.0 1185.0
Segment 1 9806.0 1925.0 2355.0 2216.0 286.0 721.0
Segment 2 2432.0 2244.0 3455.0 778.0 608.0 348.0

Question 8

Consider the total purchase cost of each product category for the representative data points above, and reference the statistical description of the dataset at the beginning of this project. What set of establishments could each of the customer segments represent?
Hint: A customer who is assigned to 'Cluster X' should best identify with the establishments represented by the feature set of 'Segment X'.

Answer:

  • Segment 0 could represent supermarkets.
    • Their spendings for all categories except Frozen are above the median.
  • Segment 1 could represent a fresh food market.
    • Their spending for Fresh and Frozen are above the median, but their spending for Grocery, Milk and Detergents_Paper are below the median as those are often kept in fridges or placed in boxes on shelves. Delicatessen spending is also below the median - that is often fancier stuff that isn't found in street markets.
    • Frozen products are often sold in markets placed in big boxes lined with ice cubes.
  • Segment 2 could represent a corner store.
    • Their spending on Fresh and Delicatessen are in the bottom quartile.
    • Their spending on Detergents_Paper, Frozen, Grocery and Milk are below the median.
In [91]:
data.describe()
Out[91]:
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
count 440.000000 440.000000 440.000000 440.000000 440.000000 440.000000
mean 12000.297727 5796.265909 7951.277273 3071.931818 2881.493182 1524.870455
std 12647.328865 7380.377175 9503.162829 4854.673333 4767.854448 2820.105937
min 3.000000 55.000000 3.000000 25.000000 3.000000 3.000000
25% 3127.750000 1533.000000 2153.000000 742.250000 256.750000 408.250000
50% 8504.000000 3627.000000 4755.500000 1526.000000 816.500000 965.500000
75% 16933.750000 7190.250000 10655.750000 3554.250000 3922.000000 1820.250000
max 112151.000000 73498.000000 92780.000000 60869.000000 40827.000000 47943.000000

Question 9

For each sample point, which customer segment from Question 8 best represents it? Are the predictions for each sample point consistent with this?

Run the code block below to find which cluster each sample point is predicted to be.

In [93]:
# Display the predictions
for i, pred in enumerate(sample_preds):
    print("Sample point", i, "predicted to be in Cluster", pred)
Sample point 0 predicted to be in Cluster 0
Sample point 1 predicted to be in Cluster 0
Sample point 2 predicted to be in Cluster 2

Answer:

  1. Sample point 0: Supermarket
    • Original guess: Retailer <- I'm surprised it was put in the same category as Sample point 1. I thought it was quite different. The clusters are large though, which may explain both being in the same cluster.
  2. Sample point 1: Supermarket
    • Original guess: Market <- The same!
  3. Sample point 2: Corner store
    • Original guess: Restaurant. <- Reasonable: I was going for something relatively small. This is in line with the things grouped under Cluster 2 in the visualisation.
In [95]:
samples
Out[95]:
Fresh Milk Grocery Frozen Detergents_Paper Delicatessen
0 16117 46197 92780 1026 40827 2944
1 112151 29627 18148 16745 4948 8550
2 3 333 7021 15601 15 550

Conclusion

In this final section, you will investigate ways that you can make use of the clustered data. First, you will consider how the different groups of customers, the customer segments, may be affected differently by a specific delivery scheme. Next, you will consider how giving a label to each customer (which segment that customer belongs to) can provide for additional features about the customer data. Finally, you will compare the customer segments to a hidden variable present in the data, to see whether the clustering identified certain relationships.

Question 10

Companies will often run A/B tests when making small changes to their products or services to determine whether making that change will affect its customers positively or negatively. The wholesale distributor is considering changing its delivery service from currently 5 days a week to 3 days a week. However, the distributor will only make this change in delivery service for customers that react positively. How can the wholesale distributor use the customer segments to determine which customers, if any, would react positively to the change in delivery service?
Hint: Can we assume the change affects all customers equally? How can we determine which group of customers it affects the most?

Answer:

  • Make this change in delivery service for 10% of the customers in each cluster (select this 10% randomly) for e.g. 2 weeks. Mark these customers as customers in Cluster 0', 1' and 2' respectively.
    • Make sure there are a statistically significant number of customers in each cluster i'.
  • Note down whether these customers react positively or negatively (this can be a +1 or -1 value, or some value from -1 to +1, with -1 meaning they reacted strongly negatively and +1 meaning they reacted strongly positively).
  • Take the mean of the values assigned for each cluster 0', 1' and 2'.
  • If the mean value for a cluster is positive, then the distributor can consider making the change in delivery service for more customers in that segment.
    • This inference assumes that customers in that segment may behave similarly.
  • By testing on a smaller group of customers first, the distributor can test their hypotheses without risking making a lot of customers angry (if they react negatively).

Question 11

Additional structure is derived from originally unlabeled data when using clustering techniques. Since each customer has a customer segment it best identifies with (depending on the clustering algorithm applied), we can consider 'customer segment' as an engineered feature for the data. Assume the wholesale distributor recently acquired ten new customers and each provided estimates for anticipated annual spending of each product category. Knowing these estimates, the wholesale distributor wants to classify each new customer to a customer segment to determine the most appropriate delivery service.
How can the wholesale distributor label the new customers using only their estimated product spending and the customer segment data?
Hint: A supervised learner could be used to train on the original customers. What would be the target variable?

Answer:

  • Use a supervised learning algorithm with the estimated product spending as features (6 features) and customer segment as the target variable.
    • This would be a classification problem because the target variable has finitely many discrete labels (3).
    • K Nearest Neighbours might be a good choice of algorithm because there is no obvious underlying mathematical relationship between the customer segment and product spending.
  • The training and test sets would come from existing customers with those labels assigned.

Visualizing Underlying Distributions

At the beginning of this project, it was discussed that the 'Channel' and 'Region' features would be excluded from the dataset so that the customer product categories were emphasized in the analysis. By reintroducing the 'Channel' feature to the dataset, an interesting structure emerges when considering the same PCA dimensionality reduction applied earlier to the original dataset.

Run the code block below to see how each data point is labeled either 'HoReCa' (Hotel/Restaurant/Cafe) or 'Retail' the reduced space. In addition, you will find the sample points are circled in the plot, which will identify their labeling.

In [96]:
# Display the clustering results based on 'Channel' data
rs.channel_results(reduced_data, outliers, pca_samples)
In [97]:
# Clustering plot

rs.cluster_results(reduced_data, preds, centers, pca_samples)

Question 12

How well does the clustering algorithm and number of clusters you've chosen compare to this underlying distribution of Hotel/Restaurant/Cafe customers to Retailer customers? Are there customer segments that would be classified as purely 'Retailers' or 'Hotels/Restaurants/Cafes' by this distribution? Would you consider these classifications as consistent with your previous definition of the customer segments?

Answer:

  • The previous clustering does a moderately good job of clustering the data above the (Dimension 2 > -2) line, with Retailer corresponding to Cluster 0 and Hotel/Restaurant/Cafe corresponding to Cluster 1. Below the (Dimension 2 > -2) line, however, the previous clustering does not distinguish between the Ho/Re/Ca and Retailer, instead grouping them together in one different cluster.
  • The customer segment 0 would be classified almost entirely as Retailer and the customer segment 1 would be classified almost entirely as Ho/Re/Ca by this distribution.
  • These classifications are consistent with previous definitions of the customer segments to some extent.

    • Some sentiments are the same, e.g.
    • The exact labels (e.g. 'Retailer') used are not the same, but that's because I had a different understanding of 'Retailers' before seeing this distribution. It's good to have a data-based (i.e. example-based) definition of the word to make sure everyone is on the same page. :D
  • This is a positive result, because this means that customers in Ho/Re/Ca have similar spending patterns to some extent, and likewise with Retailers.

  • It looks possible to have clustered the data into two clusters that are similar to the channels provided. The only points that would've been harder to classify 'correctly' would be the mix of red points invading the bottom right territory of the green points.

Note: Once you have completed all of the code implementations and successfully answered each question above, you may finalize your work by exporting the iPython Notebook as an HTML document. You can do this by using the menu above and navigating to
File -> Download as -> HTML (.html). Include the finished document along with this notebook as your submission.

================================================ FILE: p4-smartcab/.ipynb_checkpoints/Smartcab Report-Copy1-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline\n", "You will \n", "1. first investigate the environment the agent operates in by constructing a very basic driving implementation. Once your agent is successful at operating within the environment, you will then \n", "2. identify each possible state the agent can be in when considering such things as traffic lights and oncoming traffic at each intersection. With states identified, you will then \n", "3. implement a Q-Learning algorithm for the self-driving agent to guide the agent towards its destination within the allotted time. Finally, you will \n", "4. improve upon the Q-Learning algorithm to find the best configuration of learning and exploration factors to ensure the self-driving agent is reaching its destinations with consistently positive results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definitions\n", "### Environment\n", "The smartcab operates in an ideal, grid-like city (similar to New York City), with roads going in the North-South and East-West directions. Other vehicles will certainly be present on the road, but there will be no pedestrians to be concerned with. At each intersection there is a traffic light that either allows traffic in the North-South direction or the East-West direction. U.S. Right-of-Way rules apply:\n", "\n", "On a green light, a left turn is permitted if there is no oncoming traffic making a right turn or coming straight through the intersection.\n", "On a red light, a right turn is permitted if no oncoming traffic is approaching from your left through the intersection. To understand how to correctly yield to oncoming traffic when turning left, you may refer to this official drivers’ education video, or this passionate exposition.\n", "\n", "### Inputs and Outputs\n", "Assume that the smartcab is assigned a route plan based on the passengers’ starting location and destination. The route is split at each intersection into waypoints, and you may assume that the smartcab, at any instant, is at some intersection in the world. Therefore, the next waypoint to the destination, assuming the destination has not already been reached, is one intersection away in one direction (North, South, East, or West). \n", "The smartcab has only an egocentric view of the intersection it is at: **It can determine** (sensor) \n", "- the state of the traffic light for its direction of movement, and \n", "- whether there is a vehicle at the intersection for each of the oncoming directions. \n", "For each **action**, the smartcab may either \n", "- idle at the intersection, or \n", "- drive to the next intersection to the left, right, or ahead of it. \n", "Finally, each trip has a **time to reach the destination** which decreases for each action taken (the passengers want to get there quickly). \n", "- If the allotted time becomes zero before reaching the destination, the trip has failed.\n", "\n", "### Rewards and Goal\n", "**Rewards**\n", "The smartcab receives \n", "- a reward for each successfully completed trip, and also receives \n", "- a smaller reward for each action it executes successfully that obeys traffic rules. \n", "\n", "**Penalties**\n", "The smartcab receives \n", "- a small penalty for any incorrect action, and \n", "- a larger penalty for any action that violates traffic rules or causes an accident with another vehicle. \n", "\n", "Based on the rewards and penalties the smartcab receives, the self-driving agent implementation should learn an optimal policy for driving on the city roads while obeying traffic rules, avoiding accidents, and reaching passengers’ destinations in the allotted time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tasks\n", "### 1. Implement a Basic Driving Agent\n", "To begin, your only task is to **get the smartcab to move around in the environment**. At this point, you will not be concerned with any sort of optimal driving policy. Note that the driving agent is given the following information at each intersection:\n", "\n", "- The next waypoint location relative to its current location and heading.\n", "- The state of the traffic light at the intersection and the presence of oncoming vehicles from other directions.\n", "- The current time left from the allotted deadline.\n", "\n", "To complete this task, simply \n", "- have your driving agent choose a random action from the set of possible actions (None, 'forward', 'left', 'right') at each intersection, disregarding the input information above. \n", "- Set the simulation deadline enforcement, enforce_deadline to False and observe how it performs.\n", "\n", "**QUESTION**: \n", "- Observe what you see with the agent's behavior as it takes random actions. \n", "- Does the smartcab eventually make it to the destination? \n", "- Are there any other interesting observations to note?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Answer\n", "\n", "The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\nsuPJe+UzN9wxuORzL5LjEm4RX3aKuy/eJej97VUvOs57HLn1dMoJ575eVt12dXxX9MY75OP/5w5Z\nc+75snTCAbn/trXlO/VtRLnsnCnz17i96DB3yEf/XeQdrz5T5k/ukX1bH5PbP3ND3FUe0IrKRDn5\n5W9wd67fEB1s7X9dJVufvkRefe5JMqOzINs2/Ep+/Pmvl9e15pIXZU7ORxNOmCfHne2ecB9n96Om\nM05cPOTEZq840e2Xbp3Xnt4zZOmQJPmQ8Fx3Ji4+RS5ZdYN8PcrRPyhXf/gqedWbXy/PO2a2HN62\nXu74xrVy78a0Qw61e/Drn5SrnnmNvP6c42Rawnuv93z3vgnfe23uk3bmtCOAAAIIIIAAAggggAAC\nJQHNflkGTEvNlNm+1S175veHbTqd9Yd13U/aKsX7fUljtS0tJq290pi0Y7R1+1hL0Kdh6wVN2pLa\nw7ZK+1n6/Jhq9aT+tDZtb/wR9yWVgZe8VLbvct/O94NbZPpslwSfrHeClw5tifpQ0BLzGubunNfk\n/PaX/4YU3Fxxcj8cUP9+cdEFsr1vp8iWG2SGe9R9xyT3VxfddA32PzNxy+DP0vL1NPTOeU3Ob5/9\nBim4ufJenz7evq+vT7Zv3x496t4eT28JeE3OWz1eti1OTyG+c16/d37ixIlDHpU/eDLUEEAAAQQQ\nQAABBBBoMwH3b1z7rb68snW3yX98/LbybrnSe6F88KKThj06Xfs75q6QS1aKfF2fdh5tL5LVS6cm\n3409daW844O/J9d+5FPinswebQ/ecVs5iS3uofFXvOtcefrfPis/cb26wviDst3yvFf/jvzXg1+M\nB627Qz7z8TviesLPwXFx5+CZFuWInndw4kWxL1R38VH/0IAh8V5/z6IXyft/d6d87Aux2bq1X5eP\nu9ewzfm95sXug9VDJhoWFTR0y7ITz3UZejvP1bKid6hrt7vL/nw3yq7YyjNWyFRdXzDTYEtw/i7W\nzlxjEteXGjNVXvLmd8v6v/yX6GsL3BcXyHeuvVoGv6BAF9HrrujG6GsA9Gr69mr3wbfvlI98Nl79\nxnv/W672PmtQPoUzLpF3XrgyYW35+ZSPRQUBBBBAAAEEEEAAAQQQaJ2AJprspb/Gad1+nbO6lboq\nq1vpt6XV02LT4rVdN39c0n5aW6V27Rsz23hJ0Od1wfQNlbb5fX7d4v22pLq1WanjrG6l3xbNm/gH\nkKin9h8DF18s22dMl51f+6r0Tpss3TNnuO851EcM+of35tXmQkGO7NojG/cdlMJlvykDL3V/AKrp\nj0befFWqA8vfINsmzJAdT10rS+Yelp6ZU936Utamc0XrK8rhXftlw/aiFI5+uxQWv7Jp61uwYIHs\n2LFDNm7cKHPmzIm+R74z8ht+YpasLzg//c55HaePytdxeV7T4UemBQEEEEAAAQQQQACBnAS8RO7p\nV7xPXrd0k1z7D9eVkqmDxzjr4rfJq152svt+dU3gDrYP1qbKcS88y30Z+11R0+ILT5VF3Wmx7oFf\nc4+Xt37sQ7LuF/fLI089J4fd/3OPyJJFRx8vJ55ygsybsEketcl1jaWDds8/Tf72zyfLLTd/S370\n0CaLiMrVr3ibXHHBQvnhJz4q33ddPV2d5XEaUOyyhU+TCe5rwMLz6OyZU5pvsUyZ0DVkrHZ0dJc+\nYOzqXcWOIf3zT3mV/NWfLpHvfPkLctfQZYksXi0Xv/xcOev0FTI51a906IRi1vLjXIL7jvianL5a\nFvaEa58lx7vk9W3fjT8dsXrl/CFrsylTz99B2JlNmzIhcaxrTI+Zeoy86SMfkGO+eYN89a54DXbM\nxatfIZdedoHMeOrb8tEv/Mg1D7efe9Kr5G/ft1y+9Y3PSTDcxa+Ui3/3NXLOKUvd0xjC846PkpeP\nrZkSAQQQQAABBBBAAAEEEBghAc2I6S+uljSzupW6LKv7pbbb2LCu+7pV64+jhsZZG2WKgF2olO5c\nmhs9RpbxlWLS+pLawzZ/368rjL9frV5Pv42x0j+mZs1ddlpW/frXv/6eduS5dWx4VrrcH606fnaf\nzJ8xTSZPniLuue3xo+X1QO5R8e557HLw4AHZumefFE8/QwZefbEUlyzNcxmpc3Xsf1q61rvHQG67\nS+bPmSBTp0x06+uWDvdHNN2KAwW3viOy/0CfbN3RLzLvLNHkfnHqUalz5tmhd9Jv3bo1Srxrwn3y\n5MnRY++79NH8bhtwfvo4+4MHD0aJ+Zkz3eM2XXJe755nQwABBBBAAAEEEEBgUxOjMQAAQABJREFU\n1Aj0PyvXvf+f5Gduwatf/6fy1pfo7wMF6TvYF/17t9/92jBpmvt9YkL87/RK57Xu1n+Tfy8lia94\n30fk+YvT/m1ccHO7iV3KNeWbpaR/00/k/f/w1ehwg+saevT+g/ukT9y/zw8dksKkaTJjcvLXVA0d\n1fy9Pvc7Qv9Av34O2n1WeqJMmTZxyPeqN38FI3eE/r59crC/SyZ0DciAO/dpE2u7Jv19B6XP/frX\nJf1yqNAp09zvsrXNMHLnzpERQAABBBBAAAEEEEAAgVoFjj/++Fe6MfqlYfvdy/0WGW2afLfN6mGp\n/ZXaaun3Y7Wum80d1pP209oqtVfr037d/HXELbX9bHR8xaM1+w56P7lccSEt7kxaV9gW7vtL9Puy\n1G1sUqy1WamxVg9L67P25DsU7Gh1lsXeJVJ45+9Lx/r1svnBB6Rznbv/ZOsWkb174xmnTxeZv0AK\nz3eJ7zWnSHH58rg9vI2kzuNXG1acslwKJ/yZW88TsmXXz6RzzyNSPLDJJeX3xEPdXfYdU5ZJYcZJ\ncmTZ6SLTV7R0fT09PbJkyRLR76Pft29flKjXpL0m5nXTRL0m46dMmSIrVqwof9+83dkTL5afCCCA\nAAIIIIAAAgi0uYD++9+99DdW/bds/O/ZDumZNCl62eqr/jt3z6/kpu+si39zdo9yP25RT8rvOf3y\n8FffL5/7STzzb7pE/ouGJfIPys9/cGd5/FHLkp9Q1T1pqkS/DLu16lZ1jfEhm/4zspN4TdHBSr5N\nP3AbHKC7Z6pMt9vx3XpqvSbdPZMkflDBpFhwHNm1weVjCQgggAACCCCAAAIIIDByApoz1Jf+em75\nQ6uHpa4ybNN93WyOeC/+6bdlqftjte6PSdpPa9P2kd7Ctee6nmYm6HXhI71lXUO1uLT+LO0WY6Wa\nWN1K38naspS5fQe9vwCrF5e5JLd7ibzampJL94ePEdmmHSP97iVyWeXDj9D6NAmvL03UV9pq/cNT\npbnoQwABBBBAAAEEEECgZQJDEqCWoM969D5Z/+tfy/Y92+Xu62923zIeby995Rkyfci8/nzdsnCV\nexT+T+JH4X/1Hz4pe994saxesUCmu1ul925/Ru783jXeo85Pl5ULJ9Wc6PWPSB0BBBBAAAEEEEAA\nAQQQQACBNhXQPGKYS9SlJiXgNS5M5lmblTrW6lb6bVr3Nz8mS7vFpI2zfiuzxll8M8qmraGZCfpm\nQCTNqTi1bFni/Ri/rscJ9+3YSe3WZqU/3tqsrNRnMWHJH5tMnxIBBBBAAAEEEEAAAQRaK+AeELW7\ndMTt7rHzNX3wtO85ufnT18jj/opPvkzOP2lWxXnmrLlALjv5Lvnawzpwk3zv+k9L2nd+Xf6e18uS\nYd+57h+QOgIIIIAAAggggAACCCCAAAKjXkBzh5WS8kn9etJJY7Q9jNc226zP9q0M2/19v27xYZkl\nxh9Ta7w/ti3q7Z6gV+B6t6SxSW3h/JVi/L5qdb/fjmFtVlq7ltZWS2mx/jzUEUAAAQQQQAABBBBA\nAIHmC0yYLi+7/HI5wx1p9lHzazte5wSZv3ixTJozRR7eMUl+4yXnyDnPXymTq84yQ856y9/Kwp//\nRO744c3ysPumq3A7/eWXyytecoYsmNYZdrGPAAIIIIAAAggggAACCCCAwFgR0Byh5Qm1TEq4p7X7\nBmFMtT6L17i0uj9HGBf22b4/V6U266tWJs1XbUzL+nVxzdoanTvL+EoxSX1Z2vyYPOo2R1iqe9iW\ndV//0jTVvVY9/PDD39aJ2BBAAAEEEEAAAQQQQACB8SbQd3Cf9PWLTOgsyCFXTpk5QyaSlx9vbwPO\nFwEEEEAAAQQQQAABBBAYdwInn3zyRe6k17nXfvcqlADsMfa1ljq82hg/ptF6OF73dbM1xHvxz6Q2\n66/UV0uMxSaVWY6RNK5iW7vfQV9x8RU6LdHth2Rp82P8uj+PX/djkurWZmXSWOurtfTnoo4AAggg\ngAACCCCAAAIIjDuBiZOnycTSbffV774fdzycMAIIIIAAAggggAACCCCAwPgQ0ByjJpLrLX2ltDk0\nxvrCuj/er1eK9/tsTNY2ix+1JfcWDF46vehpm9/n15PirT8sNTZsa2Rfx9r4pHXQhgACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACY0/A8oSWK8yrVKm0udIULd4fmxTrxyX1j5u2sXgHfdLF\nzdpmF96Pr6Xux9pcVlpfHmV5jmKxKU9WsDVTIoAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIBAewmUc4VuWVpv5A76cHzSmSbFWJvGZ6mH8/pjrC9rm8WPynK03kGvF0df9W7h2HC/lnmTxlpb\ntdKOUy3O7/frNp4SAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTGj4CfM/TrKlBt35Sq\nxVm/xftz+21Z6+F84X7WeWwdjYyv5Vi5xrbjHfR5Q9Y6nx9frZ7U77fZm8O/aH6/1m0/S+nHRGP3\n7Nnjzz2szh32w0hoQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQKBtBTo6LCWYusQoT+h6\ntbS75zXY6tVKi9XS5tC6bmn7frvVrQzHpbVHB6jywx9bJbRqt86lm3q0zdZuCXpDqhcoy/gsMZWO\nnzQ+S1sYE+7rMa0trfRjojVu3bo1KvmBAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALj\nTkDzipaAtnpa6eNYjLVV29e4MCatzebMUibNGY7LEhOO8fcbHe/P1XC93RL0DZ9QMIFiV9v8mGr1\npP5KbdaXpawUk9SnbR2vfe1rq50f/QgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggMHYE\nojyhOx0t7W55/+ysLSw1JmyrZV/H+8fUsbpVavP7w7ruJ202X1LfqG8bjd9Brxek3i0cG+4nzZsl\nRsdZnJU2l+1XK5PmsDFhn7bby45DiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACY1/A\n8oRW6hlr3Tarh6X2h21p+2lzWXtaafOl9Wt7GBPuVxob9jUyNpyrJfujMUGfBKPwIX64nzTOb/Pj\n/bofY3Xrt9La/TJLn8Vo6dd1Hn8/qe4fizoCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCIw/gTDP6OcVVcPf9+t+X5KaxVbqqxQTzl8tNjxOGK/7YVs4ZlTsj5UEfRbs8IL5+7XWw+PZ+Cxl\nWozOmaXP4jTW4rWNDQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEExr6A5Qn9XGFS3dqs\nVBmr+6VfT4vx27UebjaHttdaD8eEc4+p/fGUoM/rwtkbKizT5s8SZzE6h9X9Mqnux6Ydm3YEEEAA\nAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEBhbApY71LPSuu2HdevXUjeLi/eG/rQ+K4f2Du5Z\nf1gORlCrKNCMBL1eDLsgFQ/udWYZkxaTdKywrdq+t5Ry1R9jdSvLQV7F+vzSr2to0n7YFsb5/Ul1\nbwlUEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgHAho3jApdxi2G0VarPb7fbaf1GZz\nhWUYa3OEceG+jbP2avtp8+q4cKzNaWWWGIu1sp4xNja1zDNB35QFpq48vw7/Yvl1O0KlNutLK20O\nvwxjtc9vS6vbHNrvv6ydEgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEExr6Anyu03KKe\ntdWt39r8dtNJarM+K8OYtH2L19Ji0tqS+v3YdqzrmnNbd14J+twW1ALxetfa6Dh/vNW19Ot2+tam\n+1a3WNu3WEoEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEBifAmEO0c8lJtUtXrXS+uuR\n9OeqZXy942o5Rl6xuaw1jwR9LgvJS8XNE64n3PcP5fel1f14rVtcljIpJmwL5/T7k+oWr33Wr21s\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gUsT+jnCq1Nz75S3XRsbBibNN7aKpU2\nr1/aMfxxYd2PT+rz5whjR2K/4fXkkaAfiRO3Y9YKkCXej7F6WFY7vsVbnJbV2vz+sG77WoYv/xjU\nEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgbAuE+cIwl2hnb+26n1ZPiq3UFs7l79sx\nrPT7bM6k0o9P6g/bao0Px4/o/mhJ0NeLXGmc3+fX7YIktaX1WayVFqel32Z1K5P6rU9Lq4dxus+G\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIqECYV7T9SjlHP8YUrc32/bnDvnA/aUxa\nW61j/XnS6pXmTBvT8vbRkKCvBbKW2KzY1eYM+21fS79ux0trs3aNC+u2r2X4snkpEUAAAQQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBg7AuE+cIwl2gC1q77NibsC2PCWL/f+myOpDKMT4qpta2W\nOWuJrXUducSPhgR9LifqJslyMSrFWF9Y2vqsXfeT6mltYbvta2l1m9PftzYt2RBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEAAAQQQQAABBBBAYHwIJOUM/Tat275fVx1/32Ks3S8r1f0+m8NK7Qu3Sn0WmyXG\nYkd1OZoT9NUuUqV+v8+v28VMarM+vwzjwn0/VuvabzFWhu22r6Vu/hh/3x8fBfIDAQQQQAABBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTGhYDlEP2cobUZQJa+cIyN9Ut/Hm0P9/1Yv54U57f5dX+c\n1iv1ZekP52ub/dGaoK92QULgLPFJMdaWVtpxrF/3ra6lX7fYtBhr98dY3e+zNi2trv1sCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gX8PKHV/byhtamEXw/3/THWZ6X1WWntWtpmfWml\nxWlpMX5bWM8S44+pNd4fO2L1kU7QK1pecFnnqRZXrT+8WBZvZdZ+P17r4b7NE/Zpux9rcZQIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIDB+BMKcYZhX9Psr9amYxVoZKlq7lWF/2n61+Gr9\nNm/WOItPK3WevOZKO0bF9pFM0Od54uFc4X4agsVZ6cdZW1hajLXbvpbWZqX12b6WVvfj/TjrT4q1\nNr+0sZQIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIDD2BfxcoV+3M7c23ffrfr9f1xjd\nrIz3BvfD9iyxlcYk9dkx/TKMC/f92Frrec5V07FHMkFf00IbCM4b15/P6lb6y9Q2v71S3e/TOfx9\nrdtL+/zNj/PbqSOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAwNgUSMoRWj7R7/PrKmEx\npuL3h3V/P4z3+/y6xTVS5j1fI2tpyth2TtArft4XwJ/Pr2fFtTFWJo0L+/z9tLrOo3328ve1bpv1\nW2ntlAgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggMH4ELF9opX/mfpvVtfQ3fz+trvF+\nnz/e76sUE46xfX+MX7f+RkqdL+85G1nPkLHtnKAfslBvp5mYNnda6S2jXA1jtcPaLMjfD+v+flq8\nxtjLj0kaa/2UCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gTS8oZJ7eHZV4oJc4/+\nvtWtDOfVfetLK5PGNNpmx2p0npaNH40J+hAnRA/3w/i89pOO47dpPdy3Yyf1+bEaF8akjbV2SgQQ\nQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQGD8CteQTw9ikfZOr1OfHWL2Zpa7F38J9v29U\n1MdCgr4StH+BqtWtP2upxw1j/TZbl8VYX5b9pBhts1fSXHY8SgQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBAAAEEEEAAAQQQGLsCSTlDa9PStkptYYy/b3Utw/mqtVl8tTJtnrBd98fUNtYT9K28WPYm02P6\n9az7SWPCNjsfa7fS2ikRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGBsC1iO0MrwbLU9\n7Etr88cmjbH+sM/aKWsU6K4xfqyF2xvJymrnZ3FWarxf98dru9/n19PG2Rg/1m8L6/7xqCOAAAJj\nV2BgQOS5LSJa+lun+5zZ9KkiXV0iU13Z4f/Ppx9YqqfNo+MXLYjnSRhGEwIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACbSbg5w3DpRVLDf4fza3NYrXPb/P3bZzfnzTOxlhpMWmlxVmZFjem28dagl4v\npm1Z6hZbrfTnsth62nSMP87f99v1GH6fHTMswzFhP/sIIIDA2BDYvEUG3voHIhs3DT2fGdOl442v\nFeldLJ2vulBk2rSh/eFe2jxufNfnr47mCYewjwACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAmwlU\nyxFav59g1zbdD/uS9v1xeuo2Vuu2ZW2z+LTSnydLPW2eUdM+2hP0epHy3Gy+sEw7RlKctfljwra0\nfW1P6rP2sPSPQR0BBEZCoN3uyG639eR1TY64O+c1Ob/+2aEzzpzu2ja4Nvc/j4cPx3fY693waVva\nPBqvfWwIIIAAAggggAACCCCAAAIIIIAAAggggAACCIwOAT9vGK7YT7BrnG6WnA/7Ku3rOB1vMVa3\nUvuTNusPy6TYetps3nrGjviY0ZSgV+g8t1rns3grw7X47X7d4sI23beXxVhp7eEY67eyWr/FUSKA\nQDMEjhyJksYD7/jj4Xd2j8Qd2e22nmaYh3Pu2y/Fm74tsmSxFF96jit7pWPuXB5VHzqxjwACCCCA\nAAIIIIAAAggggAACCCCAAAIIIDCWBKrlCP1+S67b+af1aXtSrLUl9euc1m6lHadaWWt8pfl0Lt1s\nrfFem/5s1wS9IebNlmVeiwlLfy3Wp22V6n6fxYZtYXvYr/tpLx3LhgACIynQbndkt9t6mn1tCu7/\nr929R2TKZJGt20QmTRSZPZsEfbPdmR8BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgpAX8/GG4Fj9R\nrXG6r6Vufp/uJ7WHbTaHxdscfrv26WZtYRn3Jv+02OTe+lubNW/9K3IjOxsanf9gRdJXnlu1+azf\nykrHzhITjk8ak9Sm46w9LMM5bd/ibJ8SAQQQGF8CRfdvgMPu0fTbdknhC9dK4ZoviuzZO74MOFsE\nEEAAAQQQQAABBBBAAAEEEEAAAQQQQACB8SZQLUdo/WEZOlm/357U5vcn1bOMsRgrk+bRtmr9aePS\n2nW+vOdMO1am9na9gz7T4isEVUOu1l9h6nKXP0da3YK134/Rdmuzdiv9MWGcPyaMt3GUCCAwWgU0\n2axbB/95xxAZf6rbkX6R57aKTOgR2b9PZOoUkYnubnosMyIShgACCCCAAAIIIIAAAggggAACCCCA\nAAIIIDDKBPy8Ybh0TThofynxEHXbvp+ECPs10G/TfRtXqa599Wz+3Enjq/UnjWn7tna7g75eML04\n+mrWlja33x7Wdd9v07UltVm7lWkx2h9u4fxhP/sIIDCaBA4fdneDu5cmnC1ZP5rWP5Jr7XMJ+gd/\nJXLv/VL4n59I4Z57Rfr6RnJFHBsBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgWYJZM0RWt7R4q30\n12UxSW1+fFo9HOfv51lPWmee87dsrrF6B30SoP+mCfvT+pLawzZ/36/bMdLaktptjJba77/S2rSd\nDQEEqgno570Ou4RtoeDusD7oSvdY9H6X1PWT4Xq3tb66u9wXgLjPL02dFpcT3V3Zdie2xh865O7Y\nPiKyY5fIxufienj8ATf/hk2ledz3o3e5OadPj6M0cTyg63B3eut6+t2r6F6anNdtgvufZj2elrqO\nHnd8G2/riCPj9Te6Hj2urmNfaT36Pfa+ix5bj6vf7671Ke7udF2XvtI2Pf/ntrjzdKW/6fhFC/L7\njni3LOkoraPPncc+d22fc9ekx9n1u2s00V2v0MxfT9a6XXd1OnAg9tJrqO3appseR1/2/pnsrrsa\naRmuoZLPvDlx/F53PTTucOl9ah9aVEOd167HNPc+DeePVxSvrxnX1+anRAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEBgpgegv5O7gWuqmmRCrRw2lNquHpcXqOH/T9kptYX+4r3MltVVqr9an/WNma3WC\nXi9GHlvWearFpfX77Va3Utfv18PzSepLarN5tM9e1hbOmdaeNm/SeNoQGN8CLjlffOQRl1TfIYXv\n3Sqy0yXXH3vKJdtdUvege2middIEl9h1r+W9InNmS+crLxCZN1c6Tjstfly6CrpkeOGuu11ifpMU\n//0LIlu3i2xxj1YPt81bZOCtfyAye6Z0vNbN07tYOi+9xCXdJ0jhvp+5cdukePPN8To2uPH6YYFD\nmoh1E3W55KsmeefNdkn9qdLxojNFFiyQzldfFCf5NWFvW6PrcXMVH3Yu27dL4Zul9ax/1t197tbS\n75LDmvidNVVk2hTpON05LJgvna+9WGTGDNdWITFs5++chmzOoevzV0ceQ9rr3dH1TZsUj9bk/N69\nUrz2yyLLloicfnrsOMn1pyWwsx5Xne/+aeRU/OGPRHbvcR/A2Bg7HSjdqT+x9P5Ztlhk5gzpeMk5\n0fun85wXx0l6/1hpPgvddf67D0fJ98J1/xW/t371ePw+1Q9OaGJ+lnOfMU06znXza/zFr46vRdIH\nJlxyvinX1z8X6ggggAACCCCAAAIIIIAAAggggAACCCCAAAKtFkjKEWpbmFjXdVl7OKZSrH8+Nt5v\ns7rfZ3UrNcav25hK7RaTNs76bQ4tk87Dj6tU1+PY1sg8NkemstUJ+kyLanKQDx0eyu/z6xbnt/l1\n67cyqU/b7GVxYWnjLM7ft9iwz9opEUAgSUAT73rHs76edQlVlxiXZ1wCesdOkfUbXOLTJVc1Qa9b\nj0uKa5JV/7d87/44Tu/KPvZYdze9S1LrndA630FNBLu7mzVBu21HNHTYD02manJa75LXDwNMc+P3\nuzm73P/s6rjNm0WedsfXvk2uftjd7d3nXjp/p1uHJugPuLHTXTJ2ySLX59axzX0YQO+onjt38A70\nRtbjktn6gYHIRT9kUHZx69O7rvvcsTSxvdetXb/Tfd78OFG80fXrXfsTXeLb7vYPAez8NdkfbtqX\n16Z3k7sPQUSbXke9m327u7aalN/pyinumtkTCOo5ps63y10jfbrAM+562ftn1253HZ+LnfaVEvST\nnaV+wEOfzuAS9HK0O3d9f23ZEn+wYtasOMGu60jzUXd9n+rd8Xo9NrvrEn1gws1zWN8bej3ce0Lf\nF9quTwnQ89T3gT6hwZL0uu+/7/O+vvVYMgYBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgTwE/Z+j+\nKBxt2qZ1LW2zfYuxdivDWGvX0ubz26zu9/n1rP1JcdY2psvuFp6df3GbedhGj1PP+KQx2pbUrude\nqS+0sTmSxlhfOIZ9BBAwAZekLNz2fZdMdXe8f+5L8WPpNcGuie7wEfeHXJveOa53LLu72AsPrnPJ\n8NnSsdslY5f0SqfeEV3v5hK1hZ+6O7D37ZfiP30qTrZr8l4fk26PStekqm5Ftw5N4G5xyf9tu6S4\nySV43d3qA5rIX9orXb//ey4p7ZK9jWzOoHD7HW49B6T46WvjpPYB9wECddFj61r0pf8rs9Xtb3d3\npm/5YZTsHli7NvLo+usPRXdwV7yTvpE1ZhnrEtUdb/6tKLJ49efiDzzscR/G6NgihetvcHfSL5XO\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n/vfn+NM/tNr/zBnO1P5+Sz0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJ4ucOau8Ow95Dts\nzpz3Hft/mTVd0H+ZT7F8ED/eZSqFBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL61gLvDh33e\nn35Bf8cP9uoaNe/M3DO1D/sZOi4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAi8InLlLPHtP\n2Y91Zp8+r/fvWKOv96j+T72gv+ujX1mn5pydN9aP40f96ByWAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIGXBcY7w3F8tEHVn51Ta16ZMzvLXevM1v6ysZ96QX/HB3nnD6bWXll/peaOd7UGAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJfQ2DljnD1vvHqG62c4era33reT7ugv+OH4sf8rf9J\neDkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC30bgjvvRLYy77k3fecats/+x+E+5oP/KH/XM\nD/crv8cf+xHbmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAPFli9QzxzL/knOFff40+c7bY9\nf8oF/W1giwvd9ePeW+dH/EAXvZURIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+EkCW3eFe/eL\nZ3zuWufMnj+i9rtf0G/9MM983DNr+KGekVVLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBX\nFjh7/3nmbnXrve9YY2vtPx7/7hf0rwKf+fgrtUc1R/l6n5WaV9/bfAIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEvr7Ayt3hUc1RvhRWaqJ1pjZzfkz7XS/oP/ujH+1X+ZWarR/eOP9ora11xAkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+B4C/c5wvE8c37DXjrkaH81PzWzuu2JHZ37Xvm9d\n97te0L+CdueHPvoh7+21l8v7rdSkVkuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwPMFVu4I\n92qOcnv5s3p3rnV27y9Z/90u6F/9wK/OX/3Itc/WXke51T3UESBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECDw/QWu3jtuzbtb7NV9Xp1/9/u8tN53u6C/irH6UVfr9s5xxxq1/l3r7J1VjgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBrydw113hHeusrrFa9/W0bzyRC/r1i+53/WBq3a21Z7mt\n2ht/FpYiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOABAuPd4ex+Ma+xl0vN1XY8x9Y6q3Vb\n8x8f/w4X9J/xET9jj6MfUz9D+mmP5soTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPA9BHJH\nmLbeqvf/1Ft+xhk+Y4+3+n2HC/qrQHd8vFrjjnXqHfbWmu1Rsf9SEz0ECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECPwYgboj3Lo/nCHs3UPO6vdid601O//evt8m9xMv6Fc/9lHdXr5ys/wstvVj\nmtX22P/718T/vDVZnAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBbylQd4R1V5in3yHuxZIb\n2635s3jm7uWq5ii/uk7qvk371Av6+qCrH/XKxzpaey8/y1VsKz6eb6u211VN/aP7v3pQnwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBby9Qd4R1Vzi7f+wvv3XvOJt3pjZ7zNZJrtqjfK892986\n79l1Pr3+qRf0V6Du+gFsrTP7Ecxidfat+Phes7qK1VP/0xX/8VfPXwQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQI/BSBuiPM/1PYuTvMu8/uF5Pr7VbdLD6LZa3K3fHctc4dZ3nrGj/pgv6dkGd+\nMGNtjcfYeNaxpsb1fxXzH8ZCYwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvrVA3RGO/wX9\neJ84A5jVVGz1OVO7uuaPq/sJF/SrP5TVunf+SI7O0PP1j+4/vfMw1iZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4MsJ1B1h3RXm6XeIifX2KN9r39VfPcNq3bvO+fZ1n3RBXx/jT3yQz9qz77Py\nrlXzn9/+C7EBAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJfSaDuCPvd4uxs433jUf1sjSux\nz9qnn2181577cv0nXdCfxbvj49+xRj/3ynq9pvp9XGv1WP+/jOn76BMgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg8D0FckfY7w3zpmNsvGtMXW9Xanr9Uf+O9e5Y4+icfyT/nS/oV0DPfthZ/SxW\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instancens of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS (Implement a Driving Agent)\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "...\n", "LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "LearningAgent.update(): deadline = -2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0\n", "LearningAgent.update(): deadline = -3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -98, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Inform the Driving Agent\n", "Now that your driving agent is capable of moving around in the environment, your next task is to **identify a set of states that are appropriate for modeling the smartcab and environment**. \n", "- The main source of state variables are the current inputs at the intersection, but not all may require representation. \n", "- You may choose to explicitly define states, or use some combination of inputs as an implicit state. \n", "- At each time step, process the inputs and update the agent's current state using the self.state variable. \n", "- Continue with the simulation deadline enforcement enforce_deadline being set to False, and observe how your driving agent now reports the change in state as the simulation progresses.\n", "\n", "**QUESTION**: \n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?\n", "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Answers (Inform the Driving Agent)\n", "\n", "States (v1):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
Deadlinedeadline
    \n", "
  • Initial deadline = self.compute_dist(start, destination) * 5.
  • \n", "`compute_dist` is at most 12 (between points (1,1) and (8,6)).\n", "So max init deadline is 60.
  • \n", "-> Possible values include all positive integers in range [1,60] and integers < -1 which we will put into one group (past deadline)
61
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States (v2):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinatesSome notion of proximity? Nothing for now.1
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Add why each state is appropriate for the problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Total number of states: 16" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "- note that grid overflows along top, bottom, right and left sides\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**TODO**:\n", "1. Find out what inputs['right'] and inputs['left'] mean\n", "2. Print coordinates of primary agent for each turn\n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question: If the destination is in the bottom right and the car starts on the top left, can the car plan a route that goes THROUGH the top and left of the grid?\n", "- this initialisation is possible. `compute_dist` is required to be > 4 where \n", "
\n",
    "    def compute_dist(self, a, b):\n",
    "        \"\"\"L1 distance between two points.\"\"\"\n",
    "        return abs(b[0] - a[0]) + abs(b[1] - a[1])\n",
    "    
\n", " The two coordinates in question are (1,1) and (8,6), so `compute_dist` would return 7 + 6 = 12 > 5.\n", "\n", "QUESTION: How do the route_planner actions interact with the actions I set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the `simulator.py` and `environment.py` files.\n", "- Discovered pressing spacebar to pause." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unresolved\n", "- What do the 'left' and 'right' inputs mean?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Implement a Q-Learning Driving Agent\n", "With your driving agent being capable of interpreting the input information and having a mapping of environmental states, your next task is to **implement the Q-Learning algorithm** for your driving agent to choose the best action at each time step, based on the Q-values for the current state and action. \n", "- Each action taken by the smartcab will produce a reward which depends on the state of the environment. \n", "- The Q-Learning driving agent will need to consider these rewards when updating the Q-values. \n", "- Once implemented, set the simulation deadline enforcement enforce_deadline to True. \n", "- Run the simulation and observe how the smartcab moves about the environment in each trial.\n", "\n", "The formulas for updating Q-values can be found in [this video](https://classroom.udacity.com/nanodegrees/nd009/parts/0091345409/modules/e64f9a65-fdb5-4e60-81a9-72813beebb7e/lessons/5446820041/concepts/6348990570923).\n", "\n", "**QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Debugging\n", "\n", "I realised the agent wasn't acting. Printed more info." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None\n", "LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 'count' variable was defined wrongly:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "def choose_action(self, state):\n", " \"\"\"User-created function\"\"\"\n", " # Get all the Q-values corresponding to the current state\n", " q = [self.get_q(state, a) for a in self.actions]\n", " print \"q: \", q\n", " # Find the max Q-value for this state\n", " max_q = max(q)\n", " print \"max_q: \", max_q\n", " # Find the action corresponding to the max Q-value for this state\n", " count = len([max_q])\n", " print \"count: \", count\n", " # If there are multiple actions with Q-value = max Q-value for this state\n", " if count > 1:\n", " best = [i for i in range(len(self.env.valid_actions)) if q[i] == max_q]\n", " print \"best: \", best\n", " # Pick among the 'best' actions randomly\n", " i = random.choice(best)\n", " # Else if there is only one 'best' action,\n", " else:\n", " # Pick the action corresponding to the max Q-value \n", " i = q.index(max_q)\n", " print \"action index: \", i" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maybe I should have incorporated `next_waypoint` into my state:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "next_waypoint: forward\n", "random\n", "action: forward\n", "LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "\n", "next_waypoint: forward\n", "q: [0.0, -0.2559177346466295, -0.3, 1.3819213571826228]\n", "max_q: 1.38192135718\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5\n", "\n", "next_waypoint: left\n", "q: [0.0, -0.2559177346466295, -0.3, 1.0246331536052293]\n", "max_q: 1.02463315361\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "AAAAH it's working!\n", "\n", "AND now env is also printing results! Previously I put `self.results` in TrafficLight instead of in Environment. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Improve the Q-Learning Driving Agent\n", "Your final task for this project is to enhance your driving agent so that, after sufficient training, the smartcab is **able to reach the destination within the allotted time safely and efficiently**. \n", "- Parameters in the Q-Learning algorithm, such as the learning rate (alpha), the discount factor (gamma) and the exploration rate (epsilon) all contribute to the driving agent’s ability to learn the best action for each state. \n", "\n", "To improve on the success of your smartcab:\n", "\n", "- Set the number of trials, n_trials, in the simulation to 100.\n", "- Run the simulation with the deadline enforcement enforce_deadline set to True (you will need to reduce the update delay update_delay and set the display to False).\n", "- Observe the driving agent’s learning and smartcab’s success rate, particularly during the later trials.\n", "- Adjust one or several of the above parameters and iterate this process.\n", "\n", "This task is complete once you have **arrived at what you determine is the best combination of parameters required** for your driving agent to learn successfully.\n", "\n", "**QUESTION**: \n", "- Report the different values for the parameters tuned in your basic implementation of Q-Learning. For which set of parameters does the agent perform best? How well does the final driving agent perform?\n", "\n", "**QUESTION**: \n", "- Does your agent get close to finding an optimal policy, i.e. reach the destination in the minimum possible time, and not incur any penalties? How would you describe an optimal policy for this problem?" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/.ipynb_checkpoints/Smartcab Report-Copy2-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# P4 Smartcab " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Implement a Basic Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Process**\n", "\n", "**Understanding the game** The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\nsuPJe+UzN9wxuORzL5LjEm4RX3aKuy/eJej97VUvOs57HLn1dMoJ575eVt12dXxX9MY75OP/5w5Z\nc+75snTCAbn/trXlO/VtRLnsnCnz17i96DB3yEf/XeQdrz5T5k/ukX1bH5PbP3ND3FUe0IrKRDn5\n5W9wd67fEB1s7X9dJVufvkRefe5JMqOzINs2/Ep+/Pmvl9e15pIXZU7ORxNOmCfHne2ecB9n96Om\nM05cPOTEZq840e2Xbp3Xnt4zZOmQJPmQ8Fx3Ji4+RS5ZdYN8PcrRPyhXf/gqedWbXy/PO2a2HN62\nXu74xrVy78a0Qw61e/Drn5SrnnmNvP6c42Rawnuv93z3vgnfe23uk3bmtCOAAAIIIIAAAggggAAC\nJQHNflkGTEvNlNm+1S175veHbTqd9Yd13U/aKsX7fUljtS0tJq290pi0Y7R1+1hL0Kdh6wVN2pLa\nw7ZK+1n6/Jhq9aT+tDZtb/wR9yWVgZe8VLbvct/O94NbZPpslwSfrHeClw5tifpQ0BLzGubunNfk\n/PaX/4YU3Fxxcj8cUP9+cdEFsr1vp8iWG2SGe9R9xyT3VxfddA32PzNxy+DP0vL1NPTOeU3Ob5/9\nBim4ufJenz7evq+vT7Zv3x496t4eT28JeE3OWz1eti1OTyG+c16/d37ixIlDHpU/eDLUEEAAAQQQ\nQAABBBBoMwH3b1z7rb68snW3yX98/LbybrnSe6F88KKThj06Xfs75q6QS1aKfF2fdh5tL5LVS6cm\n3409daW844O/J9d+5FPinswebQ/ecVs5iS3uofFXvOtcefrfPis/cb26wviDst3yvFf/jvzXg1+M\nB627Qz7z8TviesLPwXFx5+CZFuWInndw4kWxL1R38VH/0IAh8V5/z6IXyft/d6d87Aux2bq1X5eP\nu9ewzfm95sXug9VDJhoWFTR0y7ITz3UZejvP1bKid6hrt7vL/nw3yq7YyjNWyFRdXzDTYEtw/i7W\nzlxjEteXGjNVXvLmd8v6v/yX6GsL3BcXyHeuvVoGv6BAF9HrrujG6GsA9Gr69mr3wbfvlI98Nl79\nxnv/W672PmtQPoUzLpF3XrgyYW35+ZSPRQUBBBBAAAEEEEAAAQQQaJ2AJprspb/Gad1+nbO6lboq\nq1vpt6XV02LT4rVdN39c0n5aW6V27Rsz23hJ0Od1wfQNlbb5fX7d4v22pLq1WanjrG6l3xbNm/gH\nkKin9h8DF18s22dMl51f+6r0Tpss3TNnuO851EcM+of35tXmQkGO7NojG/cdlMJlvykDL3V/AKrp\nj0befFWqA8vfINsmzJAdT10rS+Yelp6ZU936Utamc0XrK8rhXftlw/aiFI5+uxQWv7Jp61uwYIHs\n2LFDNm7cKHPmzIm+R74z8ht+YpasLzg//c55HaePytdxeV7T4UemBQEEEEAAAQQQQACBnAS8RO7p\nV7xPXrd0k1z7D9eVkqmDxzjr4rfJq152svt+dU3gDrYP1qbKcS88y30Z+11R0+ILT5VF3Wmx7oFf\nc4+Xt37sQ7LuF/fLI089J4fd/3OPyJJFRx8vJ55ygsybsEketcl1jaWDds8/Tf72zyfLLTd/S370\n0CaLiMrVr3ibXHHBQvnhJz4q33ddPV2d5XEaUOyyhU+TCe5rwMLz6OyZU5pvsUyZ0DVkrHZ0dJc+\nYOzqXcWOIf3zT3mV/NWfLpHvfPkLctfQZYksXi0Xv/xcOev0FTI51a906IRi1vLjXIL7jvianL5a\nFvaEa58lx7vk9W3fjT8dsXrl/CFrsylTz99B2JlNmzIhcaxrTI+Zeoy86SMfkGO+eYN89a54DXbM\nxatfIZdedoHMeOrb8tEv/Mg1D7efe9Kr5G/ft1y+9Y3PSTDcxa+Ui3/3NXLOKUvd0xjC846PkpeP\nrZkSAQQQQAABBBBAAAEEEBghAc2I6S+uljSzupW6LKv7pbbb2LCu+7pV64+jhsZZG2WKgF2olO5c\nmhs9RpbxlWLS+pLawzZ/368rjL9frV5Pv42x0j+mZs1ddlpW/frXv/6eduS5dWx4VrrcH606fnaf\nzJ8xTSZPniLuue3xo+X1QO5R8e557HLw4AHZumefFE8/QwZefbEUlyzNcxmpc3Xsf1q61rvHQG67\nS+bPmSBTp0x06+uWDvdHNN2KAwW3viOy/0CfbN3RLzLvLNHkfnHqUalz5tmhd9Jv3bo1Srxrwn3y\n5MnRY++79NH8bhtwfvo4+4MHD0aJ+Zkz3eM2XXJe755nQwABBBBAAAEEEEBgUxOjMQAAQABJREFU\n1Aj0PyvXvf+f5Gduwatf/6fy1pfo7wMF6TvYF/17t9/92jBpmvt9YkL87/RK57Xu1n+Tfy8lia94\n30fk+YvT/m1ccHO7iV3KNeWbpaR/00/k/f/w1ehwg+saevT+g/ukT9y/zw8dksKkaTJjcvLXVA0d\n1fy9Pvc7Qv9Av34O2n1WeqJMmTZxyPeqN38FI3eE/r59crC/SyZ0DciAO/dpE2u7Jv19B6XP/frX\nJf1yqNAp09zvsrXNMHLnzpERQAABBBBAAAEEEEAAgVoFjj/++Fe6MfqlYfvdy/0WGW2afLfN6mGp\n/ZXaaun3Y7Wum80d1pP209oqtVfr037d/HXELbX9bHR8xaM1+w56P7lccSEt7kxaV9gW7vtL9Puy\n1G1sUqy1WamxVg9L67P25DsU7Gh1lsXeJVJ45+9Lx/r1svnBB6Rznbv/ZOsWkb174xmnTxeZv0AK\nz3eJ7zWnSHH58rg9vI2kzuNXG1acslwKJ/yZW88TsmXXz6RzzyNSPLDJJeX3xEPdXfYdU5ZJYcZJ\ncmTZ6SLTV7R0fT09PbJkyRLR76Pft29flKjXpL0m5nXTRL0m46dMmSIrVqwof9+83dkTL5afCCCA\nAAIIIIAAAgi0uYD++9+99DdW/bds/O/ZDumZNCl62eqr/jt3z6/kpu+si39zdo9yP25RT8rvOf3y\n8FffL5/7STzzb7pE/ouGJfIPys9/cGd5/FHLkp9Q1T1pqkS/DLu16lZ1jfEhm/4zspN4TdHBSr5N\nP3AbHKC7Z6pMt9vx3XpqvSbdPZMkflDBpFhwHNm1weVjCQgggAACCCCAAAIIIDByApoz1Jf+em75\nQ6uHpa4ybNN93WyOeC/+6bdlqftjte6PSdpPa9P2kd7Ctee6nmYm6HXhI71lXUO1uLT+LO0WY6Wa\nWN1K38naspS5fQe9vwCrF5e5JLd7ibzampJL94ePEdmmHSP97iVyWeXDj9D6NAmvL03UV9pq/cNT\npbnoQwABBBBAAAEEEECgZQJDEqCWoM969D5Z/+tfy/Y92+Xu62923zIeby995Rkyfci8/nzdsnCV\nexT+T+JH4X/1Hz4pe994saxesUCmu1ul925/Ru783jXeo85Pl5ULJ9Wc6PWPSB0BBBBAAAEEEEAA\nAQQQQACBNhXQPGKYS9SlJiXgNS5M5lmblTrW6lb6bVr3Nz8mS7vFpI2zfiuzxll8M8qmraGZCfpm\nQCTNqTi1bFni/Ri/rscJ9+3YSe3WZqU/3tqsrNRnMWHJH5tMnxIBBBBAAAEEEEAAAQRaK+AeELW7\ndMTt7rHzNX3wtO85ufnT18jj/opPvkzOP2lWxXnmrLlALjv5Lvnawzpwk3zv+k9L2nd+Xf6e18uS\nYd+57h+QOgIIIIAAAggggAACCCCAAAKjXkBzh5WS8kn9etJJY7Q9jNc226zP9q0M2/19v27xYZkl\nxh9Ta7w/ti3q7Z6gV+B6t6SxSW3h/JVi/L5qdb/fjmFtVlq7ltZWS2mx/jzUEUAAAQQQQAABBBBA\nAIHmC0yYLi+7/HI5wx1p9lHzazte5wSZv3ixTJozRR7eMUl+4yXnyDnPXymTq84yQ856y9/Kwp//\nRO744c3ysPumq3A7/eWXyytecoYsmNYZdrGPAAIIIIAAAggggAACCCCAwFgR0Byh5Qm1TEq4p7X7\nBmFMtT6L17i0uj9HGBf22b4/V6U266tWJs1XbUzL+nVxzdoanTvL+EoxSX1Z2vyYPOo2R1iqe9iW\ndV//0jTVvVY9/PDD39aJ2BBAAAEEEEAAAQQQQACB8SbQd3Cf9PWLTOgsyCFXTpk5QyaSlx9vbwPO\nFwEEEEAAAQQQQAABBBAYdwInn3zyRe6k17nXfvcqlADsMfa1ljq82hg/ptF6OF73dbM1xHvxz6Q2\n66/UV0uMxSaVWY6RNK5iW7vfQV9x8RU6LdHth2Rp82P8uj+PX/djkurWZmXSWOurtfTnoo4AAggg\ngAACCCCAAAIIjDuBiZOnycTSbffV774fdzycMAIIIIAAAggggAACCCCAwPgQ0ByjJpLrLX2ltDk0\nxvrCuj/er1eK9/tsTNY2ix+1JfcWDF46vehpm9/n15PirT8sNTZsa2Rfx9r4pHXQhgACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACY0/A8oSWK8yrVKm0udIULd4fmxTrxyX1j5u2sXgHfdLF\nzdpmF96Pr6Xux9pcVlpfHmV5jmKxKU9WsDVTIoAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIBAewmUc4VuWVpv5A76cHzSmSbFWJvGZ6mH8/pjrC9rm8WPynK03kGvF0df9W7h2HC/lnmTxlpb\ntdKOUy3O7/frNp4SAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTGj4CfM/TrKlBt35Sq\nxVm/xftz+21Z6+F84X7WeWwdjYyv5Vi5xrbjHfR5Q9Y6nx9frZ7U77fZm8O/aH6/1m0/S+nHRGP3\n7Nnjzz2szh32w0hoQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQKBtBTo6LCWYusQoT+h6\ntbS75zXY6tVKi9XS5tC6bmn7frvVrQzHpbVHB6jywx9bJbRqt86lm3q0zdZuCXpDqhcoy/gsMZWO\nnzQ+S1sYE+7rMa0trfRjojVu3bo1KvmBAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALj\nTkDzipaAtnpa6eNYjLVV29e4MCatzebMUibNGY7LEhOO8fcbHe/P1XC93RL0DZ9QMIFiV9v8mGr1\npP5KbdaXpawUk9SnbR2vfe1rq50f/QgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggMHYE\nojyhOx0t7W55/+ysLSw1JmyrZV/H+8fUsbpVavP7w7ruJ202X1LfqG8bjd9Brxek3i0cG+4nzZsl\nRsdZnJU2l+1XK5PmsDFhn7bby45DiQACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACY1/A\n8oRW6hlr3Tarh6X2h21p+2lzWXtaafOl9Wt7GBPuVxob9jUyNpyrJfujMUGfBKPwIX64nzTOb/Pj\n/bofY3Xrt9La/TJLn8Vo6dd1Hn8/qe4fizoCCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCIw/gTDP6OcVVcPf9+t+X5KaxVbqqxQTzl8tNjxOGK/7YVs4ZlTsj5UEfRbs8IL5+7XWw+PZ+Cxl\nWozOmaXP4jTW4rWNDQEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEExr6A5Qn9XGFS3dqs\nVBmr+6VfT4vx27UebjaHttdaD8eEc4+p/fGUoM/rwtkbKizT5s8SZzE6h9X9Mqnux6Ydm3YEEEAA\nAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEBhbApY71LPSuu2HdevXUjeLi/eG/rQ+K4f2Du5Z\nf1gORlCrKNCMBL1eDLsgFQ/udWYZkxaTdKywrdq+t5Ry1R9jdSvLQV7F+vzSr2to0n7YFsb5/Ul1\nbwlUEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgHAho3jApdxi2G0VarPb7fbaf1GZz\nhWUYa3OEceG+jbP2avtp8+q4cKzNaWWWGIu1sp4xNja1zDNB35QFpq48vw7/Yvl1O0KlNutLK20O\nvwxjtc9vS6vbHNrvv6ydEgEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEExr6Anyu03KKe\ntdWt39r8dtNJarM+K8OYtH2L19Ji0tqS+v3YdqzrmnNbd14J+twW1ALxetfa6Dh/vNW19Ot2+tam\n+1a3WNu3WEoEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEBifAmEO0c8lJtUtXrXS+uuR\n9OeqZXy942o5Rl6xuaw1jwR9LgvJS8XNE64n3PcP5fel1f14rVtcljIpJmwL5/T7k+oWr33Wr21s\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gUsT+jnCq1Nz75S3XRsbBibNN7aKpU2\nr1/aMfxxYd2PT+rz5whjR2K/4fXkkaAfiRO3Y9YKkCXej7F6WFY7vsVbnJbV2vz+sG77WoYv/xjU\nEUAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgbAuE+cIwl2hnb+26n1ZPiq3UFs7l79sx\nrPT7bM6k0o9P6g/bao0Px4/o/mhJ0NeLXGmc3+fX7YIktaX1WayVFqel32Z1K5P6rU9Lq4dxus+G\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIqECYV7T9SjlHP8YUrc32/bnDvnA/aUxa\nW61j/XnS6pXmTBvT8vbRkKCvBbKW2KzY1eYM+21fS79ux0trs3aNC+u2r2X4snkpEUAAAQQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBg7AuE+cIwl2gC1q77NibsC2PCWL/f+myOpDKMT4qpta2W\nOWuJrXUducSPhgR9LifqJslyMSrFWF9Y2vqsXfeT6mltYbvta2l1m9PftzYt2RBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEAAAQQQQAABBBBAYHwIJOUM/Tat275fVx1/32Ks3S8r1f0+m8NK7Qu3Sn0WmyXG\nYkd1OZoT9NUuUqV+v8+v28VMarM+vwzjwn0/VuvabzFWhu22r6Vu/hh/3x8fBfIDAQQQQAABBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTGhYDlEP2cobUZQJa+cIyN9Ut/Hm0P9/1Yv54U57f5dX+c\n1iv1ZekP52ub/dGaoK92QULgLPFJMdaWVtpxrF/3ra6lX7fYtBhr98dY3e+zNi2trv1sCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gX8PKHV/byhtamEXw/3/THWZ6X1WWntWtpmfWml\nxWlpMX5bWM8S44+pNd4fO2L1kU7QK1pecFnnqRZXrT+8WBZvZdZ+P17r4b7NE/Zpux9rcZQIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIDB+BMKcYZhX9Psr9amYxVoZKlq7lWF/2n61+Gr9\nNm/WOItPK3WevOZKO0bF9pFM0Od54uFc4X4agsVZ6cdZW1hajLXbvpbWZqX12b6WVvfj/TjrT4q1\nNr+0sZQIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIDD2BfxcoV+3M7c23ffrfr9f1xjd\nrIz3BvfD9iyxlcYk9dkx/TKMC/f92Frrec5V07FHMkFf00IbCM4b15/P6lb6y9Q2v71S3e/TOfx9\nrdtL+/zNj/PbqSOAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAwNgUSMoRWj7R7/PrKmEx\npuL3h3V/P4z3+/y6xTVS5j1fI2tpyth2TtArft4XwJ/Pr2fFtTFWJo0L+/z9tLrOo3328ve1bpv1\nW2ntlAgggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgggMH4ELF9opX/mfpvVtfQ3fz+trvF+\nnz/e76sUE46xfX+MX7f+RkqdL+85G1nPkLHtnKAfslBvp5mYNnda6S2jXA1jtcPaLMjfD+v+flq8\nxtjLj0kaa/2UCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCAw9gTS8oZJ7eHZV4oJc4/+\nvtWtDOfVfetLK5PGNNpmx2p0npaNH40J+hAnRA/3w/i89pOO47dpPdy3Yyf1+bEaF8akjbV2SgQQ\nQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQGD8CteQTw9ikfZOr1OfHWL2Zpa7F38J9v29U\n1MdCgr4StH+BqtWtP2upxw1j/TZbl8VYX5b9pBhts1fSXHY8SgQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBAAAEEEEAAAQQQGLsCSTlDa9PStkptYYy/b3Utw/mqtVl8tTJtnrBd98fUNtYT9K28WPYm02P6\n9az7SWPCNjsfa7fS2ikRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQGBsC1iO0MrwbLU9\n7Etr88cmjbH+sM/aKWsU6K4xfqyF2xvJymrnZ3FWarxf98dru9/n19PG2Rg/1m8L6/7xqCOAAAJj\nV2BgQOS5LSJa+lun+5zZ9KkiXV0iU13Z4f/Ppx9YqqfNo+MXLYjnSRhGEwIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACbSbg5w3DpRVLDf4fza3NYrXPb/P3bZzfnzTOxlhpMWmlxVmZFjem28dagl4v\npm1Z6hZbrfTnsth62nSMP87f99v1GH6fHTMswzFhP/sIIIDA2BDYvEUG3voHIhs3DT2fGdOl442v\nFeldLJ2vulBk2rSh/eFe2jxufNfnr47mCYewjwACCCCAAAIIIIAAAggggAACCCCAAAIIIIBAmwlU\nyxFav59g1zbdD/uS9v1xeuo2Vuu2ZW2z+LTSnydLPW2eUdM+2hP0epHy3Gy+sEw7RlKctfljwra0\nfW1P6rP2sPSPQR0BBEZCoN3uyG639eR1TY64O+c1Ob/+2aEzzpzu2ja4Nvc/j4cPx3fY693waVva\nPBqvfWwIIIAAAggggAACCCCAAAIIIIAAAggggAACCIwOAT9vGK7YT7BrnG6WnA/7Ku3rOB1vMVa3\nUvuTNusPy6TYetps3nrGjviY0ZSgV+g8t1rns3grw7X47X7d4sI23beXxVhp7eEY67eyWr/FUSKA\nQDMEjhyJksYD7/jj4Xd2j8Qd2e22nmaYh3Pu2y/Fm74tsmSxFF96jit7pWPuXB5VHzqxjwACCCCA\nAAIIIIAAAggggAACCCCAAAIIIDCWBKrlCP1+S67b+af1aXtSrLUl9euc1m6lHadaWWt8pfl0Lt1s\nrfFem/5s1wS9IebNlmVeiwlLfy3Wp22V6n6fxYZtYXvYr/tpLx3LhgACIynQbndkt9t6mn1tCu7/\nr929R2TKZJGt20QmTRSZPZsEfbPdmR8BBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgpAX8/GG4Fj9R\nrXG6r6Vufp/uJ7WHbTaHxdscfrv26WZtYRn3Jv+02OTe+lubNW/9K3IjOxsanf9gRdJXnlu1+azf\nykrHzhITjk8ak9Sm46w9LMM5bd/ibJ8SAQQQGF8CRfdvgMPu0fTbdknhC9dK4ZoviuzZO74MOFsE\nEEAAAQQQQAABBBBAAAEEEEAAAQQQQACB8SZQLUdo/WEZOlm/357U5vcn1bOMsRgrk+bRtmr9aePS\n2nW+vOdMO1am9na9gz7T4isEVUOu1l9h6nKXP0da3YK134/Rdmuzdiv9MWGcPyaMt3GUCCAwWgU0\n2axbB/95xxAZf6rbkX6R57aKTOgR2b9PZOoUkYnubnosMyIShgACCCCAAAIIIIAAAggggAACCCCA\nAAIIIDDKBPy8Ybh0TThofynxEHXbvp+ECPs10G/TfRtXqa599Wz+3Enjq/UnjWn7tna7g75eML04\n+mrWlja33x7Wdd9v07UltVm7lWkx2h9u4fxhP/sIIDCaBA4fdneDu5cmnC1ZP5rWP5Jr7XMJ+gd/\nJXLv/VL4n59I4Z57Rfr6RnJFHBsBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgWYJZM0RWt7R4q30\n12UxSW1+fFo9HOfv51lPWmee87dsrrF6B30SoP+mCfvT+pLawzZ/36/bMdLaktptjJba77/S2rSd\nDQEEqgno570Ou4RtoeDusD7oSvdY9H6X1PWT4Xq3tb66u9wXgLjPL02dFpcT3V3Zdie2xh865O7Y\nPiKyY5fIxufienj8ATf/hk2ledz3o3e5OadPj6M0cTyg63B3eut6+t2r6F6anNdtgvufZj2elrqO\nHnd8G2/riCPj9Te6Hj2urmNfaT36Pfa+ix5bj6vf7671Ke7udF2XvtI2Pf/ntrjzdKW/6fhFC/L7\njni3LOkoraPPncc+d22fc9ekx9n1u2s00V2v0MxfT9a6XXd1OnAg9tJrqO3appseR1/2/pnsrrsa\naRmuoZLPvDlx/F53PTTucOl9ah9aVEOd167HNPc+DeePVxSvrxnX1+anRAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEBgpgegv5O7gWuqmmRCrRw2lNquHpcXqOH/T9kptYX+4r3MltVVqr9an/WNma3WC\nXi9GHlvWearFpfX77Va3Utfv18PzSepLarN5tM9e1hbOmdaeNm/SeNoQGN8CLjlffOQRl1TfIYXv\n3Sqy0yXXH3vKJdtdUvege2middIEl9h1r+W9InNmS+crLxCZN1c6Tjstfly6CrpkeOGuu11ifpMU\n//0LIlu3i2xxj1YPt81bZOCtfyAye6Z0vNbN07tYOi+9xCXdJ0jhvp+5cdukePPN8To2uPH6YYFD\nmoh1E3W55KsmeefNdkn9qdLxojNFFiyQzldfFCf5NWFvW6PrcXMVH3Yu27dL4Zul9ax/1t197tbS\n75LDmvidNVVk2hTpON05LJgvna+9WGTGDNdWITFs5++chmzOoevzV0ceQ9rr3dH1TZsUj9bk/N69\nUrz2yyLLloicfnrsOMn1pyWwsx5Xne/+aeRU/OGPRHbvcR/A2Bg7HSjdqT+x9P5Ztlhk5gzpeMk5\n0fun85wXx0l6/1hpPgvddf67D0fJ98J1/xW/t371ePw+1Q9OaGJ+lnOfMU06znXza/zFr46vRdIH\nJlxyvinX1z8X6ggggAACCCCAAAIIIIAAAggggAACCCCAAAKtFkjKEWpbmFjXdVl7OKZSrH8+Nt5v\ns7rfZ3UrNcav25hK7RaTNs76bQ4tk87Dj6tU1+PY1sg8NkemstUJ+kyLanKQDx0eyu/z6xbnt/l1\n67cyqU/b7GVxYWnjLM7ft9iwz9opEUAgSUAT73rHs76edQlVlxiXZ1wCesdOkfUbXOLTJVc1Qa9b\nj0uKa5JV/7d87/44Tu/KPvZYdze9S1LrndA630FNBLu7mzVBu21HNHTYD02manJa75LXDwNMc+P3\nuzm73P/s6rjNm0WedsfXvk2uftjd7d3nXjp/p1uHJugPuLHTXTJ2ySLX59axzX0YQO+onjt38A70\nRtbjktn6gYHIRT9kUHZx69O7rvvcsTSxvdetXb/Tfd78OFG80fXrXfsTXeLb7vYPAez8NdkfbtqX\n16Z3k7sPQUSbXke9m327u7aalN/pyinumtkTCOo5ps63y10jfbrAM+562ftn1253HZ+LnfaVEvST\nnaV+wEOfzuAS9HK0O3d9f23ZEn+wYtasOMGu60jzUXd9n+rd8Xo9NrvrEn1gws1zWN8bej3ce0Lf\nF9quTwnQ89T3gT6hwZL0uu+/7/O+vvVYMgYBBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAgTwE/Z+j+\nKBxt2qZ1LW2zfYuxdivDWGvX0ubz26zu9/n1rP1JcdY2psvuFp6df3GbedhGj1PP+KQx2pbUrude\nqS+0sTmSxlhfOIZ9BBAwAZekLNz2fZdMdXe8f+5L8WPpNcGuie7wEfeHXJveOa53LLu72AsPrnPJ\n8NnSsdslY5f0SqfeEV3v5hK1hZ+6O7D37ZfiP30qTrZr8l4fk26PStekqm5Ftw5N4G5xyf9tu6S4\nySV43d3qA5rIX9orXb//ey4p7ZK9jWzOoHD7HW49B6T46WvjpPYB9wECddFj61r0pf8rs9Xtb3d3\npm/5YZTsHli7NvLo+usPRXdwV7yTvpE1ZhnrEtUdb/6tKLJ49efiDzzscR/G6NgihetvcHfSL5XO\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\nF0rnRRfFd2JrctsleouP/jp6DH/hk59yH15wd/W7u+mlvyiFG74W36H+livru0PdzqGRUs//hS+I\nEt8Dt9wS+z78ePRBguIP10bnUzz//OgO845jjs5+JHvygj7W/sd3x9dBr4Em52e46zlvjnS+6/fd\n+2GBdKw81rV3SPGJJ+P3z9X/4a6T+/DCbneddczPHoqS9IXv3hq9Hzpf/rL0dXS7D2msWB7N2/mm\nN7kPeLgnOEx37xP3ninc9K0o6V78zg/ir2DQWdyd8sXb74zfn29+c/xo/ehDBRul+MWvxI/LH83X\nN12KHgQQQAABBBBAAAEEEEAAAQQQQAABBBBAYDwLhPnGcN+3saS63+bXdazGWOn3Wd3v8+va7+/7\ndRtrZaU+i8mjbNVx6l7raEjQVzs5RU7aktqztiXNl7Ut6Rg21vqstPZ6yjzmqOe4jEFgdAno3cS7\nXUJZX1q3Te+41sT5DHeX8vy58d3Vk92d0HqXtUu6xh+Rcf8TqXdS6932tuk4vRtbNy3trvq4ZfCn\n3lm9xCXc3aPHo03vaNa5dJvl7mDXtcxxd9YvnB8n8fUu8MUuea6J/y2b4+8Pt+8T1zFFF6+PT9eX\n1m2rdT26Jr2zWk9QTfSJAr6LzZtW6inoOetd/vr96BOdme6Hm94Brh84CDdt0768Njt/vZZqqM6P\nPh2X+w+6u9bdXeebnedEl/heviz7UfWc9IkL+pQB9zUA0d3wOlrXrk9EmD/PXTd3bfWa6Yc3dNMn\nG+h30LsPXUSme93xtU3vpNc59EkLk9z7K8krniG+I1/n1nPReefMju+41w91LHcf9nCXbcjTCvTO\n+r3uHPWl9ejOf3cs3denNTTr+tp6KRFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRGSkD/YtzopnPo\nX/6tTJqvUl9SfLW2pPmytuncSbHVjtlW/WMhQd9MUL3AtqXVrd8vLdZKv8/q2lfppXE23i9tjN+v\ndTYEEEgT6HdJUn35W1+fFO/5mbvj+lmXvJ3kkuaz4juh9c76d7s7o/e671zXPk2YR3e7u6T6NHcn\nc72be/x6x8vPdUlxlxB3x9Yka8dSl4B1j5vvOGV1nOzXdr0jets2d8e9e/mJXP3/HvUR5vrSer2b\nO0bhFz8vPVHAJXL7S/O5ZHbx5h9ECeiBr9yc/oj7AffhAE0C9x2W4v0Pxo/qd/Vhmz5B4D+vHnoO\nGqQfXHB9uW/Tp0vnW343up6Fh9fFHyDQa+6+JqDwmc9Hye6uY1dk/zCCe5R/8Uc/jp30sf626Xfe\n/84V0Xwdzz/DvSfcBzz0Qwpu61i1MvpQQsfb3xKNK37iPwafgOAeS1+8/Udx0l2fUJC2zXDn8ebf\njuc/5mj36HqX8Nf3nz4p4LWvjeYduOFbceJd59APa+xx69OX1lt1ffXYbAgggAACCCCAAAIIIIAA\nAggggAACCCCAAAIjJRDmDnUdmj3Q9rDUvrRNY5O2cJ6kGG2zuEr1tLHjtp0EfXzp7U1sbwR/v9Z6\nOIeO9+ew/mqljQlLG2fttk+JAAL/j703AbMtKcs1Y+88eeY88zwVUBRDCYUo4FWKuVAsFBQvDlwR\nUB9tuUp7sR/v9bn9tF7svrbcpxWb7oKrtpQgoIheFQtQmasEVArBggJrgjrzkGfMM+Rwcq/+vlg7\n8qyzao+ZO4e98w1dudaKFfFHxBtrnSzyi/+PRgSip/xaeSHrmJB3dVK3LTQ7XLu0z7i/+JjEau+l\nbjHUdbxX+GbtMW7vcu/J7n3DLS7PNrnudnnL2+te4dNjG/bYt3f+Ge1Hv0Le7PZ6tqe0vbZPq29l\nz3YL48kLf7b9sM2LaseHFwAkezFfbTvZ67pdcvnLEoV9lPvpuh6vvfUXKrm9rVsUUl798byZsfeC\n9zx77/jVYu3FERbt05hb9c1jahR5we14gYEPvy91cT6acvQF1/MzL1pw2ZScf0Fz7KMRr1TO79/W\nrflhcT7Z8FnifTxcJiX/p5OFedv0tc8LMb+pfc4QgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCCw\nWATKWqHv/Zfi8rmb/iWbRTvF+sm287q9Ltcp2l1W14Mm0KeXpjiJneYV63R6XbRdvG5UPz1P50Zl\nOslz/WQjnTupRxkILE8CElEr3/3C3KP5r/4uF8FNQkJuds8XogCafeyeXAi1iG9h/vHybJcYWnnW\nt0fRt/rc78oF+hTafjYkVbf6IvVDntS1L94bFwfUPv5pCbYSjQ8fzQXdcxLILZpb3LWnvAX7Xifb\nPaoQ9z58Pdtkkdth2310InjPtp1O60nArngBxPDKUPmh78/n+wMfipEQwhEteBifCrWPfDT/TxOL\n9+2S5+GEFkn4KEYykCBffdq35J7wRXE+2ZNIX33qU/S+rA/TFuxTso3jWiiwUtEaivbS83T2OJJA\nn8R5P/OiEXnRx8PX1yX/d5IPpUGd33x0/IQABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIGcQPpD\nsc8+6n8knhWeVD+dmxkpPi9eNyvfSX4jO53mdWJ/SZbpR4Hek9KrVLZVvC9et2qvWM7XxftyvfSs\nWK6cV36W7tO5bJN7CECgFQHvGe59wr0/9x7t631eHuzeE7wmwXRcZ4vh9jj2p7tSZS3Qr9FhT+xR\nibMVeSv72t7MFugfI462arz0zN7NDplvD/XT5+TZfUr90T7h9pifknf/pPro9uztbc9vhdlXR0tG\n5nqrNuxF7qP4+9pi8LYt+R7rVf1q8L84rZI5mJe9xYtCcqs68/3M/fD8eb7N2Ry1ICJeO0z9Ue1F\n7+Rn7ZL/U8ZCug9fp9RSKFchP7dw76P4rtiGxXMfRXvJbvHscTRiantFm8U6M9cyPqjzOzNGLiAA\nAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQKBEoNFf9f3X6HJ+yktnm0nXPjdKyUZ67vt03ah8yiuW\nK177efk+1ZnNuZe2ZtN+13X6UaDvepCLUMEvglM653eP/Zmep3OxRKO8bp4Xy3INgeVLQHuEV1/1\ng1Fkz5773Lhneva5z8ew8tmXvpx7gJ9UiHkLp5M6piTkfuUBCaTVkN17fwgj60Ltfp337gnVn3x9\n3Kt+VjAVur5214dDOHI0ZO/9c/VDwvyExGMLsfslKCsse+W220LYsjlUn3yT+ncuTP/ir8jrWuJ9\nz5NF/5LwL3G++ta3xLD0lW3bJNR38OvBYrH7v0Oe60slKWJC9WXfIzH+WJj+2CcVnUD9OyrPdXn6\nZ/9DHvVO9vrvJFU1Ph/l5BDzxTDz5edeiOGjnBxpYEGiDQzw/JaZcg8BCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAYPkSaPAH7Otg+HlZSE956XxdhcJNep7OhUdczpVABwrMXJtYMvX9AnWSGpUr5hWv\nW9lL5XxO163Kd/Is2Ur20rmTupSBwPIjMCnveAui9n73ecsmXUuw3bcnhPUKZ+896McUVn5Y3s6T\n8qq+IsHcHtOXdLbAekli/aS87A8d1VcsUbZVaPJ2dF33uDy4jxzL90T3/uZOaxW23KHZd0gUP7BX\nQv1mefrvlkBe2H88L9m7n0P6p99HMVloN5/tW7VgYF9jgX5CLMoCcxLpi7YW89rCuRZlhI3ah36n\nuLrPJ7QAY1IRChLzRuJ5uc/+19XRF3xUVDf9J4zHb5s+HHK+7NHu54644KPIyvaqsuXD18leud1e\n3A/y/PaCDzYgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCPQ/gaQR+pyue/GX56ItX3dis1iueJ0o\nN8pLz4rnTssV6/TldUmhWbQxGHgvU6/tuW9Fm8Xr8rNm40h1fE7XxbIpr/g8Xadzo/LFPK4hAIFE\nQCHjs4cfiaJ7NioPaoc19+E9xF/9QwrPrlDoFm1dzsK59oLP7r5HYu6pkH3ob3Ph3rYUBj/7vPaM\nd3h0h8SfbbokD+6/+XjcGz3oeiZt2hSG3vwmieIS5y3UK2VnJSg3EsNnKs3hwkL8di0GcMh3X6ck\nNtnBQ7rLQmX37scK9NoKIHMkAQnPmbcI0L9KFXmrW6SueM/14n7ryeZineNiA0Ui+Mk3RN61t7w1\nhJN6ByY0/05F4TzPeezPyEmLFbxoY/y4FmzU62rRR+0rX9X7cj5Un/2sXKQv1ta81e67L59nz2FK\ntrdTWwj48HWyl5736hz7PeDz2ytW2IEABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg0N8ErB8WU/ne\n4nrKS9dlwb3d86J9X7t80Ubxvnhdrjfb+17atC2nYv/znAX+uVQE+oUcdoJfbrNRfqO8VK/8rHyf\nyhXPxTLp2ufidSqf8tJ9Ojcrn55zhgAETMBe0t5bfkzH4SNRiA+ZPp91EpUt0NqrXuJ4fq1/Ci+M\n5F7s3gveImdK3rveQqsPX3eT0qIAh4t3XffFR9GOPbDt8T2i9r3HvT3tz2uP+nMKgd+Jp3e3/bHN\n9evyQ2H8Z36Vut3TiihgPvb+NgP326wsUl/WooLD8v734gKH5ren+rZtuZ1G/YwRA04+NuqA7e7a\ncT3jbsbQaVm349D7jqJgtg5rf0VHkX0rWx7fxg35cUTjSMnjOqF773VvJp4/7zfv5HfEeX7uw2VT\nivbUj406fD1fybYXYn7nq//YhQAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgU4IWC908tlHIwGj\nmJ+ufXZy+ZTn++K17xulcpnyfbFOo2eN8lynWX7R3kBd97tA7wlrlVo9b/Wsmc1ynXb3zeyk/HL9\nlN/s3G35ZnbIh8DgE5Awm33ta/me73/yVxLgx/IxS3StHZfQrDDy1Ze8WIL0ulDZICF2eGXInnij\nxFaFLV8h8TX9PvAe5BZjfZT3I7c466NRkjibnZDX/arhEPd0vyrh32H0fRR/T9oj+76vSJA/G6q3\nPD2K4bUP/pnC6mtRgRcYdJM66c9QJVRueUYIW3eEbPVa9V+LATIJyVo4kL3/T0LYvTNk9uTfuUOe\n9LuiwF1zZIGjx0P2rvfXFw7o97a3CHj5S7Rn/R7ZU78d7r2YJFBPv+GNqifWxSTuQ3fekYfxL+b3\n+loLMCo3PkGLMDaGyktvjR7t2ac+l29f0Elba9eEym0vyOt9U3OhCAIx6T3K3v2+uMgg07sTxCi2\no4cxYsMxcfqD92g7Awn0XoyR0hpFGnjB87WNwT4txBCrZC8979VZiwUqz36O5m+P5lf9nK/57VV/\nsQMBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAK9IGCxopFI38z2XMuX65fvm7VbzG9Vp9Uz22j3\nvNjOkrvud4F+IYB6glul8nPfp7zidSsbxWeprvPSdSM76VmxLtcQgEAiYLHaXtQ+W5w/c06/muQ9\nbo9q7yl/VaL0wcMSmuW9bk9x55+VWH3hUl4u2bFH8iYJ+D4aeT77S3S+D9tPv/7sPS9RO+a7HxZr\nvZ/5Snnuj0usTwXdD4m68X7Tltx7/ZhE7VOn5IEte42SPbN92G45teuPPeI9FpcbkcC8QeM3H9sz\nI+9ffkhczCMuKDAv3Xssx9Unl12hsQb1zWUdiaDRIgWPy+K8GZeTny1Ecth9h+HXooPgBRK+d3j+\n4jw164fZeqHCuMbvxQhxX3lde07OaAsCL9bwezSledbijpg8Vm+XcOq03iVFQDBTs1m9Kvdq16KH\n6NXfaN6a9aPbfL+HjoIwonn1PHuRx3zMb7f9ojwEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQj0\nmoD/0l9M6d5Kha+TYlG8LpZvdl2243LJlq/b2Wv33DaWdZK6suxTesmKIBrlFZ93cl200ezadtIz\nn5tdF9srlys+4xoCEEgE5NFdvfW50YN++i8/IrFUAq3Fd4U6z/78riiWT7/7g7nQahHVwrVDlFs8\nPi9x1b9rnC+hs/JDr8w9nx06vJgstFqg3iwxdEzHOYmhSVQfPRNq/+nX9Ewe3D/wvSqnf24P7JY9\niaf/LM/+tJ/9hQshe+cf5v1JodInFWLe/Zi0kO9PvvB7T6JvduZMFI0rWyToF8XeTvvz/d8tEVce\n4t/9vCgkZ3/x0XwBwagWKJy9FGq/+hu53ar6HLlcyfvjRQbDEoBv2CPPeUUg+OFXyZNcXvb2JF+q\nSQswqq9+tcLzHw3Tn/0njUeC+gWNxyJ9q6TtBqrPe772rj8Vpr9wr8R4edF/8f78HXH9S8dD7Td/\nO+c0LAHeaUrvj0X5c/UFD2bnyALPuSWE/XtD9eV6D7ZvyxcNnJbIPx9JAn3FWzcoVX7ge/IIAIM8\nv/PBEJsQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABJY+AYsHTj6XhISZ+1TGIkP5uiA8zJRP9tKz\nsl0/7zY1stEor1u7fV1+kAT69GI1mpBWzxqVd95s6jSzlewlmz6n6/SsVd30rFgn5XGGAAQaEbAn\nsb3jN25UOHWJyFHklge495i/IgHce5GfkyAdf83oR/y6VMeivMLSh6rEdwvPWzfHMO5h187rxfDU\npkXxbRLKvb+5PeMtqluk9b7sEnej6C8RPnph2yPbgu1DB/N2puSRHfuhBQGpXQv5W2XP9+6UbUXR\nv/77MIZHV/+9L7wF4HLqpD+XtFBhpdqxuG5G27ZqgYDGfFn5buuUFgAk2+6GWZjnBvFw//fnAn3Y\nrH56ewA/W6rJfVOY+8hrq8Z5WewuSUj3/LRK5m9PdO8ZrzD+MR1UFIFL4j6uI3rSOyqD5sCHOQW1\n5XrDXrghr/o1qm/ve4nz0Yb3tPc7Fec2NzkvP/0OOFqAthOIfRvk+Z0XgBiFAAQgAAEIQAACEIAA\nBCAAAQhAAAIQgAAEINB3BPxX6gaiwWPGUSwX/7Jdr1e8fkylWWYU2+rURKs6rZ51an9JlBsUgT69\nNLOF2k39RmUb5XXSl07ruVy5bPm+k/YoA4HlQ8DC7GaJ6xJEq//lf1VY8jMh+9CHQxg9HbJ/uS8X\nWi/Y410CuJyqY8jyDWvycORPeFwIWzaH6ne/VOL1tlB51jMltuqZj3KS6Fr9uZ+JYepr73lvtB+O\njcqmjFoDtoe9w8hrr/KhV74yes5Pr7kzD4X+ZXlk25O+pj5YUL35JoVA3xaqr/kx1VsRsk/fnXu2\nn5VgnjzzJRpnh4+o3nioWPB3eP5i6qI/1dtuU81KqO2VgHziRMg++rF8j3mHs3fo9pr+mRkSxx3y\nyB4ZCZVbvzPuTV992cty0dsh2y0Gz7fgXBxft9fum8Pcq6+V14mrwtBnb//9PJx/O1t+hxSlYOhN\nP695GAu1j38qLrrI7ta8nNeii4PH8gUZk5o//xO9XnO4Sse+3ZFP5cUvih7z1e/6Lj2TMO+FAgvF\nypEDXvmK+P4M9Py2m0OeQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYXAL6w/R1Kd13K9RfZ6TN\njdso22+U18xMN2Ub2Zhr/UY2FzyvpOwsePutGjTgXqd2Nts9T/1pVK5RXirfzdl2kq3iddFG8Xkx\nn2sIQKBIwAKrhW8Lyfb8vmGfBHudz8rz+fJlhTqvh6S/KiXdZZNAf0DlNkuUvmF/LvJLnI52irbT\ntQXq6F2v+vtVz2KwQ547RL0F+g2q64UCDjtuT2Z72Nuj2nvRe897721uL3rfu90dEt33yWPbwr7v\nJQzHveK9kMBplfpvD38L5zP/VMQn+Y9O+2PPd0cX8LjtIW5ON6hfG7WYYEj24wID9cv2okCv/APi\n4f55T3d73pcXBxS6EVaonj24y8l5ftZtmos9i+Lm6ffAHD0O97+YmvWrLtLHxRmeF+8n73k556gH\n+hXq+XTkBLexvj43dYE+lrPXvhZdxPev2N5sx9NpPffH763naD7mtzgWriEAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgAAEIQGChCbTSCtMzC+nF67n20bZmK843qlvsT7vnxbKdXPdy3J2011WZ1LmuKpUK\nd2qjVblGzxrluelifrpO53bPG5VzXsovnltdl+uk+3IdK2hOxefNrpPa1ux5ync5H3LHDE/Ksuwd\nOpMgAIFWBCzKOqS5RXlfT0zmob+TV3r6fWIxNoq5EjUtTFtsd57F61bJe9fbrkPH+zylIyb9nnJ9\ni8G25/D0Dodu0b3Yj/grUp94FN5VzuXdD4exd79TGHXbdL77Y7tedOD7cuq0Pw7h7uRFAmbhEPdu\nb0pHYuLnFoVjexKnPY5OwrR7fMdP5uO0jZRcf5eEcp+7SXO1Z4aOVmA7FtfLIe7b9cv103xcrs+L\nbRXnxow8H7bla/P1eZW4ledptuPptl4c9zzMbzdzR1kIQAACEIAABCAAAQhAAAIQgAAEIAABCEAA\nAhDoKYFKpfJzMviADv1hP7oLpj/sW3FodXRaTmai3WTL9+k6ndvlFZ+n63S2jXRdv5wRJlo9K9ZJ\n5Yp5yVY6F8u0yuvkWSrjcyO7xectrxsoOy3LN3rYqY1W5Ro9a5Tn9ov56Tqd2z1P5dI5lU/3Phev\ni8+L+alcs7yUL2VmRpxPtlJe+b5os9l1quuz3T9vQqA3RhIEIAABCEAAAhCAAAQgAAEIQAACEIAA\nBCAAAQhAAAIQgAAElgeBukD/oEarUMEzQnqn4rvF5VTWwBrdp7z03PfFo1F+OS/dp7Prl6/Tfatz\n8VnxOtkr5vm6mIplUn6jvE6epTI+t7JRLNfw2kLvck5JSO+UQaPyjfJsr5zf6L6c16wfLtdp2WY2\nyIcABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABAaTQDd6YqOyZS2yfJ+oNcpvlJfK\nNzp3W76Rjb7NG2SBvhcT2wsbxZejE3vFMr4u3ttWMa/8rNgW1xCAAAQgAAEIQAACEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAwOARSBphUTdMoyznpbLpeaNzJ2Ua1WuW1wt7vbDRrH+Lmt9PAr0nYTEm\nYqHaLLbTyViL5Rf1JaJxCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBgQQm00wrL\nemO78r3q/EK1U+xveazFZ0vuup8E+tnC6/Ql6LTcbPvRSb12fWj3vJM2KAMBCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCAwOgXYaYrvnC0Gi0z50Wm4h+jwvbSwHgX5ewJWMdvOilMv6\nvpxXMn9dWPvis3b1imW5hgAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE+p9AI41w\ntppjI1vNCHVTtpmNZZ+/nAT6Xr0wzew4v/ysUZ5fumb55ReyUblGeeV63EMAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCEAAAoNNoJFu2CivEYVm5RrlN8pLNv2sF6lXdnrRl3m10a8CfauX\noBfA2r0ArZ43etasv92ULY+rUd1yGe4hAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg\nAIHBI9CJVtgLjbJVO62emXi753OZlWZjm4vNBanbrwL9XOB0+iK0K9fqebMXolWd8pgalW2UV67H\nPQQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgsHwINNIQG+U1I9KorPMa5ScbrZ65\nTLvnndpJ5QbmvBwF+jR5nb4UqXyjs230wo5tt7LVrI1m+Y36Sh4EIAABCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIND/BJpphK3ymz3rlobt9MJWL2x02/clUX7FkujF3DqxEJO3EG20o1Ds\nQ/G6XT2eQwACy4nA9HQIx0+G4HMxDQ2FsGtHCD6TmhNoxq+q9Wwj63J+63SutPlnuJkd5qE5e55A\nAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBAtwSKf6z2ddatgR6XX4g+LEQbPcZyvblBEOivH1H3\nd8UXt1XtTsu1stHome02s93oWbOyjWyTBwEILDcCJ06G6Te8MYSjx64f+Z7dYejOO0LQmdSCQDN+\nG0ZC5UdeEflVv/dlIaxf38KIHjWzwzy05sZTCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ6JaA\ntcOiMJ+0xGJestnqWSoz23O5H83sdFquWf2+z0egz6cwvYztJrTTcq3s9MKG7ffKTqu+8gwCEFhs\nAt16Yl+V57zF+YOHH9tzPyO1JtCM38YRMT2iuvqnd3Iyj1DQKhpBMztunXloPQc8hQAEIAABCEAA\nAhCAAAQgAAEIQAACEIAABCAAgU4I9EortJ1GYn4nfUhlOrXRablkdyDPgybQz/VFnGv9Tl8St9Os\nrXbPOm2DchCAQL8TuHo1iu3TP/0mPOIXey4vXgrZX344hL27Q/b8W3XeEypbt7JlwGLPC+1DAAIQ\ngAAEIAABCEAAAhCAAAQgAAEIQAACEICACVhfbCSyJz2y22e9ptqsf522M9f6nbazIOUGTaDvBbT0\novbKVit7s32W+taqfirDGQIQ6GcC3Xpir9Ae843C2DvPz0izI1DTf7ucvxDC2jUhnBoNYfWqEDZv\nRqCfHU1qQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwNwIdKIRukwjYd4tt3vmMs3q+lk3qVVb\n3dgZmLKDKtB38lL2chLbtefnnZRp1qdy/Xa2mtkhHwIQGHQCO3eEoXdpr3mHxi8mh2PXM9IsCWT6\n75BJMR09F2p/+J4QDuwLQ//LL4WwdcssDa/mvFcAAEAASURBVFINAhCAAAQgAAEIQAACEIAABCAA\nAQhAAAIQgAAEIDBnAkXNMF03E9b9vNkzd6Rd/VSmlQ2X6WVq1+detrVgtgZVoO8VwPQidmKvk7Lt\nyrR77n50UqaT/lIGAhBIBCy+OlUG4POqVkPYJtE4jSkfWT42PyPNnoCZXp0K4fipEIZXhnDpYgjr\n1oawSt70g/DuzJ4MNSEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGDxCFjcaCeatyvT7rlH10mZ\nRKGbsqnOsjkPukDvyZ9r6saGy3ZTfq59oz4EINALApOTuZWVEl2d+lls1Viyf7kvhImJfCzpp0Tk\nyi1Pz8XklMe5ewITEujv+3oIJ0ZD7Z7PhbB/b6g++1kKeb+6e1vUgAAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQgsfQJJ+2y3CCCNxOU7LZvqlM+9sFG2uWTuB12gXyzQfmnSyzqXPrSy0wv7c+kb\ndSHQXwTs/WzRerqWez7XdJ7SkelIAv2w/km0OO+zvc0t2Ds0/MhIe9He9q9cCcF2L1/Oz27L+T6c\nbMt2V9Xtrl+f2y0uCHDZ8XF5al8N4cy5EI4ez69zC9d+OoT9kWO5vXXaFz31M+1Zf0l9KCZ7et98\ns9ouZhauU7uN+u88J/fTh/ey9zjWqN10Lo7BZd2/4ycbh9q3h7/Lj8kD3eUmJXpHRiVO3ufd40qc\nbLecWrWzSyH9Xb8XSd0NlXoEggkt6LiouT6uuVmpd2VKc7VKfS8zmE27/ToP7re/I78rFzWvPvtd\ndH6cW8HwXJhRmte1eif9/vggQQACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQLcE/JfrRinl1//o\n3qhIR3m9stNRY8up0HIR6NMLtBTn1n3rtH+dlluK46RPEFhcAhLna/d+MYRToyG7664Qzkr8PqJQ\n5VMSh8ctEKt7QxIKLT5v2yxRfl2ofKc8o3fsCNWX356L9MnDvtFIrozLo/oe7VEu+5+4O4Tz5yWu\nn8jF2ykJlRYht0roXy+73/HsuB989ftentt1iPSUJM7XPv8PqnssZO/8Q/X3dAgn1c9yOnEyTL/h\njSFs3hgqr3hpCHt2h+qrfjCEC2Oh9lvv0NiOXl9j754w9Kxvz0OyX/8kv3O7//CPIZw+HbJPfkb9\nv5DbsMf45bo3/qphCdI69u8OYeOGUHnerWK1NVRvfW4u1hftpv5pHNelneL51l+LIm3tve/Px/b1\nhzUHEnct6JrTJi1c2LA+VF4g+y5vThbpGwm5zdoRj6E774hcrmt/tjcWltfXveQtzo+Nhew9fxw9\n6MO3fVv+3tiLfq4ifb/OgyM3fPX++P7U/qr+fR08rEUxen/8/pvLpnViuDZUvu2Z+q62h+orvk/z\nvCGf27lym+28Ug8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwGAQsIbYiSDvck6dlM1LLuzPTsex\nsL3qcWvLRaBP2NJLl+5nc7aNXthp1vZ82m7WJvkQGFwCySP54qVccD4h0fzRI7lAf0zXk/J+ntDh\nclWJ8xboL8sDeESC8N5deibheFQiuT21t259rEe2PYUt9kuwDYckiltMP3QohHMSuKNAb4FSti3+\nX7RAqWPPntxr3H2x1/HOndfsuh/2xLd3uUX20TON52bGU17l3L77677Ya/+06pwcvb6exWM/KyfX\nOaf69no+JC5awBAOSVg9pwUGR47n/btYF+jX1AX6mlhIoA+PU7lxPTt5Ml9osGnTNRE99c8ibTF5\nvIc1LntRu50T4hWFXNmZ9Bzon8AxjcXjcb6908+ezefHkQzKIn2zdtymn/Uq2ftbiyFiuqIxmNtp\n9ctc3b+1a65FXJhNm/06D35fHTHCh+c1vv+atzNiclD3nu+JukA/pnffkRy2bc8XZBzVc0eLWCWG\nwyvmvrhhNtypAwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg8AlYe9Qfc+clJV1zrvbns4/zMvC5\nGNVfxEmzJJBeuFlWb1nNtjux30mZlg3xEAIDT0ACcu0f5RkusTv77d/NxfZLEqMtVpdD0GcSEi3q\nnpTAPXouZMckPMtze9pC/j55oP/sz0iklQidkkXVM2fC9O+8PRfTP/8lhc+XuD4usbJs31rxSYnN\no/K8PvGR6HE+fd9Xc7u/8h+jJ/qcva9Tvzo9W1yVOD/9/9yR9//v75VQr767/x5b3ALAv1N17dMl\nDcLe9BcfiQsOsq88GAXX6c9/TosZxOff//sQtmxuLbRKuK39+v+Zlzkmcd7h7Ysh7t3OqBY3nLkY\nsg9+SF7XG0PNIq/4V3/oVflCgE7H18tyWjBQee2PRYvZHX+QL4q4IE6Vk6H2J38qT/p9ofoTP66F\nC3URv5u2+3ketJik9qlP6/1RxIffe0++aOGyFsN4QYu/JY/Nh39bndL9ab3/Jz8ZFzNMf/az+Xvz\nll+NkRJabmXQDU/KQgACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYfAKdaISpjP5IOy/J9ufL9rx0\neKkYXa4CfXoh5zoPs7HjOt3WK5cv3891HNSHwOASsFB4SkLwcYns9g63t7P3ErdH9PYt+XlInuH+\nHWIh2KKiPcqTcOz7wwrTbu/6aQnsKVl0tNd59DSXJ7C9z+3tbo97e+Hb/hbbV1sVXXuve4Wfj/Yt\ngruc7bov9j6ekHe496Z3qG/v7W4PconeYaU8ze2h7n4Uk9tQ+P3o1e1FA428y4vly9fu/yUJqQ7F\n773s7f1vPvaIT3y2SGz2OIbVB6er6rN5npWA7q0BrqjsuBYk2FM6U78vyJbHsG5dXr7RT3vfO3y+\n++8x+p9De8XX3B/x9Dgvy6btn9chbOGY+jes8mUGjezPV5457NqZz4+95S9pztI7clSRBlbo16n7\n7blrtRVCuX/9PA9exGEGxzT+w3r/T+j98Tu+Vh7xZrBW74EjIvid9jg9p55Dv3PaEiLotYnvmrZV\niBEVvCe9OZMgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCECgUwL6A+x1yff6g2zHKdXvpo6Nd9tO\nsw71yk4z+0syf7kK9Gky0kuX7mdznq0N1+umbjdlZzMO6kBgMAlIhM4+9JE8XLoFaYvBGyQc7tgW\nqv/hF6LnbkX7lVt4zr72dYmGx0Ptbe/IPYFNxHuj3yvP+Che6zolieq1j308F+Y/9895+STO36DQ\n+Du1x/b/9LPRM77ifbYVAr/2vvdLzDwRsr//Qi5uP/gNCZryFP/yv8S9zCs33xxDplf/zXdIyNRi\ngFtvjfanf/rnY79S0/GsvdmH/uCOfA/0dRKFLWzK2z+clfjZSSr2/+5/yPvvsVqc3yB727aE6s+p\n/7t2hMoTb1R+JWSPqL/a8712x38XD4mq58XTdb74lSjS1z76d7E/1Re/qHkPVmgxxBMORLvV17xG\nCww2h8qI5kNzU/vLv45ib/aRT4iXbDvJQzv71N+HcGBfCK997fURDPISC/NToeyr3/GcuABh+m//\nNp/3rz4chebsk58NYffOkN12W/T0rzz+cZ33qV/nwVscxMUdikzxRx/Iw9uPaeGF3sXK7S+OPKq3\n354vHPHiBQn52QP/Gt//2tt/N0aesDe9t3+o/emf5REIXv8Ts4tA0DltSkIAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQGGQC1hI7FdqT7thp+SK3btop1ite98JG0V5fXS93gb6vJqve2fTB9GPf6TME\nFoeAPX2dNklU9PUWeZxLQA/79+Ze0bslqFsQP3ki92Yv7nNuz3eHdffh65TsSe79tiVYR29qe547\nWSiXuG1hO9rfvk2Cdy7QO0x7/N24alXueWxv4km1a2FzTGXsZZw86G3L3thuxwJnObmdvbujIFx+\n1NF9sf/26Lc3vJM92+2R737vV3/NxuK4kyMIrJTArsUNkeOYPMad57q2YU//1fKctu1myf22bXuj\n265D4tvj3osnDmg+/C+cy6Rkz/qxi/nh63Jyf73Aopyc52e9SmlevBjCfbfn+AOP5mdva6CFFuGE\n3p9V4nNgf+et9us8RM9/zbnnxotCzukdTt9ZJ6P3VHrsjlpxQt+Rv4lW700nNikDAQhAAAIQgAAE\nIAABCEAAAhCAAAQgAAEIQGB5EljWYnc/TnkD1acfh9GTPi+28O32u+lDN2V7AggjEOhLAgpHXnnx\nC+TtKwFxQkKyxN/KPgnD8gCu3PK0XAR3vj21R0cVpl5HUSi0kGgh3UdRH3b5u+XZffBwrDvDRmHb\nqz/yI1F8rtz0xNy+BWeF744e40eOhukv358L+xY5R1bLM/2bMeR95ZnPjB70M7bm80IhxrPP3F3v\n//i1lrzX+o//aN7/Z3977pVv8VQpjkfCd+WnXh/rZb/z369FGlB49+xTn4n1gj2nm6UNI6H62n+X\n23/84xS6XoK2F0TYQ/0Vr4h2p//0r3PB1zbi1gDq3wUdxQUSfubkSALvuuP6OXO+metZz5O2Eqi+\n/nXyoD8cal99MBeYp7RIQdsi1H7/zjiuoRuf0LlY3a/zoG+m9iVFjvD778UZU/XvQ4sVsrs+ERdH\nTH/gruYh7qe12MXvv6JOZF++L996whEoSBCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEINApgW60\nwlS2qHR02k6vyrkPi9l+r8YxZzsI9HNG2NJAetlbFmrxcK71W5jmEQSWCQELtdvlLW9vdO/1Hj2h\nJTh7b/gz2o9+hcJs2wvYHtz2hj995rHiqoVEH8Vkb27vt+2j6Nnt9rZtzQ8L28n73edN2tPdiwHs\nue+92m1z3dr8SPvPF9uYz2t7O59X330UPZ+TsG1x23uC18X52BXvK+6yfmYx1WVTcv4MD103Sxbj\nt4qPD4vzyYbPEu/jcV0EAxmyMG/7pSmITbieIwksVHJ7WxUhYVwLBjZrPv1OndXiDwvO3gZhtebc\ni0Es2pffmUZ99Lj6cR7c74v6bnx4QUsaa8zXt+Rkr/p2yeUvi6UPX5MgAAEIQAACEIAABCAAAQhA\nAAIQgAAEIAABCECgFwTmKobPtX4vxjCwNhDoG09tL4Vx20pH49Za5/ayL61b4ikEBpGAhPnqi14o\nAfBKqH3x3rj3de3jn5aYLPHw8NFcaD4nQdEio0Vne8pbsG+XXP6UBH4fRY97CfGVx92Qe5Incd62\nvDDAe8SrP0O//d+uiZoWo9eszoVqh3pfqOQ+n9BiBB/F/kuQrz7tW/L+F8X51C+J9NWnPkWLCtaH\naQv2KdnGcQnUKzWWor30PJ0lcFeSQG+xOyXzkRd9PHx9XbIy30idv67Qwty4/17wMbwyVH7o+/NI\nAh/4kN4ZLXQ4ogUe41Oh9pGP5t21eN8u9es8+Ds5ejw/fD3bZGHfHvg+ksg/W1vUgwAEIAABCEAA\nAhCAAAQgAAEIQAACEIAABCAAARPwH9ln80f14h/nZ1O/Ef3Z9qWRrYHJQ6BvPpXFl7B5qe6ezNXm\nXOt311tKQ2BQCNgz13vM26P39DmJ6trz+rz2zbbH/JT2Ep/U75mKhHJ7P9sT2mJraOPN619NFld9\nFH9NWVy2Z7iPstBsMd7HfIRe73auWvW/qVCuRjwmC/c+iuOzPQu1Poo8GvXLwnxRnE9lbK9oM+Uv\ntbP77ogHu3fl75XfGy0Aie+YQtaHo9qL3snvXLvUt/OgjjtKgI/ihJvNti0xxH2o6j8x2v3W8nyv\nVB1/E43eiXb8eA4BCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIm4L/GtvvrfCtSc63fyPZ82GzU\nTt/lIdB3NmV+gZZiWqr9Woqs6NNyJaDQ9bW7Pizv5qMhe++fKxy5hPkJiakWA/dLYFWY8sptt4Ww\nZXOoPvkmedifC9O/+CvyBpd43y45tH0xvH0qnwT6dL9Uz1X9E+KjnNJCgnJ+uveCh0bhyO0BvVy8\noBX+v/qy75EYfyxMf+yTisag9+moIgjIEzz7H/Kod7JXeCepb+fBi1hKC1kkzlff+pa47UBl27Zr\nWzy04mCR3t/jDkUmIEEAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgEAnBBr8cb+TavNexv2ay0KB\nee/gUmgAgb7zWZivF91258t256OjJAQGlYA93I/Lo/nIsXyPcO/37bRW4dQdqnyHRMQD2hN+8+YQ\n9mgv8xWFfdHzko1/+qu1qOijIi/i4q+bSYXK91EMAW8rFrXdnzOFsPjlEPcL5UHu/q9Q331UFEUg\n9d8C+8REftiTvtwfP/f+6z6KYrztVWXLh6+TPV0OZPK8ecuCjdqHfqfeIzM7oXmdFMv0jjVaxFCG\n0c/zMKT/hPBRTP4etmzSt7VVC2D2NRbozar47rh+EumLtriGAAQgAAEIQAACEIAABCAAAQhAAAIQ\ngAAEIACBXhPwX6Wd5uOv+MtBHcjpzfFn6S/rc7Q2+NXTSzv4I2WEEBgUApfk0fw3H497hQddz6RN\nm8LQm98kEVHivIV6peysBNZG4uFMpcLFkATabRIiL2u/+mMKmV+T8O6kkPnZNx+N95UnP+maSG+x\n9qLKKqz+9Fv+j3yxgPPWrQ2VF78whviu3v69uehrO/OdLKRaRL2iaALj2ku85lDlSlpYUPvKV0O4\ncD5Un/2sfE/4/En+U3xq992X8zSrlGxvp0Kb+/B1speeD+I5itGKvPCTb4g8am95awgn5UU/UWdZ\nFqEbMejXeYj91uIWh/T3dUoK658dPKS7LFR2736sQD8xGbL7748LPLIren/0W7WiaARBi0EqT33K\nte8l2eMMAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAAC/UDAGup8iP79MPau+4hA3zWyea/gFzgd\nzRrzcxIEINAJAYegH5Mw7qMYjt4eu/aAHhkJYc2a3LP9vPaoP6cQ+J14PtuDeoPq+zhxWj2pC/T2\nkD8lkXaNvM9vOJB7Bq/QP7XJc97PDh2JQn3s/ojqKwx/xwsDimP2Huc+bL/b5P5v3JAfRwrh/N1P\nLSKIe6xf1oIGc/J+804W5J3n5z5cNqVoTyw36vD1QiX3wdsRFPviti0a79pxvXg8H31yOw7N7ogJ\nfpcc1v6KjuK71qrdfp0H93v9uvzwYhX/VvJ/enkeTp+JC09ilAXz8fvpxQpeDOL357CiWXixjLea\nsB2HwretTr67Vix5BgEIQAACEIAABCAAAQhAAAIQgAAEIAABCEBg+RFopRkWnyGeL6F3YxaqzhLq\n/fLpSvEDWj6jZqQQ6AkB/c6ZlIjto7h4y57i931FgvzZUL3l6VE8rH3wz3Lx3J7u7dLqNaHy/OdG\nz+nskATiCYU2dxobC7V3/5HC5e8KVYuO8s6vbFIYdOVPv/s9Eiclzj9yWEKuRHmn2lCo7N+fhwP3\n3vXFZHHcR6MkITQ7odD9q4ZD3Os7CaGNyjbKW6v+3/aCvP/fVJ/k2RzThbGQvft9UdzO1qn/u3eF\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\nAhCAAAQgAAEILDUCSfssiCZLrYv91R8E+vmZL7+o6WWdnxbm3/589Ru7EFhYAhLgo2f3lET3hw7q\ny9GnOSVvXu8R7v3mfa8w8WFY/xxulfAevXiVZyE6iuH13zfeU35CAr730bbYaPHcguIGea3vl9Do\nL35UorSf23u6pvr2NE+/rvy8qjr2PN4osd3ex/v2xtDe8TotEijTcTvb1C/va+4IAF484L5Z8Je4\nngvqEkTtxdzpvuduw+N0H7xnvMKLx3RQ3s0Oze5oAB67PaE9Vh/uf1DfXW9YfbJX/RrVt/e9FhlE\nG97T3kwiw9zksvnpefVWBp7/rVu117relUt+D9oI9P08D343vahE2wnEd2Sbxr1C39Jlbd/g9+eU\nFrT43XEqvv8b9I54YYe/Gy0sCZv1fm/Qu2OGJAhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEOiU\nQPzLfaeFZ1Eu2U9KxyxMUKURAQT6RlTIgwAEBoeAhL+hn/4piYWjYXrNnXmI9i/LU9xe7BbRLTDe\nfJM82LeF6mt+LAr12afvzr18z0pgTB7rErMz7x+vUPAVh4ZfoX8+fchjfOiXfymE8+dD7a8/EkXz\n7J7PyntaXsLycg8ORa9mwpDEx+3yON4wor3rb5XH8M5Q/f7b87D0dU/khtAleld/7mdiOP7ae96b\nh88/NprbtfZrD/sNEvwdatxh6btJFkQVDWDoTT+v8Y6F2sc/lff/bo3/vET/gwod7wUBkx6AbK8X\nK3v+75Oo6j3XX/yiOP7qd31XHuLeAvVyFOfN3ON2mHvvuf46vUcKuZ+9/ffzRQ5+3ir18zw4csAr\nXxG/l9peLdRQRInsox/LF784nL23SKiJjd//HXr/R/T+3/qdkVP1ZS/LFzV4awSL/cv13Wn1bvAM\nAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEBo4AAv3ATSkDggAEriNg4W/L5lz8s6e3Q96flfjs\nPdftce77A/vyEPP75NFrwdv33jN+RJ6+9lZ3WiWPX3vaW2jM3cljdhQW7TEdPYJl3/vKH9gvgV71\nLdg6pLdFfvejLtDPtLdDwqQ9zlt5DruexPzY7n71yzYdct52LdBL8A+bNT4Jn9GOIwbYo7mcnOdn\n5VQXh4NCrQeP3/vJe/wxuoB+RVigt+e+xdP1dQZ1gT6W89i1uCGOv2i7236kut3W67Z8aqfZeS72\nzMjvjwVnvzd+DyRgX5cGbR48Zr97XqziSAxe8HKDvgNHiRgSCy9Q8Xfm9zgK9Mo3lx1a5LJb77X5\nuC4JAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBMCOgv63NOndpoVa7Rs3Je8b7ddXrezblY\n1teN7pvlpfKdnJO616xso+fFPF/7sOpzU5Zlv6MzCQIQaEXAYcbjHvASzS2cTkzWQ7erkgXGKLxL\nQLRY6HuHKXf5FN7dtp1v8dGCtsV43xeTy15yaG/bn8jrT+m6mCz+xvoSwS1YdhoO3vZsN9mfsas2\nbc/9jvYk3rvfx0/m5YttR6G/7qlczE/X7n8a9+X6+N1mkYHb8rhty9cOke+zw/OXebjubPrRbb1u\ny6fxNjvP1Z55OTqD7XiRg+ejmAZ1HuK4tejFi1Ec4t7jnvLYxSOl2b7/qT5nCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQiAQqlcr/rIsHdSicb3TnS3+Q9R9li9e+b5aXnnXyvFi20bWaie0Un5Xz\nivfpejbnYp1W1+VnvndyH5ulVs+KdTotV6wzc11SmGbyu7no1Earco2elfOK9+2u0/NuzsWyvm50\n3ywvle/kLDUr2m5WttHzYp6vfSDQCwIJAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAA\nAsuJAAL9dSJ7USwvXvuVKN83y0uvT6Py6Vnx3Gm5Yp2Zawu9pKVBIAn2S6M39AICEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBgEAuiQS2gWEeiX0GQ06AofSwMoZEEAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAg0JoC82xLJ0MhHol85cdNITf1AkCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAokAGmIi0QdnBPo+mKQWXeRjawGHRxCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYQAJohH08qQj0fTx5dB0CEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgAAEIQAACEIAABPqHAAJ9/8wVPYUABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCAAgT4mgEDfx5NH1yEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhA\noH8IIND3z1zRUwhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ6GMCCPR9PHl0\nHQIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE+ofAiv7pKj2FAAQgAAEI1AlM\nT4dw/GQIPhfT0FAIu3aE4PNCpiwL4coV9aem8+UQajpP6QjKT2lYfapqXdyaNXn/fK5U0tO5nRe7\n/bn1ntoQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgWVDAIF+2Uw1A4UABCAwQAROnAzTb3hj\nCEePXT+oPbvD0J13hKDzgqYr46F2zz0hnDoVsr/7ZAjnz6tvp0K4Wl9AsELi/O7tIWzcECq3vSiE\n7dtD9fnPC2Ht2t50c7Hb780osAIBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQGHgCCPQDP8UM\nEAIQgMAAErDwbXH+4OHHDi6J4o990vsce8qPjeXHoaMhaOFAOHQohHMXHivQT01EgT72eWIyhNNn\n5GU/FcLISO5ZP5veLXb7s+kzdSAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACy5gAAn1/Tn6P\nYiL35+DpNQQgAIElQ0DifO2P3hfCkaMh+9DfhXDhYh7i3qHufTj0vNPU1RAe1YKCoRMhe0SLCjaM\nhNqDD4Wwd0+ovu61Eu435uW6/bnY7XfbX8pDAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIBALwmg\nGfaS5gLZQqBfINA0AwEIQAACA0ZgQh7xl7TfvD35Dx0JYVQe8Zd1P6RfrQ5pv3VLvte8hz0tj/9z\nCntv736fJ+U57zreg942Vq8OYdWq7gAtdvvd9ZbSEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg\nAAEIiAACPa8BBCAAAQhAoFsCk5Mhe+DBEA4fCdmHPxHCcYW2v3IlF+R3bw1h545Q/aU3SaTXtdPp\n06H2f/3feQj8Y6OxbPbJz4Wwa0fInndrCPv2hspTnxLCypV5+XY/F7v9dv3jOQQgAAEIQAACEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAg0JINA3xEImBCAAgWVIIIVjt1c3qTUB7/1+7lwIZ85q/3mFtbcX\nvNOwPOe3bAphh4T5/ftC2FYX6NeuyfOmtPf8SdWxJ73rOCS+baxfl4fEz620/7nY7bfvISUgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhBoQACBvgEUsiAAAQgsSwLyyo4peXEj1Dd/DeQtn33m\n7hAOHs4951NJCe2VH3xlCAf2hcrjbghhnYR3p/XrQ+XfviqWz97+eyFM1FmPy8499+Tlb3l6CGsU\n6r6TtNjtd9JHykAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIPAYAgj0j0FCBgQgMFAEvPe3\nw4/7XExD8nTesS3fA9ye0H4+eTWEalVhyTfnocqHh0OwV7mFa3ssX5S3s8/2fnZ+8ji3LYvZq7WH\nuK/Xrs3t2FZK06p35nS9HfdF9V3H5Xduz8+prNtwf04qFHqx38P6J9vli3ubuw/j2gvd5by3ues6\nue0N66/1J4ntLu+9y92fS/XxTOk605EEerfj8j7bjgV7tzsykufnLVz/0+3PhXOy5v7Zs9z2HDI+\nsfDzNH6J3TN9TfXanVv1T2Hm4/ja2Sg+d7/Mu8jcz83LXvM+/P6Ym5OvnXdZYyq+F8nOBrFNc5fX\naP0z1Vus9lv3jqcQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQg0IYBA3wQM2RCAwIAQOHEy\nTL/hjSEcPXb9gHbtDENv+69RfJ5+5+/m4vLXvxHCpo2h+uv/OYQ9u0LFIcol7GZfvT/fQ/yv7grh\nrMT8g4clck+FMCUR2UL2JnlJr18bKt/2TIn+20P1Fd8ncXxD9JqOz93ymTNh+r/8et6PbxyXyK/F\nAKv0T/Ce3WHoHW8LYfeuXLi1QO2FAEePh+lf+OUQjqlsUBsrJPTu2ZKX/6//e2wnDkhie+2f/jHa\nze64Mw+X7gcbN4TKa/9tLF99yYuveXK7/L1fDOHUaMjuqo/nyCmNReMZ16Hmw5BEZre3TQsVRuQR\n/p3PUnvaU/3lt+ciffKwdzspzZXzCrGI4vylUPvYx+Je7dnf6Hx+TCL4JbERg53bQti+NVR/+vUS\n77XIwH3uNDXrn/nfeUfk1KmpWE5tZ9/4Zv4uFPshIT56zsuDPoryyajzbzigqayGzGJ9SrbzyKP5\noo+infS82Xmx22/WL/IhAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhBoSUCKCAkCEIDAABOw\nt7vFeYvqxWQxVKJtWCWx9OARCeEnQjikMvbeHh/PxV8L5S53+Ki82SVi+7n3Cz+oe3ubT9QF+jEJ\n9OvWStCWJ/y48o/quW2sUrhye31bxLfH85jEZgv8h9XepOxaoHe6Um9vlTzwa1LI7eF+SaL0YfX7\niGxZNffe5lflfW2x/qrqWsxOdi9cyPtlu6NnbDGPAuAw6vYcd3J59+mi7NrmCY33UZV3fzx2Rw+Y\n0OFyVbVlgf6yxj8ib/W9u/RMtkbrEQC2yhM8eYbn1nOBeTacvVDBbUaPcPXlvMbicXhhgucljs0C\nvRYNTGr8CgkfDil/SvXS2FIfWp2bvQeu42fdJvfZ8+bD1yl5TjyPPnydUrN81/W8+CjaSfWanRe7\n/Wb9Ih8CEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIGWBOrqUMsyPIQABCAweAQkBE+/43dz\nEfWfvpSHHrdIbTHcYrEE8tqn5DmvMPPZ771HHvQS5i9LKLYoXAxxbw32lPJOj4Xs5Cdzj/zPflai\n9p4w9JZfldf3jtyTftXKUHnGM0LYvDVkDx7KBW8L4he1B/mjB9VsLUTPa3vsP/SQxGktBpiSUB9d\n2nW6qj4dl/g+vEb9kJjrBQL2ZLfQ/+DDeXlfpySBuPKtas+e3BaLFQa/9o/ytJc4n/22xm2x3SHu\nHerehwXfJBBn9TGeVHuj50J2TAsZFFZ+2kL+Po3rZ39G49iUWmp9bsfZrN2uthmYfufvSZzX4oFP\niZ8XElySGB+fqz9Oh9WPE2dC7Td/K8fixQWLlczstELc+/B1SlpIUNm4UREMdBRD2TvfURV8FPNd\n94wWJazXUbST7DU7L3b7zfpFPgQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAi0JINC3xMND\nCEBgYAlMSxy38OzkfcEdsj4li8IWu+3FbVH6xKg8ueX9vlYe8RbF18pj3iHX7RVtcdle9hbtz0us\ntUe1NGaHMg+nJYJ7X/q4J7080hU+P9qxh7qT67oti9E+fO/Dnvs+fJ2Sr92GD3tb28veffHe8TPl\nde0FA/Zut+f+env263A/vbDg1CmJ/BqPwtuHs2fzPrrs9i15naFhVVY7Fv/djkTzyMEsfG+Pfvfd\n7DpNrTjbhsd1WVELzNee/fae92IIj3FIY/A4NhU89l3eZd0fs1uspG5EDh6fr4vJTMsRBvy8Wb6j\nCPjoJi12+930lbIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQjMEECgn0HBBQQgsKwI2Fv+\ngUfyIUfP+froLfo6vLxCqWd/9AGJ8xK1x+TdvG5NqNz+Yu0VvzNUb78934vd+6ZLvM4e+Nco5Nfe\nLs907TVvb/owlYXan/5ZCPv3herrf0JC/erco32LPOhX/fk11BLDs4cfVPkroXLTjdGLOnvo4es9\n4pPHtcX4yYmQPfINCbpToXLzU+PigOxh3UePewnpFoF3StDesyNUtG98SOHoNabsQx/Jy3l8trlB\n4v2ObaH6H34hevpXtB+7hfzsa1/XIoPjofa2d+RiuXvr0P33KtKAxX1fd5qacU71r1wJtc/cLc5a\nLPGpz+Uh+r34wOPYrXEoAkH1zerfVi0iyLTQ4Mxp9evt+bxclLAvnX5xkhTySc+HjqJC78UQfi98\n+DolX3vveR/FfC84SHZ83XEq1FuU9jvuKAUhAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAo\nEECgL8DgEgIQWGYELJRaCN68WWcJ1lX9k7hV1zWpvlMSoc/KI/6cxPluPLWtsdpb3V7oFvcdXt73\nFsRHRiSK67B463sL7tEjXG14r3Vflz3i7amv8PgxWbh2aHML7D7cL+9Zf0lCtQ9f2+76tflhMdjj\nSymNY5PCrPt6i8LU79yuRQR7Q9i1U4L4rtyT+6S87O3VblspuV+X1b4PX3eTGnF2u44u4GcOt29W\njiLgCAROw+q352LntrjIIWyTWG8+jmKwQ3W9B71D/neq0K+QPS9AKCfn+dlsUpwv9amcPCYf5dQs\nv5mdcv3yfbN6zdpplt/MTrk97iEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEJgzAQT6OSPE\nAAQg0JcELHrf8uQoUFd//N9JrN6c7x2uUOO1+7+ah7e3p/iUxHVrsNoPPbvrE1HMnf7AXRKv6yKs\nxc1iiHsL6M6bkGf8l+/LQ8nrOmwZDpUbHifBXKL5FgnkFyXIj0kEtwf9Aw/LK13Ct0V9CefZQ9+4\n5hG/UuWf9qQc8X3ybFdb2SOPSEifDJVvuTkPdX/oWAg+HCZ93Vrtdf+0+t7zdWHftdcqAsCLX6Aw\n/Gq37qFe2bdPe6VvCJVbVH7NmjxfHu3ZqLzkfXhhQUoaUgwr79Dyvu40NePs8PwW6RVxoPbpz6j/\nRyTOa6uBlEbWh+qPvDqOo/KEx6v/WnTgpL3dq6/78cin9htvU58t0neQ5Ik/9K47rh+Tq8WIAzs6\nMNBFkWZCeLP8Lkx3VLRZO83yOzJKIQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABHpBAIG+\nFxSxAQEI9B8BC7O7JMzulQe1PcgdQl3ibxSJ/+XLEszlyW0vc4vtTr62h7eTverbJZe/LBs+fO1k\nsd1e42vqxyU/k/2LY/nh6+gRr3bsIe+mvQ/7Vnm6O3n/d/fHe86PqY4XBtiT3AsAvE+8y9vrfZPK\n+yh6wHu827fnQry94y3Wuh+OHHBGe76vkL0x2XW7Djd/WsJ36ndsXD/cduKR8tqdm3F2fgwDr/a9\np7wXDnhxQ0qxv/Ke367DYr7vnXztPHvap7z8SeufLuu57mmyl7yPUkqczLiYUn4xz9ezFs4Xu/3y\nQLiHAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCECgHQEE+naEeA4BCAwmAYWaj3vDH9gXKvv3\n53uDWzC2F/txhXj3YY/02SaLsd4j3UdR1LbA/HR5vstzPfz9vXl79pi3wB496FXvm4dyj3Ir7hvX\nh8qLXhhtZF/4igR/ebg/9JCE9DGdH4n34Yq876Onv8orpH7lmd9a96CXAJ+SPOSrtqP6tS+qXXuu\nf/zTeWj9w0dzkf+cxHl7zVvwt6e8Bfu5pmaci3aPKry9j6LHvsLzV57y5HwcDtWfkvNvfKLmS6Hu\ni/np+YKdJY6v0uICH+NeWCD2KcWFE5pPb2+Qkt8Bv08+iu+DxfmVsuGjLOinug3Pi91+w06RCQEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAQBsCCPRtAPEYAhAYUAL2qN4ir3kfFlKL3ub2SvdR\nTC6/TWW9X7n3qpc+2jJF4VVlFVr9Ok9vt2Nx3oevLdZaYLenvUPP24PeofUt2FuAXi0hWuH3Z/aX\nj3vUS/Qfk5huz3vXtae77Tjsvvu3QbZ9FMfkzrqcBWJHADh9LoRTEsXPn8895i0qT8pGRX2yl7+9\n2e2lHyw+zyG14myzLYVrLWbwgoaicB25ioujERTz59DFWVX1/HtsPioW3etWPB5zTnNS7KMXIBQX\nIaSGvTDERzdpsdvvpq+UhQAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYIZAl4rATD0uIAAB\nCPQ3AYnXlc0Svn2UhewoSpeEaYnz1be+JYZJr2xTiPVOBFWLsxZwdyi0fErak73yrc+Q6L41ZJ/8\nXB5S/qw81VeeDdlX5CFvodd700/r4nG7YnvVm58aBfvpYYnV9pT/5sEonmdf/9fc093iuttaJdF6\nvfagf/KT8rD9RQ9zha6v3fXhEI4cDdl7/zyEsxLmJ7Tnu/u3X+1s3hgqt90WFwNUn3yTPOzPhelf\n/BVFElC4+7mklpxtWP3WkOIRVz0kpVt5SQB3saWW/M5s0pYIDs8/PipB3oNQkjCfXdACCB0VLy7w\nGFK+Fzz4sHifkrcY2KLFFD583Wla7PY77SflIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ\nuI4AAv11OLiBAASWFYFmArD3ffdRTC67Rfu6b98qQXtfY4HeHvD2oC6mJNKnvCisys4FifJJkLVg\ne1Ui++iZvFQKrb9ubQgj67VXvLzoXc+Cu8/jaueSxPVzEtnt6e769p6P+9urrM9lz3N7bjts/5Fj\n8pyXoHxeQrHTWpX33vQ7tOjgwN58wcKe3Rqf2kricl5y9j+bcU4WV2hMPsre5Q7578NjScl8U36Z\ndSqzEGfPq+fFh69Tcp/8HpTfhWb5rusoCT6KdpK9ZufFbr9Zv8iHAAQgAAEIQAACEIAABCAAAQhA\nAAIQgAAEIAABCECgJYGSAtWyLA8hAAEIDD4Bi8nbJVZfUcj5okAt0Tw7eEjjz0JltwXs0j+f2rc9\nu/9+iefjIXPYeemulbUS2CW8Vp76lGsis8LpV5/2LQpBvzFMr9bzikLNZxLPL10OtY98NOer6yBv\n+cqT5Ml+QIsBNiu0/mXlbR3RWaK8Pe7Hp0N27xdyj3sL9g75fnO9vEXjYt9tVTazv/l4CAcPx+u8\nIf3ctCkMvflNuce9hXql7OzZxwrM8ck8/PAiha3yRL+kBQMntEDhat0TXVEBsocelhg/ESrfcvM1\nfs5/4MF8HI4csFhJiyUqNx7QPFVDduTktS0RvLjikBhbs9+x49p74vfn0YN5v9MCDPfddp5wQz7P\nxYgH7ca12O236x/PIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQaEigpDA1LEMmBCAAgeVD\nwB7q69flh8VjC612ird392kJyPZqlwgfBXCL9PaMviJvdgvoh+WdbnHdoeNtx6HwbasY0jx6Pq+R\n57rsOCT9StmYkAe87ScPel8PK3+9vOd9eF95C+5r5Blv7/hMYrZF3rMKpe5k+y5T3Ns+f3Ltp/e2\nH5Ow78PXKbk/bmNE4v8a9cttn5dde+cX+53K9/pc5H1KixXyWPd5P+zp78UG9kZ3OffV3vPO9+G+\ndppc1uH6y3XMdZeE9PKChnZ2/W5sVCSEjeKZIiG4jiManDktpmI5qQUESXR3v/3++Cj2weNyqHwf\nvu60n/PVfrtx8xwCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIE5EUCgnxM+KkMAAgNHQB7u\nlWc/J4Sde0K2+n0ShSVW28Ndwnb2/j8JYffOkNnTfOcOedJr73YJr7W77wnh6PGQvev9dWFbArj2\ngg8vf4n2kN8TKrc8PQ9hblgWmS3OW0y/Ud7x0ujDQ4dyMferD+U4LexKMK886Yl1z2qFeB9W3o2P\ny4X7UxLP7TV//zeuldfCgbi3vT3uNYbHJvVpUqK+j7jioF7C/b/vK+r32VB1P7XYoPbBP5MX+JEQ\nLkp8nu+kBQeVf/OsEPbsCtkxie4eu5P2dq+9V/z37g7VHeK9TVsLWMAePZ3nO1S/Fxt0mk6cDNNv\neKPmSfWKSeH8h+68Q+3vLua2v169JlSed2v0iM8+8Tn15VJe59JF8fvLEPbtCdUnPEHRAdRvJy0o\nyP70g/kWAxfrZZ2vRRGV5z0/n2cvkOi0n/PVvvtEggAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAA\nAQhAYN4IINDPG1oMQwACfUnAInDa+32TRHSL1BKLo2fzGXl4e296hzC3R3QUvHX2vQT6cPxUXtb7\nqQd5UrusPagtyheT7+2x7f3lfbhNe+KPy1ZMuvae8utH8sPXPtbJG9+Hr+Oe5sXysqFw9fGwvcck\n1XEYfB/jFsHVhpNDyh9T332/SaH0HR3gmETsUxqLvcEbJXt5++jW67yRLdvwgocYpl8LEXxfk20f\np+RtXtX9YS0WuKx+eVhnlHfytM6aC5fpNHmcFucd4r+cUlj9cn6re3uwm7fF9g2aQ0dQcCSF6EGv\nLQLM+dDRvN+ORHBafXa/T9f77Tlco4UajlywdbO2MZAtz1un/Zyv9luNmWcQgAAEIAABCEAAAhCA\nAAQgAAEIQAACEIAABCAAAQjMmYDUIxIEIAABCMwQkEhasfCqVPmB78k9pP/io7m39qi86c9eCrVf\n/Y1cSK7qn9AolEuYtbBqj27tSR5u2JN7fv/wqxQ+XV72FtXLaZX2mP/WW0LYsiVkX/9GLlAn0dxx\n9VfKs/ymJ+ae1SslXGtBQOUJj1co++GQ3fMFWVObqbwFf+11X32G7DXzoLdg/FTZW6eQ8f/8tXp7\nMnHhQsje+YcxRP508ryflBju8URvdtlO7ejKwnxmkVwRAirq+5xFekUTqN7+vVE8n/7EZ9QPtTGq\nCAFRqB6VR/nZUHvzf87byep9mazzLobqd98WMmlOKk99StxnvvKyF9Y96T9b3+rghBZrjIbam/7j\nNT5e0OBtAzwuXzviwW3ywNd8pfcgeJ47TYvdfqf9pBwEIAABCEAAAhCAAAQgAAEIQAACEIAABCAA\nAQhAAALXEbAUQoIABCAAgSIBe3FbLHXYcwvwDq8uYTxclre0PaTt2e18J2vG9vK29/MGCfESysP+\nXKAPmyVgb9iQP4uFCz9c3gsBLkjU93VKyZ73t/f+67ZnAd5l1stT28d15fVs2P1VeS8EcPj8sse+\nbXuPeoXlD1Pynn/oYF5mSh74FrktHLvOKo1xWHa2qt/RhvIsJkdP+vp4457wEvDtLZ4YpL7P5uyx\n2It8k+wpnH1cDDCuNifUtymF8Z/S9Ql587s/HoP75z3jdRss2Lt/xbRWYeLtnb4QyQsaHG1h5j0R\ntwtiaDYW4k+q33Vssf/2end0hRHN+waN+YDfEy3gWKt5S4sjuun3YrffTV8pCwEIQAACEIAABCAA\nAQhAAAIQgAAEIAABCEAAAhCAQCQgpYMEAQhAAAKPISAhvPrKV0Sv+NrevRKJT4Tsox/LxWyHs5/S\nXu41CcEWXXdIcJXIXLn1O6MIXn3ZyyQ4b8wFcYv9jQRziauVZz5TYvj2kK36wLXmY8h317WIK3Hf\norvrK1R+5cYbdV4VMofNT8mi9d6dWhQgcdvC+kbVLQr4qZxsDf30T8W90KfX3CkPb3l5f/n+3JPe\noeK9IOHmmzSWbaH6mh+LQnj26bvzqABntSAhhbuXIJ055LxC4Vccmt4LCeaSPDYvQvBe8P+bPOVH\n5Xn+R++Pe7Fn/3yfxG4tBpjSogi3c4PE7O3q3xtel/fvbzUfl7Roopi857sXESxU0rxXf+LHxWks\n1J74xLzfH/9E/p4cUwSAq3pPnNz/Pdvie1F56Uvz9+SlL8kXJ3ibg9mmxW5/tv2mHgQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCEBgmRKYo7KyTKkxbAhAoH8IWMC2h3M5Oc/PmiULx/bstrC6V57O\nFrBvkFC/UWLqkARyC6/2PregHgV65R/Yr2uJ1rslmNvTvZV4nTziLeTvk13bd3Kftkucd/8clj6J\n7e6Pbbq8+5M8ru1Rvk/tlcvn1q79dD+3bM7F/v1uT7bPXohCexyH7x0e3/3fJ/teBOB7Cc9hRIsE\nkqf6Konf9rT3woToxl5vYracXd1jMyt7+Cv0f0j98z7zFugnxNrjtMe5BPrYP0c0uEH98x7wxWQ+\nQypbTnPpX9lW8d7z40UR5uV+r3b/1S8vrtBiiuhJ7/KxfY3P/Tugcl7c4AUVa+TxX0zd9rPX7Rf7\nwjUEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAI9JyBVZM6pUxutyjV6Vs4r3re7Ts+7ORfL\n+rrRfbO8VL6Tc1K1ymUb5Zfz0r1VRSlm4UlZlr1tzjOIAQgMMgELy8dPXhOY01gtWDtUus+tksO4\ny1s8epA7xH1N3tz26J6JXa5Li6oWSldLkLW95PXeyq6fOdy8+3f67PX9sz3bcWj9Yv+0D30sb+E6\nCea24/D2LtduT3j33YdFd9d3GHmPT/8fRfIovMuOFwJYNHeodpePZVyoXs6LCeJ4Jda7nNNcOdvG\nTP8U9j/2b+Ja21HEr3Ox+O2U+pff5T/dLz/3uZh60b+ivfK1Gbk/bif1y+H5Z5I4DatP7tcahcX3\nAgeL84lfKjfbfvaq/dQPzhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEILBkCVQqlV9U5x7QYS82\n/zHaf8RP4oWvG903y2uVn2y1O6vJ2GaxXDmveJ+uZ3Mu1ml1XX7meyf3sVlq9axYp9NyxToz13Vl\nZeZ+Nhed2mhVrtGzcl7xvt11et7NuVjW143um+Wl8p2crRo1Ktcov5yX7qVSIdDP5mWlDgQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAT6mQAC/XUie1EsL157isv3zfLS69CofHpWPHda\nrlhn5toOeMGEAABAAElEQVSCLwkCEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA\nBCAAgXkmgEA/z4AxDwEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEDABBHre\nAwhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMACEECgXwDINAEBCEAAAhCA\nAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhBAoOcdgAAEIAABCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCCwAAQT6BYBMExCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgAAEEet4BCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwAIQ\nQKBfAMg0AQEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEECg5x2AAAQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEILAABBPoFgEwTEIAABCAAAQhAAAIQgAAE\nIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQR63gEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCA\nAAQgAAEIQAACEIDAAhBAoF8AyDQBAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhA\nAAIQQKDnHYAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQgsAAEE+gWATBMQ\ngAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABBHreAQhAAAIQgAAEIAABCEAA\nAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMACEECgXwDINAEBCEAAAhCAAAQgAAEIQAACEIAABCAA\nAQhAAAIQgAAEIAABCEAAAhBAoOcdgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE\nIAABCCwAAQT6BYBMExCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEEet4B\nCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwAIQQKBfAMg0AQEIQAACEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEECg5x2AAAQgAAEIQAACEIAABCAAAQhAAAIQ\ngAAEIAABCEAAAhCAAAQgAAEILAABBPoFgEwTEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQR63gEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAAhBA\noF8AyDQBAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQQKDnHYAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQgsAAEE+gWATBMQgAAEIAABCEAAAhCAAAQg\nAAEIQAACEIAABCAAAQhAAAIQgAAEIAABBHreAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA\nBCAAAQhAAAIQgMACEECgXwDINAEBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAA\nAhBAoOcdgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCCwAAQT6BYBMExCA\nAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEEet4BCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAwAIQQKBfAMg0AQEIQAACEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgAAEIQAACEECg5x2AAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg\nAAEILAABBPoFgEwTEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQR63gEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAAhBYsQBt0AQEIACBeScwHabD\nqP7P51ZpKAyFbfo/n0kQgAAEIAABCEAAAhCAAARmQ4D//TEbatRZLgT4PpbLTDPO2RDg+5gNNeos\nFwJ8H8tlphknBCBgAgj0vAcQgMBAEBgNp8Oba78cToSTLcezM+wIv1X9b8FnEgQgAAEIQAACEIAA\nBCAAgdkQ4H9/zIYadZYLAb6P5TLTjHM2BPg+ZkONOsuFAN/HcplpxgkBCJgAAj3vAQQgMBAEpsPV\nKM4fDUfbjsdlSRCAAAQgAAEIQAACEIAABGZLgP/9MVty1FsOBPg+lsMsM8bZEuD7mC056i0HAnwf\ny2GWGSMEIJAIsAd9IsEZAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMI8E\nEOjnES6mIQABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAokAAn0iwRkCEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAwjwQQ6OcRLqYhAAEIQAACEIAABCAA\nAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACiQACfSLBGQIQgAAEIAABCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIDCPBBDo5xEupiEAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA\nBCAAAQhAAAKJAAJ9IsEZAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMI8E\nVsyjbUxDAAIQgAAEILAECExPT4djx44FnxuloaGhsHv37uAzCQLLjQDfx3KbccbbDQG+j25oURYC\nEIAABCAAAQhAAAIQgAAEIAABCHRGAIG+M06UggAEIAABCPQtAYvzP/qjPxoOHz7ccAz79u0Lf/zH\nfxx8JkFguRHg+1huM854uyHA99ENLcpCAAIQgAAEIAABCEAAAhCAAAQgAIHOCCDQd8aJUhCAwBIj\nUPboOjF0IkzvlHdwGwdg1zt89HCo6f/wGF5ik0p3ekag/H1YmH/00UebCvQu7+c+O+FR37OpwNAS\nJMD3sQQnhS4tGQJ8H0tmKujIEiRQ/j743x9LcJLo0qIR4PtYNPQ03AcE+D76YJLo4qIR4PtYNPQ0\nDAEILAEClR70oVMbrco1elbOK963u07PuzkXy/q60X2zvFS+k3O1brtctlF+OS/dW4Jcp+NJWZa9\nTWcSBJYdAQuORY/g6r5qWPm+dcHnVql2uBYmX3Mp7NH/4THcihTP+plA+fso/w+e8tjKgjwe9WVC\n3A8SAb6PQZpNxtJrAnwfvSaKvUEiUP4++N8fgzS7jGWuBPg+5kqQ+oNMgO9jkGeXsc2VAN/HXAlS\nf7kTqFQqvygGD+i4pMOeV5mOWv3s60b3zfJa5Sdb7c5qMrZZLFfOK96n69mci3VaXZef+d7JfWyW\nWj0r1um0XLHOzDUe9DMouIAABJYygbLA6P+AK3oED4fhcMP0E0NV/9cq2Y7rTk1P4THcChTP+opA\nu++j3WDSd5HK+R6P+kSDc78T4Pvo9xmk//NJgO9jPuliez4JTE1NhVqtFsYvjActWg+rRlaFalUL\ndleuDPojVU+abvd98L8/eoIZI31KgO+jTyeObi8IAb6PBcFMI31KgO+jTyeObkMAAvNCAIF+XrBi\nFAIQ6DWB8h6o6T/oZttOsmfPYSc8hmdLknpLgUB6n734xInvYynMCn1YKgT4PpbKTNCPpUiA72Mp\nzkp/98n/DeJksdzp6tWr8Zx+JPE8PU/3qV4qV36e8n22zUOHDoXzo+fDJ979qfjfPc/8/meEjds2\nhqc//elh1apVxeLx2iK+k0X9Ykrtp/bS2WX4PoqkuIbA9QT4Pq7nwR0EigT4Poo0uIbA9QT4Pq7n\nwR0EILC8CSDQL+/5Z/QQWPIEktBob96ix/xcO267Scy0Ld/bvhN700cM/OgDAnwffTBJdHHRCPB9\nLBp6Gu4DAnwffTBJfdLFycnJ6ME+OZl7tE9PXg2ZNPAhR7XSeWpSgn0UxyWQy7E9RruSh3t1uB71\nKjq7Z+FqrS7kO1t5K4aGc0943Vdmdp/Lodh7/sLZsXD+9Fi4dORi/O/4c0cvhEwmzu+9EFatLgn0\narrmfqg/tSn9iF1RI27bh9tYWQ2VaiWsXDscx3Pu3Llw8OBB/vdHjpyfEJghwO+PGRRcQOAxBPg+\nHoOEDAjMEOD7mEHBBQQgAIEZAgj0Myi4gAAEliKBtLLS4rmv5yuldm644Qb2pp8vyNjtOYH03vJ9\n9BwtBgeAAN/HAEwiQ5g3Anwf84Z22Ri2J7qF8ocffjhcvHgxPPj1B8OVi1fCuUNjIRsPYeW5tSFM\nShA/OSHhXKK4DwvzaxSCfsVQGN4kEb2ahfHKWKhVroYr1StW9cPw+hWhuqIa1o6MhOpQNaxYlQv1\nyQPe4n+tloXLly+HcKES9v7rvpBNZuGBS4dCNqLzFx4K1VWVuEjASrzXBvj5lUcVCv9yFlYc0RRJ\nyB/K1JjE+avrVGClFuvunworNqwI+759XxgbHwt3vOP/DadOnQrHjx+ftzlN3yH/+2PeEGN4Hgik\n95b//TEPcDHZ9wT4Pvp+ChnAPBLg+5hHuJiGAAT6lgACfd9OHR2HwGATmK+Vlc2oub3kUY8nfTNK\n5C8VAnwfS2Um6MdSJMD3sRRnhT4tFQJ8H0tlJvqzHxbJJyYmQm26FibPTYap8alw5ciVMDE2EaaP\nTIfaJannFsAndJyrn0d1tnO8xProrb5O5xVZmLooT/uhWrhSuazHU+Hyisshk2C/cv1wGJKAn41U\n43l4WOq595Sv5GK7veDdj6mJq2HosgT8iWHZroRV54blJS+x/ajK2oFe5ewpn6lezHe/tAYgOypT\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\nk+Vx93EZrkSAfhgZ9bdvRrh8XC5eeLu02+3SHsRc9BE8b/diyPsIzq/11kp72C7nN8+V7qBb3tx6\nq7TidXfULoMI9n+5+eUI9vfLvbX7ZdAclK32dokqlOWbq2VlsFq+o/GdcZPAchXkH5VheTRcnwyt\nP96IerXK2+0LZbWxWr6w9PlYvlj+0Nk/VN4fvl8+3v6o3BveK+vr6xHMj6z9CPrPqkz7qd+vZiXs\nuIcRmH4u/X51GD37LLqA/rHoLez6XkZA/3gZPfsSIHBSBAToT0pLu04CcyIwzSCZZpEcV7Wn9Wi1\nWjPNmDmu63Pe+RSYfi71j/lsP7WerYD+MVtfR59vAf1jvtuvLrXPIeV792Iy+XulnBqfKmeaZ6qg\nfNavylqPAPvmeLMKZA9jLPv1+Pq43Kky1h+OH5ZOfGWWfAby24126TQy+74bAfZBOdU4VV1mBsnz\nvXa8N92u1WhF8Hyl2n65sVw9tyKonufc6m6XXrNX7i/fK71Wr9xbmgToH7djwvlhoyx3N2PfrbI1\n2Koy6TPAngH6zdFWfB/EIzLu48zbo+3q5oLtUS/WDspqDLF/qpwuy63lyL1fKhuNjRwPf6Zl2k/9\n/TFTZgc/oMD0c+nvjwPC2fxECOgfJ6KZXeQhBfSPQ8LZjQCBEyUgQH+imtvFEiBAgAABAgQIECBA\ngACBQwj0x6X5zUhL/yBi7jmFezUhfMatYyj5SFffjOHr/1H/58pGeVzud+6VjeZG+bnzv1AFtre3\nNsvr49fKd7V/X1mJIPtvv/3bq2D9sJEB8nEZ9AbxPYaw38ih7COAHxn5ObR9I4egj69qePp4vzVs\nld64V/7p1q+We5375Re+8x+Vx8uPS6sT/7QRyft5Y0Aerx1B/XEMyb/+Vsxtv9UvS7/SKivb3dKL\nMe/HMeT9ufbZKtD/he63VMd/P+ad3x5vl3/4+B+W/rhf1iOzPsuVlS+U06OzZWNjIwbkjyH5I9tf\nIUCAAAECBAgQIECAAAECLysgQP+ygvYnQIAAAQIECBAgQIAAAQKLLhAR9OZ2RMG340KX4pGTwkfJ\nrPiH8ZVZ5ne6dyNAv1EeRib74+Zm2epM5qC/M7xbmqNmzFHfKWvxlcPOZyC9GjY+l6ZDx0eCfgbk\nJ7PPZ2C+NTnJzrli0xg6P7Lh42vUHJbtpe2ytbRVukvdat2T4+Rese14OWsX27W3SmfQKUvjlSro\nn3n0nSqLPy+kqsnOTQabZTAelJiJPjL0SzkXX3mE5cjsz9eTjPu8lUAhQIAAAQIECBAgQIAAAQKH\nFxCgP7ydPQkQIECAAAECBAgQIECAwIkQyDnhT/diKPoIoje7k7nm88IzIP/Xm3+93I3g/MfffrsM\nuoMInsd87TEE/dK4E3PBj8s3Pvpaebh9v/Q/jgz0GHq+mdHuKNPM+Iiu7yl7VuyKiceRy1acczsy\n9dudGCa/MwnO5wGmWf3T5eWlmHe+0Sz/+MwvlNe6r5Uf2P6j5czodGTL96rHr23/WpX5/6D/IALz\n/bi0QQTjl8rvXv1nyyjqv7y5XG4PPyr9TqPca94tvzz8+cjgzzsUFAIECBAgQIAAAQIECBAgcHgB\nAfrD29mTAIEjFMi5iW7evFlybrtcrkuZzplUl/qox4IJRFJY52Inxmvd33Xdat0qzcvNag7X/e0x\n262yLlmnnFP2QCW6eP9mP9PQFALPFtA/nm3jHQL6h8/AMQg8/iCy4SO+3hpPhqHPmPk4hrbvx1cG\n5+9275SNpcdltDQsjeYkwB4x7mqf7XYvhpfvVbnqu6uemfAHLtU88pkDP6723h2U33us6r2oxEZn\noyyPlku31y7LzaW4QSCGzh9Fpn4zZrMftcpSrGvHL2TDGBZ/KQL0nVg/ivN0xjED/Xg5ZqM/XfqN\n3ic3FOw90RG+9vfHEWI61EsL+Pv8pQkdYIEF9I8FblyX9tICde0frVarXLx4seSzQoAAgeMWEKA/\n7hZwfgIEKoEMzl+9erVcv369CtTXhWVaL7+41aVFFqsencvdcumvfK7k837K4K1BWfrxU+XK4N39\nbD7zbdrtdvl33/oPSnt0sF8n+u/3ygc/9F7p34gUPIXAMwT0D/3jGR8Nq0NA/9A/jqMjnBufK3+s\n98fL5eblavj44WhQHo4fljudO+W9y9fL/eX7Za27Nsli35XxPonBV+H8Kqs+B5Svxos/5EXsHKkK\n9uexPjWs/VOOOYyh8D869VEZdkalv9Evo8jo72QQvtEt39H9juo4k4H6R+XxaLOai/5XNr9WHo3W\ny/vbH5TN0ePy+fblcn50qvxC+ZnI3p9t8ffHbH0d/WAC0xvpD7bX7LbWP2Zn68gHF9A/Dm5mj5Mj\nUNf+ceXKlXLt2rVy+XL8PqsQIEDgmAUO9i/qx1xZpydAYHEFppkieYdlncq0XnWqk7osjkCVeT5s\n7z8DPX5qN95p7H/7V0B1u9w+8Fn6w365fuPXSv96ZNErBJ4hoH/oH8/4aFgdAvqH/nEcHWG9uV7G\nr49LszkZ3j6D45ujrfJ4vFmG3WEZdSfD2mdWfBWEn1Zyd7B+9/L0/YM+7z7G7uVnHCeH2h+0BmXQ\n7Mfo+pM6NmO/HPp+JQL105IZ8612M248jKz6Rqu04/3V1urkegc5+P12tU9c3EyLvz9myuvgcy6g\nf8x5A6r+TAX0j5nyOvicC0z7RyZg5bJCgACBOggI0NehFdSBAAECBAgQIECAAAECBAjUXCAHpJ8O\nSt+POdu/Pvx6uTO6U7or3bK2slaaEdSuXYkK99a2y3Zrq2w2Nkt+rZVTcR27ryavq1GWy0rpNpbL\n71z9Z2II/VH5PXGNG6ON8nc3frLcGLwXw+D7J5Tata8KESBAgAABAgQIECBAYA4F/HU5h42mygQI\nECBAgAABAgQIECBA4JUKNHaFtGM5E8kj7F19NSKrfppZ/0rrtI+TVdn8ed9APEbjyKCPTPmnlbik\naqNWPK80VqpNVuMq243JvPWdRmcyfP/TdraOAAECBAgQIECAAAECBAgcQECA/gBYNiVAgAABAgQI\nECBAgAABAidRIEaKjxzz9uQRy9XQ8aUfQ7/HlAMR1G5MItz1o6kC75NqZZ0/Nfz+M2s72Sm/N8aN\n0orofj5mPbz9M6vjDQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAABAgRmJZDZ55MM\n9IzHT8LWrYxiV4HvSY79rM59uOPurlMjg+x5N8Hzys7NBzknfX+8XbbGW2UwHlZD3j9vN+8RIECA\nAAECBAgQIECAAIH9CgjQ71fKdgQIECBAgAABAgQIECBA4IQKRCJ5BOGHk0cstyOn/I34yjLsD0uv\n1SvdTjfC3y8IgL9qvwi4N3uR/x6PbtS6G0PW79xj8JSaxI0GO9e5HYH5n9/6pfJo+LB8NLhVHgzv\nR5B++JR9rCJAgAABAgQIECBAgAABAgcTEKA/mJetCRCYkUCr1SqXL18uw+Gw3Lx5s3qe0akclgAB\nAgQIECBAgACBgwpERnnM4F49YiL3akj7lcZyWSnLEaGPmPcwIuH5Lww1i89nML45ilz/casarj5v\nINg9HH9OST9qDGJ++syY71dXmLchZOb8+uBRWR+tl83Rdtke9WJtbKwQIECAAAECBAjMlUD+u/PF\nixerf3vOZYUAAQJ1EBCgr0MrqAMBAtUvSdeuXSvXr18vV69eLTdu3KBCgAABAgQIECBAgEBNBDI0\n3R/3qkcut0unXOleKWuttdK80yqj5QjfvxXvxL8y7A6AZ/Vz+3y86jKeRN/L6sZKWd1eLcvjlbIU\nX5MyqdGwDCJD/qMIwm+Wb/TemwTpR6NqWPs74zvl8XizfHP4Ybk7uhNbyqB/1W3ofAQIECBAgACB\nlxXI4Hz+u/OVK1eqf4N+2ePZnwABAkchIEB/FIqOQYDASwvszqCv052M0zss61Snl8Z2gNoIdC53\ny6XWxfjn7e6+6jQYDMqtW7dKPtehtNvtcuHChZLPByn9GAK3XB6UfolnhcAzBPQP/eMZHw2rQ0D/\n0D+OoyOcHZ8tZbsRIepRnD4z6Ev8BtONoPdyOdVbK73Gdhn3Isc8guKjdm4TgfpmI7aMQPhxReiz\nDjFm/VI/wvL9bhV0397Jks/YfZZhfG0Nt0svbj4YxbrMpM/l/nhQtnMO+tFWeTh+WB6NH8V7k+ua\n7Dmb7/7+mI2rox5OoG4j3Okfh2tHe81GQP+YjaujLoZAHftHjtyaD4UAAQJ1ETjYv6jXpdbqQYAA\ngVckML3D0i9wrwj8pJ0mRtXqXOzEuKv7u/Abt2+Uqz9YnxEmsl/8+Wt/+eB/4LwTGXjX+tVwuPu7\ncludSAH940Q2u4vep4D+sU8omx2lwPoH6+Vv/Rs/UR7eehDztI9Ls9Gs5ps/NTpV/sCtP1jutO6U\nLw++XNa762VrdbOM2+PSWo1h5YcxpHwvovlxX0XsNhkB/yWGwc8bA6ph6neGqq+y9Z9xvNyuM+6U\ni/culdNbZ8r7vffL7dFHkQ1/twzHcatB1KcV13Guea4sNbrlt6/9plg/Kr+89Svl4ehh+VrvXrkT\nmfM/u/33y4PRgypgf5SmTzuWvz+epmLdcQnkyHZ1GuFO/ziuT4LzPk1A/3iainUEJgJ16x/ahQAB\nAnUUEKCvY6uoEwECtRHIO/QzCJlDICkEjlugP+yX0Y1R6V+P4HYNyigy6C4ML5RL8XWgktN9uWn5\nQGQ2frGA/vFiI1ucXAH94+S2/VFe+YPWg9JYakZ2/DTKPgmUt2JM+9eG56vg++u9N8pSZNRvttar\nOenHkUHfiKTzdr9dzgzOVEHxzE4fNHKW9ygRsa++dhLTG81cG/tE1nvG3Mc7z83qbsYItpdWbD+q\nRh/K7P3GILaKX4umGfvN5qfvehz3I9M/bg44OzxbTg9Pl/EoRgCIAHxmwudzb9SPI7dKr9mL58j2\nryqVFcuzjMpGK+agLw8ie369bIw3qrX57iyLvz9mqevYhxHIz2Rdiv5Rl5ZQj6mA/jGV8EzgswJ1\n6h+frZ01BAgQOH4BAfrjbwM1IECAAAECBAgQIECAAAEC9RZoRTD87fgnhAymP47lnWB2t9EpX+p8\nezX0/Xc+/M7JkPF3IwgfkfO7w7vVkPdL46XSHDfLneGdcqtxq3zcvVP6zX7Zbm5XQfvNrY3q2leW\nViKjvVVao04E9ptladCp9lsbnopwfKe81Xwrwumt8i3tK+VMOVt++vrPlMHSqDx6434MS1TK2sqp\nKrO/3Yx6xoxAvfd6ZXVrtXzX8PeVc41zpdmeBBovlberIezf778fWfG9cq93vwq+f9j7KJ7HZau5\nXu4375efWfup8vHwo/LR/VulN4gh8KuLr3czqR0BAgQIECBAgAABAgQI1F9AgL7+baSGBE6UwPSO\n+OOeqyjrkcPnZfa8Oz5P1Eew1herf9S6eVTumAX0j2NuAKevtYD+UevmmZ/KRXb7eCXi8vEYbcbw\n8KNRzEM/Gea+G8PDZ1kZLVcB7t4oAvQxh3tzGBn3kam+0lypgtv3xncjbj4oD5sPq6z1x+3H1Xbr\njYfVfqfap0qrGTn5g27JbPjMkm+NW2Ur5rfP5RxWvx1fJdZtN3ql1WuV7rhbDV8fdwaU1fjKbSKG\nX2XWt7baZXl7pbSHkXs/blc3A2Q9q5sAYqNJvRtl0BxE/eKa4r38nnPPb8bXoxjmfn30qKrzrIPz\n2U/9/ZGto9RJwM+POrWGutRNQP+oW4uoT50E9I86tYa6ECBQVwEB+rq2jHoROKEC0znlrl+/fqxz\n3U3rkUPb57JCoA4C08+l/lGH1lCHugnoH3VrEfWpk4D+UafWmN+6xFTuZfzF7TJajoz1h49Ka9As\na+NJxno1D3xeWmTV5+D0GfjuRGb9pcalXFUNUJ+B+kYE3R9FMP728u3yoPOg3D39cdmKr/eb71cB\n+tdef620W+3SiQz6zLjvxHFyuPuMnGdm+6gfCxGIX1rvRhA/hs2/fzpy4S+U33L3t1TnuxvD0ecN\nAI/LRtxAEMPb91ulOWqV64MbEY7/oOSQ+3lLwUpjqdr+rfab1TlONVdjbdxMEF8PY675v/bor5Yb\nw/fKe3e+Wc09PxgMqpEAZtl6037q749ZKjv2QQWmn0t/fxxUzvYnQUD/OAmt7BoPK6B/HFbOfgQI\nnCQBAfqT1NqulcAcCEzvsMyqTud9v3nzZsmM+ldR8vz5S2SeOx+ZQa8QqIuA/lGXllCPOgroH3Vs\nFXWqi4D+UZeWmO96NCO4ferNUyWD1ZunH8coU83Sj+VmDEXfjGB9BtJz+PkM1ncymh/PGQzPx2Q0\n/HHkvucW7ch678Rc9RHEj0B8Zq63I7s9A/h5rGr2+Z3h88cxKXy1GO/l+9s54XyG6iN7PzPn34qh\n70+PT5dTMb98nnOz9GLo+n51zFFs14wgftZgGF85q3yceadGkxsJ8iaCbmOyTbwRof0Ydj+y9e+M\n7pQ7gzvVsPaD0WyD8/7+mO9+sei19/Nj0VvY9b2MgP7xMnr2XXQB/WPRW9j1ESBwFAIC9Eeh6BgE\nCBy5wHHdaTk9r8yVI29SBzxCgenn9FVnskzPq38cYWM61JELTD+n+seR0zrgAgjoHwvQiMd4CWun\n18of+YF/vqw/2Cg/984/Kht3NsrdX4w55h+NSudrEWzvdco7o3ciO32lXO5eLkuRpX66FRn2GZKP\neeUz1B4x9rISX7/r4e+KUPigrH+8HgH1XrnV/ziGuu+X/p1etd10OPkI/VdXvBOvf5LFnvPTZ3D9\nW1tXYur5Tnk8mgyVfy+PE1+jRg5WH6H8uGkg33+rO6nX250LUZe8TaAd54nE/DxnnP+r/a+X9cZ6\n+aXlf1xuj2+XH9/438r9/r3yqP8gwvqTY1UHnMG3ab/0+9UMcB3yyASmn1O/Xx0ZqQMtkID+sUCN\n6VKOXED/OHJSByRAYIEEBOgXqDFdCoFFEnjVd1rm+fKXxvyHsXzInF+kT9PiXYv+sXht6oqOTkD/\nODpLR1o8Af1j8dr0VV5Rzgl/5tyZ0upEePtiuzSXItv9fgTBH0YtNuO5Fxno2xHwjvD3VieGwo+v\njJNnkD2z2LMMGznDe2TSR3A9A/fDyITPAPq5YYbrB5H/vl0F6OOtqlTzyU8Wq+8ZcI+k+hhdK+af\nH0YdNprV9lvdrTJsDUprJdbFHPS5TZa8KSDnrM8a5Kt+zFufGfvNOFe+18+M++p75OY3+2V8JrLu\nI/h/tpwp461h2fjgYRkNZhOg9/dH1US+zYmAnx9z0lCqeSwC+sexsDvpnAjoH3PSUKpJgMCxCAjQ\nHwu7kxIgsF+BV3Wn5fQ8Mlf22zK2q4PA9HM760yW6Xn0jzq0ujrsV2D6udU/9itmu5MkoH+cpNY+\numvNoevX1tbK6upq+cPf/wdjjvcIwW9HuD3meo84dxn2huXDD2+V3la/PLr7qGxvR2b8hx/GkPgR\nAu/1q6HvV2P/drtdzp1/PZ4j0F+NhB/HbSzH/PR5/LdLK94/c+Z0DKEfA9J3Y0j6iK1nYD4D7PkY\n9AflmzfeL5u3NstX/vOvl+2tXnn0ezfK8lsr5Q/8ke8qq6dWYrvJ9hmo7/f75frXrpePNz4qP/Xe\nPyiD3iBT56vzrZ4+VbrL3XLl858rb596o/yOL/2x0u62y78++FPlvRvvlatXr5YbN24cHeKuI037\nod+vdqFYrL3A9HPr96vaN5UKHoOA/nEM6E45NwL6x9w0lYoSIPAKBQToXyG2UxEgcHCBvXda5uss\nOSf9y8xNn8fJXw6nx8uMeZnzB28fexyvgP5xvP7OXm8B/aPe7aN2xyugfxyv/zyfPYP0+Th16lR1\nGTlHfJZ8zrnpH7XWS3t7u2ytRAb99riap37Uj1z5nKM+9muutEqz0y6d8zEXffw+3l3KjPcMppfq\n9eraahXAXztzavJ+FaDPrPnJeTJAnwH3tfFapuaX8lbkwW+OytKlbll5e6msvLNacij+STA/6xX3\nDvR6ZWl7qQw2IsN+2CyjfhwvM/tjRIDm6UZpxUgAy59bLitrK+XcpbPVTQGvN14rzVaz+vsg65nF\n3x8Vg28nXMDPjxP+AXD5zxXQP57L480TLqB/nPAPgMsnQOCpAgL0T2WxkgCBuglM77TMfxjLkpks\nL5PRMj3edCj7/EUx1ykE5lFg+nnWP+ax9dR51gL6x6yFHX+eBfSPeW69etQ9g+5Z8jmz3S+/804V\nTP/C5yNwHtHxDKZnmQbYMyieJbPjs+TuuW++XwXwn7w/CYpPj19tHN8y4J6Z+51Op2y9HcPa/9sx\nZ32s+9bv/EJZXl0u5147H8f+ZIj72KM69htvvF49Z7B+d8n65DnyePmc1zAt+sdUwjOBzwroH581\nsYbAVED/mEp4JvBZAf3jsybWECBwcgUE6E9u27tyAnMlsPtOy6x4vs6M93zO0rwcmTk7y9WKZ3yb\nHudSuSRj/hlGVs+fwPRzPa15vt7dP/ab8ZX75R9Lua8RJaaanuddQP+Y9xZU/1kK6B+z1D2Zx85A\n9+6yvLy8++VLL08C+s0ngfRTlyaZ/Gdfn2S+57D5e4P6edIcVj/LykoOf7+/8qL+4e+P/TnaajEF\n9I/FbFdXdTQC+sfRODrKYgroH4vZrq6KAIHDCUxudz/cvtO99nuM5233tPf2rtv9+kXL0/cP8rx7\n21x+2utnrZtuv5/nTBl42nZPW7933fR1RiRz3L4vRabBj8azQuDECewNON5q3Sr/3oU/V/L5eeXC\n8EL5z279JxGev/SpIe6ft4/3CMybwN7+sd8RJ3JEiWvXrlXB+QzU5x9OCoFFE9A/Fq1FXc9RCugf\nR6npWLMUmGbkTzPip5nvTwvOH1U99vYPf38clazjLIKA/rEIregaZiWgf8xK1nEXQUD/WIRWdA3H\nKRB///xInP9X47ERjxx6OOcGiwm9qudcftrrZ6173vrpsV70HKf81Llz+yy799v9erp8mOfd+zxv\nee97+TrLtG6TV5/+/rz3dm+53+127/NkWQb9EwoLBAjMk8DeOy47pVNaoxcHE6f7ZYBeIbCoAtPP\n+e7r20+wfbrfdOqH3ftbJrAoAtPP+e7r0T92a1g+yQL6x0lu/fm69mkgfmlp6ZVVfG//iFnry6VR\n3NAYX88rF1pvlSuXP18ulLeet5n3CMy1wN7+4e/zuW5OlT9iAf3jiEEdbqEE9I+Fak4XQ4DAAQUE\n6A8IZnMCBAgQIECAAAECBAgQIEDgZAu8UV4vf6H55yNNJRNVnl0ygJ/bKgQIECBAgAABAgQIECBA\nYCogQD+V8EyAAAECBAgQIECAAAECBAgQ2IdABt4vxJdCgAABAgQIECBAgAABAgQOKpBzmisECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAjAVk0M8Y2OEJECBAgAABAgQIECBAgACB+guM\nB+NSRqUMHg1KjlxfvY5VsVRKpDe0VuOfUGLK+dZafGvU/3rU8BAC0e7bt7er9v/U3tHkS28tVe3/\nqfVeECBAgAABAgQIECBA4BACAvSHQLMLAQIECBAgQIAAAQIECBAgsEACEZjt3e6VwZ1B+fh//bj0\nP+6Vx9c3y6gfEfvhuLROtcsb/+Lrpft2t5z/w6+V5poBCReo9Z9cSu+jXvnKD3+l9D7sPVmXC9nu\nX/pvvlQ9f+oNLwgQIECAAAECBAgQIHAIAQH6Q6DZhQABAgQIECBAgAABAgQIEFgcgXEE4TM437/d\nL9s3tkv/o3h+f6uMehmgb5TWmWEZ3h+W0alRGY+qtPrFuXhX8kQgR03I4Hx+BvaWakSFvSu9JkCA\nAAECBAgQIECAwCEEBOgPgWYXAgQIECBAgAABAgQIECBAYHEEhg+H5dZ/f6v03u+VR7/0qAy3hqUx\naJRxFYuPIP2oWYaDUfXIEe8VAgQIECBAgAABAgQIECBwWAEB+sPK2Y8AAQIECBAgQIAAAQIECBBY\nCIEqg/7jyKCPzPnRZmTJ98cRhx+XRqtR2q91Svtcu7TPtCfzzxvdfiHa3EUQIECAAAECBAgQIEDg\nuAQE6I9L3nkJECBAgAABAgQIECBAgACBWgjk8OWP338cw9pvl91DmXciOH/lP7xSli4tleVvWS6N\npRjufrVVizqrBAECBAgQIECAAAECBAjMp4AA/Xy2m1oTIECAAAECBAgQIECAAAECRyRQ5cv34ns+\ndo1h32g3Svftbule6lZZ9CVj8zLoD6Y+nRKgcbDdbE2AAAECBAgQIECAAIFFFRCgX9SWdV0ECBAg\nQIAAAQIECBAgQIDA/gQyiLz7Md0rAvJVgD6C9BmsVw4ukDc9ZGl0d/wwHhzRHgQIECBAgAABAgQI\nLJSAAP1CNaeLIXByBcaDUgY3+6U/6D8XYdDul/HF2MT//Z7r5E0CBAgQIECAAAECCy0QMePhxjC+\nxd8RG4OyfXMytP14PAkmP7n2eL/3Ua80OjG0/XJE6+O/nIv+SRZ9bD7aGsW3ONRmbBzPOZ/9JNi/\nc6xGRKTzv2Z8i+z7aoj8eG4ux7e9weo4xPbt7apeT+qQC3HepTeWqu379+NvnjzVIE8Wq/L4UaZ1\nr17njQVvdqv9qjfzW2ye+21//OnjN9tZqVJyOP9qhIDcNq9rOy+qlP6DOF/umyU27ZyK64/tmznU\n/7T+0+1zl/WsXBxiFGMRxKP0JruWzriqa3WjQ15/J/bP/07vOs7Opk+esr4H8Yjjds9Prjvb7EnJ\n+j2Og8V/g512ml5ToxXbRRXacV3Tmwme7GfhUAL+Pj8Um51OiID+cUIa2mUeSkD/OBSbnQgQmFMB\nIao5bTjVJkDg0wKDD/vl/R+8Xq7fuP7pN/a+utwvg2vxD0yX977hNQECBAgQIECAAAECJ0VgtDEq\nd//m3dL7sFfu/B93Sga9+x9/9mbfDM5/5Ye/Utqn2+Xs7zxbZdNf+FcvlNbZiOhGySD2+k+vl8Gd\nQbn/d++X4YNh2f5wu4z6o0ngPrbJQHGz0yzLF5dL60yrnPm9p0v79XY8ny3NlYgo7yrT82W9dpfu\nW93yrf/pt1bH+fDHPiy9272y+WuPyziD9BlgjzKOc1YB+26zque3/YV3Sycy/6ubCSJAnYHzPO7X\n/8zXSu9WLwL6UbcITi+9EUP4x3ZX/uPPl86bEaSPUl3Xz6xX23/wP3xQBvfjjugo6fDmD7xZbX/+\n958vzbWdc2+Py/rPhcPHg3L3/7ob2/dLLzzzJoJxGMWpqnPl+TpnO6W11iqnf+fp6nyvff9rVZD+\nSYZ9dabJt4N6ZLt8y5+9UtVv6fLSZNSDDM5He9/7ifulf7tfHvztB2XwaFD669HeEZtfenOpdF7v\nlLf++FvVdY/7WVvlZQT8ff4yevZddAH9Y9Fb2PW9jID+8TJ69iVAYN4EBOjnrcXUlwCBpwtEJkT/\nRvyj2vXP/qPa7h1iiyprYvc6ywQIECBAgAABAgQInCyBzDYfrY/K8H4E1CN7fvBgEoDeqzAejKsg\n9fDhsArCt1Zakwz5iIVn0DqPsf3BdhXc773XK4OHkY2fAfpeBOjjUQXMdwL0jWFk4UeAfvtGtwoE\nZ7A4s8fb5z7JyJ+eb/tGZLnvKhk07t/ql2YE3/O9DLBvvx9Z/5Gtn0HzLP04d2aFN/JlXt9WZLDH\nfo2liEJnkDoC5TlqQO9m7Bt1ngboS2yXpQpM52JsnseprvnuoPQ+6JX+3cnfWaPzGXCPjeLvr6rk\ncWMEgQyAV9tFHbNeadOLzPcqQB/VSu8cQSAD9KNHo9I61Srd97rVsfp3YpSzuI4Mkj/J4J8efsd/\nvx7tx+2qPulY3RWw0055Lb33exO38JsG6HO0gbyeHP2g/8HODQU5AoLycgL+Pn85P3svtoD+sdjt\n6+peTkD/eDk/exMgMFcCAvRz1VwqS4AAAQIECBAgQIAAAQIECByrQMRvMwB987+9WQWlH/zsgxg+\nPYLfEeTNId0zEF8NN58R8CjjXryOQPn6N9arIPXG1zZiePhmefQP1kv3Urdc/Dcvlvb5+OeZDIw/\no2SAOTPnM6D88BceTobTj8B3ZrCf++7z1V53/p87k+HlBxEE3xyXzW9ultFoVJavLFcB9a2vblXB\n/VEEpHeqVgXie3djCP+VqGMG9GO++Mxkz/o+/trjavsqcL9Trwz2n/rNq6XKTo/lJ5n2EfS/8Zdu\nVDcxDGMo+Qy4N0bpMAnOV7vni1jfuxfne9CIDPvtyKRvV0HzyuFPXiytc5ORCZ7B8GT1szyq64qg\nfDV8fbZT3HhRjTgQNxnc/6l71Q0Ko42dofd3jpY3VOToCTf+i/eqdsubNhQCBAgQIECAAAECBAjM\nUkCAfpa6jk2AAAECBAgQIECAAAECBAjUTiAD3c1TzSogvHRxqRpqPoO0Veb1rtrmfOmdNzpVlnoO\nS58Z8OPMGI/s+Gkmeu6XgepphngOs577TedAz2PmI4PKGezu34tM+MeRCR9Z7BmUz2HxMzN+Olz8\nrtM/WcyAd2bNZ8mM9WnQPM/Zfm3yTzvVHPfxft4ckDcKjCJbPh+ZST4dMSAz/qubB6oj7QTPc5M4\nfnXcCN5XAfpq/0lmfHXTQd48EOfK+erTrRE3BlTZ57Ff/6MYzj6Gzs9h/vPanji8tuMQWfNZ0mzq\nUE0BEEn5OddsOmZm/V77aqdnfHuWx5PN45rzponRwxjhIEZISOvB3fCIdsoh/6t2PR8Z+9MZBvLe\ngWyfuJ68XoUAAQIECBAgQIAAAQKzFBCgn6WuYxMgQIAAAQIECBAgQIAAAQK1E8hg+Gvf91qVWf7G\nv/xGNSz7V/+tr1bB3N2V7b7ZLe/+V++WpUtLpbXcqoLYD3/6URVUfvDTD6qAdJV1noHylXbpvNYp\nb//Jt0vnrU5Z+eJKFYDf+sZWNff5zR+7WXI498HGoMpUf/SLj8rWza2y9rdWS/edbjn3vZNM+N3n\nny5nQH7j1zYmLyOoPS0Z2F/9DavVy+b/OY02R+A7MuE3v7JVZdKvfHG1Cjo//vqnM+IbO5uPI2ad\nWfWb34iM+5jHfvXXx/Zxvu2vR2A7hoOvbgaI6+u+FnPVh0f3zeXSfT3mto9k9xwy/+7fuFttl8vV\nDQORFZ83Nbzzw+9UDt2LsW3cBLDxKxuTOe3/0geVW1Y6g/aPfj487/QmUwJML+wFz8/ymO422hyV\nBz+5M+f8P4h2iiH6q6H545qXou7dt2Lkgj99sRpWP7PuB/H+zf/6wxiWP24W2Ir2ySx8hQABAgQI\nECBAgAABAjMSEKCfEazDEiBAgAABAgQIECBAgAABAjUViKTunAc9S2a8V0OiP2109ViXGfZL7yxV\n22aWdZUpHvPH51DuVUZ2vNNsNau55DMwncH8ztvxfHmyT2aGNzvNKmid2dk5FH41N3vOfR7HyAz0\n5lKzyt6uTvKMb9PM9CpjPusa15Dztufw+HmOKms/Aul5jipjPuZ6z/neq4z5CDgP14eTIfBjuRpB\nIIayz5LB+WrO+ahL1mc6PHwuV6/j7Tx3a7VVPaqRAXZb5fHiqx2jC2S2fudMt3TenFx/3qjQfTvm\nmo/69WMEgHFktT/JWs+Tx/bDrThPPKo543PdPstTPeK8zeWIwselVe0UtnnjQI4OkKVqp/Cq2ina\nJ/0yQN9caZZutN04blDIIf8PXJnq6L4RIECAAAECBAgQIEBgfwIC9PtzshUBAgQIECBAgAABAgQI\nECBwwgUy0Pvw7z2YzOW+E/RNkgz2v/mvvFkF5U//ttOTYeBjjvYsK++uVEH+C3/8QrXfBz/2QRnd\nmwSMM9P74ZcfVvud//7I6H9GyWHn175trcpgf+OPvVEF5btnu9Vw9Blk7scNA+3T7WqY9gx2Vxn0\nX30cgelcjuPG6ba/8UlGfB5v9d216mwbX9moMue3vxZD7sd/a79+rco23/ow5qyP+dmrGwxWm2Xt\nN+7MPb8T2M+dM7B99rvPTM67fbYaqj5vTMipAFa/Y7V6P29iyOvc/rhXPTKbflry5oGcqz7rt3vo\n/en7z3p+rkcE6Qd3B+Xh331UjYyQ556Wqp1+4K3Ke+XzUb+4riydM53y5g+9VbXP1l98r4zufrLP\ndF/PBAgQIECAAAECBAgQOCoBAfqjknQcAgQIECBAgAABAgQIECBAYLEFIm47eBRZ9PGoMs2nVxv/\nujIZ/j2C5muRT74TnM+3M5jcHEUGfWST55DuOd/6k1Idb1BajyL7/Dkx4dwnh2WfZvNnFn0G6HOY\n+SpzPs5XZbivtMpwe5KNnnVsZT0jQ7zKqN+YzCmf555mkudyZqJXmeyZYR/b5/DxGZSvAutR3+k2\nrbPtGG2gPdm+Whv7Rr3ab7arQHwzs+PjUK2lVmk2m5P56B81Ss57n1nsg8xmv5fDx0eFdpWs20GC\n87nrCz3imgaPBmXwMOYD2OVa1feNdmnHI9sl/arjxXKuy5sbchuFAAECBAgQIECAAAECsxQQoJ+l\nrmMTIECAAAECBAgQIECAAAECCyMwHo6r+dJzzvRcnpZqLvjIGM/s8VzeW6qM9V+3WmXaV4HhnQ0y\nWJ3HaqxMhqbfu9/0det0q1z4Exeq4y99bqnsHWY+M9lXvz2Ov9Yqg5+bzHG//c1Ih4/gdGbTZwB8\n8/3HpfdB1DvOmRnur33Pa9X69V9crzLccw76HNJ+8+vxHMPw537V/rFvDsF/6jefmlxfLE9Lnvfc\n95yv9t/42fUyiAD8/S/frzLqM/s+b0jIQHla5fDxGfjPofZftrzII85Wtj+KEQPisbud0m3l22NE\ng2inynCnItX6GOkgh8ffvf5l62l/AgQIECBAgAABAgQIPE1AgP5pKtYRIECAAAECBAgQIECAAAEC\nBJ4iUAWbdwXnq00i6TqDu9P5zz+zW74fge18ZJb5k5LZ7Rm8zuN9Eu9/8vZ0IbO6W+djDvh4VAH+\nT2Lkk03idftMZICfieB3LFcZ8zEEfw7vnpnweewMlo8iSN7sNEtreXKs3C4z6DNoP8oM+8x2j4B6\n7pPrqvcbMSJAnj+C+vn41BzycfZqu5xjPrLV+/f6pf9xv8pc73/YnwTkc0z7uObMrB+3oyIZoN+V\n1T69xoM8v9Aj6xV1ysenSrZD3EBR3USxux1iOQPzVXB+9/pP7ewFAQIECBAgQIAAAQIEjkZAgP5o\nHB2FAAECBAgQIECAAAECBAgQOAECjYyxZxB8byJ4rNsbvN7NUQWyI+i9t4wzfv6igHUcu3O+Uz2e\ndo4MOK/91rVquPn7PxUZ7DGkfH+9Xxr3GmX9n6xXpxxtZJS+UZbfWa6Gyl/5dSuTgH0O9R43CGTG\n/ejRqDz+p5uTmwZiqPtGBuc7cVmrjbL2pbXSfSeG8I9A9rRkUP/u37hbejd75aP//aMyeDAJ7mfQ\nf/nCcmnHkPhn/8DZ0j7fjv1XS/9+v3zt3/966d3uTQ9xuOcXeORB8+aCfOwtGdzPh0KAAAECBAgQ\nIECAAIHjEhCgPy555yVAgAABAgQIECBAgAABAgTmTuBJgDcC2E9Kxr4j6zwfT82iz/czoz0eezPl\nnxzvycGesZDzpe/Mmf6ZLWL9NIO+Ef/SE3H1SVZ8ZMwP7sY87FFGg8iKrgevBQAAQABJREFUb8Tw\n9jFPfQ6Fn8PTN/J47dg4dhj1Yp74zUYZPojh7TN7Pm8miLcy8z0z7hsxz32Vvb8rtp2Z//1b/Wro\n/P6dyJyP7PssuX3OTd95o1PdEJAB+vbbncigj0MeVXD8eR5Rh7y2fOy9+aEa8j+G79891UC2yXT9\n3vapLsg3AgQIECBAgAABAgQIHKGAAP0RYjoUAQIECBAgQIAAAQIECBAgsLgCGVzuvNYto8cxJPyt\nmN98Zwj1DO4+/qXH1dzrp3/b6dJY3hXFDo4M3D/+J4/L9o3IUo/lacnjdV/vVo9cnh5v+v5+nzOD\nfvU7Yg76sxF4j4B6aUSgPLLHR49H5f7/fb86TC5n9vvSu0vVHOwZNM91nTOdMnoYgfz1yH6P68m5\n5LOMtyOIHduvftvaZM72vKYMiu8qOWf9/b99v7quXJ6W1rlWeedPv1OW3lkq7bfaEedvVMPf5zD7\nryQAHhn23bNLZfyolO272zFCwKRm47ip4vHXop22h2XtN6w9CdJX678yaZ9cVggQIECAAAECBAgQ\nIDBLAQH6Weo6NgECBAgQIECAAAECBAgQILA4AhH4nWaqb38Ugd+dUmWS3+5Xc5tn0LsZY+BnxnmW\nDHSPI6Cfw7pXQ7t/EseuhsRvn45s83g8bej6ncO/+ClOlRnxrdXJHPXVMPQxinxVr7v9av9cbrZj\n/vVTk0feENCI7PnmUryOR4m4fGbZDx5OKpgZ9LnNdO75HLb+MyVi2cOYUz4fuwPvOTR+dZ7Tk/nu\n89zDOO40O/8zxzniFVnX5mpcVzwa9+PGhzh/lnwefDyoMvzzpoq8vmp9LOf6fEy3rd7wjQABAgQI\nECBAgAABAjMQEKCfAapDEiBAgAABAgQIECBAgAABAosnkEHwc999tsoY3/xgM4aFn2TDDx8Ny+0f\nv126b3WroHAnhnNf/dbVCuDx1x+X/oe9cvt/uV0F6IeRqT4tORz+me86W2Wo5/L0eNP39/2cAfoI\nRmcwffXySiS6N8vj92Iu+cgG3/jaTkZ8xOkbp2Mu+Xd3MuJj7vlGPzLqv2Wpujmg/6BfZfdvfOOT\n7VtxzLXfNNm+uXPDwafqFHHv0WBYPXYH6PM6Hv9iZKrfH5bV71ythvb/+K99XLbf3y7Djd13KHzq\naEf2Im84OP07TpXuxU7p/c1eGcVQ/1mynT66drssXYzM/hyC//VOiXspSg7P//G1j8r2zahf3myg\nECBAgAABAgQIECBAYIYCAvQzxHVoAgQIECBAgAABAgQIECBAYHEEMuM6A7sZgM5s9ZxTvpq7PLLN\nB/cGMZV7o2x/EMPYRyZ6qzsZDz6Hte9Hdn3/414Z3O9Xc6Lndplhn3PBd97qVMecZnMfWiuTweOU\nrbV2PCLIHIHncQxzXyKTPksuVpntkdXejEcuV3PMRx2yHrm8d/sYCqC0Y7j6fOTyZ0qsanbiePEY\n9T/Jos8s9F7clJBB+9b5VhlvTV73P467BJ4V/871+ZiwfeZUB1oRx+i8EVMR7AzTnxn1eW05KkAG\n4/N11U7RfnlVg3v90ov1/ftx80RsoxAgQIAAAQIECBAgQGCWAgL0s9R1bAIECBAgQIAAAQIECBAg\nQGBhBDKD/ux3nyv9j/rl0c+tVxnh67+0XmWeDzYHZfjhsNz4L29UQ8dXw8zHlWcWe84tn9nbGbjO\nIHFruVVO/cZT1Rztr3//a6X9RrvKgC/3Xo4q56Jf+c0rpfl6s2z82kZVrwzMZ8l4fGbBL7+7PJlT\nPjPoe42y8sXYPjLOH/7sw1I2J4H86fatyOpfy3peXpoMg18d6ZNv1Rz1X1wrraV2efQrj6rh/PPd\nHM7+5v90czKEfgTvq5Lx+nAYRzZ71mVar+q9CMz37/bCoFE6r3VfOkifN0+c/77zpXezVx5++WHZ\nbmyX3oOoQJxnO26U6EVA/vp/dL26iaE6fxjlNAST9plU13cCBAgQIECAAAECBAjMSkCAflayjkuA\nAAECBAgQIECAAAECBAgslkAGuXeGku9ejEByBHa3b0XGfMw7P9yMAHwE33NY9yoTfTrme2bLx2Pc\nijnPI0DeXp4E45cvL8cQ7DEkfgxL39zJYH9prIiFt8+2q5sBds9pnwHxzBqv5pSPmwxyOP1MHa/m\nal+L1/HI5WmpMvwzqT7mqM/s+rzmKtV8usHOcx4vRwDImxBa7+UO8UYG4iP6nvPN53GGnWFptpsR\neO9M3m9MAuGjzFTfuXmguRw+W5G8vpnrcuUnddlzyv29jOq2Tkfm/2a7Ms7zDIcxFH9OSbAdp4j6\n9m73nrRL1q8bGfdZxvcn9dt9orwxoxpxYPdKywQIECBAgAABAgQIEDikgAD9IeHsRoAAAQIECBAg\nQIAAAQIECJxAgQyCn2+XSz98qQqEP/h/71cZ9Q9+8mGVOb79YQTsI0s8g8AZZ24tRYA7Mturec8j\neH7me87E8OudcuZ3n6kC4xlQf9l49LQVMhP+1G85VR2/+VejotMSwffOuW7pnO9G4DqHwJ8E0zMD\nfvlbl0sjs+ljeVoy8N59q1u6by9VgfWqjrsON92ufaZdLvxrF8rg4xje/39slN6tXnn8y48nmfvD\nyJSP4659W9TnzU5544++UQX8H/69cIrRBHJKgDKZGr66AaD/QQz/H0PS57bNuDHgpUrsnjch5A0Q\nl//s5ap+t2Pu+ZxqYOMXN8pwO26i6MUNE3Ge5Utxo8Tr3fLWn3irev3gJx6U4UaOtf9Jab8eN1Xk\nTQ0KAQIECBAgQIAAAQIEjkBAgP4IEB2CAAECBAgQIECAAAECBAgQmF+BDNR2355kUO++ilyX732m\nZJD+tQjaRmZ191JkwUdgPIeBz6HdS/xLy5MAfezYWokAfQzzPg3Q53YZ8M0gfSMyx3eXA9dj9865\nHPVqnco54yNzPOqVAfIsmR3fjaHjq+vJQPw01hyLT7aPYHZm+FfbR4B++e0IXKdJJL4/2b56d9e3\niPPnzQp5g8HSOzEMflzn4NEgsuHjBoW8PyHOv/RO3BjwZpz78sQyt8sAfZ53Oh99OlQ3CGS9JlWo\nTvJSHnGc3D8z/KsbJLJ+caPE4EFMRbAVAfoYbj9vRFi6FDchRFtk+2Qdsp6jjZ07B3YutXW29fTP\nwS4KiwQIECBAgAABAgQIENivgAD9fqVsR4AAAQIECBAgQIAAAQIECCykQDcCyN/2X3/bk4Dxk4uM\nGHK+96ySWdVnfs/ZKhP87O8/Vz3nPOaTodvjOUs1vnw8RTC4CqDH/Oj5PA2GTzaafD9sPabHqALa\nEZjvXuiWL/2lL33qepp5/jh15/WMuE9KBtBX3l0pK1+Ix4+tfHr7GPa92j6Hpn9WyUNGoD3nfH/7\nT71d7V8NI79z6Rlsz6B9HqcKyMfrpcjKz8z5ahqA3dtF8Dxd8maHaXlZjzxeO0YMaK+1P6nfdp58\n5wxRn6pdon65XZalL0zqt7PF5CmOk0PmKwQIECBAgAABAgQIEDgKAQH6o1B0DAIECBAgQIAAAQIE\nCBAgQGB+BSL2mhnUBy4ZgM752aM0T30SWD7wcaY7HLYe0/3jucpEj5j6fq9nmmW/tHKI68/z5mXH\no8qkz9cvKK3OAQLdR+DxpH4xqsB+Sntpf9vt51i2IUCAAAECBAgQIECAwNMEjuCvx6cd1joCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgt4AA/W4NywQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAYEYCAvQzgnVYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwW0CA\nfreGZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMCMBAfoZwTosAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\nTiJvKvmbvyf+4Owv5ON/Pt0e/asfXmxO4KW3c+L+7Xyu+J76+Aj8WXI6t+v9n5iNrE/diP/YKx4m\neC8n3t89zcf6TK6f952XNM/rD//S38sPJXw3vXjjX7z8KP/f/28vk/QxGj2O+YWfykn8z6XDP/8L\ns+XZiPb8AMHtn+QHGbpEeH7o4fb7v5eX/zh/N3weQR8J81Elpy7z6P94COLwK/949vH1L/7L7+T2\n5aT8d/7ry4+8z0nF/LncKX02X2M+58Ff/Luz897+93+X+/Xj188eo/q7TwJ4fYslAhsTeCvH6d94\n77Pp+zkuPsgj1j/KSfl/+4ffS3+YR8l/N3/XeyTF47GfSJi/mxP4P54T8T/7zjvp83n+r7/73uzj\n5eN76vNdvan/o8yuLRL+v/TF0/T7uT1P//dH6f/m/7dFe26iPfl1nE/4Vv7/Q7xy0xQCBAgQIHAn\nMPY3ursDmSFAgAABAgQIECBAgAABAgQIECBAYM8EYrR5JNCHJdYNR6JHnUhWfzqPCD/OI6vfzSPh\nYwT4985zIjuPGr/NSen4GPfZx73nbNVrCfqc6H4314t94zvSj3MSuV/WbUd/35iPdr2RR45H0v/d\nRzmTl9sVJUaJ/3gk6HMy+jDW5XqzEvVzsj4S8O9E/fwwQZQYaf9ubt87r+rHceeVSHDHd8xHOnB2\nvrzfD76fE+AxEj4S9PlcsT4n6NM7H8wS4OkzeRoj/H+Qzxt1ooRDJPNn5+ll+EZ55OPEJxbECP/Z\nAxL5vNGej3MfRfuij+JBgHgIIR4KiOufLed6wwR9jMQf/dDAy0v13+kIHOW4iI+dH5ZYF9uGJda8\nnWM1Rs6f5TonOWH/QX4w5O3Dm/RGzszPEuK5TnwX/Ht5fXyMfSTyP5/v79M8je+wz3f0yrJuu+KB\ngC/kc+T0e3qUv87i0znuP5Xb8zyPmD/I30kfDwp85vgwt/1wVmdlA1QgQIAAgckIlPxcmgyGCyVA\ngAABAgQIECBAgAABAgQIECBAoCfw9ufT4S/8kx8mjLtNkSDO2xaW+I72P/WX8345UfWTf202TTEy\ne+FH3OdEd3xcfCSi8/fB/0i5bzu6A0USORLNORF/+Lf/2evXE8n0uJ78/fR3JSfFDz77Yc72/el0\n8Hd+ulc/ZwBnH8k/qH+3YzeT60WCP393/OHP/P2X+3cfcR9DfSMJGR9xH+eNBwdyou8gPnI+vF4z\nyvUOs8fQZaxHHC/Om80Pf+aXBu2LBsZ1vnJ5M3+yQKx57ydm7ZstdP+J43zq5fZulSmBVQKfz0nz\nf/pTH84+Cr5fN99xKbYtKm/mRPvP/Pjbs4+2/yv5ky/i/yjxsfezkHq1UyTN812Z4uPt43iRrM93\nc1FZt13x0fsffvrTKUdG+uk8jcdq+u2JdryVP1o/2vFjuT0KAQIECBDoBPJvgQoBAgQIECBAgAAB\nAgQIECBAgAABAgTmCCwaqT2n6uurIgEd30+ey+x75F/O3vu/925H74yHeSR6yq95nwjQq3Y3242y\nf+fVddxtKJyJ5HW83swfhR9l1WE+Fe0rLJvwWLd93acIFDZRNQKLBCJh/cU84nzdEon2T79KdMfH\n3m+63Kddn8pJ+iifzh+hrxAgQIAAgVKBzf8UKz2zegQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYEICEvQT6myXSoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK7E5Cg3529MxMg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAhAQk6CfU2S6VAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBHYnIEG/O3tnJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEJCRxP\n6FpdKgECBAgQIECAAAECBAgQIECAAAECWxS4ublJV1dXKabLytHRUTo7O0sxVQgQIECAAAECBAhM\nSUCCfkq97VoJECBAgAABAgQIECBAgAABAgQIbFEgkvNPnjxJl5eXS89yfn6enj59mmKqECBAgAAB\nAgQIEJiSgAT9lHrbtRIgQIAAAfFJ898AAEAASURBVAIECBAgQIAAAQIECBDYokCMnI/k/MXFxcqz\nrBplv/IAKhAgQIAAAQIECBBoUMB30DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\nU92lsQQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAg0JTAcVOt1VgCBAi8Eri5uUlXV1cpplGeHT1LN6d5/uhVhQWTqH/5\nncv0Iv87OztLR0crdlhwHKsJ1CwwjI/Ly8u7WFnW7ll85LoRF+JjmZRtLQuIj5Z7T9u3LSA+ti3s\n+C0LiI+We0/bty0wjA/vz7ct7vgtCYiPlnpLWx9aYBgf/n710D3gfAQI7FLgYAMnLz3Gsnrztg3X\n9ZdXzXfb15n268b8vOVF67r6JdP41IJ59eatH67rliOj+FZ+ffn29vbreaoQmJxA/ML25MmTFNMo\nh+eH6Y1vvDWbLsN4cfkiffLVj9Oj/O/p06fp/Px8WXXbCDQpMIyP4RueRRfVJeYfP34sPhYhWd+8\ngPhovgtdwBYFxMcWcR26eQHx0XwXuoAtCgzjw/vzLWI7dHMC4qO5LtPgBxQYxoe/Xz0gvlPthcDB\nwcHX8oV8K78+zq8YyXibXy9eTWN+3vKidcvWd8daNc2nnJ2zX2+4rr/czd9n2t9n2fxwWyxHiTYu\nKsu29fcprdff527eCPo7CjMECNQsMPwFLX6Bu7i4uEvQn6ST9Pjmw3SY/y0rcZzY9/rmerZ/LEfp\nEpNG1C/Ts61WgVXxUdruLj6ifsSX+CiVU69mAfFRc+9o264FxMeue8D5axYQHzX3jrbtWmBVfHh/\nvusecv5dCoiPXeo7d+0Cq+KjtP1xnPj7bhR/vypVU48AgdoEuhHhY9pVeoxl9eZtG67rL6+a77av\nM+3Xjfl5y4vWdfVLpt0o+GHdeeuH67plI+jH3LH2bVJg1ROVJ49zgv6bH6aYLivXFzkx/5VvpxhJ\n3/8I7xhJb0T9MjnbahZYFR/rtn34wIr4WFdQ/ZoExEdNvaEttQmIj9p6RHtqEhAfNfWGttQmsCo+\nvD+vrce05yEFxMdDajtXawKr4mPd6/H3q3XF1N83ASPoXxsF3x/N3p+Pbh8uL1rX3SLz6nfb+tPS\nev197uaNoL+jMEOAQI0C3ZOV8TRkf8T82Lb2n7SMY8VyHD9KP3E/W+E/BCoVEB+VdoxmVSEgPqro\nBo2oVEB8VNoxmlWFgPioohs0olIB8VFpx2hWFQLio4pu0IhKBcRHpR2jWQQI7FQgRnGPLaXHWFZv\n3rbhuv7yqvlu+zrTft2Yn7e8aF1Xv2TajYIf1p23friuWzaCfuxda/9mBLonKyN5fnV1dfeR28ML\nWPcJ/RhJ3y/dE5e+e7uvYr52gdL4GHsd4mOsoP13ISA+dqHunK0IiI9Weko7dyEgPnah7pytCJTG\nh/fnrfSodm5SQHxsUtOx9k2gND7GXre/X40VtH9rAkbQvzYyvj+avT8f3TpcXrSuuwXm1e+29ael\n9fr73M0bQX9HYYYAgZoEtvVk5aJrjPPFL4tRjKRfpGR9LQLio5ae0I4aBcRHjb2iTbUIiI9aekI7\nahQQHzX2ijbVIiA+aukJ7ahRQHzU2CvaVIuA+KilJ7SDAIEaBboR4WPaVnqMZfXmbRuu6y+vmu+2\nrzPt1435ecuL1nX1S6bdKPhh3Xnrh+u6ZSPox9yx9m1CYN0nK8c+od+heNKykzCtWWDd+NjUtYiP\nTUk6zjYFxMc2dR27dQHx0XoPav82BcTHNnUdu3WBdePD+/PWe1z71xEQH+toqTs1gXXjY1M+/n61\nKUnHqV3ACPrXRsb3R7P356Mbh8uL1nVdPq9+t60/La3X3+du3gj6OwozBAjUIPDQT1YOrznOH788\nRjGSfqhjedcC4mPXPeD8NQuIj5p7R9t2LSA+dt0Dzl+zgPiouXe0bdcC4mPXPeD8NQuIj5p7R9t2\nLSA+dt0Dzk+AQAsC3YjwMW0tPcayevO2Ddf1l1fNd9vXmfbrxvy85UXruvol024U/LDuvPXDdd2y\nEfRj7lj7Vi1w3ycrN/WEfofjSctOwrQmgfvGx6avQXxsWtTxNiEgPjah6Bj7KiA+9rVnXdcmBMTH\nJhQdY18F7hsf3p/v6x3huvoC4qOvYZ7A6wL3jY/XjzJ+yd+vxhs6Qt0CRtC/NjK+P5q9Px+dOFxe\ntK7r8Hn1u239aWm9/j5380bQ31GYIUCgBoF4wjJ+iYvXLkvXjvhFLuYVAjUIdPel+KihN7ShNgHx\nUVuPaE9NAuKjpt7QltoExEdtPaI9NQmIj5p6Q1tqExAftfWI9tQkID5q6g1tIUCgVoEYka0QIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECWxaQoN8ysMMTIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIEQkKB3HxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgQcQ8B30\nD4DsFAQIrBaI7ya6urqaffd8zNdSuu9MqqU92rFnAkcpnZydpJSnJeXZ0bN0eH6YTvK/Gkq0Jdq0\ndntyiF9fXadUT6jXwKkNQwHxMRSxTOCHAuLjhxbmCAwFxMdQxDKBewtcXl4m78/vzWfHPRcQH3ve\nwS7vdYGJ/n51lP9g97n8L6YKAQIENi1wsIEDlh5jWb1524br+sur5rvt60z7dWN+3vKidV39kml8\nasG8evPWD9d1y/ET4a38+vLt7e3X81Qh0LxAvLF58uRJuri4mCXq1/0jwMnjk/T4mx+mmC4r1xfX\n6eIr304xLSlHR0fp7OwsxVQhsGmBk/M30qNvfCnFtKQ8f/48PXv2LMW0hnJ8fJxOT09TTNcp15ef\npO989fdSTBUCiwTEh/hYdG9Ynx/u8vPDbUBgoYD48PNj4c1hw9oC8b48HqT3/nxtOjtMQEB8TKCT\nXeKdwFR/vzpNX0i/dfibKaYKgRoFDg4Ovpbb9a38+ji/YijUbX69eDWN+XnLi9YtW98da9U0n3J2\nzn694br+cjd/n2l/n2Xzw22xHCXauKgs29bfp7Ref5+7+fX+on63mxkCBAhsViDe2ESSPl41la5d\nNbVJW/ZHYDby/Oa4fAR6/ql98MFBef0HoPoofbT2Wa5v8oMyl79b/KDM2ieww14IiI+yB8n2orNd\nxNoC4kN8rH3TTGgH8SE+JnS7T+5SvT+fXJe74DUExMcaWKquLTDV368C6ibVMUhm7U6zAwEC1QvE\niGyFAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ2LKABP2WgR2eAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAiEgAS9+4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCDyAgAT9AyA7BQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQkKB3DxAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgQcQkKB/AGSnIEBgtcDR0VE6Pz+fvWJeIUCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQILBvAhL0+9ajrodAowJnZ2fp6dOns1fMKwQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgT2TeB43y7I9RAg0KZAN4L+5uYm1TSCPtoSDwzU1KY2e1ir5wmcnL+RHh2dpZP0\nxrzNP7Lu+fPn6dmzZymmNZTj4+N0enqaYrpOuT76JKXz5+k65alCYIGA+BAfC24Nq7OA+BAfAmGx\ngPgQH4vvDlvWFYj351dXVymmNRTvz2voBW3oBMRHJ2E6BYGp/n51mr6QjtJ6f/Oawv3gGgkQ2IyA\n/7tsxtFRCBDYU4FuZH98/L5CYOMC+dscTs5OUir8PJvLjy7Tk198ki4vLzfelPscMOLiN57+9uyr\nKdba/4OUrp9ep1TH3/nWarrKDyggPh4Q26maExAfzXWZBj+ggPh4QGyn2neBeN/x5Ek97z+8P9/3\nO66t6xMfbfWX1o4UmOjvV0c5Pf+59P5IPLsTIEBgvoAE/XwXawkQIDATiCf0Iwn5+PFjIgR2LnB9\nc51eXL5I1xc5uV1BeZFepNOb0/Qo/1ur5Dd2yTMva5GpvFpAfKw2UmO6AuJjun3vylcLiI/VRmpM\nW6CmT5Pz/nza92KNVy8+auwVbapBYG9+v6oBUxsIENhbgcIxe3t7/S6MAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAg8iIAR9A/C7CQECJQKdE/E7/q7vKId8fF5MXq+pieiSx3V208B8bGf\n/eqqNiMgPjbj6Cj7KSA+9rNfXdVmBMTHZhwdZT8FxMd+9qur2oyA+NiMo6Psp4D42M9+dVUECGxW\n4GADhys9xrJ687YN1/WXV81329eZ9uvG/LzlReu6+iXT+NSCefXmrR+u65bjw4Hfyq8v397efj1P\nFQJ7I9Al5i8uLtb6rruTxyfp8Tc/TDFdVuKjwS++8u2VHxEeifmnT5/OPto+EvXxi6VCYNcC942P\nTbdbfGxa1PE2ISA+NqHoGPsqID72tWdd1yYExMcmFB1jXwXuGx/en+/rHeG6+gLio69hnsDrAveN\nj9ePMn7J36/GGzpC3QIHBwdfyy38Vn59nF83+XWbXy9eTWN+3vKidcvWd8daNc2nnJ2zX2+4rr/c\nzd9n2t9n2fxwWyxHiTYuKsu29fcprdff527eCPo7CjMECNQg0D1hGW3pvvf96uoqxS92D1Hi/JGQ\nj3PHK36RUwjUIiA+aukJ7ahRQHzU2CvaVIuA+KilJ7SjRgHxUWOvaFMtAuKjlp7QjhoFxEeNvaJN\ntQiIj1p6QjsIEKhZoBsRPqaNpcdYVm/etuG6/vKq+W77OtN+3Zift7xoXVe/ZNqNgh/Wnbd+uK5b\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\nzUvs1flZ55b2q13Q10sF6K5Lz1rvzFq9/qg/y/dY3qfv3/PVr6fyie+1e7WVyzOuN8Yz/sw27zXb\nc8yN45qzGsv6VV9Pt/+I/P47NUd1v2fMe32deYUoAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\n6p3KUd0svxIba/r4TH9Wm9g72pU1V2rqF1h1qc242jw9V7GM0x7Fen7s1/jo6fsc1R7l71zraK/l\n/Ff7n7jvB9+7WE3drOZqrM+72p/NS+yuNu9e7daavWbsb80Z4+O8u8dH/yCO8jnPUV3lj2pqrdSl\nzfpaAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBawK5d0l7tMpKXdXMnjE+jmtOj/X+Xq7XpZ+2\nz0tsbFdqas44b2W8UjPbv2L1rM7/qP74O3N6bLU/zh3Hq+tU3Stzz+xze+13vKAvpFw2d7Cj2Jjv\n4zP91I5tP9eYuzq+smY32evnTHs1d+ZW/hFt1VR8K5czpuaobla/OidztQQIECBAgAABAgQIECBA\ngAABAgQIECBAgACBnyjQ72NW71f6nD2z1M1qZnuNsTPjXjvr78VWcql5pX1lbhluzd/zzZw+f7U/\nrtvXSm41lvpHti7o//7Z+qV071dVH6ef9ig/q0vs1fbvb/Ax2lpzVnsUy1pHdSv52T+qvXmz+lks\na+zlUlNt1a3WZl7mzNrUaAkQIECAAAECBAgQIECAAAECBAgQIECAAAEC311gdleS2Jl3PzOnaree\nWW4l1mt6v/bp41n/bCz1R23fu9f2/lbNHfG9NSo3e3K2yvX+WLuXG2u/9fjOy9cR6tW1V+bv1cxy\nK7Fec0c/a4xteY2xPz1eOVOv6f2cvcfG/jjucypXz2psq/bXIhvrJDdrZ/vO6sQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSuCZy9pN2r38rN4kexMd/Hs/4sViKJb7UrNVtz3xVfOVOvebU/zq9x\nPXm/j9HH37NY8nu5MzWpnbUre8zm7ca+8n9BXwdfuTTdqpnFZ7Fxn7Gmj8/0Z7WJpe17J/autvY6\nesa9j+pfzb/6o96bX7m9/Hj21Kcd88YECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLnBHLvknZ1\n9lF95beeWW6MnRn32vTT1hlm/b1YclttX3Or5q743l6Vy5P9any2nzXS9vmJnW1X1lipObvvLfVf\n/YK+XjKXxlsvvJef5VZivab3x/P03KyfWNo+P7G0e7nUjO2WySw+zh3HszmzWObNcnfEZv9YZrHV\nvWrulfmZl3Z1P3UECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ8qkHuVtGcdVudV3eyZxVdiY00f\nz/o9VufIeGxnuVlsnLc6vrJWzckz7pN4tbNcYj0/9mvcnz6nx3t/VjOL9Tl7/Vfm7q17S+47XNAX\nxNal8Wp8Vtdjvd/3W4mnJu3W/ORX29k6R3NrztaTuT0/i53JV+2VfwCzObPYmfVrfv7UvLNP5o7t\n2XXUEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLjDel2R85b0yt9qVZ6tuFp/Fao8x3se9P9b2\n3Kx/Npb6tH2/xI7au+bM1qlYnpwj47RjvI97P/Vju1LT55yt73O/RP+dF/T1gkcXvCsIK2vs1cxy\nK7Gxpo+v9mfzEkvb3RJL270SO2r35vRc+lkv42pnsZ5/pX/mH9FWbcW3crOznamdze+x7L3X9np9\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBXFti780jurvPXeqvP3t5b68ziR7Ex38dn+rPaxNLW\nu6c/tnu5sTbjvTmVy5P6tBVPP22PZV7aXpPYXn1qtuYln3a1LvXvaN92hndevAbi1T1W5u/VbOVm\n8THWx71f79bHR/0r+cxJ2/dMbGxfrenzez/79Nhqf6+ucvX09T8iH3/P4rPY0ZyeH/tH6431xgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAq8JnL38PKqf5WexOvUs3mO9P9b33FF/NT+rS2xs+3nG\nXMZ7NbNcj/X+bL2eH/vjuM8fczWuZ6z5iG7H9+Zk7mpNrx/7W+ca6y6N3/1f0PdDvXoRujJ/q+ZM\nfKzt496vd+vjo/5qfla3F1vJ7dX0b9T7fU7iPdb7ya+0r/6gj+ZX/qimn/NsfZ+rT4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgsC5w9l5mpX7rXmg1PtbtjVdyvSb9tCU16+/Fkkvb10gs7SxXsTyp\nS1vxWX8W26od1x7rZuOt2JV4zcnTz53YmfbV+Ut7uaD/90zjxfPeeCXXa476s/xebDWXt+z1s9gs\nn7rv3tY/uP7nu7+v9yNAgAABAgQIECBAgAABAgQIECBAgAABAgQIvFug371cufxcmbNVsxof6/bG\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Changing Code** I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instances of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "...\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Inform the Driving Agent\n", "\n", "### QUESTIONS:\n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States:\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Total number of states**: 4^4 * 2 = 512 states.\n", "\n", "The minimum 'deadline' is `minimum distance` x 5 = 4 x \n", "5 = 20 and the maximum is 12 x 5 = 60. \n", "\n", "If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means **each state will be visited an average of** 20 turns x 100 trials / 512 states i.e. about **4 times**. This is **reasonable but is still quite low**.\n", "\n", "This low number is **why I did not include further state attributes** I considered (see boloew) because that would only reduce the number of visits to each state even further.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States that I considered:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implement a Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent is **more likely to take actions corresponding to `next_waypoint`** when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that **maximise total expected reward**.\n", "\n", "The agent is **less likely to take actions tha result in penalties** (crashing into cars, making illegal moves or making moves that are legal but are not equal to `next_waypoint` so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.\n", "\n", "It does not just move randomly in loops any more." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notes: Debugging 'Implementing a Q-Learning Driving Agent'\n", "1. I realised the agent wasn't acting because the `count` variable was defined wrongly: \n", " - `count` was used to see there were multiple actions with `q-value = maxQ` for that state. \n", " - If `count` > 1, we would randomly choose one action out of the set of actions where `q-value = maxQ`.\n", " - `count` was wrongly defined as `len([maxq])`, which is always equal to one since it is an array with a float in it.\n", " - It should've been `len([i in q if q[i] == max_q])` instead.\n", " - Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.\n", " - This meant the agent often chose `None`.\n", "2. I'd forgotten to incorporate `next_waypoint` into my state. Pretty silly.\n", "3. I wanted to print results after every turn for debugging purposes and put `self.results` in TrafficLight instead of Environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Improve the Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your final task for this project is to enhance your driving agent so that, after sufficient training, the smartcab is **able to reach the destination within the allotted time safely and efficiently**. \n", "- Parameters in the Q-Learning algorithm, such as the learning rate (alpha), the discount factor (gamma) and the exploration rate (epsilon) all contribute to the driving agent’s ability to learn the best action for each state. \n", "\n", "To improve on the success of your smartcab:\n", "\n", "- Set the number of trials, n_trials, in the simulation to 100.\n", "- Run the simulation with the deadline enforcement enforce_deadline set to True (you will need to reduce the update delay update_delay and set the display to False).\n", "- Observe the driving agent’s learning and smartcab’s success rate, particularly during the later trials.\n", "- Adjust one or several of the above parameters and iterate this process.\n", "\n", "This task is complete once you have **arrived at what you determine is the best combination of parameters required** for your driving agent to learn successfully.\n", "\n", "**QUESTION**: \n", "- Report the different values for the parameters tuned in your basic implementation of Q-Learning. For which set of parameters does the agent perform best? How well does the final driving agent perform?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers:\n", "### 4.1 Planning\n", "\n", "**Procedure**:\n", "1. Run each configuration 50 times (50 sets of 100 trials)\n", "2. Write metrics into separate file\n", "3. Convert to summary statistics over 50 sets\n", "4. Observe statistics\n", "4. Alter list of configurations as appropriate and repeat until satisfied\n", "\n", "The **metrics considered** were\n", "- **Total number of successful outcomes** (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates **inefficiency**.\n", " - **Average buffer** (Time left / Initial deadline) -> Indicates how efficient the driving agent was.\n", "\n", "- **Average number of incorrect actions per trial** (penalties of -1.0) because this indicates an action was **unsafe**.\n", "\n", "The parameters considered were\n", "- Exploration rate Epsilon (epsi)\n", "- Discount rate Gamma (gamma)\n", "- Learning rate Alpha (alpha) \n", "- Default Q value (if one did not exist before (q) -> kept constant at 0.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Optimising\n", "\n", "#### 4.2.1 Optimising for Epsilon" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.20\t0.50\t'1.0/t'\t0.0\t87.78\t0.5179\t1.0810\n", "0.10\t0.50\t'1.0/t'\t0.0\t94.20\t0.5709\t0.5732\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664\n", "0.01\t0.50\t'1.0/t'\t0.0\t98.36\t0.5829\t0.1926" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.\n", "\n", "**Interpretation** This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.\n", "\n", "**Next actions** For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.\n", "\n", "Once we have chosen our gamma and alpha, we will optimise for epsilon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.2 Optimising for Gamma (and Alpha)\n", "\n", "Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/t'\t0.0\t98.00\t0.5705\t0.3694\n", "0.05\t0.25\t'1.0/t'\t0.0\t97.18\t0.5726\t0.3538\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664\n", "0.05\t0.75\t'1.0/t'\t0.0\t94.02\t0.5573\t0.3822\n", "0.05\t0.99\t'1.0/t'\t0.0\t75.30\t0.5399\t0.6030" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.plot([0.01,0.25,0.50,0.75,0.99], [98.00, 97.18,96.50,94.02,75.30], 'b-')\n", "plt.plot([0.01,0.25,0.50,0.75,0.99], [98.00, 97.18,96.50,94.02,75.30], 'ro')\n", "plt.xlabel('Gamma')\n", "plt.ylabel('')\n", "plt.legend(handles=[red_patch])\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "line1, = plt.plot([1,2,3], label=\"Line 1\", linestyle='--')\n", "line2, = plt.plot([3,2,1], label=\"Line 2\", linewidth=4)\n", "\n", "# Create a legend for the first line.\n", "first_legend = plt.legend(handles=[line1], loc=1)\n", "\n", "# Add the legend manually to the current Axes.\n", "ax = plt.gca().add_artist(first_legend)\n", "\n", "# Create another legend for the second line.\n", "plt.legend(handles=[line2], loc=4)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations** \n", "* It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower. \n", "* The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5. \n", "* Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.\n", "\n", "**Next actions** This motivates us to try more Gamma values in the range (0,0.5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.3 Pre-emptive checking for robustness\n", "\n", "We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/(t**0.5)'\t0.0\t98.06\t0.5709\t0.3710\n", "0.05\t0.20\t'1.0/(t**0.5)'\t0.0\t97.76\t0.5767\t0.3568\n", "0.05\t0.25\t'1.0/(t**0.5)'\t0.0\t97.68\t0.5722\t0.3636\n", "0.05\t0.50\t'1.0/(t**0.5)'\t0.0\t96.62\t0.5696\t0.3616\n", "0.05\t0.75\t'1.0/(t**0.5)'\t0.0\t93.76\t0.5539\t0.3888\n", "0.05\t0.99\t'1.0/(t**0.5)'\t0.0\t69.60\t0.5312\t0.7028" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** The **trend differences** were that average penalties continued to decrease as Gamma was increased up to 0.50. \n", "\n", "**Decision-making and next actions** The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was **not worthwhile to experiment with increasing Gamma beyond 0.25**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.4 Continue optimising for Gamma" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/t'\t0.0\t98.00\t0.5705\t0.3694\n", "0.05\t0.25\t'1.0/t'\t0.0\t97.18\t0.5726\t0.3538\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for **setting Gammma to be around 0.1**.\n", "\n", "For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that **setting Gamma to be around 0.01** would be appropriate because an increase in successes of 0.003% seems to be more signi\n", "...\n", "\n", "**Next Actions**: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.\n", "\n", "We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.5 Optimising for Alpha" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/(t**0.01)'\t0.0\t97.72\t0.5761\t0.3618\n", "0.05\t0.01\t'1.0/(t**0.25)'\t0.0\t98.06\t0.5722\t0.3608\n", "0.05\t0.01\t'1.0/(t**0.5)'\t0.0\t98.06\t0.5709\t0.3710\n", "0.05\t0.01\t'1.0/(t**0.75)'\t0.0\t97.84\t0.5713\t0.3718\n", "0.05\t0.01\t'1.0/t'\t 0.0\t98.00\t0.5705\t0.3694\n", "\n", "0.05\t0.10\t'1.0/t**0.001'\t0.0\t97.72\t0.5733\t0.3616\n", "0.05\t0.10\t'1.0/(t**0.01)'\t0.0\t98.34\t0.5737\t0.3634\n", "0.05\t0.10\t'1.0/(t**0.25)'\t0.0\t98.06\t0.5723\t0.3608\n", "0.05\t0.10\t'1.0/(t**0.5)'\t0.0\t97.98\t0.5682\t0.3638\n", "0.05\t0.10\t'1.0/(t**0.75)'\t0.0\t97.80\t0.5707\t0.3788\n", "0.05\t0.10\t'1.0/t'\t 0.0\t98.10\t0.5747\t0.3604\n", "\n", "0.05\t0.20\t'1.0/(t**0.01)'\t0.0\t97.80\t0.5653\t0.3730\n", "0.05\t0.20\t'1.0/(t**0.25)'\t0.0\t97.60\t0.5724\t0.3606\n", "0.05\t0.20\t'1.0/(t**0.5)'\t0.0\t97.76\t0.5767\t0.3568\n", "0.05\t0.20\t'1.0/(t**0.75)'\t0.0\t97.88\t0.5694\t0.3632\n", "0.05\t0.20\t'1.0/t'\t 0.0\t97.12\t0.5685\t0.3834" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Alpha=0.01 was doing so well I decided to try Alpha=0.001.)\n", "\n", "For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.\n", "* Pick exp=0.25\n", "\n", "For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.\n", "* Pick exp=0.01\n", "\n", "For Gamma=0.2, \n", "* Pick exp=0.75\n", "\n", "**Overall**: pick Gamma=0.1, Alpha=1/(t**0.01)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.6 Finale: Optimising Epsilon" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.000\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.70\t0.5861\t0.1706\n", "0.000001\t0.10\t'1.0/(t**0.01)'\t0.0\t98.90\t0.5885\t0.1728\n", "0.000005\t0.10\t'1.0/(t**0.01)'\t0.0\t98.96\t0.5869\t0.1686\n", "0.00001\t 0.10\t'1.0/(t**0.01)'\t0.0\t99.12\t0.5926\t0.1640\n", "0.001\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.98\t0.5963\t0.1692\n", "0.01\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.66\t0.5884\t0.2058\n", "0.05\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.34\t0.5737\t0.3634" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose epsilon = 0.00001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTION\n", "Parameters chosen:\n", "\n", "\n", "\n", "
Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t**0.01)0.0
\n", "\n", "\n", "### Discussion: How well does the final driving agent perform?\n", "\n", "- An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.\n", "- It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)\n", "- It would maxmise net reward and thus likely incur close to 0 -1.0 penalties.\n", "\n", "#### Comparing our driving agent to the optimal policy\n", "\n", "\n", "\n", "\n", "
PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
\n", "\n", "* Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.\n", "\n", "* As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.\n", "\n", "* There are still a significant number of penalties occurring (violations of traffic rules or ). This is suboptimal.\n", "\n", "We then conclude that **our policy is efficient but not nearly as safe as it could be**.\n" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df = pd.read_csv(\"smartcab_parameter_search.csv\")" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Len: 1800\n", "epsilon 0.000500\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 98.920000\n", " avg_buffer 0.593003\n", " avg_penalties 0.171400\n", "dtype: float64\n", "epsilon 0.000010\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 99.120000\n", " avg_buffer 0.592551\n", " avg_penalties 0.164000\n", "dtype: float64\n", "epsilon 1.000000e-06\n", " gamma 1.000000e-01\n", " defaultq 0.000000e+00\n", " successes 9.890000e+01\n", " avg_buffer 5.885499e-01\n", " avg_penalties 1.728000e-01\n", "dtype: float64\n", "epsilon 0.000005\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 98.960000\n", " avg_buffer 0.586901\n", " avg_penalties 0.168600\n", "dtype: float64\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epsilongammaalphadefaultqsuccessesavg_bufferavg_penalties
00.2000000.50'1.0/t'0.0880.5226981.06
500.1000000.50'1.0/t'0.0960.5583570.61
1000.0500000.50'1.0/t'0.0960.5367750.43
1500.0100000.50'1.0/t'0.0980.6136010.19
2000.0500000.25'1.0/t'0.0980.6070520.39
2500.0500000.01'1.0/t'0.0990.5673780.33
3000.0500000.75'1.0/t'0.0990.5861670.30
3500.0500000.99'1.0/t'0.0800.5091290.36
4000.0500000.50'1.0/(t**0.5)'0.0920.5574080.31
4500.0500000.25'1.0/(t**0.5)'0.0980.5807030.31
5000.0500000.01'1.0/(t**0.5)'0.0990.5847470.37
5500.0500000.75'1.0/(t**0.5)'0.0930.5607600.48
6000.0500000.20'1.0/(t**0.5)'0.01000.5963770.37
6500.0500000.99'1.0/(t**0.5)'0.0770.5001400.57
7000.0500000.10'1.0/(t**0.5)'0.0990.5594650.31
7500.0500000.10'1.0/t'0.0970.5649910.42
8000.0500000.20'1.0/t'0.0980.5555740.40
8500.0500000.20'1.0/(t**0.25)'0.0960.5490780.37
9000.0500000.20'1.0/(t**0.75)'0.0980.5706070.38
9500.0500000.10'1.0/(t**0.75)'0.0970.5886440.44
10000.0500000.01'1.0/(t**0.75)'0.0990.5695910.44
10500.0500000.01'1.0/(t**0.25)'0.0990.5901370.35
11000.0500000.10'1.0/(t**0.25)'0.0960.5826410.27
11500.0500000.10'1.0/(t**0.01)'0.0990.5722230.26
12000.0500000.01'1.0/(t**0.01)'0.0980.5793700.34
12500.0500000.20'1.0/(t**0.01)'0.0970.5579510.34
13000.0500000.20'1.0/(t**0.001)'0.0940.5429080.40
13500.0500000.10'1.0/(t**0.001)'0.0980.5778330.35
14000.0500000.01'1.0/(t**0.001)'0.0980.5873060.35
14500.0100000.10'1.0/(t**0.01)'0.0990.5854670.15
15000.0010000.10'1.0/(t**0.01)'0.0990.5983600.16
15500.0000000.10'1.0/(t**0.01)'0.0970.6032970.18
16000.0005000.10'1.0/(t**0.01)'0.01000.5984220.17
16500.0000100.10'1.0/(t**0.01)'0.0990.6055510.14
17000.0000010.10'1.0/(t**0.01)'0.01000.6037990.16
17500.0000050.10'1.0/(t**0.01)'0.0980.6159080.16
\n", "
" ], "text/plain": [ " epsilon gamma alpha defaultq successes avg_buffer \\\n", "0 0.200000 0.50 '1.0/t' 0.0 88 0.522698 \n", "50 0.100000 0.50 '1.0/t' 0.0 96 0.558357 \n", "100 0.050000 0.50 '1.0/t' 0.0 96 0.536775 \n", "150 0.010000 0.50 '1.0/t' 0.0 98 0.613601 \n", "200 0.050000 0.25 '1.0/t' 0.0 98 0.607052 \n", "250 0.050000 0.01 '1.0/t' 0.0 99 0.567378 \n", "300 0.050000 0.75 '1.0/t' 0.0 99 0.586167 \n", "350 0.050000 0.99 '1.0/t' 0.0 80 0.509129 \n", "400 0.050000 0.50 '1.0/(t**0.5)' 0.0 92 0.557408 \n", "450 0.050000 0.25 '1.0/(t**0.5)' 0.0 98 0.580703 \n", "500 0.050000 0.01 '1.0/(t**0.5)' 0.0 99 0.584747 \n", "550 0.050000 0.75 '1.0/(t**0.5)' 0.0 93 0.560760 \n", "600 0.050000 0.20 '1.0/(t**0.5)' 0.0 100 0.596377 \n", "650 0.050000 0.99 '1.0/(t**0.5)' 0.0 77 0.500140 \n", "700 0.050000 0.10 '1.0/(t**0.5)' 0.0 99 0.559465 \n", "750 0.050000 0.10 '1.0/t' 0.0 97 0.564991 \n", "800 0.050000 0.20 '1.0/t' 0.0 98 0.555574 \n", "850 0.050000 0.20 '1.0/(t**0.25)' 0.0 96 0.549078 \n", "900 0.050000 0.20 '1.0/(t**0.75)' 0.0 98 0.570607 \n", "950 0.050000 0.10 '1.0/(t**0.75)' 0.0 97 0.588644 \n", "1000 0.050000 0.01 '1.0/(t**0.75)' 0.0 99 0.569591 \n", "1050 0.050000 0.01 '1.0/(t**0.25)' 0.0 99 0.590137 \n", "1100 0.050000 0.10 '1.0/(t**0.25)' 0.0 96 0.582641 \n", "1150 0.050000 0.10 '1.0/(t**0.01)' 0.0 99 0.572223 \n", "1200 0.050000 0.01 '1.0/(t**0.01)' 0.0 98 0.579370 \n", "1250 0.050000 0.20 '1.0/(t**0.01)' 0.0 97 0.557951 \n", "1300 0.050000 0.20 '1.0/(t**0.001)' 0.0 94 0.542908 \n", "1350 0.050000 0.10 '1.0/(t**0.001)' 0.0 98 0.577833 \n", "1400 0.050000 0.01 '1.0/(t**0.001)' 0.0 98 0.587306 \n", "1450 0.010000 0.10 '1.0/(t**0.01)' 0.0 99 0.585467 \n", "1500 0.001000 0.10 '1.0/(t**0.01)' 0.0 99 0.598360 \n", "1550 0.000000 0.10 '1.0/(t**0.01)' 0.0 97 0.603297 \n", "1600 0.000500 0.10 '1.0/(t**0.01)' 0.0 100 0.598422 \n", "1650 0.000010 0.10 '1.0/(t**0.01)' 0.0 99 0.605551 \n", "1700 0.000001 0.10 '1.0/(t**0.01)' 0.0 100 0.603799 \n", "1750 0.000005 0.10 '1.0/(t**0.01)' 0.0 98 0.615908 \n", "\n", " avg_penalties \n", "0 1.06 \n", "50 0.61 \n", "100 0.43 \n", "150 0.19 \n", "200 0.39 \n", "250 0.33 \n", "300 0.30 \n", "350 0.36 \n", "400 0.31 \n", "450 0.31 \n", "500 0.37 \n", "550 0.48 \n", "600 0.37 \n", "650 0.57 \n", "700 0.31 \n", "750 0.42 \n", "800 0.40 \n", "850 0.37 \n", "900 0.38 \n", "950 0.44 \n", "1000 0.44 \n", "1050 0.35 \n", "1100 0.27 \n", "1150 0.26 \n", "1200 0.34 \n", "1250 0.34 \n", "1300 0.40 \n", "1350 0.35 \n", "1400 0.35 \n", "1450 0.15 \n", "1500 0.16 \n", "1550 0.18 \n", "1600 0.17 \n", "1650 0.14 \n", "1700 0.16 \n", "1750 0.16 " ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"smartcab_parameter_search.csv\")\n", "print(\"Len: \", len(df))\n", "\n", "tries = int(len(df)/50)\n", "for i in range(tries-4,tries):\n", " print(df[50*i:50*(i+1)].mean())\n", "\n", "df[::50]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Randos" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df_noa = df.drop(' alpha', axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Add plots" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/.ipynb_checkpoints/Smartcab Report-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# P4 Smartcab " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Implement a Basic Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Process**\n", "\n", "**Understanding the game** The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\nTiJvKvmbvyf+4Owv5ON/Pt0e/asfXmxO4KW3c+L+7Xyu+J76+Aj8WXI6t+v9n5iNrE/diP/YKx4m\neC8n3t89zcf6TK6f952XNM/rD//S38sPJXw3vXjjX7z8KP/f/28vk/QxGj2O+YWfykn8z6XDP/8L\ns+XZiPb8AMHtn+QHGbpEeH7o4fb7v5eX/zh/N3weQR8J81Elpy7z6P94COLwK/949vH1L/7L7+T2\n5aT8d/7ry4+8z0nF/LncKX02X2M+58Ff/Luz897+93+X+/Xj188eo/q7TwJ4fYslAhsTeCvH6d94\n77Pp+zkuPsgj1j/KSfl/+4ffS3+YR8l/N3/XeyTF47GfSJi/mxP4P54T8T/7zjvp83n+r7/73uzj\n5eN76vNdvan/o8yuLRL+v/TF0/T7uT1P//dH6f/m/7dFe26iPfl1nE/4Vv7/Q7xy0xQCBAgQIHAn\nMPY3ursDmSFAgAABAgQIECBAgAABAgQIECBAYM8EYrR5JNCHJdYNR6JHnUhWfzqPCD/OI6vfzSPh\nYwT4985zIjuPGr/NSen4GPfZx73nbNVrCfqc6H4314t94zvSj3MSuV/WbUd/35iPdr2RR45H0v/d\nRzmTl9sVJUaJ/3gk6HMy+jDW5XqzEvVzsj4S8O9E/fwwQZQYaf9ubt87r+rHceeVSHDHd8xHOnB2\nvrzfD76fE+AxEj4S9PlcsT4n6NM7H8wS4OkzeRoj/H+Qzxt1ooRDJPNn5+ll+EZ55OPEJxbECP/Z\nAxL5vNGej3MfRfuij+JBgHgIIR4KiOufLed6wwR9jMQf/dDAy0v13+kIHOW4iI+dH5ZYF9uGJda8\nnWM1Rs6f5TonOWH/QX4w5O3Dm/RGzszPEuK5TnwX/Ht5fXyMfSTyP5/v79M8je+wz3f0yrJuu+KB\ngC/kc+T0e3qUv87i0znuP5Xb8zyPmD/I30kfDwp85vgwt/1wVmdlA1QgQIAAgckIlPxcmgyGCyVA\ngAABAgQIECBAgAABAgQIECBAoCfw9ufT4S/8kx8mjLtNkSDO2xaW+I72P/WX8345UfWTf202TTEy\ne+FH3OdEd3xcfCSi8/fB/0i5bzu6A0USORLNORF/+Lf/2evXE8n0uJ78/fR3JSfFDz77Yc72/el0\n8Hd+ulc/ZwBnH8k/qH+3YzeT60WCP393/OHP/P2X+3cfcR9DfSMJGR9xH+eNBwdyou8gPnI+vF4z\nyvUOs8fQZaxHHC/Om80Pf+aXBu2LBsZ1vnJ5M3+yQKx57ydm7ZstdP+J43zq5fZulSmBVQKfz0nz\nf/pTH84+Cr5fN99xKbYtKm/mRPvP/Pjbs4+2/yv5ky/i/yjxsfezkHq1UyTN812Z4uPt43iRrM93\nc1FZt13x0fsffvrTKUdG+uk8jcdq+u2JdryVP1o/2vFjuT0KAQIECBDoBPJvgQoBAgQIECBAgAAB\nAgQIECBAgAABAgTmCCwaqT2n6uurIgEd30+ey+x75F/O3vu/925H74yHeSR6yq95nwjQq3Y3242y\nf+fVddxtKJyJ5HW83swfhR9l1WE+Fe0rLJvwWLd93acIFDZRNQKLBCJh/cU84nzdEon2T79KdMfH\n3m+63Kddn8pJ+iifzh+hrxAgQIAAgVKBzf8UKz2zegQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYEICEvQT6myXSoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQK7E5Cg3529MxMg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAhAQk6CfU2S6VAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBHYnIEG/O3tnJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEJCRxP\n6FpdKgECBAgQIECAAAECBAgQIECAAAECWxS4ublJV1dXKabLytHRUTo7O0sxVQgQIECAAAECBAhM\nSUCCfkq97VoJECBAgAABAgQIECBAgAABAgQIbFEgkvNPnjxJl5eXS89yfn6enj59mmKqECBAgAAB\nAgQIEJiSgAT9lHrbtRIgQIAAAfFJ898AAEAASURBVAIECBAgQIAAAQIECBDYokCMnI/k/MXFxcqz\nrBplv/IAKhAgQIAAAQIECBBoUMB30DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Changing Code** I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instances of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "...\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Inform the Driving Agent\n", "\n", "### QUESTIONS:\n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States:\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Total number of states**: 4^4 * 2 = 512 states.\n", "\n", "The minimum 'deadline' is `minimum distance` x 5 = 4 x \n", "5 = 20 and the maximum is 12 x 5 = 60. \n", "\n", "If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means **each state will be visited an average of** 20 turns x 100 trials / 512 states i.e. about **4 times**. This is **reasonable but is still quite low**.\n", "\n", "This low number is **why I did not include further state attributes** I considered (see boloew) because that would only reduce the number of visits to each state even further.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States that I considered:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implement a Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent is **more likely to take actions corresponding to `next_waypoint`** when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that **maximise total expected reward**.\n", "\n", "The agent is **less likely to take actions tha result in penalties** (crashing into cars, making illegal moves or making moves that are legal but are not equal to `next_waypoint` so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.\n", "\n", "It does not just move randomly in loops any more." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notes: Debugging 'Implementing a Q-Learning Driving Agent'\n", "1. I realised the agent wasn't acting because the `count` variable was defined wrongly: \n", " - `count` was used to see there were multiple actions with `q-value = maxQ` for that state. \n", " - If `count` > 1, we would randomly choose one action out of the set of actions where `q-value = maxQ`.\n", " - `count` was wrongly defined as `len([maxq])`, which is always equal to one since it is an array with a float in it.\n", " - It should've been `len([i in q if q[i] == max_q])` instead.\n", " - Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.\n", " - This meant the agent often chose `None`.\n", "2. I'd forgotten to incorporate `next_waypoint` into my state. Pretty silly.\n", "3. I wanted to print results after every turn for debugging purposes and put `self.results` in TrafficLight instead of Environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Improve the Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers:\n", "### 4.1 Planning\n", "\n", "**Procedure**:\n", "1. Run each configuration 50 times (50 sets of 100 trials)\n", "2. Write metrics into separate file\n", "3. Convert to summary statistics over 50 sets\n", "4. Observe statistics\n", "4. Alter list of configurations as appropriate and repeat until satisfied\n", "\n", "The **metrics considered** were\n", "- **Total number of successful outcomes** (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates **inefficiency**.\n", " - **Average buffer** (Time left / Initial deadline) -> Indicates how efficient the driving agent was.\n", "\n", "- **Average number of incorrect actions per trial** (penalties of -1.0) because this indicates an action was **unsafe**.\n", "\n", "The parameters considered were\n", "- Exploration rate Epsilon (epsilon)\n", "- Discount rate Gamma (gamma)\n", "- Learning rate Alpha (alpha) \n", "- Default Q value (if one did not exist before (default_q) -> kept constant at 0.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Optimising\n", "\n", "#### 4.2.1 Optimising for Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.200.50'1.0/t'0.087.780.51791.0810
0.100.50'1.0/t'0.094.200.57090.5732
0.050.50'1.0/t'0.096.500.57090.3664
0.010.50'1.0/t'0.098.360.58290.1926
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.\n", "\n", "**Interpretation** This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.\n", "\n", "**Next actions** For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.\n", "\n", "Once we have chosen our gamma and alpha, we will optimise for epsilon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.2 Optimising for Gamma (and Alpha)\n", "\n", "Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
0.050.75'1.0/t'0.094.020.55730.3822
0.050.99'1.0/t'0.075.300.53990.6030
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations** \n", "* It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower. \n", "* The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5. \n", "* Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.\n", "\n", "**Next actions** This motivates us to try more Gamma values in the range (0,0.5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.3 Pre-emptive checking for robustness\n", "\n", "We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
0.050.75'1.0/(t^0.5)'0.093.760.55390.3888
0.050.99'1.0/(t^0.5)'0.069.600.53120.7028
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** The **trend differences** were that average penalties continued to decrease as Gamma was increased up to 0.50. \n", "\n", "**Decision-making and next actions** The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was **not worthwhile to experiment with increasing Gamma beyond 0.25**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.4 Continue optimising for Gamma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alpha = '1.0/t'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
\n", "\n", "Alpha = '1.0/(t^0.5)'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for **setting Gammma to be around 0.1**.\n", "\n", "For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that **setting Gamma to be around 0.01** would be appropriate because an increase in successes of 0.3 trials (per 100) is more important than decreasing average penalty by 0.008 per trial.\n", "\n", "**Next Actions**: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.\n", "\n", "We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.5 Optimising for Alpha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.01)'0.097.720.57610.3618
0.050.01'1.0/(t^0.25)'0.098.060.57220.3608
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.01'1.0/(t^0.75)'0.097.840.57130.3718
0.050.01'1.0/t' 0.098.000.57050.3694
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.10'1.0/(t^0.001)'0.097.720.57330.3616
0.050.10'1.0/(t^0.01)'0.098.340.57370.3634
0.050.10'1.0/(t^0.25)'0.098.060.57230.3608
0.050.10'1.0/(t^0.5)'0.097.980.56820.3638
0.050.10'1.0/(t^0.75)'0.097.800.57070.3788
0.050.10'1.0/t' 0.098.100.57470.3604
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.20'1.0/(t^0.01)'0.097.800.56530.3730
0.050.20'1.0/(t^0.25)'0.097.600.57240.3606
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.20'1.0/(t^0.75)'0.097.880.56940.3632
0.050.20'1.0/t' 0.097.120.56850.3834
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Alpha=0.01 was doing so well I decided to try Alpha=0.001.)\n", "\n", "For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.\n", "* Pick exp=0.25\n", "\n", "For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.\n", "* Pick exp=0.01\n", "\n", "For Gamma=0.2, \n", "* Pick exp=0.75\n", "\n", "**Overall**: pick Gamma=0.1, Alpha=1/(t^0.01)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.6 Finale: Optimising Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.000 0.10'1.0/(t^0.01)'0.098.700.58610.1706
0.0000010.10'1.0/(t^0.01)'0.098.900.58850.1728
0.0000050.10'1.0/(t^0.01)'0.098.960.58690.1686
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.001 0.10'1.0/(t^0.01)'0.098.980.59630.1692
0.01 0.10'1.0/(t^0.01)'0.098.660.58840.2058
0.05 0.10'1.0/(t^0.01)'0.098.340.57370.3634
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose epsilon = 0.00001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTION\n", "Parameters chosen:\n", "\n", "\n", "\n", "
Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t^0.01)0.0
\n", "\n", "\n", "### Discussion: How well does the final driving agent perform?\n", "\n", "- An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.\n", "- It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)\n", "- It would maxmise net reward and thus likely incur close to zero -1.0 penalties.\n", "\n", "#### Comparing our driving agent to the optimal policy\n", "\n", "\n", "\n", "\n", "
PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
\n", "\n", "* Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.\n", "\n", "* As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.\n", "\n", "* There are still a significant number of penalties occurring (violations of traffic rules or ). This is suboptimal.\n", "\n", "We then conclude that **our policy is efficient but not nearly as safe as it could be**.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/.ipynb_checkpoints/smartcab-report-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# P4 Smartcab " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Implement a Basic Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Process**\n", "\n", "**Understanding the game** The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEBgVAmQtB9Vl2v4YknsDjcZDS1ct9FwlVgjAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAs0VIGHfXN/cZyfRmztpUybkOjWFlUkRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEE\nEEAAAQQQGFMCJOzb/HKS+G3fC8S1ad9rw8oQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ\naHcBkvVteIVIArfXReF6tNf1YDUIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIjAUBkvVt\nchVJCI/8heAajPw1SFoB1yVJhTYEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAILsASeHsVq2M\n5Lq0Ujs4FknIAKRFu7hnh8YquxWRCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACIiSgs78L\nsMpulUskyc9cGDNPMp69x/O5Z36DEIgAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIDBiAuM5\nWT2ez72lbziSps3nHg/G4+Ecm/9O4QgIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALtLjAe\nEtnj4RxH7H1GYrV59GPNdqydT/OuPDMjgAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAgiMR4Gx\nltgea+fTFu9Jkq75X4bRbjra15//FWVGBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBOoX\nGO2J7tG+/vqvXBNGkozND3W0Wo7Wded35ZgJAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAA\ngdYJjNaE92hdd+uubIYjkZzNgFQlZDQZjqa1VmFvq25c2+pysBgEEEAAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBoogBJ2ubgjibX0bTW5lytBmYlsVg/3miwGw1rrPUKjMVzqtWAeAQQQAABBBBAAAEE\nEEAAAQQQQAABBBBAAAEEEEAAgUGBsZgwHg3nNBrWOPguaZMayc7aL0S7m7X7+kx8tKzT1kuJAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCAwtgRGS4K53dfZ7utrq3ctSdLsl6NdrdpxXe24puxX\nmkgEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEYoF2TD6345pUq13X1VbvZRKp2S5Huzm1\nw3raYQ3Zrh5RCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCOQv0A4J6XZYgy/bbuvx19YW\ndZKslS9Du/mM1HpG6riVrw69CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCLSXwEglqEfq\nuGn67baetHW2vJ3Eazp5u9i0eh2tPl76FcjeMxrXnP3siEQAAQQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBAAAEEEDCB0Zj4bfWaW308uzZh2S7rCNc1ovskNofzt4NJq9bQquMMV05uabf1JK+SVgQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAgdEm0G7J4latp1XHqfR+aIc1VFpfS/tIiA7lHmmPZh+/\n2fMP1RzcG6njDq6AGgIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALVBUYqmdzs4zZ7/mqy\nI338autrWT+J05h6pB2aefxmzu2/UVt1HP+Y1BFAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBolUCrkszNPE4z585yHUb6+FnW2NQYkqoiI2nQrGM3a159MzZz7rzf7KNprXmfO/MhgAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAqNZYDQlcpu51mbN3ax5s7znRvLYWdbX1JjxnMAcqXNv1nGb\nMW8z5sz6hh7JY2ddI3EIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAALtKzCSieBmHLsZc+rV\na9a81d4ZI3Xcautqav94TYKO1Hnnfdw858tzrkpv2lYdp9Ia6EMAAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEDABFqVKM7zOHnOpQ55z2e21cqROm61dTWtfzwmS0finPM8Zl5z5TVP+OZs1rzh\ncdphfzydazt4swYEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBoH4HxlFht1rnmNW9e8+i7K8+5\nsr5bR+KYWdeWe9x4SzC2+nzzPF4ec+Uxh70J85zL5qy1bIc11Lpm4hFAAAEEEEAAAQQQQAABBBBA\nAAEEEEAAAQQQQAABBBoXaIekbp5ryGOuPOawK5PnXDZnpbLVx6u0lqb2jZcEZ6vPM6/j5TFPu8xR\n6Y2cxxorzU8fAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAirQ7ERwHvO3yxyt8ArflXmc\nezhnW+2Ph8Roq88xj+M1OsdIjw/f5I2uJ5yvXffHy3m2qz/rQgABBBBAAAEEEEAAAQQQQAABBBBA\nAAEEEEAAgeYJjPnEaYku7/NsdL6RHq8sja6h1ndlq49X6/oaih/rCcVWnl8ex2pkjpEaa2/ARo5v\nc9RTjtRx61krYxBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBoXGKkEbh7HbWSOkRprV6yR\n49scWctWHivrmnKJG8vJzVadWx7HqXeOVo+zN129x7XxaWWz5k07Hu0IIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAALjQ6BZCd9G5613fKvH+e+Seo/tz5Gl3qrjZFlLbjFjNSHaqvNq9Dj1jq9n\nXD1j9I1W77jwTZrXPOG8ee23+/ryOk/mQQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQRGSqDd\nE655ra/eeeoZV88Yvf71jrP3TqPjbZ5qZauOU20dufWPxaRkq86pkePUO7bWcbXG6xurnjH+G7LR\n8f5cSfVmz590TNoQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQTaV6DZSdxG569nfK1jao23\nq1nvOB3fyFg7fpayVcfJspaGY8ZasrMV59PoMWod327x9qardV02LqnMc66k+WlDAAEEEEAAAQQQ\nQAABBBBAAAEEEEAAAQQQQAABBBBAQAXyTPbWO1et49otPnwn1bq+cHyW/VYcI8s6Go4Za4nRZp9P\nI/PXOraZ8c2cO+lNWevxkubI2tbKY2VdE3EIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAL1\nC7QyOdvosWodX0t8LbGq3ex4/4rWeix/bJZ6s+fPsoZcYsZKMrMV51HvMWodV0t8O8T6b8Ra1uOP\nS6vnPV/acWhHAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBAYWwJ5J3Trna+Wce0Qq++CWtbh\nv2vqHefPUa3eimNUW0ND/WMhAdrsc2hk/lrGNiO2GXPaG66WuW2MlY2MtTnqKUfquPWslTEIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAwHgSGKnEayPHrXVsLfFZY7PG6XupWbHh+7SW44Rjs+w3\ne/4sa6g7ZiwkLJt5DvXOXeu4rPFZ4rLE6Bsma1ytsfZmrGV+G1OpzHu+SseiDwEEEEAAAQQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAYPQJ5J24rWe+WsZkjc0SlyVGr2jWOLv6tcY3Os7GVyrrXVOlOVvW\nN9qTns1cf71z1zIua2yWuCwx+sbKEpclxn+T1hqf11h/nlrrjay51mMRjwACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAgggMFxgpBKtjRy31rFZ4rPEqF6WuCwxWeeyK5Z1Tou3st5xNr5S2cy5Kx23\n4b7RmqRs9rrrnT/ruDzjssyVV4y+4bLMFb4x6xkTzmH7ec5lc1IigAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAgiMXoE8k7X1zJV1TJa4VsboFc9yvFriwndR1vnDcVn3mz1/1nVkjhutyc5mrrue\nuWsZkyU2j5g85tA3UpZ57A1XS6yNqfUY/rh66/Wus97jMQ4BBBBAAAEEEEAAAQQQQAABBBBAAAEE\nEEAAAQQQQCBZoNUJ1nqPV8u4LLF5xOQxh16VLPPY1asltpExNrZaWc96qs3Z1P7RmKhs5prrmTvr\nmCxx1WKq9eubpVpMo/32hqw2j8VZWWu8jfPLPObw56OOAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCAwNgTySNTWOkfW+GpxjfbrFWzFHPZOqXYsi/PLesb44yvVmzl3pePW1TcaE57NWHM9c9Yy\nplpsM/r9Of16+Eap1GexWWI0NmtcrfNafJay1jVkmZMYBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAA\nAQQQQACBkRNoRgK21jmzxmeJqxTj9/l1009qsz4tm91fy7H8WKtXW5/F1VI2Y85ajl9T7GhKZjZz\nrbXOnTU+S1ylmEp9eqGT+rWts/TqKpXa5sf6ddc1bKvWrwOyxNjEtcTaGCsbGWtz5FG2yzryOBfm\nQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQSaIdAuidJG1lHL2Cyx1WL8fq3rq+BeA6VS636M\n2422pDbr07JSf6U+myNLTLXj2Fx+mXVef0zWejPnzrqGqnGjKenYrLXWOm/W+GpxjfQnjdU2TcxP\ncK+J7jXFvSaX6tqmfRqTNNY1R1ulPg2o1h/Pkj2u3ngbl1RmXWPSWNoQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEAAAQTaTyDPxGutc2WNrxZXqV/79KXJ+H736nOvg+51oFTXtnoS9ZWO6aasmMTP\n0q8xulU7Thw1+LPW+MGRlWvNmrfyUWvsHS3JzGass545s46pFFepTy9fpf60Pm3vdq9J7jXzzW9+\n80mve93rXnbSSSedvHDhwqMnT568xLVPdS82BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBoT4H9Bw8e3LB58+anHnnkkYdvuummH1577bWPuKXudq9D7nXEvdKS0GntbkjqGO3TrZGx8QyV\n57CYsKx03DA2634z5sx67ExxaQnfTINbFNSMNdYzZ5Yx1WIq9dfTp2P0pcn5qRMmTFj4la985S1n\nn332y6dOnXpKsVgUe9m10n02BBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBoD4GOjsE0\nodbttX///gfWrl37g8svv/zz/f39m91q97uXJenTkn5p7Xqy9fZVG6v9ulWaP44Y/rOeMcNnGdrS\njDmHHqGBvcGr3cAkTR6a9xrrmS/LmGoxlfrT+tLaldz6NDk/7cILLzzhwx/+8B+sXr36DUeOHJGB\ngYEoOd/ka8P0CCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCQs4Am6bu6uqS7u1seeuih\nG1we8Orvfve7v3KH2edemqTXrVIiOq0vrb3afFn6s8ZonL9VWpMfl7We93xZj5spzpK8mYJHICjv\n9dUzX5YxlWLy7vPn63LXZIq7c37JHXfc8UFNzh8+fJjE/Ai8UTkkAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAnkLaKK+p6cnStKfe+65H3F30m9wx9Dvph/wjpWWkE5r16HN6LMlVZrbYsKy\nnjHhHP5+3vP5czdU72xodHMH+4noPI5U63waX21MtZhK49P60uYM23Vf756fef3117/l5JNPfkNf\nXx/J+TzeKcyBAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAQBsI6NdXaw5Qc4GaE3RLmule\nmiP0c41hHtF1R1tau3b64+PowZ/V+ir129zVYgaPFtdqjQ/Hh/t5zxfOX/e+3oHdrlveaLXOVy2+\n3n4dlzS2lnaN1Q9XTLniiitOe+tb3/o2V1/oXmwIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIDDGBPTrrRctWjRl48aN7on3D+n30fcnnGIt+UYdnhZvfQmHKDfpWLY6BNr1Dvq8L2gt81V6\nIxpxtfnS+vNotzmix9tfdtll502cOPEUWxglAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAgiMPQHNCWpu0J3ZFPeyG7Etd+ifcFKb9ufVbsdKm8/vrxZjsVrWEuuPS6vnPV/acWpqb7cEvSLl\nDdXK+SqtP20dSe1J8/htWo/uoD/22GNX66Mt2BBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAAB\nBBBAYOwKaE5Qc4PuDDVBr7lCyzP6eUQDSGrTPhtjcVZWak/rqzSfzVtrWelYtc5l68t7znrWUR6j\n308wlrdasavFV+pP66ulPWusxumnYibOmzfvKBL0Y/ktzLkhgAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAgggEAtobtDVJrqX5go1Z+jfyRvuu+5yQj6M0z6/LS1W23VLmjvuqdxXbazN4ZeVjuXH\njcr6WE7Q64WrZasWX6k/ra+W9qTYSm36qZgJPT09S0jQ13KZiUUAAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAAAEEEEBgdApobtCtfIJ72ZPSNZ/oJ9otv+i36cmGcWlt9bRXGqN9uiUdP+5J/llrfPIs\nbdg6lhP0tXDbGzVtTKX+tL6k9jzbdC79ZMzUtEU32l548kkp/Ow+KfzyESlsfk6Ke/ZEU3bMmCGd\nCxdJ54knSefpZ0jnMcc0eqi6xg/sWifFrXdLYccDMrBvgxQP747X1zNTuqYtkc45p0jH/BdK16xV\ndc3f6KD9+/fLzp07ZY9zO3jwoBw5ciSasru7WyZPniwznOPs2bNl6tSmXcJGT4HxCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAAC7SWgiSW7e95WZjlIPynfSJvOq+P9+fxjJbVXGpNlrMWM+dIu\nzEifaN7rqGW+arGV+tP6ktrrbUsaF33/vLtoqzZt2vQ/eV+8wvqnZeDrN8rAT++WedOnumSy+xqL\nCe6DOF3637rbBgZE+vtd0vmAbNu7X7pe4JLgl1wqncuPivub/LOw5wkZeOw6OfLc/8i82d0ydYp7\niseEbunoij8oVBwouPUdkf0H+mTbziPSvegc6Vr529I5Y0WTVxZPf+DAAdmwYYNs3749SsBrMn6C\n8+sq+Q04v/7I72CUwJ87d64sWbJEpkzRrwthQwABBBBAAAEEEEAAAQTaT0B/h+lyv9fY7Rntt0JW\nhAACCCCAAAIIIIAAAgiMH4HFixef4852nXsdcC+XGBu2hQn0cF8HNNKWNt4WkjS39VUb68fVGhuO\nTdqvtrakMbm2JSV/cz1AxsnyXEctc1WLrdSf1pfUnqWtlhiN1U/HrNq4ceOPMxpnCit8/zbp/9J1\nsnjqJOmeOcM9HMP9+SXtbaqrKBTkyO49smn/IZnwJpcEf8X5mY5Tb9DA+m9J/68/I71zRHpmOoJO\nt4iK6yvK4d37ZeMOl8M//h3Stfzieg+dadzmzZvl2WefjRLzeod8p/q5Lfwago6O+HIXnJ/eYa93\n2i9dulQWLlyY6TgEIYAAAggggAACCCCAAAKtEeiXB276V/n37z3qDneq/Mn/faccP711afodv/6J\n/OBXW9yHnhfIeRe+SGa27tCt4eUoCCCAAAIIIIAAAggggEAdAr29vS9xwzRBv9+9LFNmpc0Y7mt7\n2BbuJ8WktVVqr9aXpV9jbEtap/XVWuY5V63HjuLH8yPu4wxpOlul/rS+pPawLdzXFYRtmffDxG/6\n6VTvGbjxRpn+3W/J9LmzRCZPiv8T1bdoMe196pbZ0Snds2fJskmHZO+Xr5O9u3ZL16WXVj9YHRF6\n1/z0zdfJjCXTpWNSj7e+CpO5RHjP7Gly1OTDsmf9v8revl3R3fQVRtTdpYn5vXv3ivvUkkyaNClK\nytv1sTKcXBP1s2bNiuL1jvvDhw9Hifowjn0EEEAAAQQQQAABBBBAYEQE+p6VH0TJeT36/bL2oc1y\n3FmLWraUfRvvd8d/wB3vODnl5WfJDPcANTYEEEAAAQQQQAABBBBAAIGygOYULZFn+cW0fR3kx9u+\nljbG2vz9tLZK7dX6svRrzJjcxtpnz+2NV+1iVYur1J/Wl9QetoX7us6wLet+GFftnCv2F37w/Tg5\nP3+euGxxKfnt/tsrJ+f1v0P/pbulfm12Y6a7sZrg17ny3gae+XaUnJ+5YJZ0TPSS84XSGrT0X7q2\nqE/X6ZDdGB2rCX6dK+9t69atUXJeH1dvyXk9hibmLTlfqa5jdKwm+HUuNgQQQAABBBBAAAEEEECg\nLQQmzpBjvIUsWeSetNbCravbMvKToi9YbOGhORQCCCCAAAIIIIAAAggg0O4Cliu00tZb676OqzYm\nKSbteNZeaYzFhMe19rDMGheOa8v9driDPi/QrPNUi6vUn9SX1KYXO2yvdT+cwx9v9Q5L/jby7io8\n84wMfPEal2CfK9Jdekv4iXmX4B6+adZbW90PjdVHtrux093d9LvcXF0rV0nnsmXDh9XRUtjzpBz5\n5X/IjGXTxX2RezyDrkmPq2XSVm7XilubrtWNnTFnuux0c8mME9x30h+TNLLmNv3O+aeffjr6Hnn9\nrvkwER9OmHbNdKzeTa9z6ffR8530oRz7CCCAAAIIIIAAAggg0HqB2fIbf/3ncuy2g9LdNVOOOWpy\n+UPIrVhL+VdTd7D4d61WHJVjIIAAAggggAACCCCAAAJtL6CZL920LCXDon3LkFl71FiK07rf7+9r\nPWmMxWu/bnbcpPawLR4xfF5rtzI8rrWHZda4cFy4n9c84byZ90fyDno9eX3lseU1T6W1JB0jrS1s\nr2ffH5NWr7TezH3Fb9woi6a673PXx9rrVv4LiPvvKO0/pSiu/GNwjJtD59I589qKT3xJFs/tiB9r\nb4f0kvNRteCW4L9s3Vp6sfpofJ1L58xr27RpU3T3u905bwl4Kysdx2LiPzQVo7vv9U56nZMNAQQQ\nQAABBBBAAAEEEGgHgYlzlslJxx0nxx27UCa0w4JYAwIIIIAAAggggAACCCCAgC+QlkfUdr9Px9Sz\nH45JmietTdvz3JLWUs/8Ok9ec9V8/Ha4g77mRTcwoBp0Wn9Se71t4bhK+9X6Gr6Dvrj+aSnefbdM\nOPaoOBmflpy3hLfh28q0vSP6UUrSd8iE2TOiOQuvfUo6lrt5G9iKe56QwnM/lonHzS+tz03mJdyj\n5erh9RVs0ap0nVFftBdFTJw1TQqP/lg6dj8uHTNWBKNq29W753fu3CkrVqyI7uaw0ZZ4t/1Kpcbq\nd9HrpvUZM2bIE088Ifv37+cu+kpw9CGAAAIIIIAAAgiMsEC/7N6xVwbcKibNmiNT3Me/+/dtlXWP\nbRCZPl26+w5I1/RFsnzZ/KFJ3UKf7N61PxrXNWm6zJySkvLtPyA7dh1yT8Jy80938wdhB3ZslKc2\nbJHDbgFdPVNk7vyFsmj+TOmUguzbsUsOu3X1TJ0l0yYO/1x6oW+fPLdpo2zfdcCto0t63BOs5s5b\nLAvnTEk07T+wW/Ye0gNNlTkz3SPX+3bLM09vkO0HDrsHdU2RBe73noXablv/Ptm4IZ7fLU4mTp8r\nRx29ULwIiyyXBTfnejfnrmjOLumaOEXm9y6X+dOCEy+PSK7073NrjVAmubUOP58Du3eInop0TZJZ\nrj/U6du3Q/Yrnuu38eq1K2rskVlzpnljhr8H9Lo8u2G7HFAu9xSzWYuWy7L505IXW27tk81PPS2b\n3PXocl5T3Ptn9oJFMsdddPsws/5iF9fLgwYrej2edddjr1u4O2aPs5s1e6H0Jhy3GT6DC6GGAAII\nIIAAAggggAACCLRMQBNLlq3Tg5YzYl67Zc/8vjA2y35STC1tabHablu4Rmsfk+VYSND7b75KF6la\nXFp/Wnt4rKS4sK3Sfl19+geKRrbifffJ3JnujyWd7s8y5alcpVx3s/t1O5i22Yqjutfg5tI5d7i5\nZdlyG1FXWdx6l8yd475zvtMdTA+h56tlqRq3xftRn1Y12W0xpd143zVqn5tL59zp5pbpx5QG11fs\n2rUreix9pztn+8NR0jUJ2ywhb0e1fm3XufRR9zr35MmTLYQSAQQQQAABBBBAAIH2Euh7Vj7/l1fJ\nOreqKz7wf+XE3T+SD119c8IaXyx/9FeXyXFz4kRz/6Z75C8++uU47vlvl09c+Twv4Ts4fOPdX5SP\nfvmBqOFlf/C3cumJM0ud++Te//4v+cItcd/gCFdb9Wr5wO+cILd96Cq5x+32vu5/ywfOX+aF7JNf\n3HajfPYm7U3YTnHjr7xQeoNM+qa7Py9/9zV3pqsukz+7UOSqT35t2OBTXv0H8vYLT5QdD94mf/Wp\nm4b1i7xY3vO3l8uxM8OUeL88ddd35arrbkkY40Zd9kdyyXnHVUzuDw7sk7s/+xfyZb0o8nz5wCeu\nlN4hh9stt/3FX0p8pFXyZ//wx3L0kHM9ID/657+Umzbq+JfJhz55qcxztWfXfjY+fwnGeO+By97z\nv2XSPV+U6+6MBusE5a33xVfI71/+YpkzZC1x94GNv5DrPvpZSbia8ro/+pCcNNH9Plja4t+5bE/L\nynai1/O33fUsf06hOT7+iqgjgAACCCCAAAIIIIAAAi0WcIkvy4oNydzpMrL2hbFJ+2lt2h5u/nH9\nvrR2i6nWX2ucxbddORYS9FlQ9YJW2tL6a233jxGO9ff9uo7x9/16pT6Na/wO+l8+7JLA7q8VmtC2\nZH8pua0HL/8nHe0EPzTOVmv1aI6OaM6im1te9/pgUG27hR0PyNQp7i9G0foGx0aHsTZbt3WX9+PF\nRUvz1+nidM7tbu7OY66wUXWVe/fudTcHTa841pLvfpC2hUl6v18T8zr3okWL/GbqCCCAAAIIIIAA\nAgi0j0BHp1jK/Eff+ox8+cEoK5ywvjvlkx96Ut754T+TNS5J3734BLnARd2qkffcL89efqosG5Ik\n1o7d8vCPLGV7ppx5jHtKV/TvfJdg/uT/kW+mHWrdzfLRDw1+SGBud3zXtc4ockDuvuYDct298V7i\nzwfc+Pcdlg//82tkjhfQ2V0603Vfk6tSjv3AzVfLv6xfI+sefNAb6VfvlI//fzPlb/75wrKbuxVf\nfnHjP8nnbh+e1LaRd37tk3Lnpivl7684M0OSvkeOfsGZIuv0JO+RDVuukMULB+/AL+x4upSc19nX\nybpn9spRx7oPbNvWt1meKC2l97wTZLYz19+nyucvk6RT27RRN+898LWP/13clvBz451flg/19chV\nV5455GkK+566Qz74j8M/7GBT3PTJv5LBjzqEd9D3yb1f/ie5Zm26nej1fGC9/MlH3i7HTtNPBzTH\nx9ZLiQACCCCAAAIIIIAAAgi0UCDKE5aOF2TBMifmK43TqbXffgMsHWpYkRZTa7tNnDbO+sdEOdoT\n9HqRmrWlzR22h/u6Hr/Nr4d94X6lWL/Pr+scdW/FrVsHv3s+msX778yrDv4FpnSo0iPZo/8sy6vR\nAaWdCe5RhG7ucledKywe2CQy03ub2pq0tHqluS1GF6J1W9CEbonmrjQ2Q9+hQ4dkzpw50R8L0xLx\nadMkJeltjgnOT+dmQwABBBBAAAEEEEBgNAhsLCXnz77sXfKqs44Xfdr77o0Py00f+7TE+fCN8unr\n1srH/uhcmeJS32e88Uy59XrtuVcefvp1suw4S/XHZ1vY8aR80/Ku550mS0oJ/M133zQkOX/R294r\nLz15uUzpGpBt6++Xr//jNZKWHu/b+HMvOb9G3vbeS+TE5XNkYueAW+tj8p2P/ZusjQ5/q9z5yxfL\na070U/RDr8LZb3y3XPyCle5cDsiv135L/u1r8UhLzq+56G1y2ctOFn1owObHfir/+S/XS3w635aH\nNr5MXly6RX/3L2/xkvO9ctm7rpSzVi6SCV39svWxu9y4r8Xj1l4jt5y+Sl4TOA1dVbw3/+iTXCVW\nf+yZHXLmwoXlsB3rh3664N51G+X8Y48r9x/Y9HTZ7+TVvYlPNigHJ1bWyJXO9dTl86RrYJ88+bNb\n5BPX3R5H3nuNPHzRqfK8eaUPDBS2ybf85PyqC+RPfutlslzfPP275f7v/5dcc+vQ9fqHVDs/OX/B\nle+VV5zq3gtu+t0bfy3fucZdzwj9QfnEf/7Evfde7K6XyMj6+GdAHQEEEEAAAQQQQAABBBDIRcAy\nYDpZWr3WPo0PM2zapptl2qzf2vz9KLAUm9Ru/Y2U/rk2Ms+IjPUynyNy/FYc1N4oaceq1u+PC2PD\nfY312/x62Bfu+7F+PS1OYxq+g97dpi0ybaoeI9/Nfe+fzm0J57on798jHe57HlO38q0bCRHaZx8k\nCLo7utzdE27uRtc3MOC+sVLPtbRVms/60u6c137r0zl1bhtj81MigAACCCCAAAIIINA2Avrvbfey\n37TPe9tfyKXPi5PB2jVj8Wp589+9T3r+19/LnbroR78qD2x4obzQJacXnnyaLC7eEyWfb/7ZE3LB\nqqGPud/0yAPlfwtfduYK/cXHHWeH3P3Fe8rHu+y9H5Fzj47v/i5Kt8w96gx5x0dnyWfe/4nBx6Xr\nOF2M2zomzJbzzz3XPRRd5KjnXyinLtN0rZ5Ct1vrCfKG//NWufOvPxe1Pbl5nxRPmB3V4xiNi+c5\n5bL3yhvPPrrUN1VOeOkb5J3bnpRPle6C773gXfKOV54Y9euIBavOlre/9Tn568/dHrX1Hzni5upx\n9X1yzzducfWoWX77/e+JbOK9HjfupfKe93XJ//r766OmW777czlv1bkSn3EclfSze95Rcq6b9HbX\neecjG+XSMxaU7lp3j4N/4Ifl4+nYDTc/Lrteuap8R/+2px4tnecqOW6xPbUgusyl9tjB1hxN5nbi\nU1gl7/qbd0j8TQSupXuqrHjBJfKne7fLP94UPw1hl/uO+OLc+M8Q+9bdI3faRKteJx9+9ysGn1rQ\nPVfOuPjdMmvyZ+QTpbG6Xr0G8ZDdQ+xe9ycfkVeUngSg/Xo93/jeD8qEP/v/Iwd59MvuvXdG5NsM\nH10bGwIIIIAAAggggAACCCDQYoEoT1g6ptZLv10OS9JrSFqftWuMP0e4H/aF/Un72pa2Jc3nx1br\n92NHZX0kEvSK2uiWdY5qcWn9Se1hW7iv55TUZuca9vn7ddftj0R2kFrLRsdXOl40t/3BpVJghb5m\nr6/R+RsdX+HUS3988v+3sVI0fQgggAACCCCAAAIItFhAk6V2yN6L5OWnLoj+DWtNUdmzVC5463ly\n53/eHu3+9NHN8oLFy6RjxjFyzhqRr+jt7nc+IM++zn/M/T555Mf2HfHnyUm9k6N5+7c9HT8WX2c6\n803ywqOmDj/e5BVy8ZVnywPXrI2Op/9et3+zd889QS6+5ISoXX9YuzV0zF0k7uHw0b3nk7xxQ2PX\nyCteeFQwtkNm9/a6sI3RVOecfkzQ7xLG87U/3spr2r1e7omHSO9Ff+hceoaN61l6llx55vVyjd4Q\nv+5R2XropTK19DQBm29Y2TFbTjivV27XDwzc8yvZ/qZTZaE+3b1/izxcYj37gvPkqVtvdyv+hazf\ncYGsnq0BB+TpB0pfK7BqjSyZaslw3yr2LP+a570HVl30KjlhxuAYW9eiE5x5Kcn+6FPb5KVHLXNd\nBVn/0C8sRC69+Kzy4/TLja6y4iW/IWe6sfHzAAaPXdi9oWwnay6XF69IeC90L5CXv/MCuf3Tt0ZT\n2ntPmuDjr5k6AggggAACCCCAAAIIINBiAc0x6q/nlmsM67oci6lUD/t039/8Oaw9bAv3NS6prVJ7\n2tzW7pc6t27lP0/EuzX9zGOOmg6owfpbeCs3O8lWHjPtWGlrSWpPagvnDWP8/bAe7ttctbRrrB9v\nc9RUdsyYIe5W7ZrGZAp2c0ZzZwpOD+romSnFgUKFgAoEKXfP62Q6p87d6Nbd3R3d6W7z2B3wtu+X\n2let3+L17nmdmw0BBBBAAAEEEEAAgdEgsOask8p3YYfrnX3cKbKq1Dip254+NUVOOuu8Uuu98sjT\nu8vDCjsfKz/eftWlp8m80m+thYP7yzFrVixL/T72+SuOl8F0eHmIV+mX3ds2y1OPPyq/fOghue++\nu+XOO+6Q739LE9bVNzuDIZFHBveOJPx+VRAvoBTat2dL+Xgbv/2w3PeL+9xagtcvfi7r/UVl+tWt\nU3pPfl7pKGvl2R36zAD3bffPPVlKdJ8pZ5/3Ejk5at3ovmJgR1STvi3yy3Vxdc1pK6LHwcd72X5O\nmtaTGDhh8syE69EvO7bbia2RFYvjpxkMm2DCIjlJPzURbP17dpTt1qxanvpemLlqtbjPgUTbpPIc\nI+NTPjwVBBBAAAEEEEAAAQQQQCAfAT9P6CfL6qlnGaOr9uPSziIpJqkt63xpx8m7PW2NeR8nmq+V\nGcCWnpg7u0rHq9QXQifFhm2V9sM+f36/z+pWWpy/b3Urh91hYYOylp3z54vsdH+QmWh/TNGpSx80\n8appj4ofqlxelrs7o1863NyF8q0VWVc0NK5jymI31xMiPaXvKbQ12aGqfSZG4yzWSj1E/xHpmLK8\nYb9Jkya5U+2Xnp7Yb9hdOC4pH7bZGSYl6y2Jr3Pq3GljbQ5KBBBAAAEEEEAAAQRGTMD9Wzy6G9wt\noNjdmf5v1+4emVG60/qBx9fLobMXRwnVWStPk9XFH0bfeX7zz5+U81edGn2C3H+8/Tkn9ZbnLbpE\nvf37+MSj55Tr4fl3TJ4e9emvCtHL+51k5xNr5bpPXC+lPHQ4tLwfjnP3bpeOF520q5dDo8pgv+5a\n7GCMxtvarb/Y2e21/VC+ED9df3DQsNoD8tiW/XLUUSnJbC9+xuKjZaU7qJ7nY8/uktPnzpNNv34k\nPt6aFbJw6lxZcf5iKd660T3A4Cm55NS5UtiyQR4ondjqo+d7a4tWXNoPzr90XspRdJ9BGDzHwcV0\nTJ3tvs6gKBs0Rl/RMYrS5cqoumqVzOkp1QeHlWrdsmjFGVK8R++hHzy2/15YdVT6e8F9X5r06HHc\n6AceWC/7X7o0+uBB3j7Dlk0DAggggAACCCCAAAIIINA6Ac1+6a89VuqRw7q2VYrRfn8Lx+tY2/w+\nbQv309psfFgmjbeYSn0Wk2fZsuO1MkGfF5DiNGvLMncYU2nf78u7rvM1/B30heNOkIO33yaTp+v3\nvLsp9S8kOrP9p+bXQ3Xts83qete6+7+DBw9I4YVnJ/6BxoZkKmeeLPt3/1KmTZsch5fWpYexJcYL\ndt3RX3dcqZ26aeFetuu37T/QJ0U3d9IfkKK4jD+mTJnizvWgTJ2qfsmbJt3D4yQl5/3ROqfOHY7z\nY6gjgAACCCCAAAIIIDCiAvbvb11EcSD9366aTS1tvVOnSHcpYSru8fcvPLdXHrzD3Ul95z2y4bWn\nyNKJ++SXP44faC6rLpWV7vvK7d/EcZo1nuiZLXukuHieTTu0PHxEyv8612OV1rl73ffkw//6nSGx\nvS45PHfmTJk+dZZM6X9abltbSt1746IBg798RPOVphyca1i/1+Ci/LXreqKX9xuN9K6Ss11SvNJ2\neK/I4umDHpViZepiWeMeW7DOnc6dv9okbzhlsjx2r36fgPt2gDVHR9dg6XGnirgEvdz7iGz/ndNF\nnn6kNOXZctTC4HH73unE6y+F+hChWSlE3xvlrRzjTbj/gBxy7aXf+MqhVhno77Nq2d733L3ffa99\nMWW0v76ZPYPvvbx9yiukggACCCCAAAIIIIAAAgi0TKCUBYuOp3X9RUtL3cK6tlWL8cf68WE9y77G\nhJsdP2zPY7+Zc+exvmFzjMYE/bCTSGiwN1FCV/nNGfYljQnbatn3Y9Pq/hrSYpLa/TZ/jprrxdNO\nk+03fUOWzpvr/tO0P5y56Tvcf7v2NxM9mtXtCP4KorrXUCjI9t37ROdudCvOfYFsf/JLMm2eW4Bm\n2qNse7w2rZaXpZWor3REXY6Fa1O0rz/cVijK9h3ujzgrXhDvN/BzhvuKgMcee0zmzJnjDj/4CHv7\nI6BNXS0h748tOL9du3bJypUrbTglAggggAACCCCAAAJtLXBo7+HU9RX2bS8/jnzuwlne96x1yorT\nzxK540Y39kF5eMMBWTr3qfLj7c92j81Pu1f8qWe2ipyanKDft+mJhDvk++ThWwaT8+e+6Y/llfoY\n99KDuuLFb5Zdaz9aegx86unk1+Hlrdec85ty+dkL85tbpsmKNe7h7utcUn7tBtl8wUT5pcvF63bi\nitht2pJV7qsHvuOs7pWnN10oXU/ECXw5+3iZb78axkOa8HNAjhwqTbvxMdl54JUyO/Fi98l6PYdw\n8+ye3rTLnVTK15f1HRT78oQ1K3pl8HK3u094wuwjgAACCCCAAAIIIIAAAqkCmvyKsmSlUgOtrVJd\n+2zLEu/H6Lha95PGJB3f2qwMj2Pto7ociwl6vVBpW1pfUnvYVsu+H+vX/XX57dXqSf3a1vAd9LJ0\nmRTOPNM9Rf5xmTB3lk7p/jMu/XccJun91Vs9WllpeZogd//Xv2NPNGfRzR3PZcF1lNOOluL8s6Vv\n189l4pzppQn0eG6N7v+GJOn96XUpGqablqW1ab1vp/vwgJuz6OZudH36GHpN0u/Zs0dmzZrlplM7\nPdzwu+ajjoQffvJe67t3747m5BH3CVg0IYAAAggggAACCLSPgPu3b/yvX5cH/s49svH8Y2RxQmJ3\nwwN3lRP0RXc3vf2bWU9k8tIT5VxX3uFe9z/yuBy/2O7iXilnnDB3SGzP3KPlDBd3n3ttvO1Oefxl\nJ8iKYUndfXLf9wYT8fHd3m6V7vvVH7Hn2q98g7zq+ce4x+zrnexustLWv/mpcnK+PK7UN7jm0t3v\n3jgNGeyP6/5+Wn/P7IWiH8l9zL0e/NlDsvdFC1xaPWFzd5D3FVx75wSZOCEBOGGINs1beYL7qcnt\ndbL2zi2lDy2cL8fYUwkmL5TnrXa9D7nHv991l7uTXkeJnHviMv1Fs3xttW3wfILz9+I0ZjBOR5W2\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Changing Code** I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "...\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Inform the Driving Agent\n", "\n", "### QUESTIONS:\n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States:\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Total number of states**: 4^4 * 2 = 512 states.\n", "\n", "The minimum 'deadline' is `minimum distance` x 5 = 4 x \n", "5 = 20 and the maximum is 12 x 5 = 60. \n", "\n", "If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means **each state will be visited an average of** 20 turns x 100 trials / 512 states i.e. about **4 times**. This is **reasonable but is still quite low**.\n", "\n", "This low number is **why I did not include further state attributes** I considered (see boloew) because that would only reduce the number of visits to each state even further.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States that I considered:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implement a Q-Learning Driving Agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q-learning algorithm** The crux of the Q-learning algorithm is \n", "
\n",
    "new_q = old_q*(1 - self.alpha) + self.alpha*(reward + self.gamma * max_state2_q)\n",
    "
\n", "\n", "in the `learn_q` function in `agent.py`.\n", "\n", "**Choosing actions** The agent chooses the best action to take by choosing the action with the maximum Q-value for the corresponding state. It chooses a random action if there are multiple actions where the resulting Q-value = maxQ.\n", "\n", "**Exploration** The agent also chooses a random action with probability epsilon. This allows it to escape if it 'gets stuck' in some suboptimal local optima.\n", "\n", "**Decaying learning rate (1/t)** The initial learning rate is high at Alpha=1 so the agent learns quickly. As time goes on, the agent becomes more confident with what it's learned and is less persuaded by new information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent is **more likely to take actions corresponding to `next_waypoint`** when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that **maximise total expected reward**.\n", "\n", "The agent is **less likely to take actions tha result in penalties** (crashing into cars, making illegal moves or making moves that are legal but are not equal to `next_waypoint` so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.\n", "\n", "The agent **reaches the destination more frequently**: after implementing Q-learning, it reaches the destination in time over 80% of the time, whereas while it was moving randomly it reached the destination in time less than 10% of the time. The agent does not just move randomly in loops any more. \n", "\n", "As the agent **gains experience**, it is less likely to go around in loops or get penalised for going against traffic rules or crashing into other cars." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notes: Debugging 'Implementing a Q-Learning Driving Agent'\n", "1. I realised the agent wasn't acting because the `count` variable was defined wrongly: \n", " - `count` was used to see there were multiple actions with `q-value = maxQ` for that state. \n", " - If `count` > 1, we would randomly choose one action out of the set of actions where `q-value = maxQ`.\n", " - `count` was wrongly defined as `len([maxq])`, which is always equal to one since it is an array with a float in it.\n", " - It should've been `len([i in q if q[i] == max_q])` instead.\n", " - Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.\n", " - This meant the agent often chose `None`.\n", "2. I'd forgotten to incorporate `next_waypoint` into my state. Pretty silly.\n", "3. I wanted to print results after every turn for debugging purposes and put `self.results` in TrafficLight instead of Environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Improve the Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1 Planning\n", "\n", "**Procedure**:\n", "1. Run each configuration 50 times (50 sets of 100 trials)\n", "2. Write metrics into separate file\n", "3. Convert to summary statistics over 50 sets\n", "4. Observe statistics\n", "4. Alter list of configurations as appropriate and repeat until satisfied\n", "\n", "The **metrics considered** were\n", "- **Total number of successful outcomes** (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates **inefficiency**.\n", " - **Average buffer** (Time left / Initial deadline) -> Indicates how efficient the driving agent was.\n", "\n", "- **Average number of incorrect actions per trial** (penalties of -1.0) because this indicates an action was **unsafe**.\n", "\n", "The parameters considered were\n", "- Exploration rate Epsilon (epsilon)\n", "- Discount rate Gamma (gamma)\n", "- Learning rate Alpha (alpha) \n", "- Default Q value (if one did not exist before (default_q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Optimising\n", "\n", "#### 4.2.1 Optimising for Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.200.50'1.0/t'0.087.780.51791.0810
0.100.50'1.0/t'0.094.200.57090.5732
0.050.50'1.0/t'0.096.500.57090.3664
0.010.50'1.0/t'0.098.360.58290.1926
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.\n", "\n", "**Interpretation** This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.\n", "\n", "**Next actions** For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.\n", "\n", "Once we have chosen our gamma and alpha, we will optimise for epsilon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.2 Optimising for Gamma (and Alpha)\n", "\n", "Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
0.050.75'1.0/t'0.094.020.55730.3822
0.050.99'1.0/t'0.075.300.53990.6030
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations** \n", "* It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower. \n", "* The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5. \n", "* Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.\n", "\n", "**Next actions** This motivates us to try more Gamma values in the range (0,0.5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.3 Pre-emptive checking for robustness\n", "\n", "We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
0.050.75'1.0/(t^0.5)'0.093.760.55390.3888
0.050.99'1.0/(t^0.5)'0.069.600.53120.7028
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** The **trend differences** were that average penalties continued to decrease as Gamma was increased up to 0.50. \n", "\n", "**Decision-making and next actions** The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was **not worthwhile to experiment with increasing Gamma beyond 0.25**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.4 Continue optimising for Gamma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alpha = '1.0/t'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
\n", "\n", "Alpha = '1.0/(t^0.5)'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for **setting Gammma to be around 0.1**.\n", "\n", "For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that **setting Gamma to be around 0.01** would be appropriate because an increase in successes of 0.3 trials (per 100) is more important than decreasing average penalty by 0.008 per trial.\n", "\n", "**Next Actions**: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.\n", "\n", "We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.5 Optimising for Alpha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.01)'0.097.720.57610.3618
0.050.01'1.0/(t^0.25)'0.098.060.57220.3608
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.01'1.0/(t^0.75)'0.097.840.57130.3718
0.050.01'1.0/t' 0.098.000.57050.3694
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.10'1.0/(t^0.001)'0.097.720.57330.3616
0.050.10'1.0/(t^0.01)'0.098.340.57370.3634
0.050.10'1.0/(t^0.25)'0.098.060.57230.3608
0.050.10'1.0/(t^0.5)'0.097.980.56820.3638
0.050.10'1.0/(t^0.75)'0.097.800.57070.3788
0.050.10'1.0/t' 0.098.100.57470.3604
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.20'1.0/(t^0.01)'0.097.800.56530.3730
0.050.20'1.0/(t^0.25)'0.097.600.57240.3606
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.20'1.0/(t^0.75)'0.097.880.56940.3632
0.050.20'1.0/t' 0.097.120.56850.3834
" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAFDCAYAAADS5rEFAAAgAElEQVR4Xu2dB5gUxfa3D0jOOUqQ\nLBhQQVS4iIKAgOSgEhXJyUAUjKggoCTJiAgoICAZBQQVkSiIcEEkCYKI5CRI3O/51f16/7PLzu6c\n6p7d2Z1fPc99vOz2qa56q3f6nVNV3ckiIiKGCwsJkAAJkAAJkAAJhBGBZBERERFh1F92lQRIgARI\ngARIgASEAsSLgARIgARIgARIIOwIUIDCbsjZYRIgARIgARIgAQoQrwESIAESIAESIIGwI0ABCrsh\nZ4dJgARIgARIgAQoQLwGSIAESIAESIAEwo4ABSjshpwdJgESIAESIAESoADxGiABEiABEiABEgg7\nAhSgsBtydpgESIAESIAESIACxGuABEiABEiABEgg7AhQgMJuyNlhEiABEiABEiABChCvARIgARIg\nARIggbAjQAEKuyFnh0mABEiABEiABChAvAZIgARIgARIgATCjgAFKOyGnB0mARIgARIgARKgAPEa\nIAESIAESIAESCDsCFKCwG3J2mARIgARIgARIgALEa4AESIAESIAESCDsCFCAwm7I2WESIAESIAES\nIAEKEK8BEiABEiABEiCBsCNAAQq7IWeHSYAESIAESIAEKEC8BkiABEiABEiABMKOAAUo7IacHSYB\nEiABEiABEqAA8RogARIgARIgARIIOwIUoLAbcnaYBEiABEiABEiAAsRrgARIgARIgARIIOwIUIDC\nbsjZYRIgARIgARIgAQoQrwESIAESIAESIIGwI0ABCrshZ4dJgARIgARIgAQoQLwGSIAESIAESIAE\nwo4ABSjshpwdJgESIAESIAESoADxGiABEiABEiABEgg7AhSgsBtydpgESIAESIAESIACxGuABEiA\nBEiABEgg7AhQgMJuyNlhEiABEiABEiABChCvARIgARIgARIggbAjQAEKuyFnh0mABEiABEiABChA\nvAYSFYHvvvtOvvrqK9m3b59cunRJMmfOLPfcc480bdpUihUr5mlfLl++LG3btpUuXbpIxYoVXddt\nU9/s2bPlhx9+kI8++sj1+bUV3Lx5U1q0aCElSpSQN99885bwzZs3y6uvvipoY7Zs2VTVT548Wdat\nWydTpkxRxYXawQcPHpR27drJmDFjDKfYyj///CNLly414/nXX38J/p0lSxYpUKCAVK5cWerUqRNq\n3WN7SCBJE6AAJenhTTqdi4iIkKFDh8qqVaukevXq8tBDD0mmTJnkxIkT8s0338jWrVulV69eUrVq\nVatOf/LJJ0amGjZsGBl//fp1GTRokDRp0kRKlSplVa9vkE19uFlu27ZNunXr5vr82grWr18vQ4YM\nEYjb559/fovkUIBEAhWgvXv3GonEdQzRgSylSJHCXL8///yzYfvCCy9oh4jHkwAJuCBAAXIBj6Hx\nRwDfnEeMGCEDBgyQRx999JYTI0OCzNCkSZMkX758qoZBTDp06CC1a9eOIkCqSpLgwWCdJ08e+eWX\nX+Sxxx6TZ599NkovKUCBCdCFCxfM9ZU3b14ZOHCgpEuXLgleLewSCSQ+AhSgxDdmYdni559/XnLl\nyiWDBw+Osf9XrlyRZs2aSY0aNaRTp07mGEyznDx50nzjnjBhguzfv18yZMhgBArftlOnTi2HDh2S\n3r17y+nTp6PUO3fuXEmbNq2RIkzzQABQkInB/z979qysXLnS/BeSgCm40qVLm3Pu2LHDfNNH1qhr\n165migPl6tWrt9SH83/88ceya9cuk2lBJuC+++6T7t27mwxB9KkiSAcYIDODuJ07d0ry5MlNRgE3\n2SJFikT249SpU0YIkWE4c+aMaZNTqlSpIv379/d7LSEzgekvnAdtg4BOnz5dkiVLFhkTXYCc/uGc\ny5cvN5k5TFOiTZhKLFu2bGQs+rVx40bT5qlTp8rvv/8uGTNmlPLly5spJWT3nLJ9+3b58ssvZc+e\nPXLu3DnJmTOn1KtXTxo0aBDr38LXX38tK1askD/++MOwL1SokDz33HNy//33R8ZhPB9//HEzHYVj\ncb3kyJHDZBmbN28epb+HDx+W8ePHC9qDawdTrrje3nvvvVinwGbNmiWffvqp4Ye6AymBtt32WnR7\nLSPedlwC6T+PIYH4IEABig/KPIcrApAMTENhLU79+vX91vX666/L8ePHzU3KESCsGbrjjjvMTRWi\n8uuvvxqBuPfee6Vv376CdS6Qp2eeecb8r27duiYW8hOTsOCGiZs1bsBoU6pUqYykLFmyxNzAcUOv\nVKmS/Pvvv/L+++8b8Zg4cWKMAgQhQVYFbWnUqJGp68iRI+Z/kDmnD75rZRzpQJYLPLD+CeI0cuRI\nwTQL1tTg5uzc4NAPTA1CKJYtWyZjx46Vd955x8iIc1xMQHHDxnQj/guRQjtxoy9XrlycAgQxwDhh\n3dS1a9fM9Bn4gIMjg2CG9mTNmlXatGkjBQsWlKNHj5p+3HXXXSbT5xSIJqaaHnnkEdMP/HvmzJlm\nHB944AG/1wNELHv27HL33XfLbbfdZoTxv//9rxERR7Cc8YQEQfggoJhOxXRVx44dI68HMEY7IeGQ\nOYz1Tz/9ZPigj7GtAYIE43zgF2jRtN3mWnSuD9trGfG24xIoAx5HAsEmQAEKNmHW75oAMje4Gb31\n1lvmJuivjB49Wr7//ntB9saRByzQnTFjhuTOnTsybM2aNUYCsO4nf/785ue4Ybdq1SrKFJg/ATp/\n/rzJWjjZEEfQsP4IUuWULVu2mH9/8cUX5kYfvT5kMxo3bixvv/22PPzwwzF2K6YMEDJSL7/8sjz5\n5JORMchy4MaMqcCSJUsaEUQG48MPPzQC4BT8DJLnCFZMJ3UWP9eqVctIAUq/fv0kTZo08sYbb8Qp\nQMiK9OzZM/I4iF779u2laNGikXzQL4wNhKx48eKRx86bN89IxaJFi/yOsyOONWvWlNatWwd8fUEs\nkQHCWjInGwUBgqTinJAkp+D6gPS8++675kcYQxwDmcNaMafgOvjss89iFSCMMQSrc+fOUdp648aN\nKP/2PX/0Tvlru+21iPrRdzfx0dtoOy4BDyAPJAGPCVCAPAbK6rwncODAAZNZsREgTCU4QuS0DNMd\nEB7f9UQaAUIW4LXXXovS0SeeeMJIGjI5TnHEDdNvmAaKSaiwJgSihJskxAHTO77FnwAhm4LMllMu\nXrxopoQcmcLUGqb5kFHB1JxTIHkQJ2S7/JUNGzYIsmnTpk2LbA/EEuIAAYDMofibAsON1cmkOecY\nN26cyZggC4PiZM0WLFgQpRk//vijyb7g5+nTp/fbxh49epgpKM3icKz1Qt8xdth15UgApqV8xQ4/\nh5hhKhPtRsE4QRbAwLdgfRRkL7YMEMYFU2rO1KwTj2vGt0QXdd/f+Wu77bXo9N1NfEyDYzMufgeZ\nvyCBIBOgAAUZMKt3T8DJlGAqAel+fwU3MWQ+nJsWbrK4oSLTE70gewCpctaRaAQIN1580PsW3Myi\nZ2UcAcKUHLIfMQkQvjV/++23snjxYrOex1kDU7hw4UhRiGkKLPrWc0eAIA+YekK9yAhhquyVV14x\nUzZY44IbNfhgyslfgRhifU5MBWuxHHnyJ0C+a6acOiBOc+bMkfnz50f2K6axcQQIx2G9Fsrq1auj\nrOXBmicsLEaGyp8AgTWySZC5Y8eOCbItiEO2J7oAxTSeECDIDeQV5aWXXjIyiL75FkfOYxMgTL9i\nATTk1LdgTRMK1lgh3hEgt20P5Fp0BMj2WrYdF/efBqyBBLwjQAHyjiVrCiIB3MyxhseZkoh+Ktw0\nnEXQyMSgQICwMww3Qt/iCJVtBsj2phGTAPm2C+tccMPFOiVIGzIt/jJAcQkQ6sWamhdffNGsR8J6\nH0gVMkC+U2LROTqLnyGbmErzLcik7d6920wFYfrPnwDFJKqYnsR2ft8MUEzPAYouQJgKg7BBOLG2\nypEijHGZMmX8ChAyNuCIBe44LmXKlGahM0TXRoAgL1jQHX0RPvqENVaxCRBkCplISKDTfl+uDkdH\ngNy2PT4EyHZcgvgRwapJQE2AAqRGxoCEIIAFs8OHDzfTIzE9lBDigCwKFo/i27YjQBAFZwrKaTeO\nww0Z6zecLfOQJ9wcfaeG/K0BCpYAoX1OJsdZ4OtGgLBuBRkQLMaGAARSMO0FacS6FmRMfAsyFlh4\n7bTNnwBhfHwfnIjpm5YtW5p1N3369Ikcm0AECPUga4OpPKdARDBemFbylwFCZu+pp54SZKyc4siK\njQBBXrCbK7rEQFoghLEJEEQUa6CQ3cPOO+zui02A3LY9PgTIdlwCuQZ5DAnEFwEKUHyR5nlcEXAe\nhIjpIqzjwIMQ8W0a25axGwXrS/Bt39mu7ggQshbIHGG66/bbb4+cbkA2Acc7BTcmPJ0XWSEs9nW2\nK8e0Dd4rAYLsQDQqVKhg2ojdaBA9ZAtwU8VTgt0IELawI6ODhcLYYYYbL3ZF+S7i9R0UZ/EzxAI7\nnmIqWMcCaYRE+BMgnAc3cYwFpp7QR4xP9F1ggQgQhAxTZ5h6wjoqjBGkA1vSMYb+BAjTfsj0YX0O\ndmBB3iCE2PWEBd2+a4ACmQLDWIEj1l1hITWuPUyRYbs/6o7rSdBYeA9xBDtM3aEvyMqhXkw3Lly4\nMHIKzG3b40OAbMfF1YcAg0nAYwIUII+BsrrgEoAAQRLwKgxM7TivwkBGAOtsfAvkAc8qwQ0Ba0pw\n88RaGDwDB1NqvtvA//zzT/nggw/MzQxbxzFtgbqDKUBoP86Jxba4WWPRL3ZEYZrqzjvvjDFT4u/h\ng9HXACEYmRxkzXyf/4OfQx4hetG3wTuLn7FN3HfXnC9TbGfHzR7b0LHt3vdVGE7GDNNV2EqO5w9B\n6jAuMT0HKBABQjzOh2OR+cE2eggImIGfPwFC1gVZPqyvgdhhGgzZK2TD8MwmrQCBAdb7QOKwlR47\ntiCu2NmFnXXgHNerMLBTD0IOLhB3jAseiggxx9Z/7LjDv922PT4EyHZcgvvpwNpJQEeAAqTjxaMT\nEQEIEF7n4Kw7SURNd91UTO9hPQ0yW3gAINbs4Hk1WJiNaShMDcW2oNymAY4A+Xtat02djCEBEiCB\nYBGgAAWLLOtNcAJJ5YWbNiCx5gZrYJDtiF6QacA0IjIXXpa4Fnl7eS7WRQIkQAJuCVCA3BJkfMgS\nCGcBwm45TLlg+zamjbAQGVMreL4Oprqws0r7zrS4BpoCFBch/p4ESCCUCFCAQmk02BZPCYSzAGG9\nDBaqYu0MXmWB9SZ4jg1eu4H1Us4TsL0ETgHykibrIgESCDYBClCwCbN+EiABEiABEiCBkCNAAQq5\nIWGDSIAESIAESIAEgk2AAhRswqyfBEiABEiABEgg5AhQgEJuSNggEiABEiABEiCBYBOgAAWbMOsn\nARIgARIgARIIOQIUoJAbEjaIBEiABEiABEgg2AQoQMEmzPpJgARIgARIgARCjgAFKOSGhA0iARIg\nARIgARIINgEKULAJs34SIAESIAESIIGQI0ABCrkhYYNIgARIgARIgASCTYACFGzCrJ8ESIAESIAE\nSCDkCFCAQm5I2CASIAESIAESIIFgE6AABZsw6ycBEiABEiABEgg5AhSgkBsSNogESIAESIAESCDY\nBChAwSbM+kmABEiABEiABEKOAAUo5IaEDSIBEiABEiABEgg2AQpQsAmzfhIgARIgARIggZAjQAEK\nuSFhg0iABEiABEiABIJNgAIUbMKsnwRIgARIgARIIOQIUIBCbkjYIBIgARIgARIggWAToAAFmzDr\nJwESIAESIAESCDkCFKCQGxI2iARIgARIgARIINgEKEDBJsz6SYAESIAESIAEQo4ABSjkhoQNIgES\nIAESIAESCDYBClCwCbN+EiABEiABEiCBkCNAAQq5IWGDSIAESIAESIAEgk2AAhRswqyfBEiABEiA\nBEgg5AhQgEJuSNggEiABEiABEiCBYBOgAAWbMOsnARIgARIgARIIOQIUoJAbEjaIBEiABEiABEgg\n2AQoQMEmzPpJgARIgARIgARCjgAFKOSGhA0iARIgARIgARIINgEKULAJs34SIAESIAESIIGQI0AB\n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\nJB0C/w89EjM+/RL7LQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='img/heatmap-alpha-gamma.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Alpha=0.01 was doing so well I decided to try Alpha=0.001. The heat map is not continuous which seems strange.)\n", "\n", "For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.\n", "* Pick exp=0.25\n", "\n", "For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.\n", "* Pick exp=0.01\n", "\n", "For Gamma=0.2, \n", "* Pick exp=0.75\n", "\n", "**Overall**: pick Gamma=0.1, Alpha=1/(t^0.01)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.6 Optimising Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.000 0.10'1.0/(t^0.01)'0.098.700.58610.1706
0.0000010.10'1.0/(t^0.01)'0.098.900.58850.1728
0.0000050.10'1.0/(t^0.01)'0.098.960.58690.1686
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.001 0.10'1.0/(t^0.01)'0.098.980.59630.1692
0.01 0.10'1.0/(t^0.01)'0.098.660.58840.2058
0.05 0.10'1.0/(t^0.01)'0.098.340.57370.3634
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose epsilon = 0.00001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.7 Optimising default Q-value\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.00001 0.10'1.0/(t^0.01)'0.598.660.58890.1760
0.00001 0.10'1.0/(t^0.01)'1.098.880.58860.1844
0.00001 0.10'1.0/(t^0.01)'2.099.120.59120.1848
0.00001 0.10'1.0/(t^0.01)'2.598.480.58270.1974
\n", "\n", "successes 98.480000\n", " avg_buffer 0.582687\n", " avg_penalties 0.197400\n", "\n", "A default Q-value of 0.0 has the best performance, though a default Q-value of 2.0 interestingly comes very close. For more robust results, I would try smaller increments of Q with larger 100-trial sets.\n", "\n", "It seems that *moderate optimism in the face of uncertainty* is a less optimal assumption here. \n", "\n", "(Note: I only tested different Q-values on this particular set of epsilon, gamma and alpha values. It is possible higher Q-values will work better for other epsilon, gamma and alpha.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "Parameters chosen:\n", "\n", "\n", "\n", "
Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t^0.01)0.0
\n", "\n", "\n", "### Discussion: How well does the final driving agent perform?\n", "\n", "- An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.\n", "- It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)\n", "- It would maxmise net reward and thus likely incur close to zero -1.0 penalties.\n", "\n", "#### Comparing our driving agent to the optimal policy\n", "\n", "\n", "\n", "\n", "
PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
\n", "\n", "* Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.\n", "\n", "* As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.\n", "\n", "* There are still a significant number of penalties occurring (violations of traffic rules or crashing). This is suboptimal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Penalties that occurred in the last 10 trials in a set:**\n", "\n", "Trial 94:\n", "\n", "* next_waypoint: forward\n", "* q: [0.0, 0.0, 0.0, 0.0]\n", "* max_q: 0.0\n", "* action: forward\n", "* LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0\n", "\n", "Trial 99:\n", "* next_waypoint: forward\n", "* q: [0.0, 0.0, 0.0, -0.48971014879346336]\n", "* max_q: 0.0\n", "* action: forward\n", "* LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -1.0\n", "\n", "The penalties occur because the agent has had little (99) or no (94) previous experience in this state. These are usually states where `oncoming`, `right`, or `left` are not blank.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then conclude that **our policy is efficient but not nearly as safe as it could be**.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/README.md ================================================ # Project 4: Reinforcement Learning ## Train a Smartcab How to Drive ### Install This project requires **Python 2.7** with the [pygame](https://www.pygame.org/wiki/GettingStarted ) library installed ### Code Template code is provided in the `smartcab/agent.py` python file. Additional supporting python code can be found in `smartcab/enviroment.py`, `smartcab/planner.py`, and `smartcab/simulator.py`. Supporting images for the graphical user interface can be found in the `images` folder. While some code has already been implemented to get you started, you will need to implement additional functionality for the `LearningAgent` class in `agent.py` when requested to successfully complete the project. ### Run In a terminal or command window, navigate to the top-level project directory `smartcab/` (that contains this README) and run one of the following commands: ```python smartcab/agent.py``` ```python -m smartcab.agent``` This will run the `agent.py` file and execute your agent code. ================================================ FILE: p4-smartcab/old-versions-of-reports/.ipynb_checkpoints/Smartcab Report-Copy1-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline\n", "You will \n", "1. first investigate the environment the agent operates in by constructing a very basic driving implementation. Once your agent is successful at operating within the environment, you will then \n", "2. identify each possible state the agent can be in when considering such things as traffic lights and oncoming traffic at each intersection. With states identified, you will then \n", "3. implement a Q-Learning algorithm for the self-driving agent to guide the agent towards its destination within the allotted time. Finally, you will \n", "4. improve upon the Q-Learning algorithm to find the best configuration of learning and exploration factors to ensure the self-driving agent is reaching its destinations with consistently positive results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definitions\n", "### Environment\n", "The smartcab operates in an ideal, grid-like city (similar to New York City), with roads going in the North-South and East-West directions. Other vehicles will certainly be present on the road, but there will be no pedestrians to be concerned with. At each intersection there is a traffic light that either allows traffic in the North-South direction or the East-West direction. U.S. Right-of-Way rules apply:\n", "\n", "On a green light, a left turn is permitted if there is no oncoming traffic making a right turn or coming straight through the intersection.\n", "On a red light, a right turn is permitted if no oncoming traffic is approaching from your left through the intersection. To understand how to correctly yield to oncoming traffic when turning left, you may refer to this official drivers’ education video, or this passionate exposition.\n", "\n", "### Inputs and Outputs\n", "Assume that the smartcab is assigned a route plan based on the passengers’ starting location and destination. The route is split at each intersection into waypoints, and you may assume that the smartcab, at any instant, is at some intersection in the world. Therefore, the next waypoint to the destination, assuming the destination has not already been reached, is one intersection away in one direction (North, South, East, or West). \n", "The smartcab has only an egocentric view of the intersection it is at: **It can determine** (sensor) \n", "- the state of the traffic light for its direction of movement, and \n", "- whether there is a vehicle at the intersection for each of the oncoming directions. \n", "For each **action**, the smartcab may either \n", "- idle at the intersection, or \n", "- drive to the next intersection to the left, right, or ahead of it. \n", "Finally, each trip has a **time to reach the destination** which decreases for each action taken (the passengers want to get there quickly). \n", "- If the allotted time becomes zero before reaching the destination, the trip has failed.\n", "\n", "### Rewards and Goal\n", "**Rewards**\n", "The smartcab receives \n", "- a reward for each successfully completed trip, and also receives \n", "- a smaller reward for each action it executes successfully that obeys traffic rules. \n", "\n", "**Penalties**\n", "The smartcab receives \n", "- a small penalty for any incorrect action, and \n", "- a larger penalty for any action that violates traffic rules or causes an accident with another vehicle. \n", "\n", "Based on the rewards and penalties the smartcab receives, the self-driving agent implementation should learn an optimal policy for driving on the city roads while obeying traffic rules, avoiding accidents, and reaching passengers’ destinations in the allotted time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tasks\n", "### 1. Implement a Basic Driving Agent\n", "To begin, your only task is to **get the smartcab to move around in the environment**. At this point, you will not be concerned with any sort of optimal driving policy. Note that the driving agent is given the following information at each intersection:\n", "\n", "- The next waypoint location relative to its current location and heading.\n", "- The state of the traffic light at the intersection and the presence of oncoming vehicles from other directions.\n", "- The current time left from the allotted deadline.\n", "\n", "To complete this task, simply \n", "- have your driving agent choose a random action from the set of possible actions (None, 'forward', 'left', 'right') at each intersection, disregarding the input information above. \n", "- Set the simulation deadline enforcement, enforce_deadline to False and observe how it performs.\n", "\n", "**QUESTION**: \n", "- Observe what you see with the agent's behavior as it takes random actions. \n", "- Does the smartcab eventually make it to the destination? \n", "- Are there any other interesting observations to note?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Answer\n", "\n", "The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\nzUvs1flZ55b2q13Q10sF6K5Lz1rvzFq9/qg/y/dY3qfv3/PVr6fyie+1e7WVyzOuN8Yz/sw27zXb\nc8yN45qzGsv6VV9Pt/+I/P47NUd1v2fMe32deYUoAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\n6p3KUd0svxIba/r4TH9Wm9g72pU1V2rqF1h1qc242jw9V7GM0x7Fen7s1/jo6fsc1R7l71zraK/l\n/Ff7n7jvB9+7WE3drOZqrM+72p/NS+yuNu9e7daavWbsb80Z4+O8u8dH/yCO8jnPUV3lj2pqrdSl\nzfpaAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBawK5d0l7tMpKXdXMnjE+jmtOj/X+Xq7XpZ+2\nz0tsbFdqas44b2W8UjPbv2L1rM7/qP74O3N6bLU/zh3Hq+tU3Stzz+xze+13vKAvpFw2d7Cj2Jjv\n4zP91I5tP9eYuzq+smY32evnTHs1d+ZW/hFt1VR8K5czpuaobla/OidztQQIECBAgAABAgQIECBA\ngAABAgQIECBAgACBnyjQ72NW71f6nD2z1M1qZnuNsTPjXjvr78VWcql5pX1lbhluzd/zzZw+f7U/\nrtvXSm41lvpHti7o//7Z+qV071dVH6ef9ig/q0vs1fbvb/Ax2lpzVnsUy1pHdSv52T+qvXmz+lks\na+zlUlNt1a3WZl7mzNrUaAkQIECAAAECBAgQIECAAAECBAgQIECAAAEC311gdleS2Jl3PzOnaree\nWW4l1mt6v/bp41n/bCz1R23fu9f2/lbNHfG9NSo3e3K2yvX+WLuXG2u/9fjOy9cR6tW1V+bv1cxy\nK7Fec0c/a4xteY2xPz1eOVOv6f2cvcfG/jjucypXz2psq/bXIhvrJDdrZ/vO6sQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSuCZy9pN2r38rN4kexMd/Hs/4sViKJb7UrNVtz3xVfOVOvebU/zq9x\nPXm/j9HH37NY8nu5MzWpnbUre8zm7ca+8n9BXwdfuTTdqpnFZ7Fxn7Gmj8/0Z7WJpe17J/autvY6\nesa9j+pfzb/6o96bX7m9/Hj21Kcd88YECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLnBHLvknZ1\n9lF95beeWW6MnRn32vTT1hlm/b1YclttX3Or5q743l6Vy5P9any2nzXS9vmJnW1X1lipObvvLfVf\n/YK+XjKXxlsvvJef5VZivab3x/P03KyfWNo+P7G0e7nUjO2WySw+zh3HszmzWObNcnfEZv9YZrHV\nvWrulfmZl3Z1P3UECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgZ8qkHuVtGcdVudV3eyZxVdiY00f\nz/o9VufIeGxnuVlsnLc6vrJWzckz7pN4tbNcYj0/9mvcnz6nx3t/VjOL9Tl7/Vfm7q17S+47XNAX\nxNal8Wp8Vtdjvd/3W4mnJu3W/ORX29k6R3NrztaTuT0/i53JV+2VfwCzObPYmfVrfv7UvLNP5o7t\n2XXUEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLjDel2R85b0yt9qVZ6tuFp/Fao8x3se9P9b2\n3Kx/Npb6tH2/xI7au+bM1qlYnpwj47RjvI97P/Vju1LT55yt73O/RP+dF/T1gkcXvCsIK2vs1cxy\nK7Gxpo+v9mfzEkvb3RJL270SO2r35vRc+lkv42pnsZ5/pX/mH9FWbcW3crOznamdze+x7L3X9np9\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBXFti780jurvPXeqvP3t5b68ziR7Ex38dn+rPaxNLW\nu6c/tnu5sTbjvTmVy5P6tBVPP22PZV7aXpPYXn1qtuYln3a1LvXvaN92hndevAbi1T1W5u/VbOVm\n8THWx71f79bHR/0r+cxJ2/dMbGxfrenzez/79Nhqf6+ucvX09T8iH3/P4rPY0ZyeH/tH6431xgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAq8JnL38PKqf5WexOvUs3mO9P9b33FF/NT+rS2xs+3nG\nXMZ7NbNcj/X+bL2eH/vjuM8fczWuZ6z5iG7H9+Zk7mpNrx/7W+ca6y6N3/1f0PdDvXoRujJ/q+ZM\nfKzt496vd+vjo/5qfla3F1vJ7dX0b9T7fU7iPdb7ya+0r/6gj+ZX/qimn/NsfZ+rT4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgsC5w9l5mpX7rXmg1PtbtjVdyvSb9tCU16+/Fkkvb10gs7SxXsTyp\nS1vxWX8W26od1x7rZuOt2JV4zcnTz53YmfbV+Ut7uaD/90zjxfPeeCXXa476s/xebDWXt+z1s9gs\nn7rv3tY/uP7nu7+v9yNAgAABAgQIECBAgAABAgQIECBAgAABAgQIvFug371cufxcmbNVsxof6/bG\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instancens of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS (Implement a Driving Agent)\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "...\n", "LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "LearningAgent.update(): deadline = -2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0\n", "LearningAgent.update(): deadline = -3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -98, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Inform the Driving Agent\n", "Now that your driving agent is capable of moving around in the environment, your next task is to **identify a set of states that are appropriate for modeling the smartcab and environment**. \n", "- The main source of state variables are the current inputs at the intersection, but not all may require representation. \n", "- You may choose to explicitly define states, or use some combination of inputs as an implicit state. \n", "- At each time step, process the inputs and update the agent's current state using the self.state variable. \n", "- Continue with the simulation deadline enforcement enforce_deadline being set to False, and observe how your driving agent now reports the change in state as the simulation progresses.\n", "\n", "**QUESTION**: \n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?\n", "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Answers (Inform the Driving Agent)\n", "\n", "States (v1):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
Deadlinedeadline
    \n", "
  • Initial deadline = self.compute_dist(start, destination) * 5.
  • \n", "`compute_dist` is at most 12 (between points (1,1) and (8,6)).\n", "So max init deadline is 60.
  • \n", "-> Possible values include all positive integers in range [1,60] and integers < -1 which we will put into one group (past deadline)
61
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States (v2):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinatesSome notion of proximity? Nothing for now.1
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Add why each state is appropriate for the problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Total number of states: 16" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "- note that grid overflows along top, bottom, right and left sides\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**TODO**:\n", "1. Find out what inputs['right'] and inputs['left'] mean\n", "2. Print coordinates of primary agent for each turn\n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question: If the destination is in the bottom right and the car starts on the top left, can the car plan a route that goes THROUGH the top and left of the grid?\n", "- this initialisation is possible. `compute_dist` is required to be > 4 where \n", "
\n",
    "    def compute_dist(self, a, b):\n",
    "        \"\"\"L1 distance between two points.\"\"\"\n",
    "        return abs(b[0] - a[0]) + abs(b[1] - a[1])\n",
    "    
\n", " The two coordinates in question are (1,1) and (8,6), so `compute_dist` would return 7 + 6 = 12 > 5.\n", "\n", "QUESTION: How do the route_planner actions interact with the actions I set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the `simulator.py` and `environment.py` files.\n", "- Discovered pressing spacebar to pause." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unresolved\n", "- What do the 'left' and 'right' inputs mean?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Implement a Q-Learning Driving Agent\n", "With your driving agent being capable of interpreting the input information and having a mapping of environmental states, your next task is to **implement the Q-Learning algorithm** for your driving agent to choose the best action at each time step, based on the Q-values for the current state and action. \n", "- Each action taken by the smartcab will produce a reward which depends on the state of the environment. \n", "- The Q-Learning driving agent will need to consider these rewards when updating the Q-values. \n", "- Once implemented, set the simulation deadline enforcement enforce_deadline to True. \n", "- Run the simulation and observe how the smartcab moves about the environment in each trial.\n", "\n", "The formulas for updating Q-values can be found in [this video](https://classroom.udacity.com/nanodegrees/nd009/parts/0091345409/modules/e64f9a65-fdb5-4e60-81a9-72813beebb7e/lessons/5446820041/concepts/6348990570923).\n", "\n", "**QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Debugging\n", "\n", "I realised the agent wasn't acting. Printed more info." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None\n", "LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 'count' variable was defined wrongly:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "def choose_action(self, state):\n", " \"\"\"User-created function\"\"\"\n", " # Get all the Q-values corresponding to the current state\n", " q = [self.get_q(state, a) for a in self.actions]\n", " print \"q: \", q\n", " # Find the max Q-value for this state\n", " max_q = max(q)\n", " print \"max_q: \", max_q\n", " # Find the action corresponding to the max Q-value for this state\n", " count = len([max_q])\n", " print \"count: \", count\n", " # If there are multiple actions with Q-value = max Q-value for this state\n", " if count > 1:\n", " best = [i for i in range(len(self.env.valid_actions)) if q[i] == max_q]\n", " print \"best: \", best\n", " # Pick among the 'best' actions randomly\n", " i = random.choice(best)\n", " # Else if there is only one 'best' action,\n", " else:\n", " # Pick the action corresponding to the max Q-value \n", " i = q.index(max_q)\n", " print \"action index: \", i" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maybe I should have incorporated `next_waypoint` into my state:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "next_waypoint: forward\n", "random\n", "action: forward\n", "LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "\n", "next_waypoint: forward\n", "q: [0.0, -0.2559177346466295, -0.3, 1.3819213571826228]\n", "max_q: 1.38192135718\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5\n", "\n", "next_waypoint: left\n", "q: [0.0, -0.2559177346466295, -0.3, 1.0246331536052293]\n", "max_q: 1.02463315361\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "AAAAH it's working!\n", "\n", "AND now env is also printing results! Previously I put `self.results` in TrafficLight instead of in Environment. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Improve the Q-Learning Driving Agent\n", "Your final task for this project is to enhance your driving agent so that, after sufficient training, the smartcab is **able to reach the destination within the allotted time safely and efficiently**. \n", "- Parameters in the Q-Learning algorithm, such as the learning rate (alpha), the discount factor (gamma) and the exploration rate (epsilon) all contribute to the driving agent’s ability to learn the best action for each state. \n", "\n", "To improve on the success of your smartcab:\n", "\n", "- Set the number of trials, n_trials, in the simulation to 100.\n", "- Run the simulation with the deadline enforcement enforce_deadline set to True (you will need to reduce the update delay update_delay and set the display to False).\n", "- Observe the driving agent’s learning and smartcab’s success rate, particularly during the later trials.\n", "- Adjust one or several of the above parameters and iterate this process.\n", "\n", "This task is complete once you have **arrived at what you determine is the best combination of parameters required** for your driving agent to learn successfully.\n", "\n", "**QUESTION**: \n", "- Report the different values for the parameters tuned in your basic implementation of Q-Learning. For which set of parameters does the agent perform best? How well does the final driving agent perform?\n", "\n", "**QUESTION**: \n", "- Does your agent get close to finding an optimal policy, i.e. reach the destination in the minimum possible time, and not incur any penalties? How would you describe an optimal policy for this problem?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import plotly.plotly as py\n", "py.sign_in('jessicayung', 'l53zmz8hg6')\n", "import plotly.graph_objs as go\n", "\n", "data = [\n", " go.Heatmap(\n", " z=[[97.72, 98.06, 98.06, 97.84, 98.00], [98.34, 98.06, 97.98, 97.80, 98.10], \n", " [97.80, 97.60, 97.76, 97.88, 97.12]],\n", " x=['1.0/(t^0.01)', '1.0/(t^0.25)', '1.0/(t^0.5)', '1.0/(t^0.75)', '1.0/t'],\n", " y=['0.01', '0.10', '0.20']\n", " )\n", "]\n", "py.iplot(data)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/old-versions-of-reports/Smartcab Report-Copy1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Outline\n", "You will \n", "1. first investigate the environment the agent operates in by constructing a very basic driving implementation. Once your agent is successful at operating within the environment, you will then \n", "2. identify each possible state the agent can be in when considering such things as traffic lights and oncoming traffic at each intersection. With states identified, you will then \n", "3. implement a Q-Learning algorithm for the self-driving agent to guide the agent towards its destination within the allotted time. Finally, you will \n", "4. improve upon the Q-Learning algorithm to find the best configuration of learning and exploration factors to ensure the self-driving agent is reaching its destinations with consistently positive results." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definitions\n", "### Environment\n", "The smartcab operates in an ideal, grid-like city (similar to New York City), with roads going in the North-South and East-West directions. Other vehicles will certainly be present on the road, but there will be no pedestrians to be concerned with. At each intersection there is a traffic light that either allows traffic in the North-South direction or the East-West direction. U.S. Right-of-Way rules apply:\n", "\n", "On a green light, a left turn is permitted if there is no oncoming traffic making a right turn or coming straight through the intersection.\n", "On a red light, a right turn is permitted if no oncoming traffic is approaching from your left through the intersection. To understand how to correctly yield to oncoming traffic when turning left, you may refer to this official drivers’ education video, or this passionate exposition.\n", "\n", "### Inputs and Outputs\n", "Assume that the smartcab is assigned a route plan based on the passengers’ starting location and destination. The route is split at each intersection into waypoints, and you may assume that the smartcab, at any instant, is at some intersection in the world. Therefore, the next waypoint to the destination, assuming the destination has not already been reached, is one intersection away in one direction (North, South, East, or West). \n", "The smartcab has only an egocentric view of the intersection it is at: **It can determine** (sensor) \n", "- the state of the traffic light for its direction of movement, and \n", "- whether there is a vehicle at the intersection for each of the oncoming directions. \n", "For each **action**, the smartcab may either \n", "- idle at the intersection, or \n", "- drive to the next intersection to the left, right, or ahead of it. \n", "Finally, each trip has a **time to reach the destination** which decreases for each action taken (the passengers want to get there quickly). \n", "- If the allotted time becomes zero before reaching the destination, the trip has failed.\n", "\n", "### Rewards and Goal\n", "**Rewards**\n", "The smartcab receives \n", "- a reward for each successfully completed trip, and also receives \n", "- a smaller reward for each action it executes successfully that obeys traffic rules. \n", "\n", "**Penalties**\n", "The smartcab receives \n", "- a small penalty for any incorrect action, and \n", "- a larger penalty for any action that violates traffic rules or causes an accident with another vehicle. \n", "\n", "Based on the rewards and penalties the smartcab receives, the self-driving agent implementation should learn an optimal policy for driving on the city roads while obeying traffic rules, avoiding accidents, and reaching passengers’ destinations in the allotted time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Tasks\n", "### 1. Implement a Basic Driving Agent\n", "To begin, your only task is to **get the smartcab to move around in the environment**. At this point, you will not be concerned with any sort of optimal driving policy. Note that the driving agent is given the following information at each intersection:\n", "\n", "- The next waypoint location relative to its current location and heading.\n", "- The state of the traffic light at the intersection and the presence of oncoming vehicles from other directions.\n", "- The current time left from the allotted deadline.\n", "\n", "To complete this task, simply \n", "- have your driving agent choose a random action from the set of possible actions (None, 'forward', 'left', 'right') at each intersection, disregarding the input information above. \n", "- Set the simulation deadline enforcement, enforce_deadline to False and observe how it performs.\n", "\n", "**QUESTION**: \n", "- Observe what you see with the agent's behavior as it takes random actions. \n", "- Does the smartcab eventually make it to the destination? \n", "- Are there any other interesting observations to note?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Answer\n", "\n", "The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\nAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAATGlAAC/ZheeJoNAQhAAAIQgAAE\nIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAKjJYBAP1relAYBCEAAAhCAAAQgAAEIQAACEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAmNKAIF+TC88zYYABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCAAgdESQKAfLW9KgwAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACB\nMSWAQD+mF55mQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAaAkg0I+WN6VB\nAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMCYEkCgH9MLT7MhAAEIQAACEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGC0BBDoR8ub0iAAAQhAAAIQgAAEIAABCEAAAhCA\nAAQgAAEIQAACEIAABCAAAQhAYEwJINCP6YWn2RCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgMFoCCPSj5U1pEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAw\npgQQ6Mf0wtNsCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYLQEE+tHypjQI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBhTAgj0Y3rhaTYEIAABCEAAAhCA\nAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCIyWAAL9aHlTGgQgAAEIQAACEIAABCAAAQhAAAIQ\ngAAEIAABCEAAAhCAAAQgAAEIjCkBBPoxvfA0GwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAA\nAQhAAAIQgAAERksAgX60vCkNAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAATG\nlAAC/ZheeJoNAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAKjJYBAP1relAYB\nCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAmNKAIF+TC88zYYABCAAAQhAAAIQ\ngAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgdESQKAfLW9KgwAEIAABCEAAAhCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIACBMSWAQD+mF55mQwACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg\nAAEIQAACEIDAaAkg0I+WN6VBAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgMCY\nEkCgH9MLT7MhAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQGC0BBDoR8ub0iAA\nAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYEwJINCP6YWn2RCAAAQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMFoCCPSj5U1pEIAABCAAAQhAAAIQgAAEIAABCEAA\nAhCAAAQgAAEIQAACEIAABCAwpgQQ6Mf0wtNsCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE\nIAABCEAAAhAYLQEE+tHypjQIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEBhT\nAgj0Y3rhaTYEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCIyWAAL9aHlTGgQg\nAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIjCkBBPoxvfA0GwIQgAAEIAABCEAA\nAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAERksAgX60vCkNAhCAAAQgAAEIQAACEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAATGlAAC/ZheeJoNAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA\nBCAAAQhAAAKjJYBAP1relAYBCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAmNK\nAIF+TC88zYYABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAgdESQKAfLW9KgwAE\nIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIACBMSWAQD+mF55mQwACEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIDAaAkg0I+WN6VBAAIQgAAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQgMCYEkCgH9MLT7MhAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCA\nAAQgAAEIQGC0BBDoR8ub0iAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAYEwJ\nINCP6YWn2RCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgMFoCCPSj5U1pEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAwpgQQ6Mf0wtNsCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhAYLQEE+tHypjQIQAACEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhCAAAQgAAEIQAACEBhTAuUxbTfNhgAEjhuBUkTlSiX8b6vgNKG0BAiMFQH6x1hdbhq7QwLt\ndsTtu1G6cSuudHROYesvhys6vnWKHZZLMghAAAIQgAAEIHDcCfD747hfYdr3IgToHy9Cj3MhAAEI\nQAACx4YAAv2xuZQ0BALjTaB8oRKXP3s1orW1QH+5fCmclgCBcSJA/xinq01bd0zgzt1o/9Cn4vw7\n1+NnllrRmj6/5anlqTNxYRsRf8sMOAgBCEAAAhCAAATGhAC/P8bkQtPM5yJA/3gubJwEAQhAAAIQ\nOHYEEOiP3SWlQRAYTwIF3c3Kl7e3oC/Lwr7A5B7j+SEZ41bTP8b44tP0iJ6lfIr7echyPt69HuWb\nt+Ky928nvsvK3tb2z4SSTGAuzOkg9vXPsGEHBCAAAQhAAAJjSYDfH2N52Wn0DgnQP3YIimQQgAAE\nIACBY04Agf6YX2CaBwEIQAACEIAABMaaQM9SPiTEbwgtubi/e3fDri038nzKA0L8pYtR+qlPRygm\nQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhDYjgAC/XaEOA4BCEAAAhCAAAQgcHQIDFrM9yzlY9D6\n3UL73Fy01LI7d25Fy4L9FqHcbMe8RP5nHp5d3rXrmmKldz4W9VtQ5BAEIAABCEAAAhCAAAQgAAEI\nQAACEIAABCDwzDtGkEAAAhCAAAQgAAEIQODIEsgt3XOL+c0s5efnovSZT8etbjs+8dprcf367S2b\nfEUu8H9a89A73hDy8nLLeizqN+BhAwIQgAAEIAABCEAAAhCAAAQgAAEIQAACENhIAIF+Iw+2IAAB\nCEAAAhCAAASOIoHccv4dWbNrbvknFvM9S/nIBfS8bXZJf/VKtJuNuF6UEbyE+i2Dzm/7nEp1Y7J8\nAEBuQZ9b1HeVjLnpN7JiCwIQgAAEIAABCEAAAhCAAAQgAAEIQAACEHjWSydMIAABCEAAAhCAAAQg\ncOQI5JbsFuj755bvWcrH5YE54u2KXsdkOr+zpjqfn/x0lK5c2ZhervPbn/zU0wEBeT1evsLc9BtJ\nsQUBCEAAAhCAAAQgAAEIQAACEIAABCAAAQiIQBkKEIAABCAAAQhAAAIQOLIEcst5u7T3eh5yy/mX\nJKjLUj5s/f4iwYK+RX4J7xuCy3EZtpjvHxjgunjeeyzpN+BiAwIQgAAEIAABCEAAAhCAAAQgAAEI\nQAAC404AgX7cPwG0HwIQgAAEIAABCBxlArnFugTx0o/+SIRczSeLdrXJc8wnQd2W8vsVepb1Icv9\nDeXaJf4P/4gqUcKSfr/Yky8EIAABCEAAAhCAAAQgAAEIQAACEIAABI4gAQT6I3jRqDIEIAABCEAA\nAhAYewJbWc7bWt4W73thOb8d6NyyvqCEtqR3vWxVnwcs6XMSxBCAAAQgAAEIQAACEIAABCAAAQhA\nAAIQgIAIINDzMYAABCAAAQhAAAIQOHoEBi3n1YJksa44WdJbpN9Py/lBYrklvVztb6hHXi8s6QeJ\nsQ0BCEAAAhCAAAQgAAEIQAACEIAABCAAgbEkgEA/lpedRkPg6BNoyyLx1i2JILZMVLhTuhPtea33\nGS0Oa6XTX795PTr6d/HiRRlYbnPCsEzYB4FDToD+ccgvENV7MQK+79++GzE453yea27Rvsmc84P9\n4/p1uabvfZfkWQyL0/eH0vp7Y+j3R16uLem9Ppint5mTfhha9h0iAvvWPw5RG6kKBJ6XAP3jeclx\n3jgQGOwf/D4fh6tOG3dK4Cj1j3q9nppVq9V22jzSQeCFCAz2jz37ff5CteJkCEAAAqMh4FeILxp2\nmsdW6YYdG9zXv73den58N3F/Wq8P295sX55+J3Gxl/dg2mH7B/fl21YUp7V8oNvt/rhiAgTGjoAf\n2F577bVw7FC8Uozqz0yneCsYneudaHxiJS7p3+uvvx5XrsgdMQECx4wA/eOYXVCas5GALdT/5KeS\nAJ4s5XV0g8W6hfkLmnPeIvmQMNg/Bl8IDDkl7cqF+atXr279/dE3gGBDvZRL2la9Sj/16YhNBhBs\nVj77ITAKAvveP0bRCMqAwD4RoH/sE1iyPRYEBvsHv8+PxWWlEXtE4Cj0DwvzjUYj3nzzzdTq973v\nfVGtVgOhfo8+BGSzKYHB/rHnv883LZkDEDgeBAqFwp9VS76mZUWLLEOiq6XTi70+bHuzfVvtz/Pa\nLlaRqcz+dIP7+rfz9eeJ+8/Zan3wmLcdXMfNwlbH+s/Zabr+c56sY0H/BAUrEIDAYSYw+IDmB7hr\n1649EegrUYmr7VejqH9bBefjc5vtZjrf2w658IJF/Vb0OHZYCdA/DuuVoV57SiAXvt/RwKx3s8FZ\n0dI9PJ/vPbdgHxC+t+sfO61j/v3h9P7+2fT7I6+Hh2J6vfc9k+pqq3+Ha6q/H+G3GEiQ0vEHAvtM\nYOT9Y5/bQ/YQ2EsC9I+9pEleoyTQbDaj0+nE+spSyKgjqpMayF4sJqFNL3H3pCrb9Q9+n+8JZjI5\nogQOon+437u/N5utFHc62buuHKHFdvf/crmS4v5bge8Xi8srsbq+HreWltLxSxLrC7pvVCpZ+jyf\nwdjnOrjNDq6D/iuPbL3T8Y+ebron+Xh2DyroZ1IxrReL5ZS2nP+mcyLCsSawXf/YaeOdj9/vOmz5\n+3ynGZIOAhCAwAEQ2Isn853msVW6YccG9/Vvb7eeH99N3J/W68O2N9uXp99JnFvBD6Ydtn9wX76N\nBf0BdBaKPFgC242orFyVQP9PXg3HW4XmNQnz3/tG2JK+30WxLemxqN+KHMcOMwH6x2G+OtRtzwjk\nlvMW6O/Kxb3DnCzlL2u6kh/9kcwifYjgvV3/SPns4s/ggK5Nvz/yAQWu9w+rfnZv31/vl69gSb8L\n7iTdHwIH1j/2pznkCoE9JUD/2FOcZCYCrVYrcbBY7pBvW9ByyPfncS6m58JXStSXLj+e73dskc6f\n3YWHD+KX/sFnkyj2kd/xe+LkmbPx4Q9/eKg1bF5+LrTl+eX55/XpH8y+Xf/g93lOkXgcCYy6f7jf\nv/3227G6uqr4WtgafmllOfX/opRyi+wvv3Q1pqen45VXribL+Py1t/v50vJq/MNf/Gdxe2UlfqnY\njcmJWvzwb/6WuKD0ly5dkKifeSZz2vx+0dJAad+bVlSO72UrOtfbLtuifL3RSdvLy0uKW7G+tpzO\nLZdrEufLcfbcmXQ/mjt/TnFVP+vmkuHMOH5exq3N2/WP3fLY8e/z3WZMeggcEQK6N2NB//RaZQ/V\n2Xb/uvcMbm+2Lzt7ePr8WH88LN/+41uul7c8ykEIQAACB0zAD/iea96jIfst5l+0Ws7XD4V58Lbz\nd+gX7vPjxBA4jAToH4fxqlCnfSNga3lboOdW6LmVRW6xvonl/IF9f+T18pBMr+chb4fr73UCBA6A\nAN8fBwCdIo8MAfrHkblUh76iFqosZuUW7a1Gtl3ys0G3k/Y77nb9PGCLUj0bSAArFatJO0tv+/Sn\n6eOKCwUJ+zpe7qXLhfMnIJxWQt3jRw9j4dH9WLl3Mzr6nfv4/m0V09a+h1GbmHiSPL2mVP3anWaq\nT1fnuiBJcFmaYlafQkmWt1qv6lyPJVhYWIh33nmH3+dPSbIGgURg1N8fbVmv12Zn5SGyHTfX1mJV\n95xbWq9r/5I6a0eLhwNVJJiX1b+ndLy2uhaV1Nczu7FCoRvL2ndjvR53ZTV/f7Iakzp0U/vavhtI\ngC+Xn8oHmUjvAUaZpw6L+xbgV1S+29+QWG+BvqHxSK7fsva1vF/18J2lqPWy7mMN/Q6qFVvRXFuN\nms5vLSxGWfeZsurjOle1XiwWYnJyUre9Qlq0m3CECYy6fxgV73eP8AeGqkNgTAg8/YYdkwbTTAhA\n4GgRsDjvueYtsHh9v0JezrZzC+9XBcgXAs9BIP/c0j+eAx6nHH0C87Ky+Izmcpclemh9MBya/uF6\n/qTqKcv/9ic/lVnSD1aWbQiMmMCh6R8jbjfFQWAnBOgfO6FEmq0IJJFKQtdbb70Vy8vL8dWvfCXW\nV1di4e7N6DbrMdVelnLViObjG9HV1GvdroRxC/OVmSjK/XRl9py2S7EuAast79FrnWJ0Jc6XKxM6\nXo7JmVNJzK9W5XraAprENAvnFvttBb+yshqF+lK8tPKVlP+b/28jurWZ+NqXfjWKFYn/KbEi/5PI\ntn7/3eg2VqO8pAHsEutLPq7y2pUpDTKsRevUS1GenI3LH/y2WJJo9xM/8RNx7969uH379lYYXuhY\n3g/5ff5CGDl5xATyz+1+/z5333vtE38ipk6fjlf/0A9E6ey5WP6m90VHFu+Fj3w0Cr43VLNX/qm7\nSzTvPrgfXQ8a+tKXdF9oSwR3P7dIr3uB4vWr89HR4J/SzEw0dR/563dvJzG9cu3NJ+me4FSmHsrj\ne4nvP75fdO0KX/en4ukzUagonvL9Q4N8egOKQnVKQWXrRiXhf033Hd2b3n4nQq71q7qn1OSe/+VW\nI2Z0zodOn4tTszPx3d/922JaeU1ogJCFesLRJTCq/pGXw/fH0f2sUHMIjBMBBPpxutq0FQJHiMB+\njazcDIHLyy3q/WPKgZGWm9Fi/0EToH8c9BWg/JES8Euc23JpbxfxXrfluV3bvyRh/qqWPbKcV65x\nUS/DHTuopLglizXHW4Vtvz/8Ukpu+P0OK9XZL9Dt6t5tcZt8fIhr/q3K5BgEnpcA3x/PS47zxoEA\n/WMcrvL+tdGW8sm1s77f68uPo1Ffj7X716OueeDbj2XJLoE+FiSAN2VHmgT6esRjP9vYel3rto6v\nzkRXAn2rJRFN26uNbrQk0K/qkcE2paXalB4bykq+nOJ2LZsbuiuFzHKZ/3ck0rdkCVtqSnBXvoVu\nK2r1R9LDtL44recoiWRJsdMZPk8CfTxWvRprEcs3kkCfjlsIK8/oOcXW/BLfGiei9XAu1pfX4s7N\nd+P+g4eqZzb39H5Q3fb5aj8KJU8IPCeBUX9/tCRw315cjJp+R0xrvaLuuqa+3dUAnNqUhGzNN1/U\nHO8O3XYmptuC3QN46vbkIQv6dDQJ3hrmI2G9fKqWYv8WSp435LI+PA+9zvHPGJmz+2+2rrjj0UPe\nlpW7hf5uRedLpK9ZqPd89y7f95uTJxSXdf+S9w4l7So//w5q6XyL+02J+d2WLOeVl+42aZnRvey0\n7mXrsqx/uLiULPCryrN/mg2XTTgaBEbdP/j+OBqfC2oJAQhkBNJ37AvC2GkeW6UbdmxwX//2duv5\n8d3E/Wm9Pmx7s315+p3EfqIZlm7Y/sF9+bafl/TLKj6gH4E/rpgAgWNHIJ+TKB957AesrcJu57jz\nXPTDQj53ESMth9Fh32EhQP84LFeCeoyEwODc8/2W80OE7d32j7wNlyXOf3bqTDh2uCFx/gdXH6Y4\nT7NVvO33h7/HPNAgt6S/o3UPNGAu+q2wcmyPCTxv/3jRamzbP160AM6HwB4QoH/sAcQxzmJdFqBf\n+LVfi6UHd+KNn//fpKo/ivdOrsZUqRNXZjpy19yNWsFCl+xOJTxZTbcVq2NJXVoyF86tTiFurxcl\nTEVcrxflqlr6+YpcRiuFBSrPJz1Zk1amuCoBzPpat5vZ3hRSKmlfcmdvEayuQQFVlfktZyoxWSnG\n7GSlN8+9T5KLai0eWFDoyBe1zi1KDEv1S3XSMQ8a8B4NCmh1i3G/Xo7bS634739B3u0WG/HOI3kB\nkCtr5zEY+H0+SITt40xgt98fL9I/ShqsXJJb+9N/4A9G7aWXYu5PfTJKsqQv1Gqp57bX1jWgphkN\nDQR23G6sq3tLDK9n9wXNg6HO3dEAHvV3i+u2dJeoXpo7b7/10fzCF6KwtByT774TpXojpiXS+9dR\nuSoB3umTUK9+r7ydr8/x+7pHmkLDx86qTkVZu6+dOx/tkyej/r0fj67qWzijOvrc/H7hOnnd1v2+\nD8l6vqC4rHtOUceKGiAwqeU7f/lfxrwGInzij/xAnFQ+hKNHYLf9Y69ayO+PvSJJPoedAHPQ9x5c\nswvV/1Dav+6jg9ub7ctyGp4+P9YfD8u3//iW69lT/JZJOAgBCEBgdARGPbJysGWMtBwkwvZhIkD/\nOExXg7qMjEA+Z3s+93xukW6r9L6w2/7hF039FvNXJMy/rMWxg/++R+v5w7JfoW9lUb/t90deb7+M\n93reLuaiN27CPhPYbf/Y6+ps2z/2ukDyg8AuCNA/dgGLpJsSsGXqogSqpQd3o7NwK0prj2QJWo8J\nGZDOTsmqVLrUpMQtyVvJZEO6dqz7j3ZMlLP9dW8rtBQ3JNTbCXVbglVDFrA+VKpk6ZvNTngee2n+\nKb+C56jXtmT0JNiXdKYFr4YLk4JfLDinTrSlyNuVta3xdfjJAIGaMitq3ufsEUjHk0W+tLeUf1cu\n75uaw1r1b2vAgco6UyvE2kQpbpZVP+XpPrRfge+P/SJLvntBYNTfH3bx7vngSxqsU5Vb+7KWjoR5\nW66rC2dCvAVvLUk892Ag71ewRXu6JciCvqA+O5EL9BbN3YdlkW/L+o7E+dA0GUXlWdQgnaKO2x1+\nsWiPHcrI43Z8A/FG2qF1leM8vb8oQd/npIEAWrcAn/LP7xM+10G/h1J9VE5/0O1O90BN16E82roJ\n3VVdSlr3vPaEo0Vg1P1jkA7fH4NE2IYABA4jgfyd42GsG3WCAATGkEA+V1BuOX9QCPJ6YEl/UFeA\ncocRyD+X9I9hdNg37gR22z8u6C30z/RZzPuheL4nzptlftw2ZQ47tajP68H3R8aNv4eDQP655Pvj\ncFwPanG4CNA/Dtf1OKq1aa6vxVd/5XPR0bzyP3BpLU5In6qUJHCpQWUJ4EnL6ulLlrNXZXz6/72T\neXX72MuyjFfCL95vxsNWJX559UqsdqvRLk9I22rHLc3N7FMvXphP4lxZbuktmFXkLr8kC/npkIAu\nEf5kWfM4K54rLqfjVQla9kL/z+5PSrovxaPWVIrrsrjvyr10beVBTBZa8ZtPNzRIwOJ9KWl6yw25\nyVclVxulVK8LM63QGIN45XQ5Lk4X4vd808m4sdSO+3Kj/2itHcvLyxLzh1vS79X1zPspz1d7RZR8\n9oJA/rkcxfNVLs5fuHAxyufORem9r8gq/Wys/Nq/kWW6Bv/apbxuJGXPQ1+TgH/pglzWl6Sd9248\nHiC0sBC1v/N3oqL4st3aC0Ly6yFBfH11VfeHiIcS/FsnTkTjB34g2rJYt0cOi+yde3dl5S7xfXk1\nifElT9eh88qysvcApaam85BiH4snTkVReTflar+rvJpLFv51r1Ia3wjb8jbitlTUBrvWD9U13SDz\nC2LdX20pnpjRAKVOvFWaiFUdy+6WeSLio0BglP1jKx55Pfj+2IoSxyAAgYMigEB/UOQpFwIQGEog\nH+FoF0gHGfJ62CWS1wkQOAwE8s8l/eMwXA3qcNgIbNc/bBG/lcX8YHv8kJy7u/exnVrU5/Xg+2OQ\nKNsHSSD/XPL9cZBXgbIPKwH6x2G9MkerXl0JSQ3NPR9aZmbbcUKCd5pgWc3wPMs2Gl2zUau2W9qx\nLLXpft1PFzJcbUqskrbmY7YolUF9mlO6qn2amjlmem/uphTb8Y7tTVM6xbakn5QpvWaf7sVyDa39\nsoePdYn8ktPicWciGl0J9G0J/orX7BJfYlmtWYspWciudVSZnpW+tbw16W6eXtq/gl1vecZOQn1d\n9Xfdp+0uX5raRFWeAVqFWPHog9wqVufsR8j7Kc9X+0GXPJ+XQP65HMnzlUfx2Hp+ZjbKs5rXfXJS\n4ras59X/NDwmuZz3eltpih4w407sc+yWXqGo91pFCe01CfFVuY6v6VzfWjra5ykxOssr6d5Rk1t6\np23oeFfu7zsW0CXSO12yineZzlsu7j0/fUcDhroW8TUwwKGjuKv3aBbnu7bs1xzzDoVHj9J9oqLy\n7eq+pDpaoO9Oam56CfKdCbna1/5CLbvDOU1Xixz0p8X3R8LRIjDS/rEFmrwefH9sAYlDEIDAgRHI\nviUPrHgKhgAEIAABCEAAAhCAwP4TyC3ic9HdD8H9FvPb1SA/35YlDju1qM9S8xcCEIAABCAAgWNN\noC2R+9E3IhZuRMxJrPKDRk+3tstmi/NfvN+KVQnaD9u1WJHy/qWFU5LVdOzGSpytteNj89WY1Hm/\npXMzWbX6POverYvZ00exuJAMTS3mW3JLbul7sSINJtQgAZ30Vc0N/6hdjS+Vv0mWpxPJHbZPbMtt\nvsuzY2m7wF+undG2rO4nvqpU9WioGJd3ylNSayDAKyczy/8bi4WwOP9rtzQ/tZq2uKaSmqV4z7nJ\nOKGGrUjsq2v+6BYD230ZCBDYewISqiszJzT3vCzbv/O3R1fzu1fOzWnu+VMx/aEPJmF7/e3r0dH8\n853Hj6ItN/Uri7pfSACvnj4rQV3TX3z961GTNfsliepVieeWwR1KSuMwfSq7aU1L0K9LdP/6m29G\n5+yZKH/Ht0fRIrrKzAbiSCrXfcLzxTu0FHutpnwd7Jo+DQnQPUf/NdhIdxyJ87W/+T9H+eGjOKu8\n7Y5/TferthKsT8lKf3YmFj/+PdE9fTqqH/xNUZAL/5SX/jwoNlJdEegTEv5AAAIQgMAxI5B9Cx+z\nRtEcCEAAAhCAAAQgAIEjTsAveW/flRJ+K5u30CZjc3MRlzT3vNd3GfzQa3H+ap8b+91kkZ/ff85z\nPUi77m6DfcfeVfvcTrfR89JfUPscEyAAAQhAAAIQOGIENPdyu67vdy3J744iiVAdWZwvSrtfkTD/\noDkRK+1CLHRqsdYuxWpRFrAStx5q3udiqRXVYj2mZXk/KWfO1r46ysCxlyy0M2HerqolfJW830pY\nUsMUa3tdfyzDu9x6oartmtze28pWhz1pfR6UabdSS2XUZVVvEa1WtrPrLDsPArBI7zx9Vhpk0Mhc\n5k/ZxF8ZntJc9B2J/hNKaA8CtlLsKyEviRgCEHhBAgV5uihMyXW9rOdDQn1nZiaJ8s5WXT31b88Z\nb8v2brJ4z/qyTNWzuef1c6Mot/ZFCfRlCenDfsOkeeOVn4V7i+FdzVXf1RzyBf02KZR0xhY/UXzf\nGAxP9uleY1f7pQWVLaG+Imt7W/j7fmGBvr1Wj0J9PYoPHmTl+reRgs9329q633mP1wkQgAAEIACB\n40Zg2HfycWsj7YEABCAAAQhAAAIQOGoE7tyN9g99KuKd65mQPS8rkc98OuLlKzJ9l5B9VIPb8ZNq\nh9rV/qTal7dT7Sr9lPZbvCdAAAIQgAAEIHCkCHhO+BOFNalKa3ITbVfPmZq0Isvz//udmuaWr8X9\n6fdGy6K4BCfL6LVJxZ1WvLV8Lxaa65Ll70mFaiXLeDc+2aE6mwFhamBT5yiNFx1wvmsaELAuRaui\nsjQTdRLvdFTx0zO9PiFX0gX5tP83K6fiTGk9/tiVJbnm11zU7WJya3/tUStZ/j+Wj2mPK6yrjAmp\nd7/9JbmjVn4TlXbcW5FovzKtuehb8eXbCzoPO1ezJkBgLwkUahMx+ZHfFqUzZ6J4+UoUpiejsy4B\nvfU4lv/VryaL8+qVS1E6dyomPvT+JKqn8tXlLe4XJYxP/D//IKoPHkocVx/1qJ+++8Fe1vWZvFSO\n7zcWIMq+70xPaWoO3f9cBwWL9K1mPcq/8IvRPHs2VmRB37VVvwYc2OV9R4MS0l1F6wQIQAACEIDA\ncSOAQH/crijtgcARJeDRs7du3QrP3eX1wxJcl5HMJ3ZYGkw9DjUB+sehvjxUbo8JlGRVPvfu9Sjd\nlHW5ggzN4v7lYrQv+2XOnbSv/8+d0p0oXpH7xycOG/uP6h1PRxksat9evTdWdpUrKm2Tl0Wui+v0\nTH1sfXJZRih6+X1a6yW/8VYb23oqv9+6qe/AbjRv6c364fkq3AiSrcNBwJ+/i3px6c/TDsJ2/WMH\nWexpkk37x3alqF/QP7aDxHH3C/oHn4NRE1h9oOcVie0l+W5OMrgeV2x13pDZ56NGRW7tq5qrfSI6\nsmq3YOZQ8Dz1skCv60PrOeL9hJNCb+WpnJ4f6IvzxHnsQ1q363rvynarLltkkgR71WWlU46Jolxh\na0L7CT2P+Byf5vntvdRUXb889CNUTf2rrG3PVV9RW6uyyj9RLUnA37osnbongd/ne4KRTPaIwMh+\nn2tQj93bl0+c1NzzNY2OqUVxYiKzbFdvlwQexWolirKeL2luelus58Hzy9v7WKXeiHJdHj56c8Ln\nx4fGPfE8HetfH5p4Zzt9T/GS3WBU397Nya7yPZd9ZX0tzVsfqmNXXkWi53pfPvjTO0KzbqlthAMk\nMKbPV/L/EOf0zzEBAhCAwF4TQKDfa6LkBwEIPBcBi/OvvfZaXLt2LQn1z5XJPpyU16uEy+F9oEuW\nuyWQD2TZ7Xn7lZ7+sV9kydcEruhd0k8vtkL28incjwfx5zt/Ie50sjkJe7ufRK25VtQ+OxNXW68+\n2de/cvmm3Dn+J6sSw/dGoS9fqMTlv31VFu/DrTnKeqn0F+b+otxIDn/cnu804q+pTfO9Subtu35D\nVfzEu9G83uivPusQ2ECgcqUal37mJQ0SGd4fNiTWxnb9YzD9fm9v1z82K795o0H/2AwO+58QoH/w\n/fHkwzDClVO6Hf+JV+txZUYSlMTrlh43FuptubUvxbXypXhcnIiZgizWLUptELyy9K6qRfWuJ2d+\ngWA30M7jyb8NZT2bsZxNx/32tMT3UjS7C0ngt1AvzT2+5Xz5ybhGC/KrzU6ai/6r95uxpI/Z9YWi\nrPW78dKJgkT6QnxBzzAytt/XwO+PfcVL5rskMKrf5xbcay+fj/L5uZiwN64TszH1rR/O5obXiJnk\nAt8u7nV/2SDOu/+vr0dhdTWqy8tRXVmJgs61ZboH8wwL3tu/JEF9WMId7kuDhlJZWa75IKL+0/1r\n6pTuXfVWK+5/41q0llai+ur7Uh07at+N2zfT+8Lu48f9p7E+YgLj+nw1H3PxY8W/pt/tR9iL34g/\nKxQHAQjsnMDwN4Y7P5+UEIAABPaEQD4S/rBZq+f12pNGkgkEjhkB+scxu6CHrTmaC7U9fV5WFtlI\n9Xa0ZDd/N27qRfLQoKfawuXCMxbrmtI1zt3txCW9sNrLB1/n5TntC5qk9f6cLPuHZH5X9d08aK5W\ntSkPT9onzy3Xrr8dzWuyHCFAYBMCyTODPnTPeGjYJL0//MP6x2bJR7F/6/4xvAbNdpP+MRwNe/sI\n0D/4/uj7OIxsdXlKFvCvyP10uuFmApe8vseq5pxvFysSuisSzm3nmh17WrGeSJYi/eltPj2+yzWf\nn+fh2AVuEZxEdv9psXd6G9t6bLpPszV9Ctrw8EY99chFtbQ9LX46m7IH6jTgIHOBnwYfZGfs219+\nf+wbWjI+zATUz4oTso6fkuW85p8vye17SW7ubUWfW5pv1v+SBb06drG3uG9vG/rF+/71bU98vgSu\nk93eJz8ia+vR1aL5P3Qjymrrfn/zxo1o3b//fAVw1p4QGNfnK8Pr/92+JzDJBAIQgECPQP64DRAI\nQAACEIAABCAAAQgcOwIW5//aJ5fi0judJNTvVQPzfG++XIw//5nZuLOJJf1elUc+EIAABCAAAQgc\ncgIeVJgWTcch5futJVnQS/WuTUzGTEw8cel8uFpRiEZpMuqyml9rdWOt0IlpKfRJFutT8jw8siYr\n+ao8BfxWTbFii/rvvhqx0ujGv3i7FO8udjXtz+FqGbWBwHEhUFCfLJ05FeWL8zH9nR+VOD8dBYvz\nErD7uumzzZW43tF0WkUtlXZLU361t07/bA6j2aN2VHRz6Xh00AOL8LrBtD+Qyi6W5bpfCwECEIAA\nBCBwHAkg0B/Hq0qbIAABCEAAAhCAAAQSAVvQz8utvZe9DHm+tpz3OgECEIAABCAAgfEmYKEsF8ts\ndNrQo4eXglw0F3vzzh82Qp69OtVavvE7Wle1Mwv8vCF9Fc7198meVjalNJ6PfkKaWtUHh5zTdzqr\nEIDACxAoyC19UQK2rebT/PM96/Jts/TNyK4x8jACi/i8qF3Fbo8XWcunJT/Z9xXuLTkNYghAAAIQ\nOGYEEOiP2QWlORCAAAQgAAEIQAACEIAABCAAAQhAAAKjI5A0pKIkbi8uVn+a+uOlIJ/w29i5jq6i\nw0qyv3oJ7Jbw+mS8YSmzfT2xTFPdR1FLoSSZ38vmZ3AEAhB4EQLW2CVce0nuKySya1cKm7m2f1Kc\nRG9Pr5EHn/d0K9978HE2V73GB1U0HYiWrJZqp+al90KAAAQgAAEIHEcCCPTH8arSJghAAAIQgAAE\nIACBRMAW7nY/n89Fv1fW7s7Xc887b68TIAABCEAAAhCAQD8B695eLIgdVlHsiVCnlf71/nYMruft\nqUszW9Vi41xPF+39BAhAYD8ISKhuNKOzXo/24mJ0JdQXJGLbqr4wUZPhuYYA9YnwG2qgNCHL+ycD\ncDZLt+Gk0W90dCPpaOBBQa7uvSRr+nSz0Z/DavU/ekyUCAEIQAACx4wArxOP2QWlORCAAAQgAAEI\nQAACTwlYRPcc8Z6D3nPR75Wr+zxfz0HvdQIEIAABCEAAAuNLIOlIfUK1X7adsxGoHhHaEtYakuqr\nVQlqhw5RN4pNzVGtualrqlxtK/HOOpnq72VdwvwXbzdiSXPQ31nuxuN1zXXtAwQIQGDPCXSbzahf\nuxYtifPNd27Lxf1k1F59OUqzszH9zR+K4uREdKenNoj0SbCX945SrRZFLWtyjd+u1mJmz2v34hl2\nJc6vLq9Ew/PNv/eVKJ0/L5FelvRr7Sf3HEYAvThncoAABCAAgcNHAIH+8F0TagSBsSRQ0ojeK1eu\naKqpdty6dSvFYwmCRkMAAhCAwJ4S6Leg30tL9zxfW9ATIAABCEAAAhCAgK0/vThY5/bc7BPe7kpk\n0hJdvYLbSgA/IITyBaThA7LIVZ3T0lcPt8YW8ra+bUqU97ZakgT65UbEcj1CGlrU3bys6TpKgAAE\n9pKA3b93VlajUK5GqzgRJY2G6bY7yZK+vbqqPqpBNu6AtqgvaVFH7toS3R1aIn1oX0fid7t8OO9B\ndsHfVN2bei9YmJzUAISJ3r0yb6fvQNxg9vIzRV4QgAAEIHA4CCDQH47rQC0gMPYELl68GK+//npc\n06jg1157La5fvz72TAAAAQhAAAIQgAAEIAABCEAAAkeAgLSjZm+xmm0d7D0nyzHTLEbx0WPNHS0L\n18o5iWUSoCya9QXLTgchPVn0K2jgwFR3Tct6TMjiv1rRwMO8MqpmW+t3l9uxJnH+7YVuyNg+Wcq3\n1MaH6+VYU6NvLLbj4ZpkfmtoBAhAYM8JdDU6pv7GjSifXY/Z3/X+qJw/FzPf9q0SsYux9Ku/Gp16\nPcqT0xLwdX+ZmkoC9/QH3y+XGDUt1ehIrF89dz6qSt9eW5HHjM4z96E9r/Rghr0bXZprXsfsnt/B\nru0bui/euXI5GmfPRmgpnzoZXR23ZX13eTlbPFKIAAEIQAACEDhmBBDoj9kFpTkQOKoE+i3ovX5Y\nguviwQOHqU6HhQ31GD2Bw+Zhgv4x+s/AOJV4RS9qShNnMpOtu3c1h3w3c0/vN95zesHtuC+0Wq24\nc+dOOB4WWjf1gmf4oWHJt93nvFo3mnoZP9yCvqz6zc/Pq5ob66kK6k33fbWlpTapGL1Ii7m5KF2q\nxnx5OpqygIkrrbAzXAIENiNQuVKNS6WLUQnN0bmDsF3/2EEWe5pk0/6xTSnNkvoF/WMbShymf/D9\ncRC94GSaMrmezceuCliCr9qCXpauM1HXt7osWjtNad+yhC1kv3eTlautXnNBPK+4Tx7clx8bjPO0\njh0c96+nnZv/cdKanjq8tPQI0tBjzRMdTActxNe1NLTYhb0XW8s3vb8pS3oti422XN2307HNS9qb\nI/z+2BuO5LI3BEb2+1ydsi2hOs3Pvr4Whfq6rOf1Q0KDfTora0mgMmbZSQAAQABJREFU932lYBfx\nmpO+q98Tnq++4EE47tDqrC25wC/6vLVVebvQ/oGBQjmRXEC3+J8t+Q0lT7ExdvphoT9/W8h7kEBb\ni2bFCP866lY0Ikj7fayh30vNs+eifeZMlOTaXi/gntzKCvKy6fQvyeNm98SJYUWxb0QExvX5aj70\nWz19CkcEmmIgAIGxIjDwxnCs2k5jIQABCGxLILfst/t9AgQOmoA9SxwmDxP0j4P+RBzv8v3q+qJe\nNJVuaNqTT34qzt25leaQb7+sQVM/9aMRly5uAHD9rvrHD27hgaVT0ryNp3RO9lJ8w8nPsdG63Ywb\nP3gtrhX1lnpI8PfGX339b6XpWzYcvp+1p/TOgzh3Vy/M5tWez3w65tWuH7tgJ7N66f263nYPz3ZD\nVmyMMQF9jCsX9QJz+PiQZ8Bs2z+eOWN/d2zaP7Yr9jL9YztEHBcB+gcfgwMgsKzv91/8sU/FwtLt\npK3bq7QFqplyJ77v5O140KzE55Y7sdypxFphSqKUnnEmaxLQOrJmbUlE0yLhKklhw/Wu4a3K0/Zi\n56HM9aeQ/VMdLIINC95dkbn/xerjmC2sx41HjbirDB6sF5I1vIW3ktKcnOhGTW8Pv+NSOVnUf/l+\nKxbl2v7NR0or//a/cn05FjQp/foITOj5/THsSrLvoAiM6vd5t9mI+pv/Lto3Nc98TZ38zFn1ubUI\nWcu7fxer5SieOhHFqcmYes9V4SjE6jfeDs9dX9RgYt9nSh/6ULSXlqL+i78QXVnc1+RGvl9ET+vq\n8y2d44GdzqsoUX+z+0fXI3osznsAQC7S+6bidcXdSiY5OF+L8Y8+IIv++6fj8Ve+lu5N7fe/FF25\ns++cPhPdmekoffRbozw9HTE7+6RefsydaTTivKzq/8pnPxvzMzMHdakp1wTG9PlK39ZxLuTdgQAB\nCEBgHwgg0O8DVLKEAASODwGP0PdL5KtX/SOHAIGDJ3CYvDnQPw7+8zA2NdC92Nbm87KCj3JB6/Nq\n+qUNzW+2m9G53onmNYnbQ8JaoRM3pvQiqfeO2g/B83o5vtOHYRu735EbWMcON/RSau26LeiHK+kd\nvfCeb8+rlhvraVO09k1Vwm1xUNviskT6y1fCrUqBMWE5CeI9IrBd/9ijYnaczab9Y7sc1F2C/rEd\nJY7vkgD9Y5fASD6UwMKkrVclNhVtSq8kWhyVJHifqcqdtP6draxHTdagqxpd1ZWnIFvTF/R8Uim3\n4kSpLfG7myzVWz2B3ccldUkAk+blLG3Qqlhn6Z//pqNpiumsLCctRFXpqjpk0V/DmlQnDehSKHrU\nQH+QBW5RLoFOqvzZQivp+n6q8ROKY7uz9ymT2lHsPbakHPTHmyvtQiyriCWZ16/IpH4zS1ol3bPA\n7489Q0lGe0RgJL/PdW/oNuqpj3Yea8oMu3+XRb3nnC+dOhUFW6PbK5fF8Kb6svp/V3PTdxsS24vl\nJHgXKrJgl8v7dW13dTOx+C3pPrup+LyS99uLRjEado3fs2IPlyORPM1xr4yTRb7OdTkuqKCBOXZF\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\noJclfkMDgSyal52N8uuuaY57CfShODwQR3FRAr2t4jUSIInuGgkU3RVZ2ltEt+t9nZ8s8pUuje7R\nvadg9/Sun9zVpzvNCbmylzV9wd7EHNQ2W+K7jBTL+r+8tBIn5Cr/pG5u6d6VpeTvESEw6v6xGRa+\nPzYjw34IQOAwEECgPwxXgTpAAAJPCORzyl27du1A59rO62HX9l4nQOAwEMg/l/SPw3A1qMNhI7Db\n/rGdRf3zWszn9eD747B9Qsa7Pvnnku+P8f4c0PrhBOgfw7mwd3cEuqVKtE+/HB2J5Uud+0l8n5HX\naWlcT4NEbAtTNe20uD4x03slp3UL3AX5kV9sleL22rRE+ko8aE3HeqsbN+9nAv6ZzlnpXiVZy8uC\nXufUZF7q/DrdSrJI7S5I4ddAwmpjUXK83ObHo7igNB89czsqOuGh9DRlF6tN2d9LByvUlI9Esbfv\nSawvugKyone9Sl2l11RAs5Uk0k+pmt5vNW+h3o3/8zdW4t3Fdrx7Y0nzYEugtzinfPYz5P2U56v9\npEzeuyWQfy5H8XzlPtaV4L2yshIF9bnmP/75qF6+HBe+9VujMj8f0x/+zRpZI7G7JTHdIRe+PXJH\noevRP77RaK53W77XdTwZrMvdfXJRL08dFt9L//bfJpHcc1zYRX393FxKvz5/KcUF3WNSf9dAga7c\n20d9PdWrvraue1ghbp47l1zVdy5ciK4E+PKr79UAAk39Ybf5CjMf/1iKCxoIkM17b21ebZNL/o7y\nXP/G2xHLK1H62luaXqMT3/vSxbg4OxOT2UindC5/jgaBUfaPrYjk9eD7YytKHIMABA6KAAL9QZGn\nXAhAYCiBfISlD/rhyeHWrVthi/pRhHxkpcv2Ygt6AgQOCwH6x2G5EtRjpAQ8n+IlDZTSnO9x965M\ntxTfuJW9dLow9+Tl0277h79VtrKot6X821q2s5jPWWz7/eF631b9XXevu11yAZna5nUCBPaRwG77\nx15XZdv+sdcFkh8EdkGA/rELWCTdlEBRFqozp89Gq9CItcZJWadLIm9r3map2gXN9W7bVYvg1rkt\nlju2OObYfyxv22rdxq+2hvdSkWDfUWzrdqcrysV1wSbsTmhbWD1OdJVJRyKWdbeG1XetdJTGlvNz\n1XbMljsxYxf4KntNFvJ2Xe+0nqu+IEt659S2OKb9tpi3lJfKUmyR3out9L23Lvf86zr5wWonHqy0\nklv7lkS//RTn+f4QesKhJXAQ3x/u70mgf/RI1vGTMStRvboukVxCuX9fNNVXPZd8smpX5HuPbiG6\nd+g8xRXdq5IwrrQpVpqOfpt0dJLvA7odyHJeeroGARQl0PfuVtnNyVeiqxuFEnWcUOf5XZ2F/Irv\nIx4M4LnsPc+9LfjtZl9eNgrdhuqnEUKui/PQ31JzyZvy4OHyVOC6BhjJen7aHgIUS9KP08rvvMT5\nM1rsPYRwtAgcRP/oJ8T3Rz8N1iEAgcNKIPtefLHa7TSPrdINOza4r397u/X8+G7i/rReH7a92b48\n/U5iP1EMSzds/+C+fNtvcTVRT3xAP4R+XDEBAseOQO7ifqcjkStXK3H1n7wajrcKzWvNuPa9b4Tj\nYcGC/Ouvv57EeY+y9AMdAQKHjQD947BdEeqzrwQsZlvYfud6tD/5Kfmd17qF7Zc1BclPfToTuPsq\nsNv+kZ/qu/1FWb3ld32VGrf05tvxTsK23x+aB7b9J1V/tSMNNJjX/IyfUf3VjugbaLCTskgDgecl\n8Lz943nLy8/btn/kCYkhcIAE6B8HCP8YFO3Pz20NLF9eXIgvfO4XYuXxg3h4/WvRXV+O6oOvS7xq\nxBW9xZnUz9WXNEd8TarUjEzpM1FewpiEKulYycX9I83vbmPXJRnCNhTfW24mYT3JW0qXhDEpW8Vk\n/ip4Vt0ULLAlAUxCfkUZv/eErO31FkmGsBosoDnu11opX5fl4MiDBS6fqMSk6nNBFv0eM5g/C3nG\neZ97faEZS61i/PryTNyVMP/Zf/1uPF5txOJaXWWmrJ75w+/zZ5Cw4xgT2O33x170j6Ks0s+en4s/\n+5f/ckydPh1fvHUnljQY6FapGk3dG1Y1MMfd0+K353Kf0wCdCe2/Wp1M/b6bBgpJftf9o677zNcX\nG7GqW8jDC7NpgM+3P1iKKXXwak/Iz283fqXtQTntltzd616zqntcW/GyBHj/bmpOVKJjjyJT89HR\nYIC1otLpX6MjkV7HNSwgLbNRS+Wca63FhOpy6eR0TMvK/oOvvBLTsq5/+eKFqMnl/kmJ/CUdr6q9\n+YCCY/xROpZN223/2CsI/P7YK5Lkc9gJ6N74Z1XHr2lZ0eJbsW+3urOn2OvDtjfbt9X+PK/tYhW5\noWynd+g/r387X3+euP+crdYHj3nbIa9btrXx71bH+lPuNF3/OU/WsaB/goIVCEDgMBEY9UhLRlYe\npqtPXbYjQP/YjhDHjxUBD5S6LAt6C/VetyW9xO403PGaxG4/CvcJ3M/bP/wrpt+ifqcMt/3+6Btg\nEO+qvq67Q94ut40AgREReN7+8bzV27Z/PG/GnAeBfSBA/9gHqGOUpS1NT5yU5by+30un5Qq6MBkF\nzRHdrWle5vaaLFPr0apJaJf7+PUJWb3rkabbcymfDOIljLXlatpvUyua/FnJolXtREU76rKCt2Df\nsIWqn3uUzs9BtuBIz0PW5XshE87aEuRkLVtU+dq/XpiIlvM8IWvW9C9L7GNpnumaBDfVp6nyPA29\n57f3sUanKGtcna/6Ntqyoy+djqLSnJyT1fzyWizfvBEdWdnuR+D7Yz+okud+ERj190dZc7xf0IDl\nOS2XZak+Kav12+q7tuRy33W/Xe2t+/bgl/8a3hyTWi5o6Tdr8fG6biwP1Jc99cayLNirEsTPqowZ\nZTalue0tjPcL9C6l2ZQQr/vMum5WLQ0CWKlIoFc+jZqm3JAFfVPnd3SvWtd0G3b8Ycf7rptuNWmZ\nVWwr+XNaJrRcVAHTuo9ekkg/PTkRl06ciIoEekR5wTniYdT9g++PI/6BofoQGDMCCPRjdsFpLgSO\nGoF8rqCdWtI/b/vycpiT6HkJct5BEMg/t/SPg6BPmQdOQJb07R+SRfomlvSHpn/k9cwt5w8cHBWA\ngF6CykuQPQbx/cGnAQLPEqB/PMuEPdsTsIg0MzMT09PT8ft+/+9PbufbDbmdtjvqrizXm424df3d\naEj8eiwre8e3blyXyNWIpoQxnz85OZ0EqbOaw9kCXLmiV3baPyVVqyChqzY1mfafnD0lL9IlTemc\nWZQm0V5VtDjflGvod999N9Ye3Yk3fu7T0ZDr64WXfkdMnJqLj//u3x1TqmOm8meW+M1GQ+nfjjua\n1/pfvfN2Ot+t9YCD2sSUlol4zyvvjfPTM/Ht7/+g6lSN/7Te0pjD6/Haa6/FdcX7EfJ+yO/z/aBL\nnvtFIP/c7vfz1QXN7+7nuJdffjlOyXre94/fpb5v7xrZhBo2nbQc/nQMjy3XnS6J84otzOehrvvR\nF7/8G3FvYSF+9otfTAONvv/7vjfOa9DRRVmy+36U5ZSfoduI3dKrvGSnrzjz7KFcJe77vtXVFBqu\ngY6ke1Pu+cP3Mtcj1UfH0zQgiu163/edajUT5S3OE44XgVH1j7wcvj+O1+eH1kDguBLwNywBAhCA\nwKElMDjS0tsOuYskx88T8hGVeX52fcSc889DknMOkgD94yDpU/bICdjnav9c9HkF/D3ged39BmgL\nS/r8fj+y74/cct4W8/3fVW4Hc8/nV4/4gAjw/XFA4Cn2SBCgfxyJy3QoK2nRyYuFeodOJ4u9buF8\nsd6NsoSw9dJMdBSX1iRuSSAvNjOBvjQ1HSUJ4OXTZ5Iglrl0ttZVSMLVpOabLpcrMX3yRDpeUdqs\nTOtktq7XHPMS/KfWJJzJgjVmzkW3XI+aLPonTs/H1PkrMT0jG9ueK3wLZq5Xdbkha/0VWfyrHqpP\nChLKSnIzXZJAXzt3JSbVplPnLyY30+d0rKjf5f79PPLnq6x2/IXAoSRwkN8f0+rPDr4XDAu+V2wW\nGo1azJ+claV9Jy7pHmGh/OyJ2Tit5dSs9ieBfuPZeTl5nB/1uQ75/sE4r0eermOhXyHfThv8OZYE\nDrJ/HEugNAoCEDgWBDb/dt5583aax1bphh0b3Ne/vd16fnw3cX9arw/b3mxfnn4nsZ9UhqUbtn9w\nX75thZI56Hf+GSXlMSAwKKh4pH7/iP3dzuE1355PI44tzDv4QdGjLPMXDMcAGU0YIwL0jzG62OPc\n1FzwzueiF4s0h7sE7/YP/4hv5FvOSZ8P6Br8/tgt0nwuu22/P/I551Xv0o+qfnLN3/6kLP4VmHs+\nYeDPISCw3ffHbqu44/6x24xJD4EDIED/OADox7xIi+EWq/Kl0bAjaodMUMsFqpLcVTv062m5qOU4\n/82a70uJe38sdq3IGn59bTW++m9+LZX1ng98KCYktp8+c+bJufk5rktTAwSyWOK8xb1ewbaxLUhs\nq8iS32XV5Ho6D9v1D36f56SIx5HAUewftqJP94/eIJ0TGhDke9IwcX4crylt3jsC2/WP3ZbE74/d\nEiP9cSOgZzTmoH96UftHqfWvO8Xg9mb78tyGpc+P9cc7Tdd/zpN1LOifoGAFAhA4zAT6R1q6nt7u\nH7FfvKIR/tq3XcjzuRSXsJjfDhbHjwyB/HOdV5j+kZMgPlYEfI/3fO0e5viSBldZsLc1eh68vY0l\nvZMO9o/BFwR5doOxz/NALn/3bOlxJR9IMMxy3h4A3I6rqr/XCRA4YALbfX/sef844PZSPAR2Q4D+\nsRtapN0JgUGXzROyTt/rYCHdlvcOM+eyZ42Tssj3vs3mc34qwHmG6p2F7foHv893xpFUx5PAUewf\n+QAce+ogQGA/CWzXP/j9sZ/0yRsCEDhsBPyK80XDTvPYKt2wY4P7+re3W8+P7ybuT+v1Ydub7cvT\n7yTOreAH0w7bP7gv3/bbaCzoX/STy/lHmsDgA9ud0p34r+b/UjjeKthy/n+481ckz1/CYn4rUBw7\n0gToH0f68lH57Qj0CeDJcl7pk4W64q0s6fNsB/vHTi3q85H5Fue39LgyaDmf1yuvp4X5Plf8eb2I\nIXAYCOx7/zgMjaQOEHhOAvSP5wTHaSMnYGt4h0bPEjYX7IdZ3O9V5Qb7B7/P94os+RwHAvSP43AV\nacN+ERjsH3v++3y/Kk6+EDgkBLCg32AZ32/N3r/uqzW4vdm+/MoOS58f6493mq7/nCfrWNA/QcEK\nBCBwlAgMjrisRCVKnT5Lyk0ak59ngZ4AgeNKIP+c5+2jf+QkiI8FgX5Leq9bsO8Pm1jS50kG+4f3\ne992IT/PQv3Q0Ddw4Jk6+YS83ljOD8XHzsNBIP+c99dmT/pHf4asQ+CIEqB/HNELN4bVzoX43CJ2\nFAgG+8dETMaljqaQ07+twnxpTo6F3hPzMbdVMo5B4EgTGOwf/D4/0peTyu8xgcH+4ey9b7uQn7fp\n7/PtMuA4BCAAgUNAAIH+EFwEqgABCEAAAhCAAAQgsEsC83NR+slPR9hi3XPQK+zGkj6dsJd/7tyN\n9g9pjnkJ9RvqkdfLwrzqTIAABCAAAQhAAALHncC5OBs/Vvyr0da/rYIFfKclQAACEIAABCAAAQhA\nYNwIINCP2xWnvRCAAAQgAAEIQOA4EMgt0j1pkNdzS/qWXgR7/neHa9czJ1b76VI+t5x/R2W9q8XB\ndSj3Rv3n9cRyPmPDXwhAAAIQgAAEjj0BC+/z+keAAAQgAAEIQAACEIAABIYTQKAfzoW9EIAABCAA\nAQhAAAJHgcCgJf0NifN376aaJ4v2l69E6adkab9fAnluOW+Bvr/cy3Lr+qM/kpWL5fxR+CRRRwhA\nAAIQgAAEIAABCEAAAhCAAAQgAAEIjIQAAv1IMFMIBCAAAQhAAAIQgMC+EMgt1HNL+ryQ3JLe+21J\n7+3+4PNsWb/TYEt5i/+FgfnwvM+W87nVPpbzOyVKOghAAAIQgAAEjhKBTkueiToR9SXFei5K3ou6\nWtdSKEbUprLnpOq0WuUHMMKxI+DrvnQvu/79jfPz8ez5Z5+T+9OwDoEBAv51dq9Rf2YiDP/aOl+t\nyQ/HwQXd7UJ3u1hqtVL92p1O6E6XFt3tYkq/+Vy/6WKJu504ECAAAQhA4PkIINA/HzfOggAEIAAB\nCEAAAhA4TARyS3pZsrc/qbngLZw75BbuuXCe7U2W7cmyPt/eLu7l065UN6a08N+znE8HXI/PyGJf\nlvvMOb8RFVsQgAAEIAABCBxRAhZmV+ShaO1hdL7w0xHL9yMe3dAAyGZEU1JWbSYKH/4DEmnno/D+\n3xORRPoj2laqvTkBifOdv/dnIhZvb0xz4kIU/+hfj1BMgMBOCdxrNOJPf/2NuK24P1yoVuNvvP/9\n4fggggcO3K3X46HE+b/74H7cbzbj+tpaNDRASTp9zGig9+8/dzYu6Hfh7z19WiK9JXsCBCAAAQhA\nYPcEEOh3z4wzIAABCEAAAhCAAAQOG4F+S/qXJI572yEX0Act6G31Jcv6kl44X7F5xKBlfDr56Z8r\nSl6ylfxgOgv/c7LEzwcA2JX+VZW/Xy71n1aJNQhAAAIQgAAEIDAaAh09CK09yET6hZuKJdA/toci\nCfRtPUjVZiPWHyuW9byt7AnHk4AHalicX9DgjMHgYwQI7IJAW/boFudvyIp+MPjYQYW2vII8kDh/\nV8L8TdXtnmLXsan9LSn0J/Q7c0H3vZmSBHvt8yf/sHoCOCiGlAsBCEAAAjsjgEC/M06kggAEIAAB\nCEAAAhA4CgRyS/rkdlUVliX9Bov6vA09i3g544yfWWpFa9prmwc/NM8PivNOnlvMa875FDwwQPsI\nEIAABCAAAQhA4NgQqC9G5/P/q4RZifM3viyreQlq/S7uyxLluxLrvRAgAAEIHGECi7q3/eT9exLl\nG/Ebi0tRlyjftOm8gocNtDWDR0sO8L34jndL6f7cIfQE4PoSIAABCEDgcBNAoD/c14faQQACEIAA\nBCAAAQjshkBuSZ+fY8v2fov6fH/Psr6s+LL3DRPf87SOBy3l82NYzOckiCEAAQhAAAIQOK4ELE6t\naO5xu7m3tWu7J8T7+WnmdMTkSbm111KZ0TMV888f148B7YLAOBCwBb3d2t9vNmJNYn2r5xXEs82f\nrlbiZLkSJwrFmNZS1P3usHoCGIdrRRshAAEIHHUCCPRH/QpSfwhAAAIQgAAEIACBzQkMWtTnKTez\nrM+PD8aDlvL5cSzmcxLEEIAABCAAAQgcVwIdzTP/yK7NtXg9D9Ono/j7/mvNPS5PQqdf0nxANYn0\nU/lRYghAAAJHjoAF+purq8m9vdfzcLpSib909eW4WK3FS7WJqEmcn9L88wt5AmIIQAACEIDALgkg\n0O8SGMkhAAEIQAACEIAABI4QgUGL+rzqPcv6lt653LlzK1qDc9Tn6Xpxuahp5eXGvvyy5pcnQAAC\nEIAABCAAgXEiYJGqLWHeS59gFUW9VpydzwT6iVOZRyJZlRJ2QyAXAPE8sBtqpIXAfhFwj7TVvJeu\nrObzUJYgP1+pxkUtp8rlkP+QvqN5KmIIQAACEIDAzgkg0O+cFSkhAAEIQAACEIAABI4LgZ5l/a1r\n1+ITr70W16/LImyLcGV1Kl7vtgN5fgtIHIIABCAAAQhA4PgSaEqc99Ifkov7C3Jzr8ViPWH3BNqN\n7JxStXfuU0Fw95lxBgQgsBcE2prVw0t/sCB/oVaLC7Kgz+92A3fE/uSsQwACEIAABLYlkH+fbJuQ\nBBCAAAQOM4Gunopbt5p6X9CbC2+TyrbKzejK+96Tp+lN0rEbAseJAP3jOF1N2rJnBHqW9e1WI67L\n0OuaxPctg45vk2LL0zkIAQhAAAIQgAAEjg4B2ZDWV2Qtr6efxmrEogYyDntW8r7l+xLnK5qDfiKz\noK/NKs6t6JVPc13nSulqrWVxUr20vzevczZnvURpP5v5vPJkFleU36B9qstbuvdsXdJAgbNZ+nU5\nnHa6lqUzlSOr1xSeWP5r2+lnz2VxdjSrT2rPg435p3op/dSZvvTKt1XP0q0tZuc6H9e/Np2lq9rV\nfy625+nFoWGuijtaUtwT6At6Reu6eqBD4iDB3vWszfTl40L6wm55ON/pnqcDX7MnQfXzdXZ+zd51\ncv1c/5LOSfXQdc0HEzw5j5XnIcDv8+ehtvGcuvqzP6Gr8uqhT63E9K57e1qc0nPDu/fV5IJevSim\n1I/1SU6Log3B561ornnn4/xuN+p9v/t8NAs+fl/HLKaU3JcU6urDG9On3emP0/uYU06UMov7WdUj\nvys8TckaBCAAAQiMKwEE+nG98rQbAseMQOt2M2784LW4dv3a1i270ozW6xLxr2ydjKMQOE4E6B/H\n6WrSFghAAAIQgAAEIAABCOwzAYm13Tf+URLmu19SvPY4E8YHi5VY3vl7fyYTkd/3bXJ1fyGKH/2P\npUadzFJKxO5e/xWpXg+je+1zEesSsxfuSE3Tb/J1C9MSv+QuOiRexak55XMiCu/5LqlpZ6PwsuKK\nxPr+kJfnAQP9YXYuin/wv5O4X4nO5/+WBg3clTL2rsqRSF+TPGeNrWHBXqGibdfzD/+PmXv+JJ8p\ngYXzpdvR+dm/pHarjgXtKyrtSQn/Tv+7/7LE7fNZHm7XDbVL9ej+y7+r9omPw6Tq/9E/lNIX3vd9\nKssivYLT3/qC0t2P7lfMU4MIljSwwYMImj0jA4vzHgxwQgJ6bSoKl8RT5RW+6fdp8IPE8WJuYZ9l\nmf7uloeuS/H3/pdq9wWVc0V5+rWw2tlc0fX+JamU96L7puL1ZdVVPCwlnjqjepxRu/6jbFBCZ2uj\niL7asboJAX6fbwJmh7stzn95ZSUeqP/83OPH8Vjxrfp6NCWWt9uZU/rpalnzw5fiw9PTcV5zx/+B\n02fihPrXzBCBfEWDUf7R40cS0xvxD+8/iAUZ/txrPPs5v6fjf/rrb0RV4vzJWtYfF+qNaKjcrdKf\nkDv8f+/MWVneV+MPnz0Ts76vECAAAQhAAAIigEDPxwACEDgeBDQ0tXldFvTXnn2I7m+gUuhHev8e\n1iEwBgToH2NwkWkiBCAAAQhAAAIQgAAE9oiABKckWNctqN/MhPVhWdvi2mK5rcXX3qNYgrrP9WJL\n9oaE3sVbSZiOxzeyfJYkftvzXRLolWlFryZLsuYuaN/EUqR0TVmnS8yOqqzHLfb3rFWThbfLW1Be\n/cGiscTllM+iji1JoHca168jcdthWW2RlW0S7G3C2lrXts4r1pRO+9sqs2lvAaqvF++zkFZQOqfv\nWODXPm+4fWaz/ijjs6rYQUJ3ytPHU1qld1uS+K88PXDA9coFeg8gqPfytaW6y+uKma3wp+dVJw1i\n0OCGZG0/KaHcluz9Iee/Ux5uny3/87ak66TBBW7Loq7zsq5Nut66Dhbok/cBWdTbC8KS6i0r4+ho\nIbwYASHk/dXuEbr3rUlMX9VySwNb7mm5IQv1JNArbqrPtvUZ9cd2uluVQF+MsxLqLaA7/bqOT2if\n55J3l85DV/uXleeCPtu36vVYdL8cEtrq0xbxbT2/lhnQx0Ntt1N/f/aEPP2yvIY8Vp+b7pTSLejZ\nlOyBAAQgAIFxJYBAP65XnnZDAAIQgAAEIAABCEAAAhCAAAQgAAEIQGBPCUhGW38cnX/9NzOh+y1Z\njjck8m7m4t6ib0iIXn9HgnBRlunfSEJ/9/rnZeV9MYq/9T+TZfpppemX1AYqLMv8zuf/lyzNtX+X\nCcq2Trcl+qsfS4m7v/5LEqIlOtdV3tp6dB+pPAlyhdNXU9x9+EYmnlvAtjjvINEuFiWQFyZURYnU\nmhopyrKclQeA7sO3svT2BpCHUi0KFz8iq/vLGiwg4d+W8zfVDgn+3c99RoMIlFe/i/tcxPf5+aTX\njySYFxaj++AXklDf9WADc/jOP6XBCrKu30nYjIfa1bWYqKXgsusL0fmVv51dpzdUT/PZ4OJehT3U\nQAlZKXdX/kZWsgcXECBwAAQszv/ThcdxS6L463fvxiP18VUt+kRH04NvFHo9NxY1+EbDTOKfyxK+\nIkH+80vLcVEW7H/xyksxJ4v6YZb0KQP+QAACEIAABEZIAIF+hLApCgIQgAAEIAABCEAAAhCAAAQg\nAAEIQAACh5qALdarsuKWy/k4eUnrU7KgloW6Lbb7gy26Z88rnSzdbeE9ofQWeC1aL9kSXVbZFqUt\nejtPL1MnFes8W81bdLeVuPNdl5xmi3ZbnDsPn2tN3m7xSxLFXZ/Ngq26bZ3uYCE9F81TeRb3Fbye\ngiQ8i9S2dveSxHiL1bJc9/JE4nNi7c+F87bzVd0s0Pv8JPb7fMuDCrZ+t6v+iurpxWa8bteKBG7X\nbUVz29sVvix4U/unVS9zSHPBqxyL/05vAdwc3Aa3K3FQXl7fadiMx5PzVZ6t6W05L7f+mZcDeQEw\ne7vZt+v76d51SueYj66P65e390lerEBg/wkkEV599bYs4W82G3Ip34glDe6xlXxVN4rT1WyOed8y\n9GnNrOkVL9hyXjsLSu9jD2Ud73npPSe9PukpFNRXZ7TvpPrwxVotplrF5LLeFvD9wbPHn69WMhf3\nnppDYVIVy13cb5beLu5PqU/ZtX3RlSBAAAIQgAAEegQQ6PkoQAACEIAABCAAAQhAAAIQgAAEIAAB\nCEAAAhkBCfKFV78/CbKFb/4jye15mmv+mbnfz0fxj/71ZOEdVVmZy218991fkeAr0ffNX80EaQvP\nFqundXxKc5n/1h+KmJmLwplXtV9FPHxbArbmPvfc8Rbzl+2GXee88xtKfye687+YBgkU3vvx2DTY\nJfXtd7LD/e6pLezPf1O2v/QPn55u8fuBLOZt1e96WHh++I2NFvEW0h1sRS/huvv4baVrRuHcB7VP\n5eXpvW5x/rQE95Pn1LbzqZ1JfG+sRvc3/nGWr9bTIIHpSbE4G4Xv+lRKW5i9qHw70b33FYnlau8/\n/9viJrHcwRxufFlMJNp7fadhMx75+RoA0X37l7NBF1//11l5Ej1TOzznvNpQ/K7/PGuHBzDIzX7n\nX/1P6TrFigYqbNQt81yJIbAvBCzOL3ieeYnsf//+/RQvt9oxqWkhPn72bLKI//7Tp2JWons5ikmc\n/9r6atyR9fxnbt1MlvaLWu9osM3ff/AgLsuS/o+fn4uTHoyiMK2+/v2nTqfZMP+I8rspd/l/+utv\nyp29Bqz0hfM672+8/32aS76W3Nz7UF191+n+3BbpLyn9hAbvuLQZ3ysIEIAABCAAgR4BBHo+ChCA\nAAQgAAEIQAACEIAABCAAAQhAAAIQgECPgJRzW8U7eA54W00Pzn/uY9534kJmZe9tW1mv2VJcFuN1\nid+2yHYo6PXjpPKZlvh74rKs7ud756gcW4vLwjSmJG5bDF+VAGyB2efWJWqv3pNFuoT27SzIPQjA\n9ZmVUJ6s9bXu8mpyC28B3lbh3u+2eMkt5vNtu57P3c975EDPQjY0J3VKb4Hdy5P0qqet9b3tsu1l\nwEsqJxfhpGT7uMOEeFrsnpaXgRm11Z4JNFAhZsXPIv+KBjXYc4DzyoPPNQcveT75se3iYTxcrl3v\nm4Mt+1d0nTz9QH6dPCjB0wlM9+o3dTarcyUbVJCs+osaPLDdtdiubhyHwC4IeDyI551P88S3mrGo\nwSq9XqUjOxkt0k1zvzeVxz2dW5UZezt5zsgq4R5nl/cOFu2dd96D087eH++zOH9ZSx7Uc1PYKv3F\nvvT5ecQQgAAEIAABE0Cg53MAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIvBgBW2Z/Q5bZCzcysTnP\nTWJ/4Vv/qNSvy1G4/G2Zu3oLxQrJkt5W5N/xx9N53c/Zglyu4B1k4d79xr/IzvvA92f7hv0ty13+\npfdLZZPl90f+WCYyW2i2G31Z7dvFfPfErLQ8DSBYkSCtQQHdngV9wQMEJNx1H7yZ1duDA5zfhfdm\nJd14I6WPhzpuN/dzsqC3W/5HEtQXtFistoA9/6FUz+SOP69jeTIK7/2YBgMsikduoa4BCpo6oDD/\nzdl5Fsct9K9oIIIXD1LoD03Vx8tuwlY8LL6vPYrOO7+s+t/ceJ2quk4f+fezdpx+j+qnAQcOGqRR\n+Oh/kF2fBz+h6yJPBwQIjIhAXX3ii6srcUMW9CvNdrTaFuULsSaL+H/64KHE9EL83L37sp333kyy\nb0qAV89MLu7Vu9ORhvb9ujx0PK625ZZ+J8K+TiNAAAIQgAAE9pEAAv0+wiVrCEAAAhCAAAQgAAEI\nQAACEIAABCAAAQiMBQFbea8vZ0u/xbfdOtv1uxeLvj1xPjGxG3qn9TEL3/2W+hbRbJWf5j/fQlDL\n80/W/BLAJyXK22LfedmivazBABbRKxPa17N632Axr/JtSe7FYp7Pm5LlvUOyute+htrVUF3sHj/N\nD29hX8K562jLc3sa8OL1PLhe9gxQVrl2p2+rdrfXcZqP3nl6kfX+sizavc/W/i8atuPhNq2p3DW1\nZ/A6ub5eUj1Vf4c00EHXJw0y6GtfdpS/ENhXAh6ysqz55pc1eMbrWegm2X1F+x0WPbBmy6D06qpr\nEvu9dBHot6TFQQhAAAIQGA0BBPrRcKYUCEAAAhCAAAQgAAEIQAACEIAABCAAAQgcXwIWe5flAt1L\nv/Arsbdw/luetTDPSaTjv0mW9TPRtTCcB1unLyqvgkT9rdyq12aj+G1/Isv/1BWJ5LKA7xf6Zcke\ncx+Q5fq06vbFTGB/8LZE857YbrHu0c3Motya9KQsyd/7PakW3WtfSVbmXae3i/sHb2lbIv+6Ld97\nYroGHBQufaTXvqfurz0ooPDK78zOv/1ryXK9+9bn0oCD7uKtTPBelXDvtrXtxl5xXWL9i4bteKi5\nsaABAV76uYpb4aw4ydNBYpjXQwJ94cz7JNRP6PqILQECIyRgd/S3ZT3vpd81/W6r4I/9mgbXrLWL\nO3KMv9v8SQ8BCEAAAhDYLQEE+t0SIz0EIAABCEAAAhCAAAQgAAEIQAACEIAABCCwkYAVMIvMaek7\nZItxW7F78fpgSJblOpbmR+877vwsIHvx+mbBYrxd2nspSuC3hXh/8PaE5n63JX5uEd+SIN6S0O7Y\nmWtu6rAVrueiLisP52XhPk/flHCerN1lee5z0gAEH1d9bbEut/VpGSzbebj+6yrbFvIrD1QPubxf\nupuV13R7tdi633kWlL9OeaGwHY+8TolrX2HpOqjtyXq+7zq4fhbmkzjfv/+FasnJENgRAX9CW/rM\neun7tCbX9meqlRSrB24bCvp8l/TxndMUECV/1gkQgAAEIACBAyaAQH/AF4DiIQABCEAAAhCAAAQg\nAAEIQAACEIAABCBwPAhYHPciUbo/WLgeFK/7j1uc7re6f3JM+/scWz/Z3b/ifCflkt7LsDIkuBcu\nfThi+mx0v/75zBJec1HLhDy6d349y2lN2y3Jf+cvRJy4KIv/D6oJmqvegwrWFyIevpuJ7Pe/1hs0\nIOt7i3xVvVqdlKX8uffrvEs9EbtXObmu737t5+QF4FZ0v/CzMt+VMG9X93aDf2Ze52ku+le/V/EZ\nWa6/quML0fnZ/1ZW/hLvXyRsx8N5b4bVgw28ECBwiAgM+7ieqVTiv3nP1bhQrUl0L+9QdJdIr3ad\n07kECEAAAhCAwEETQKA/6CtA+RCAAAQgAAEIQAACEIAABCAAAQhAAAIQOOoEbJSaC7wFCdi5uast\ntu3C3YvnYx+0XvXxZM3u+eHzk5SX87M1eFq03ndIWxtDnm7j3mzLx55Y0PfEZ81DneaSX32YpfF8\n8g7VqcwVvt3iW8qzRb3rawv7hl3bS6z3QAKfnyzfZXFe6Vn/J/f8rnQv2ELdYvvSbcW2nJd1vIPT\nz2iedw0YiJMS9W2tP3tR7JRX/xz2Wern+7sVD9e72FsS5D6wbbXTS/9UA+n69fb3X5/nqxlnQWDX\nBMrqg176g4cBnZI1/Fktl6rVZ447bV2f1/Tpzj+3ysO59O4CTkKAAAQgAAEIHBgBBPoDQ0/BEIAA\nBCAAAQhAAAIQgAAEIAABCEAAAhA4JgQszs/Kir1jd/D3JPT2RG8Jvt27X5ZatiBL9m/PRPr+Jku4\n796WJfvCjUzEz4/ZEnxG4rUXr9t1/vMEic2F898i8f10dKsaILCuvNoS2DWnfPeNX8hy9Pzynmv9\n3CvZHOy2xm/K2n1mVmll+b7iNrWje+MLWXoPNrDL93lZvnvO9jTwYED20/ndN/5Z1i7nlYeJU1H8\n7f9FJs5Pnc/21h9lbc+FxDztfsQeBDArl/wdud1/9Fhxj6s9Bjx8K9WjcP6bnor0He1/8EbWDq0T\nIDBKAnZLf04ifF2DYryeB99dbjTUDxUuWqBPa0//NNSXvrK6GuuK673P+GSpHBMS6T8orxfVAcH/\n6ZmsQQACEIAABEZDYPC7azSlUgoEIAABCEAAAhCAAAQgAAEIQAACEIAABCBwfAhY8EpzsUv4Ldx/\n2q5kSS7B3lbZTQnhTuf55h0sdHufLc295GKxj1mUn5jJFq8Pus13mp0El2cB3Vbxdm0td9jJet6W\n8Cs9C3qvF3SsqvK8FJXGVui2dvfSsfW7JEHPJe/g9E5Tk4DvZZjlu9PUJex78XoeXJ/qdK8s1ctt\nXtAggNw6P0+3X3G6TmpjTUtBHgHy4AEQK7L0N6uzspjPXd3bon5V+730X5/8PGII7COBomzeZ0pF\nLSVNnqG+k0Ih2hLeH7RaMaHP6brFe/VBW9nbYn5N26tabjebKV6Th4yijp3RwWml6+uNvfz2J/Ig\nAi8IMPvDl1whAAEIHHUCfD8c9StI/SEAAQhAAAIQgAAEIAABCEAAAhCAAAQgcNAEKpqL/X0fS5bW\n3fu3pEz1rK0by9H94v8ua3RZi1uYnpmPwplXUm27D7+RXMB3v/C6BHqJ+LkbeB91fq98d2ahrvUk\nqj9XGy2Iy3X9pIT0M7J2t6H73etZ/W69leXoulqYP/dqVl5RYr2sbeP0S5n4viAhuymh+vbbvfSS\n3SanonBBc9vbgr7fJXyWIvsrgTC89IcnHgUeR2H+m3V8PTq//n+J201Z6UvM3+9QrsmTwUelVM7J\nMv6+uFpCVBD77pd0HU5ciMK0XPBPnckGKUiYT9dv8bbq13PTn53BXwjsO4GaBPXvmJ6Ji5VGfLZc\njEWp69LeY7ndjr93717MVarJwn5Og28uaLHl/C8vLsTtRiP+Dx1flIjf6XRjWgL/7zx7Jlnbf3hq\nKiY8fcULBg8XyIcMDGal4S5xt16PigYFnK3V0m0HIWaQEtsQgAAExpsA3wvjff1pPQQgAAEIQAAC\nEIAABCAAAQhAAAIQgAAEXpyALc4t7Hq+9qoEdc8rb3HaVtdrErh9PLmx177cgn7hemY5b0t2p0mW\n5pK8JLpFTXlMzWmRsD/MQn1XNVaeLr+mAQJekkW+hOl8EIHtbjdYlju9rPYt7HtJ6ZVmQ3pb+MsV\nvpd0fEiF5Jo7vDT6RHrzWLqjxMpv4nTGydu2Xt/Mjb/3e3EbXjTYMj5dJ3kvKNurga6T6+RlVa72\n7RnA18lu+V3eqq6NrefX7Q5/VLbHL9pIzj8uBOw7Y0r9f0bLrAbNLJfasaLPakf957HE95L67U25\num/qs+m9DYnxdn1/RwNq7kmkX5KQbwFEvS1Z2O+9a/uCrPPVbbR0uvqTSlK31kAB18GW+0UNBqgp\nPpm8ACgJAQIQgAAEICACCPR8DCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAIEXI2CL96sfk9B8P7o3\nNVe7LcLf+aqUqv+fvbuJsSW7DwJ++ms8zmRmPB7b7X7T5olkYqEIEEIiioRAMguSDUJCEbyYFVKE\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instancens of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS (Implement a Driving Agent)\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "...\n", "LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "LearningAgent.update(): deadline = -2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0\n", "LearningAgent.update(): deadline = -3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -98, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. Inform the Driving Agent\n", "Now that your driving agent is capable of moving around in the environment, your next task is to **identify a set of states that are appropriate for modeling the smartcab and environment**. \n", "- The main source of state variables are the current inputs at the intersection, but not all may require representation. \n", "- You may choose to explicitly define states, or use some combination of inputs as an implicit state. \n", "- At each time step, process the inputs and update the agent's current state using the self.state variable. \n", "- Continue with the simulation deadline enforcement enforce_deadline being set to False, and observe how your driving agent now reports the change in state as the simulation progresses.\n", "\n", "**QUESTION**: \n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?\n", "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Answers (Inform the Driving Agent)\n", "\n", "States (v1):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
Deadlinedeadline
    \n", "
  • Initial deadline = self.compute_dist(start, destination) * 5.
  • \n", "`compute_dist` is at most 12 (between points (1,1) and (8,6)).\n", "So max init deadline is 60.
  • \n", "-> Possible values include all positive integers in range [1,60] and integers < -1 which we will put into one group (past deadline)
61
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States (v2):\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Traffic lightinputs['light']green, red2
Oncoming (cars)inputs['oncoming']None, forward, left, right4
Location relative to destinationPrimary agent coordinates, destination coordinatesSome notion of proximity? Nothing for now.1
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Add why each state is appropriate for the problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Total number of states: 16" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "- note that grid overflows along top, bottom, right and left sides\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**TODO**:\n", "1. Find out what inputs['right'] and inputs['left'] mean\n", "2. Print coordinates of primary agent for each turn\n", "3. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Question: If the destination is in the bottom right and the car starts on the top left, can the car plan a route that goes THROUGH the top and left of the grid?\n", "- this initialisation is possible. `compute_dist` is required to be > 4 where \n", "
\n",
    "    def compute_dist(self, a, b):\n",
    "        \"\"\"L1 distance between two points.\"\"\"\n",
    "        return abs(b[0] - a[0]) + abs(b[1] - a[1])\n",
    "    
\n", " The two coordinates in question are (1,1) and (8,6), so `compute_dist` would return 7 + 6 = 12 > 5.\n", "\n", "QUESTION: How do the route_planner actions interact with the actions I set?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Read the `simulator.py` and `environment.py` files.\n", "- Discovered pressing spacebar to pause." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Unresolved\n", "- What do the 'left' and 'right' inputs mean?\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Implement a Q-Learning Driving Agent\n", "With your driving agent being capable of interpreting the input information and having a mapping of environmental states, your next task is to **implement the Q-Learning algorithm** for your driving agent to choose the best action at each time step, based on the Q-values for the current state and action. \n", "- Each action taken by the smartcab will produce a reward which depends on the state of the environment. \n", "- The Q-Learning driving agent will need to consider these rewards when updating the Q-values. \n", "- Once implemented, set the simulation deadline enforcement enforce_deadline to True. \n", "- Run the simulation and observe how the smartcab moves about the environment in each trial.\n", "\n", "The formulas for updating Q-values can be found in [this video](https://classroom.udacity.com/nanodegrees/nd009/parts/0091345409/modules/e64f9a65-fdb5-4e60-81a9-72813beebb7e/lessons/5446820041/concepts/6348990570923).\n", "\n", "**QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Debugging\n", "\n", "I realised the agent wasn't acting. Printed more info." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None\n", "LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "next_waypoint: left\n", "q: [0.0, -0.15, 0.0, 0.0]\n", "max_q: 0.0\n", "count: 1\n", "action index: 0\n", "action: None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 'count' variable was defined wrongly:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "def choose_action(self, state):\n", " \"\"\"User-created function\"\"\"\n", " # Get all the Q-values corresponding to the current state\n", " q = [self.get_q(state, a) for a in self.actions]\n", " print \"q: \", q\n", " # Find the max Q-value for this state\n", " max_q = max(q)\n", " print \"max_q: \", max_q\n", " # Find the action corresponding to the max Q-value for this state\n", " count = len([max_q])\n", " print \"count: \", count\n", " # If there are multiple actions with Q-value = max Q-value for this state\n", " if count > 1:\n", " best = [i for i in range(len(self.env.valid_actions)) if q[i] == max_q]\n", " print \"best: \", best\n", " # Pick among the 'best' actions randomly\n", " i = random.choice(best)\n", " # Else if there is only one 'best' action,\n", " else:\n", " # Pick the action corresponding to the max Q-value \n", " i = q.index(max_q)\n", " print \"action index: \", i" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maybe I should have incorporated `next_waypoint` into my state:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "next_waypoint: forward\n", "random\n", "action: forward\n", "LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "\n", "next_waypoint: forward\n", "q: [0.0, -0.2559177346466295, -0.3, 1.3819213571826228]\n", "max_q: 1.38192135718\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5\n", "\n", "next_waypoint: left\n", "q: [0.0, -0.2559177346466295, -0.3, 1.0246331536052293]\n", "max_q: 1.02463315361\n", "count: 1\n", "action index: 3\n", "action: right\n", "LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "AAAAH it's working!\n", "\n", "AND now env is also printing results! Previously I put `self.results` in TrafficLight instead of in Environment. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Improve the Q-Learning Driving Agent\n", "Your final task for this project is to enhance your driving agent so that, after sufficient training, the smartcab is **able to reach the destination within the allotted time safely and efficiently**. \n", "- Parameters in the Q-Learning algorithm, such as the learning rate (alpha), the discount factor (gamma) and the exploration rate (epsilon) all contribute to the driving agent’s ability to learn the best action for each state. \n", "\n", "To improve on the success of your smartcab:\n", "\n", "- Set the number of trials, n_trials, in the simulation to 100.\n", "- Run the simulation with the deadline enforcement enforce_deadline set to True (you will need to reduce the update delay update_delay and set the display to False).\n", "- Observe the driving agent’s learning and smartcab’s success rate, particularly during the later trials.\n", "- Adjust one or several of the above parameters and iterate this process.\n", "\n", "This task is complete once you have **arrived at what you determine is the best combination of parameters required** for your driving agent to learn successfully.\n", "\n", "**QUESTION**: \n", "- Report the different values for the parameters tuned in your basic implementation of Q-Learning. For which set of parameters does the agent perform best? How well does the final driving agent perform?\n", "\n", "**QUESTION**: \n", "- Does your agent get close to finding an optimal policy, i.e. reach the destination in the minimum possible time, and not incur any penalties? How would you describe an optimal policy for this problem?" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import plotly.plotly as py\n", "py.sign_in('jessicayung', 'l53zmz8hg6')\n", "import plotly.graph_objs as go\n", "\n", "data = [\n", " go.Heatmap(\n", " z=[[97.72, 98.06, 98.06, 97.84, 98.00], [98.34, 98.06, 97.98, 97.80, 98.10], \n", " [97.80, 97.60, 97.76, 97.88, 97.12]],\n", " x=['1.0/(t^0.01)', '1.0/(t^0.25)', '1.0/(t^0.5)', '1.0/(t^0.75)', '1.0/t'],\n", " y=['0.01', '0.10', '0.20']\n", " )\n", "]\n", "py.iplot(data)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/old-versions-of-reports/Smartcab Report-Copy2.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# P4 Smartcab " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Implement a Basic Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Process**\n", "\n", "**Understanding the game** The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\nk+Vx93EZrkSAfhgZ9bdvRrh8XC5eeLu02+3SHsRc9BE8b/diyPsIzq/11kp72C7nN8+V7qBb3tx6\nq7TidXfULoMI9n+5+eUI9vfLvbX7ZdAclK32dokqlOWbq2VlsFq+o/GdcZPAchXkH5VheTRcnwyt\nP96IerXK2+0LZbWxWr6w9PlYvlj+0Nk/VN4fvl8+3v6o3BveK+vr6xHMj6z9CPrPqkz7qd+vZiXs\nuIcRmH4u/X51GD37LLqA/rHoLez6XkZA/3gZPfsSIHBSBAToT0pLu04CcyIwzSCZZpEcV7Wn9Wi1\nWjPNmDmu63Pe+RSYfi71j/lsP7WerYD+MVtfR59vAf1jvtuvLrXPIeV792Iy+XulnBqfKmeaZ6qg\nfNavylqPAPvmeLMKZA9jLPv1+Pq43Kky1h+OH5ZOfGWWfAby24126TQy+74bAfZBOdU4VV1mBsnz\nvXa8N92u1WhF8Hyl2n65sVw9tyKonufc6m6XXrNX7i/fK71Wr9xbmgToH7djwvlhoyx3N2PfrbI1\n2Koy6TPAngH6zdFWfB/EIzLu48zbo+3q5oLtUS/WDspqDLF/qpwuy63lyL1fKhuNjRwPf6Zl2k/9\n/TFTZgc/oMD0c+nvjwPC2fxECOgfJ6KZXeQhBfSPQ8LZjQCBEyUgQH+imtvFEiBAgAABAgQIECBA\ngACBQwj0x6X5zUhL/yBi7jmFezUhfMatYyj5SFffjOHr/1H/58pGeVzud+6VjeZG+bnzv1AFtre3\nNsvr49fKd7V/X1mJIPtvv/3bq2D9sJEB8nEZ9AbxPYaw38ih7COAHxn5ObR9I4egj69qePp4vzVs\nld64V/7p1q+We5375Re+8x+Vx8uPS6sT/7QRyft5Y0Aerx1B/XEMyb/+Vsxtv9UvS7/SKivb3dKL\nMe/HMeT9ufbZKtD/he63VMd/P+ad3x5vl3/4+B+W/rhf1iOzPsuVlS+U06OzZWNjIwbkjyH5I9tf\nIUCAAAECBAgQIECAAAECLysgQP+ygvYnQIAAAQIECBAgQIAAAQKLLhAR9OZ2RMG340KX4pGTwkfJ\nrPiH8ZVZ5ne6dyNAv1EeRib74+Zm2epM5qC/M7xbmqNmzFHfKWvxlcPOZyC9GjY+l6ZDx0eCfgbk\nJ7PPZ2C+NTnJzrli0xg6P7Lh42vUHJbtpe2ytbRVukvdat2T4+Rese14OWsX27W3SmfQKUvjlSro\nn3n0nSqLPy+kqsnOTQabZTAelJiJPjL0SzkXX3mE5cjsz9eTjPu8lUAhQIAAAQIECBAgQIAAAQKH\nFxCgP7ydPQkQIECAAAECBAgQIECAwIkQyDnhT/diKPoIoje7k7nm88IzIP/Xm3+93I3g/MfffrsM\nuoMInsd87TEE/dK4E3PBj8s3Pvpaebh9v/Q/jgz0GHq+mdHuKNPM+Iiu7yl7VuyKiceRy1acczsy\n9dudGCa/MwnO5wGmWf3T5eWlmHe+0Sz/+MwvlNe6r5Uf2P6j5czodGTL96rHr23/WpX5/6D/IALz\n/bi0QQTjl8rvXv1nyyjqv7y5XG4PPyr9TqPca94tvzz8+cjgzzsUFAIECBAgQIAAAQIECBAgcHgB\nAfrD29mTAIEjFMi5iW7evFlybrtcrkuZzplUl/qox4IJRFJY52Inxmvd33Xdat0qzcvNag7X/e0x\n262yLlmnnFP2QCW6eP9mP9PQFALPFtA/nm3jHQL6h8/AMQg8/iCy4SO+3hpPhqHPmPk4hrbvx1cG\n5+9275SNpcdltDQsjeYkwB4x7mqf7XYvhpfvVbnqu6uemfAHLtU88pkDP6723h2U33us6r2oxEZn\noyyPlku31y7LzaW4QSCGzh9Fpn4zZrMftcpSrGvHL2TDGBZ/KQL0nVg/ivN0xjED/Xg5ZqM/XfqN\n3ic3FOw90RG+9vfHEWI61EsL+Pv8pQkdYIEF9I8FblyX9tICde0frVarXLx4seSzQoAAgeMWEKA/\n7hZwfgIEKoEMzl+9erVcv369CtTXhWVaL7+41aVFFqsencvdcumvfK7k837K4K1BWfrxU+XK4N39\nbD7zbdrtdvl33/oPSnt0sF8n+u/3ygc/9F7p34gUPIXAMwT0D/3jGR8Nq0NA/9A/jqMjnBufK3+s\n98fL5eblavj44WhQHo4fljudO+W9y9fL/eX7Za27Nsli35XxPonBV+H8Kqs+B5Svxos/5EXsHKkK\n9uexPjWs/VOOOYyh8D869VEZdkalv9Evo8jo72QQvtEt39H9juo4k4H6R+XxaLOai/5XNr9WHo3W\ny/vbH5TN0ePy+fblcn50qvxC+ZnI3p9t8ffHbH0d/WAC0xvpD7bX7LbWP2Zn68gHF9A/Dm5mj5Mj\nUNf+ceXKlXLt2rVy+XL8PqsQIEDgmAUO9i/qx1xZpydAYHEFppkieYdlncq0XnWqk7osjkCVeT5s\n7z8DPX5qN95p7H/7V0B1u9w+8Fn6w365fuPXSv96ZNErBJ4hoH/oH8/4aFgdAvqH/nEcHWG9uV7G\nr49LszkZ3j6D45ujrfJ4vFmG3WEZdSfD2mdWfBWEn1Zyd7B+9/L0/YM+7z7G7uVnHCeH2h+0BmXQ\n7Mfo+pM6NmO/HPp+JQL105IZ8612M248jKz6Rqu04/3V1urkegc5+P12tU9c3EyLvz9myuvgcy6g\nf8x5A6r+TAX0j5nyOvicC0z7RyZg5bJCgACBOggI0NehFdSBAAECBAgQIECAAAECBAjUXCAHpJ8O\nSt+POdu/Pvx6uTO6U7or3bK2slaaEdSuXYkK99a2y3Zrq2w2Nkt+rZVTcR27ryavq1GWy0rpNpbL\n71z9Z2II/VH5PXGNG6ON8nc3frLcGLwXw+D7J5Tata8KESBAgAABAgQIECBAYA4F/HU5h42mygQI\nECBAgAABAgQIECBA4JUKNHaFtGM5E8kj7F19NSKrfppZ/0rrtI+TVdn8ed9APEbjyKCPTPmnlbik\naqNWPK80VqpNVuMq243JvPWdRmcyfP/TdraOAAECBAgQIECAAAECBAgcQECA/gBYNiVAgAABAgQI\nECBAgAABAidRIEaKjxzz9uQRy9XQ8aUfQ7/HlAMR1G5MItz1o6kC75NqZZ0/Nfz+M2s72Sm/N8aN\n0orofj5mPbz9M6vjDQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAABAgRmJZDZ55MM\n9IzHT8LWrYxiV4HvSY79rM59uOPurlMjg+x5N8Hzys7NBzknfX+8XbbGW2UwHlZD3j9vN+8RIECA\nAAECBAgQIECAAIH9CgjQ71fKdgQIECBAgAABAgQIECBA4IQKRCJ5BOGHk0cstyOn/I34yjLsD0uv\n1SvdTjfC3y8IgL9qvwi4N3uR/x6PbtS6G0PW79xj8JSaxI0GO9e5HYH5n9/6pfJo+LB8NLhVHgzv\nR5B++JR9rCJAgAABAgQIECBAgAABAgcTEKA/mJetCRCYkUCr1SqXL18uw+Gw3Lx5s3qe0akclgAB\nAgQIECBAgACBgwpERnnM4F49YiL3akj7lcZyWSnLEaGPmPcwIuH5Lww1i89nML45ilz/casarj5v\nINg9HH9OST9qDGJ++syY71dXmLchZOb8+uBRWR+tl83Rdtke9WJtbKwQIECAAAECBAjMlUD+u/PF\nixerf3vOZYUAAQJ1EBCgr0MrqAMBAtUvSdeuXSvXr18vV69eLTdu3KBCgAABAgQIECBAgEBNBDI0\n3R/3qkcut0unXOleKWuttdK80yqj5QjfvxXvxL8y7A6AZ/Vz+3y86jKeRN/L6sZKWd1eLcvjlbIU\nX5MyqdGwDCJD/qMIwm+Wb/TemwTpR6NqWPs74zvl8XizfHP4Ybk7uhNbyqB/1W3ofAQIECBAgACB\nlxXI4Hz+u/OVK1eqf4N+2ePZnwABAkchIEB/FIqOQYDASwvszqCv052M0zss61Snl8Z2gNoIdC53\ny6XWxfjn7e6+6jQYDMqtW7dKPtehtNvtcuHChZLPByn9GAK3XB6UfolnhcAzBPQP/eMZHw2rQ0D/\n0D+OoyOcHZ8tZbsRIepRnD4z6Ev8BtONoPdyOdVbK73Gdhn3Isc8guKjdm4TgfpmI7aMQPhxReiz\nDjFm/VI/wvL9bhV0397Jks/YfZZhfG0Nt0svbj4YxbrMpM/l/nhQtnMO+tFWeTh+WB6NH8V7k+ua\n7Dmb7/7+mI2rox5OoG4j3Okfh2tHe81GQP+YjaujLoZAHftHjtyaD4UAAQJ1ETjYv6jXpdbqQYAA\ngVckML3D0i9wrwj8pJ0mRtXqXOzEuKv7u/Abt2+Uqz9YnxEmsl/8+Wt/+eB/4LwTGXjX+tVwuPu7\ncludSAH940Q2u4vep4D+sU8omx2lwPoH6+Vv/Rs/UR7eehDztI9Ls9Gs5ps/NTpV/sCtP1jutO6U\nLw++XNa762VrdbOM2+PSWo1h5YcxpHwvovlxX0XsNhkB/yWGwc8bA6ph6neGqq+y9Z9xvNyuM+6U\ni/culdNbZ8r7vffL7dFHkQ1/twzHcatB1KcV13Guea4sNbrlt6/9plg/Kr+89Svl4ehh+VrvXrkT\nmfM/u/33y4PRgypgf5SmTzuWvz+epmLdcQnkyHZ1GuFO/ziuT4LzPk1A/3iainUEJgJ16x/ahQAB\nAnUUEKCvY6uoEwECtRHIO/QzCJlDICkEjlugP+yX0Y1R6V+P4HYNyigy6C4ML5RL8XWgktN9uWn5\nQGQ2frGA/vFiI1ucXAH94+S2/VFe+YPWg9JYakZ2/DTKPgmUt2JM+9eG56vg++u9N8pSZNRvttar\nOenHkUHfiKTzdr9dzgzOVEHxzE4fNHKW9ygRsa++dhLTG81cG/tE1nvG3Mc7z83qbsYItpdWbD+q\nRh/K7P3GILaKX4umGfvN5qfvehz3I9M/bg44OzxbTg9Pl/EoRgCIAHxmwudzb9SPI7dKr9mL58j2\nryqVFcuzjMpGK+agLw8ie369bIw3qrX57iyLvz9mqevYhxHIz2Rdiv5Rl5ZQj6mA/jGV8EzgswJ1\n6h+frZ01BAgQOH4BAfrjbwM1IECAAAECBAgQIECAAAEC9RZoRTD87fgnhAymP47lnWB2t9EpX+p8\nezX0/Xc+/M7JkPF3IwgfkfO7w7vVkPdL46XSHDfLneGdcqtxq3zcvVP6zX7Zbm5XQfvNrY3q2leW\nViKjvVVao04E9ptladCp9lsbnopwfKe81Xwrwumt8i3tK+VMOVt++vrPlMHSqDx6434MS1TK2sqp\nKrO/3Yx6xoxAvfd6ZXVrtXzX8PeVc41zpdmeBBovlberIezf778fWfG9cq93vwq+f9j7KJ7HZau5\nXu4375efWfup8vHwo/LR/VulN4gh8KuLr3czqR0BAgQIECBAgAABAgQI1F9AgL7+baSGBE6UwPSO\n+OOeqyjrkcPnZfa8Oz5P1Eew1herf9S6eVTumAX0j2NuAKevtYD+UevmmZ/KRXb7eCXi8vEYbcbw\n8KNRzEM/Gea+G8PDZ1kZLVcB7t4oAvQxh3tzGBn3kam+0lypgtv3xncjbj4oD5sPq6z1x+3H1Xbr\njYfVfqfap0qrGTn5g27JbPjMkm+NW2Ur5rfP5RxWvx1fJdZtN3ql1WuV7rhbDV8fdwaU1fjKbSKG\nX2XWt7baZXl7pbSHkXs/blc3A2Q9q5sAYqNJvRtl0BxE/eKa4r38nnPPb8bXoxjmfn30qKrzrIPz\n2U/9/ZGto9RJwM+POrWGutRNQP+oW4uoT50E9I86tYa6ECBQVwEB+rq2jHoROKEC0znlrl+/fqxz\n3U3rkUPb57JCoA4C08+l/lGH1lCHugnoH3VrEfWpk4D+UafWmN+6xFTuZfzF7TJajoz1h49Ka9As\na+NJxno1D3xeWmTV5+D0GfjuRGb9pcalXFUNUJ+B+kYE3R9FMP728u3yoPOg3D39cdmKr/eb71cB\n+tdef620W+3SiQz6zLjvxHFyuPuMnGdm+6gfCxGIX1rvRhA/hs2/fzpy4S+U33L3t1TnuxvD0ecN\nAI/LRtxAEMPb91ulOWqV64MbEY7/oOSQ+3lLwUpjqdr+rfab1TlONVdjbdxMEF8PY675v/bor5Yb\nw/fKe3e+Wc09PxgMqpEAZtl6037q749ZKjv2QQWmn0t/fxxUzvYnQUD/OAmt7BoPK6B/HFbOfgQI\nnCQBAfqT1NqulcAcCEzvsMyqTud9v3nzZsmM+ldR8vz5S2SeOx+ZQa8QqIuA/lGXllCPOgroH3Vs\nFXWqi4D+UZeWmO96NCO4ferNUyWD1ZunH8coU83Sj+VmDEXfjGB9BtJz+PkM1ncymh/PGQzPx2Q0\n/HHkvucW7ch678Rc9RHEj0B8Zq63I7s9A/h5rGr2+Z3h88cxKXy1GO/l+9s54XyG6iN7PzPn34qh\n70+PT5dTMb98nnOz9GLo+n51zFFs14wgftZgGF85q3yceadGkxsJ8iaCbmOyTbwRof0Ydj+y9e+M\n7pQ7gzvVsPaD0WyD8/7+mO9+sei19/Nj0VvY9b2MgP7xMnr2XXQB/WPRW9j1ESBwFAIC9Eeh6BgE\nCBy5wHHdaTk9r8yVI29SBzxCgenn9FVnskzPq38cYWM61JELTD+n+seR0zrgAgjoHwvQiMd4CWun\n18of+YF/vqw/2Cg/984/Kht3NsrdX4w55h+NSudrEWzvdco7o3ciO32lXO5eLkuRpX66FRn2GZKP\neeUz1B4x9rISX7/r4e+KUPigrH+8HgH1XrnV/ziGuu+X/p1etd10OPkI/VdXvBOvf5LFnvPTZ3D9\nW1tXYur5Tnk8mgyVfy+PE1+jRg5WH6H8uGkg33+rO6nX250LUZe8TaAd54nE/DxnnP+r/a+X9cZ6\n+aXlf1xuj2+XH9/438r9/r3yqP8gwvqTY1UHnMG3ab/0+9UMcB3yyASmn1O/Xx0ZqQMtkID+sUCN\n6VKOXED/OHJSByRAYIEEBOgXqDFdCoFFEnjVd1rm+fKXxvyHsXzInF+kT9PiXYv+sXht6oqOTkD/\nODpLR1o8Af1j8dr0VV5Rzgl/5tyZ0upEePtiuzSXItv9fgTBH0YtNuO5Fxno2xHwjvD3VieGwo+v\njJNnkD2z2LMMGznDe2TSR3A9A/fDyITPAPq5YYbrB5H/vl0F6OOtqlTzyU8Wq+8ZcI+k+hhdK+af\nH0YdNprV9lvdrTJsDUprJdbFHPS5TZa8KSDnrM8a5Kt+zFufGfvNOFe+18+M++p75OY3+2V8JrLu\nI/h/tpwp461h2fjgYRkNZhOg9/dH1US+zYmAnx9z0lCqeSwC+sexsDvpnAjoH3PSUKpJgMCxCAjQ\nHwu7kxIgsF+BV3Wn5fQ8Mlf22zK2q4PA9HM760yW6Xn0jzq0ujrsV2D6udU/9itmu5MkoH+cpNY+\numvNoevX1tbK6upq+cPf/wdjjvcIwW9HuD3meo84dxn2huXDD2+V3la/PLr7qGxvR2b8hx/GkPgR\nAu/1q6HvV2P/drtdzp1/PZ4j0F+NhB/HbSzH/PR5/LdLK94/c+Z0DKEfA9J3Y0j6iK1nYD4D7PkY\n9AflmzfeL5u3NstX/vOvl+2tXnn0ezfK8lsr5Q/8ke8qq6dWYrvJ9hmo7/f75frXrpePNz4qP/Xe\nPyiD3iBT56vzrZ4+VbrL3XLl858rb596o/yOL/2x0u62y78++FPlvRvvlatXr5YbN24cHeKuI037\nod+vdqFYrL3A9HPr96vaN5UKHoOA/nEM6E45NwL6x9w0lYoSIPAKBQToXyG2UxEgcHCBvXda5uss\nOSf9y8xNn8fJXw6nx8uMeZnzB28fexyvgP5xvP7OXm8B/aPe7aN2xyugfxyv/zyfPYP0+Th16lR1\nGTlHfJZ8zrnpH7XWS3t7u2ytRAb99riap37Uj1z5nKM+9muutEqz0y6d8zEXffw+3l3KjPcMppfq\n9eraahXAXztzavJ+FaDPrPnJeTJAnwH3tfFapuaX8lbkwW+OytKlbll5e6msvLNacij+STA/6xX3\nDvR6ZWl7qQw2IsN+2CyjfhwvM/tjRIDm6UZpxUgAy59bLitrK+XcpbPVTQGvN14rzVaz+vsg65nF\n3x8Vg28nXMDPjxP+AXD5zxXQP57L480TLqB/nPAPgMsnQOCpAgL0T2WxkgCBuglM77TMfxjLkpks\nL5PRMj3edCj7/EUx1ykE5lFg+nnWP+ax9dR51gL6x6yFHX+eBfSPeW69etQ9g+5Z8jmz3S+/804V\nTP/C5yNwHtHxDKZnmQbYMyieJbPjs+TuuW++XwXwn7w/CYpPj19tHN8y4J6Z+51Op2y9HcPa/9sx\nZ32s+9bv/EJZXl0u5147H8f+ZIj72KM69htvvF49Z7B+d8n65DnyePmc1zAt+sdUwjOBzwroH581\nsYbAVED/mEp4JvBZAf3jsybWECBwcgUE6E9u27tyAnMlsPtOy6x4vs6M93zO0rwcmTk7y9WKZ3yb\nHudSuSRj/hlGVs+fwPRzPa15vt7dP/ab8ZX75R9Lua8RJaaanuddQP+Y9xZU/1kK6B+z1D2Zx85A\n9+6yvLy8++VLL08C+s0ngfRTlyaZ/Gdfn2S+57D5e4P6edIcVj/LykoOf7+/8qL+4e+P/TnaajEF\n9I/FbFdXdTQC+sfRODrKYgroH4vZrq6KAIHDCUxudz/cvtO99nuM5233tPf2rtv9+kXL0/cP8rx7\n21x+2utnrZtuv5/nTBl42nZPW7933fR1RiRz3L4vRabBj8azQuDECewNON5q3Sr/3oU/V/L5eeXC\n8EL5z279JxGev/SpIe6ft4/3CMybwN7+sd8RJ3JEiWvXrlXB+QzU5x9OCoFFE9A/Fq1FXc9RCugf\nR6npWLMUmGbkTzPip5nvTwvOH1U99vYPf38clazjLIKA/rEIregaZiWgf8xK1nEXQUD/WIRWdA3H\nKRB///xInP9X47ERjxx6OOcGiwm9qudcftrrZ6173vrpsV70HKf81Llz+yy799v9erp8mOfd+zxv\nee97+TrLtG6TV5/+/rz3dm+53+127/NkWQb9EwoLBAjMk8DeOy47pVNaoxcHE6f7ZYBeIbCoAtPP\n+e7r20+wfbrfdOqH3ftbJrAoAtPP+e7r0T92a1g+yQL6x0lu/fm69mkgfmlp6ZVVfG//iFnry6VR\n3NAYX88rF1pvlSuXP18ulLeet5n3CMy1wN7+4e/zuW5OlT9iAf3jiEEdbqEE9I+Fak4XQ4DAAQUE\n6A8IZnMCBAgQIECAAAECBAgQIEDgZAu8UV4vf6H55yNNJRNVnl0ygJ/bKgQIECBAgAABAgQIECBA\nYCogQD+V8EyAAAECBAgQIECAAAECBAgQ2IdABt4vxJdCgAABAgQIECBAgAABAgQOKpBzmisECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAjAVk0M8Y2OEJECBAgAABAgQIECBAgACB+guM\nB+NSRqUMHg1KjlxfvY5VsVRKpDe0VuOfUGLK+dZafGvU/3rU8BAC0e7bt7er9v/U3tHkS28tVe3/\nqfVeECBAgAABAgQIECBA4BACAvSHQLMLAQIECBAgQIAAAQIECBAgsEACEZjt3e6VwZ1B+fh//bj0\nP+6Vx9c3y6gfEfvhuLROtcsb/+Lrpft2t5z/w6+V5poBCReo9Z9cSu+jXvnKD3+l9D7sPVmXC9nu\nX/pvvlQ9f+oNLwgQIECAAAECBAgQIHAIAQH6Q6DZhQABAgQIECBAgAABAgQIEFgcgXEE4TM437/d\nL9s3tkv/o3h+f6uMehmgb5TWmWEZ3h+W0alRGY+qtPrFuXhX8kQgR03I4Hx+BvaWakSFvSu9JkCA\nAAECBAgQIECAwCEEBOgPgWYXAgQIECBAgAABAgQIECBAYHEEhg+H5dZ/f6v03u+VR7/0qAy3hqUx\naJRxFYuPIP2oWYaDUfXIEe8VAgQIECBAgAABAgQIECBwWAEB+sPK2Y8AAQIECBAgQIAAAQIECBBY\nCIEqg/7jyKCPzPnRZmTJ98cRhx+XRqtR2q91Svtcu7TPtCfzzxvdfiHa3EUQIECAAAECBAgQIEDg\nuAQE6I9L3nkJECBAgAABAgQIECBAgACBWgjk8OWP338cw9pvl91DmXciOH/lP7xSli4tleVvWS6N\npRjufrVVizqrBAECBAgQIECAAAECBAjMp4AA/Xy2m1oTIECAAAECBAgQIECAAAECRyRQ5cv34ns+\ndo1h32g3Svftbule6lZZ9CVj8zLoD6Y+nRKgcbDdbE2AAAECBAgQIECAAIFFFRCgX9SWdV0ECBAg\nQIAAAQIECBAgQIDA/gQyiLz7Md0rAvJVgD6C9BmsVw4ukDc9ZGl0d/wwHhzRHgQIECBAgAABAgQI\nLJSAAP1CNaeLIXByBcaDUgY3+6U/6D8XYdDul/HF2MT//Z7r5E0CBAgQIECAAAECCy0QMePhxjC+\nxd8RG4OyfXMytP14PAkmP7n2eL/3Ua80OjG0/XJE6+O/nIv+SRZ9bD7aGsW3ONRmbBzPOZ/9JNi/\nc6xGRKTzv2Z8i+z7aoj8eG4ux7e9weo4xPbt7apeT+qQC3HepTeWqu379+NvnjzVIE8Wq/L4UaZ1\nr17njQVvdqv9qjfzW2ye+21//OnjN9tZqVJyOP9qhIDcNq9rOy+qlP6DOF/umyU27ZyK64/tmznU\n/7T+0+1zl/WsXBxiFGMRxKP0JruWzriqa3WjQ15/J/bP/07vOs7Opk+esr4H8Yjjds9Prjvb7EnJ\n+j2Og8V/g512ml5ToxXbRRXacV3Tmwme7GfhUAL+Pj8Um51OiID+cUIa2mUeSkD/OBSbnQgQmFMB\nIao5bTjVJkDg0wKDD/vl/R+8Xq7fuP7pN/a+utwvg2vxD0yX977hNQECBAgQIECAAAECJ0VgtDEq\nd//m3dL7sFfu/B93Sga9+x9/9mbfDM5/5Ye/Utqn2+Xs7zxbZdNf+FcvlNbZiOhGySD2+k+vl8Gd\nQbn/d++X4YNh2f5wu4z6o0ngPrbJQHGz0yzLF5dL60yrnPm9p0v79XY8ny3NlYgo7yrT82W9dpfu\nW93yrf/pt1bH+fDHPiy9272y+WuPyziD9BlgjzKOc1YB+26zque3/YV3Sycy/6ubCSJAnYHzPO7X\n/8zXSu9WLwL6UbcITi+9EUP4x3ZX/uPPl86bEaSPUl3Xz6xX23/wP3xQBvfjjugo6fDmD7xZbX/+\n958vzbWdc2+Py/rPhcPHg3L3/7ob2/dLLzzzJoJxGMWpqnPl+TpnO6W11iqnf+fp6nyvff9rVZD+\nSYZ9dabJt4N6ZLt8y5+9UtVv6fLSZNSDDM5He9/7ifulf7tfHvztB2XwaFD669HeEZtfenOpdF7v\nlLf++FvVdY/7WVvlZQT8ff4yevZddAH9Y9Fb2PW9jID+8TJ69iVAYN4EBOjnrcXUlwCBpwtEJkT/\nRvyj2vXP/qPa7h1iiyprYvc6ywQIECBAgAABAgQInCyBzDYfrY/K8H4E1CN7fvBgEoDeqzAejKsg\n9fDhsArCt1Zakwz5iIVn0DqPsf3BdhXc773XK4OHkY2fAfpeBOjjUQXMdwL0jWFk4UeAfvtGtwoE\nZ7A4s8fb5z7JyJ+eb/tGZLnvKhk07t/ql2YE3/O9DLBvvx9Z/5Gtn0HzLP04d2aFN/JlXt9WZLDH\nfo2liEJnkDoC5TlqQO9m7Bt1ngboS2yXpQpM52JsnseprvnuoPQ+6JX+3cnfWaPzGXCPjeLvr6rk\ncWMEgQyAV9tFHbNeadOLzPcqQB/VSu8cQSAD9KNHo9I61Srd97rVsfp3YpSzuI4Mkj/J4J8efsd/\nvx7tx+2qPulY3RWw0055Lb33exO38JsG6HO0gbyeHP2g/8HODQU5AoLycgL+Pn85P3svtoD+sdjt\n6+peTkD/eDk/exMgMFcCAvRz1VwqS4AAAQIECBAgQIAAAQIECByrQMRvMwB987+9WQWlH/zsgxg+\nPYLfEeTNId0zEF8NN58R8CjjXryOQPn6N9arIPXG1zZiePhmefQP1kv3Urdc/Dcvlvb5+OeZDIw/\no2SAOTPnM6D88BceTobTj8B3ZrCf++7z1V53/p87k+HlBxEE3xyXzW9ultFoVJavLFcB9a2vblXB\n/VEEpHeqVgXie3djCP+VqGMG9GO++Mxkz/o+/trjavsqcL9Trwz2n/rNq6XKTo/lJ5n2EfS/8Zdu\nVDcxDGMo+Qy4N0bpMAnOV7vni1jfuxfne9CIDPvtyKRvV0HzyuFPXiytc5ORCZ7B8GT1szyq64qg\nfDV8fbZT3HhRjTgQNxnc/6l71Q0Ko42dofd3jpY3VOToCTf+i/eqdsubNhQCBAgQIECAAAECBAjM\nUkCAfpa6jk2AAAECBAgQIECAAAECBAjUTiAD3c1TzSogvHRxqRpqPoO0Veb1rtrmfOmdNzpVlnoO\nS58Z8OPMGI/s+Gkmeu6XgepphngOs577TedAz2PmI4PKGezu34tM+MeRCR9Z7BmUz2HxMzN+Olz8\nrtM/WcyAd2bNZ8mM9WnQPM/Zfm3yTzvVHPfxft4ckDcKjCJbPh+ZST4dMSAz/qubB6oj7QTPc5M4\nfnXcCN5XAfpq/0lmfHXTQd48EOfK+erTrRE3BlTZ57Ff/6MYzj6Gzs9h/vPanji8tuMQWfNZ0mzq\nUE0BEEn5OddsOmZm/V77aqdnfHuWx5PN45rzponRwxjhIEZISOvB3fCIdsoh/6t2PR8Z+9MZBvLe\ngWyfuJ68XoUAAQIECBAgQIAAAQKzFBCgn6WuYxMgQIAAAQIECBAgQIAAAQK1E8hg+Gvf91qVWf7G\nv/xGNSz7V/+tr1bB3N2V7b7ZLe/+V++WpUtLpbXcqoLYD3/6URVUfvDTD6qAdJV1noHylXbpvNYp\nb//Jt0vnrU5Z+eJKFYDf+sZWNff5zR+7WXI498HGoMpUf/SLj8rWza2y9rdWS/edbjn3vZNM+N3n\nny5nQH7j1zYmLyOoPS0Z2F/9DavVy+b/OY02R+A7MuE3v7JVZdKvfHG1Cjo//vqnM+IbO5uPI2ad\nWfWb34iM+5jHfvXXx/Zxvu2vR2A7hoOvbgaI6+u+FnPVh0f3zeXSfT3mto9k9xwy/+7fuFttl8vV\nDQORFZ83Nbzzw+9UDt2LsW3cBLDxKxuTOe3/0geVW1Y6g/aPfj487/QmUwJML+wFz8/ymO422hyV\nBz+5M+f8P4h2iiH6q6H545qXou7dt2Lkgj99sRpWP7PuB/H+zf/6wxiWP24W2Ir2ySx8hQABAgQI\nECBAgAABAjMSEKCfEazDEiBAgAABAgQIECBAgAABAjUViKTunAc9S2a8V0OiP2109ViXGfZL7yxV\n22aWdZUpHvPH51DuVUZ2vNNsNau55DMwncH8ztvxfHmyT2aGNzvNKmid2dk5FH41N3vOfR7HyAz0\n5lKzyt6uTvKMb9PM9CpjPusa15Dztufw+HmOKms/Aul5jipjPuZ6z/neq4z5CDgP14eTIfBjuRpB\nIIayz5LB+WrO+ahL1mc6PHwuV6/j7Tx3a7VVPaqRAXZb5fHiqx2jC2S2fudMt3TenFx/3qjQfTvm\nmo/69WMEgHFktT/JWs+Tx/bDrThPPKo543PdPstTPeK8zeWIwselVe0UtnnjQI4OkKVqp/Cq2ina\nJ/0yQN9caZZutN04blDIIf8PXJnq6L4RIECAAAECBAgQIEBgfwIC9PtzshUBAgQIECBAgAABAgQI\nECBwwgUy0Pvw7z2YzOW+E/RNkgz2v/mvvFkF5U//ttOTYeBjjvYsK++uVEH+C3/8QrXfBz/2QRnd\nmwSMM9P74ZcfVvud//7I6H9GyWHn175trcpgf+OPvVEF5btnu9Vw9Blk7scNA+3T7WqY9gx2Vxn0\nX30cgelcjuPG6ba/8UlGfB5v9d216mwbX9moMue3vxZD7sd/a79+rco23/ow5qyP+dmrGwxWm2Xt\nN+7MPb8T2M+dM7B99rvPTM67fbYaqj5vTMipAFa/Y7V6P29iyOvc/rhXPTKbflry5oGcqz7rt3vo\n/en7z3p+rkcE6Qd3B+Xh331UjYyQ556Wqp1+4K3Ke+XzUb+4riydM53y5g+9VbXP1l98r4zufrLP\ndF/PBAgQIECAAAECBAgQOCoBAfqjknQcAgQIECBAgAABAgQIECBAYLEFIm47eBRZ9PGoMs2nVxv/\nujIZ/j2C5muRT74TnM+3M5jcHEUGfWST55DuOd/6k1Idb1BajyL7/Dkx4dwnh2WfZvNnFn0G6HOY\n+SpzPs5XZbivtMpwe5KNnnVsZT0jQ7zKqN+YzCmf555mkudyZqJXmeyZYR/b5/DxGZSvAutR3+k2\nrbPtGG2gPdm+Whv7Rr3ab7arQHwzs+PjUK2lVmk2m5P56B81Ss57n1nsg8xmv5fDx0eFdpWs20GC\n87nrCz3imgaPBmXwMOYD2OVa1feNdmnHI9sl/arjxXKuy5sbchuFAAECBAgQIECAAAECsxQQoJ+l\nrmMTIECAAAECBAgQIECAAAECCyMwHo6r+dJzzvRcnpZqLvjIGM/s8VzeW6qM9V+3WmXaV4HhnQ0y\nWJ3HaqxMhqbfu9/0det0q1z4Exeq4y99bqnsHWY+M9lXvz2Ov9Yqg5+bzHG//c1Ih4/gdGbTZwB8\n8/3HpfdB1DvOmRnur33Pa9X69V9crzLccw76HNJ+8+vxHMPw537V/rFvDsF/6jefmlxfLE9Lnvfc\n95yv9t/42fUyiAD8/S/frzLqM/s+b0jIQHla5fDxGfjPofZftrzII85Wtj+KEQPisbud0m3l22NE\ng2inynCnItX6GOkgh8ffvf5l62l/AgQIECBAgAABAgQIPE1AgP5pKtYRIECAAAECBAgQIECAAAEC\nBJ4iUAWbdwXnq00i6TqDu9P5zz+zW74fge18ZJb5k5LZ7Rm8zuN9Eu9/8vZ0IbO6W+djDvh4VAH+\nT2Lkk03idftMZICfieB3LFcZ8zEEfw7vnpnweewMlo8iSN7sNEtreXKs3C4z6DNoP8oM+8x2j4B6\n7pPrqvcbMSJAnj+C+vn41BzycfZqu5xjPrLV+/f6pf9xv8pc73/YnwTkc0z7uObMrB+3oyIZoN+V\n1T69xoM8v9Aj6xV1ysenSrZD3EBR3USxux1iOQPzVXB+9/pP7ewFAQIECBAgQIAAAQIEjkZAgP5o\nHB2FAAECBAgQIECAAAECBAgQOAECjYyxZxB8byJ4rNsbvN7NUQWyI+i9t4wzfv6igHUcu3O+Uz2e\ndo4MOK/91rVquPn7PxUZ7DGkfH+9Xxr3GmX9n6xXpxxtZJS+UZbfWa6Gyl/5dSuTgH0O9R43CGTG\n/ejRqDz+p5uTmwZiqPtGBuc7cVmrjbL2pbXSfSeG8I9A9rRkUP/u37hbejd75aP//aMyeDAJ7mfQ\nf/nCcmnHkPhn/8DZ0j7fjv1XS/9+v3zt3/966d3uTQ9xuOcXeORB8+aCfOwtGdzPh0KAAAECBAgQ\nIECAAIHjEhCgPy555yVAgAABAgQIECBAgAABAgTmTuBJgDcC2E9Kxr4j6zwfT82iz/czoz0eezPl\nnxzvycGesZDzpe/Mmf6ZLWL9NIO+Ef/SE3H1SVZ8ZMwP7sY87FFGg8iKrgevBQAAQABJREFUb8Tw\n9jFPfQ6Fn8PTN/J47dg4dhj1Yp74zUYZPojh7TN7Pm8miLcy8z0z7hsxz32Vvb8rtp2Z//1b/Wro\n/P6dyJyP7PssuX3OTd95o1PdEJAB+vbbncigj0MeVXD8eR5Rh7y2fOy9+aEa8j+G79891UC2yXT9\n3vapLsg3AgQIECBAgAABAgQIHKGAAP0RYjoUAQIECBAgQIAAAQIECBAgsLgCGVzuvNYto8cxJPyt\nmN98Zwj1DO4+/qXH1dzrp3/b6dJY3hXFDo4M3D/+J4/L9o3IUo/lacnjdV/vVo9cnh5v+v5+nzOD\nfvU7Yg76sxF4j4B6aUSgPLLHR49H5f7/fb86TC5n9vvSu0vVHOwZNM91nTOdMnoYgfz1yH6P68m5\n5LOMtyOIHduvftvaZM72vKYMiu8qOWf9/b99v7quXJ6W1rlWeedPv1OW3lkq7bfaEedvVMPf5zD7\nryQAHhn23bNLZfyolO272zFCwKRm47ip4vHXop22h2XtN6w9CdJX678yaZ9cVggQIECAAAECBAgQ\nIDBLAQH6Weo6NgECBAgQIECAAAECBAgQILA4AhH4nWaqb38Ugd+dUmWS3+5Xc5tn0LsZY+BnxnmW\nDHSPI6Cfw7pXQ7t/EseuhsRvn45s83g8bej6ncO/+ClOlRnxrdXJHPXVMPQxinxVr7v9av9cbrZj\n/vVTk0feENCI7PnmUryOR4m4fGbZDx5OKpgZ9LnNdO75HLb+MyVi2cOYUz4fuwPvOTR+dZ7Tk/nu\n89zDOO40O/8zxzniFVnX5mpcVzwa9+PGhzh/lnwefDyoMvzzpoq8vmp9LOf6fEy3rd7wjQABAgQI\nECBAgAABAjMQEKCfAapDEiBAgAABAgQIECBAgAABAosnkEHwc999tsoY3/xgM4aFn2TDDx8Ny+0f\nv126b3WroHAnhnNf/dbVCuDx1x+X/oe9cvt/uV0F6IeRqT4tORz+me86W2Wo5/L0eNP39/2cAfoI\nRmcwffXySiS6N8vj92Iu+cgG3/jaTkZ8xOkbp2Mu+Xd3MuJj7vlGPzLqv2Wpujmg/6BfZfdvfOOT\n7VtxzLXfNNm+uXPDwafqFHHv0WBYPXYH6PM6Hv9iZKrfH5bV71ythvb/+K99XLbf3y7Djd13KHzq\naEf2Im84OP07TpXuxU7p/c1eGcVQ/1mynT66drssXYzM/hyC//VOiXspSg7P//G1j8r2zahf3myg\nECBAgAABAgQIECBAYIYCAvQzxHVoAgQIECBAgAABAgQIECBAYHEEMuM6A7sZgM5s9ZxTvpq7PLLN\nB/cGMZV7o2x/EMPYRyZ6qzsZDz6Hte9Hdn3/414Z3O9Xc6Lndplhn3PBd97qVMecZnMfWiuTweOU\nrbV2PCLIHIHncQxzXyKTPksuVpntkdXejEcuV3PMRx2yHrm8d/sYCqC0Y7j6fOTyZ0qsanbiePEY\n9T/Jos8s9F7clJBB+9b5VhlvTV73P467BJ4V/871+ZiwfeZUB1oRx+i8EVMR7AzTnxn1eW05KkAG\n4/N11U7RfnlVg3v90ov1/ftx80RsoxAgQIAAAQIECBAgQGCWAgL0s9R1bAIECBAgQIAAAQIECBAg\nQGBhBDKD/ux3nyv9j/rl0c+tVxnh67+0XmWeDzYHZfjhsNz4L29UQ8dXw8zHlWcWe84tn9nbGbjO\nIHFruVVO/cZT1Rztr3//a6X9RrvKgC/3Xo4q56Jf+c0rpfl6s2z82kZVrwzMZ8l4fGbBL7+7PJlT\nPjPoe42y8sXYPjLOH/7sw1I2J4H86fatyOpfy3peXpoMg18d6ZNv1Rz1X1wrraV2efQrj6rh/PPd\nHM7+5v90czKEfgTvq5Lx+nAYRzZ71mVar+q9CMz37/bCoFE6r3VfOkifN0+c/77zpXezVx5++WHZ\nbmyX3oOoQJxnO26U6EVA/vp/dL26iaE6fxjlNAST9plU13cCBAgQIECAAAECBAjMSkCAflayjkuA\nAAECBAgQIECAAAECBAgslkAGuXeGku9ejEByBHa3b0XGfMw7P9yMAHwE33NY9yoTfTrme2bLx2Pc\nijnPI0DeXp4E45cvL8cQ7DEkfgxL39zJYH9prIiFt8+2q5sBds9pnwHxzBqv5pSPmwxyOP1MHa/m\nal+L1/HI5WmpMvwzqT7mqM/s+rzmKtV8usHOcx4vRwDImxBa7+UO8UYG4iP6nvPN53GGnWFptpsR\neO9M3m9MAuGjzFTfuXmguRw+W5G8vpnrcuUnddlzyv29jOq2Tkfm/2a7Ms7zDIcxFH9OSbAdp4j6\n9m73nrRL1q8bGfdZxvcn9dt9orwxoxpxYPdKywQIECBAgAABAgQIEDikgAD9IeHsRoAAAQIECBAg\nQIAAAQIECJxAgQyCn2+XSz98qQqEP/h/71cZ9Q9+8mGVOb79YQTsI0s8g8AZZ24tRYA7Mturec8j\neH7me87E8OudcuZ3n6kC4xlQf9l49LQVMhP+1G85VR2/+VejotMSwffOuW7pnO9G4DqHwJ8E0zMD\nfvlbl0sjs+ljeVoy8N59q1u6by9VgfWqjrsON92ufaZdLvxrF8rg4xje/39slN6tXnn8y48nmfvD\nyJSP4659W9TnzU5544++UQX8H/69cIrRBHJKgDKZGr66AaD/QQz/H0PS57bNuDHgpUrsnjch5A0Q\nl//s5ap+t2Pu+ZxqYOMXN8pwO26i6MUNE3Ge5Utxo8Tr3fLWn3irev3gJx6U4UaOtf9Jab8eN1Xk\nTQ0KAQIECBAgQIAAAQIEjkBAgP4IEB2CAAECBAgQIECAAAECBAgQmF+BDNR2355kUO++ilyX732m\nZJD+tQjaRmZ191JkwUdgPIeBz6HdS/xLy5MAfezYWokAfQzzPg3Q53YZ8M0gfSMyx3eXA9dj9865\nHPVqnco54yNzPOqVAfIsmR3fjaHjq+vJQPw01hyLT7aPYHZm+FfbR4B++e0IXKdJJL4/2b56d9e3\niPPnzQp5g8HSOzEMflzn4NEgsuHjBoW8PyHOv/RO3BjwZpz78sQyt8sAfZ53Oh99OlQ3CGS9JlWo\nTvJSHnGc3D8z/KsbJLJ+caPE4EFMRbAVAfoYbj9vRFi6FDchRFtk+2Qdsp6jjZ07B3YutXW29fTP\nwS4KiwQIECBAgAABAgQIENivgAD9fqVsR4AAAQIECBAgQIAAAQIECCykQDcCyN/2X3/bk4Dxk4uM\nGHK+96ySWdVnfs/ZKhP87O8/Vz3nPOaTodvjOUs1vnw8RTC4CqDH/Oj5PA2GTzaafD9sPabHqALa\nEZjvXuiWL/2lL33qepp5/jh15/WMuE9KBtBX3l0pK1+Ix4+tfHr7GPa92j6Hpn9WyUNGoD3nfH/7\nT71d7V8NI79z6Rlsz6B9HqcKyMfrpcjKz8z5ahqA3dtF8Dxd8maHaXlZjzxeO0YMaK+1P6nfdp58\n5wxRn6pdon65XZalL0zqt7PF5CmOk0PmKwQIECBAgAABAgQIEDgKAQH6o1B0DAIECBAgQIAAAQIE\nCBAgQGB+BSL2mhnUBy4ZgM752aM0T30SWD7wcaY7HLYe0/3jucpEj5j6fq9nmmW/tHKI68/z5mXH\no8qkz9cvKK3OAQLdR+DxpH4xqsB+Sntpf9vt51i2IUCAAAECBAgQIECAwNMEjuCvx6cd1joCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgt4AA/W4NywQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAYEYCAvQzgnVYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwW0CA\nfreGZQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMCMBAfoZwTosAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n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\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Changing Code** I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I then ran the simulation. The console output confirmed that the car was taking actions and that there were instances of all actions within the set [None, 'forward', 'left', 'right']:\n", "\n", "
\n",
    "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n",
    "
\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "...\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Inform the Driving Agent\n", "\n", "### QUESTIONS:\n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States:\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Total number of states**: 4^4 * 2 = 512 states.\n", "\n", "The minimum 'deadline' is `minimum distance` x 5 = 4 x \n", "5 = 20 and the maximum is 12 x 5 = 60. \n", "\n", "If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means **each state will be visited an average of** 20 turns x 100 trials / 512 states i.e. about **4 times**. This is **reasonable but is still quite low**.\n", "\n", "This low number is **why I did not include further state attributes** I considered (see boloew) because that would only reduce the number of visits to each state even further.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States that I considered:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implement a Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent is **more likely to take actions corresponding to `next_waypoint`** when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that **maximise total expected reward**.\n", "\n", "The agent is **less likely to take actions tha result in penalties** (crashing into cars, making illegal moves or making moves that are legal but are not equal to `next_waypoint` so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.\n", "\n", "It does not just move randomly in loops any more." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notes: Debugging 'Implementing a Q-Learning Driving Agent'\n", "1. I realised the agent wasn't acting because the `count` variable was defined wrongly: \n", " - `count` was used to see there were multiple actions with `q-value = maxQ` for that state. \n", " - If `count` > 1, we would randomly choose one action out of the set of actions where `q-value = maxQ`.\n", " - `count` was wrongly defined as `len([maxq])`, which is always equal to one since it is an array with a float in it.\n", " - It should've been `len([i in q if q[i] == max_q])` instead.\n", " - Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.\n", " - This meant the agent often chose `None`.\n", "2. I'd forgotten to incorporate `next_waypoint` into my state. Pretty silly.\n", "3. I wanted to print results after every turn for debugging purposes and put `self.results` in TrafficLight instead of Environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Improve the Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Your final task for this project is to enhance your driving agent so that, after sufficient training, the smartcab is **able to reach the destination within the allotted time safely and efficiently**. \n", "- Parameters in the Q-Learning algorithm, such as the learning rate (alpha), the discount factor (gamma) and the exploration rate (epsilon) all contribute to the driving agent’s ability to learn the best action for each state. \n", "\n", "To improve on the success of your smartcab:\n", "\n", "- Set the number of trials, n_trials, in the simulation to 100.\n", "- Run the simulation with the deadline enforcement enforce_deadline set to True (you will need to reduce the update delay update_delay and set the display to False).\n", "- Observe the driving agent’s learning and smartcab’s success rate, particularly during the later trials.\n", "- Adjust one or several of the above parameters and iterate this process.\n", "\n", "This task is complete once you have **arrived at what you determine is the best combination of parameters required** for your driving agent to learn successfully.\n", "\n", "**QUESTION**: \n", "- Report the different values for the parameters tuned in your basic implementation of Q-Learning. For which set of parameters does the agent perform best? How well does the final driving agent perform?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers:\n", "### 4.1 Planning\n", "\n", "**Procedure**:\n", "1. Run each configuration 50 times (50 sets of 100 trials)\n", "2. Write metrics into separate file\n", "3. Convert to summary statistics over 50 sets\n", "4. Observe statistics\n", "4. Alter list of configurations as appropriate and repeat until satisfied\n", "\n", "The **metrics considered** were\n", "- **Total number of successful outcomes** (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates **inefficiency**.\n", " - **Average buffer** (Time left / Initial deadline) -> Indicates how efficient the driving agent was.\n", "\n", "- **Average number of incorrect actions per trial** (penalties of -1.0) because this indicates an action was **unsafe**.\n", "\n", "The parameters considered were\n", "- Exploration rate Epsilon (epsi)\n", "- Discount rate Gamma (gamma)\n", "- Learning rate Alpha (alpha) \n", "- Default Q value (if one did not exist before (q) -> kept constant at 0.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Optimising\n", "\n", "#### 4.2.1 Optimising for Epsilon" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.20\t0.50\t'1.0/t'\t0.0\t87.78\t0.5179\t1.0810\n", "0.10\t0.50\t'1.0/t'\t0.0\t94.20\t0.5709\t0.5732\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664\n", "0.01\t0.50\t'1.0/t'\t0.0\t98.36\t0.5829\t0.1926" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.\n", "\n", "**Interpretation** This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.\n", "\n", "**Next actions** For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.\n", "\n", "Once we have chosen our gamma and alpha, we will optimise for epsilon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.2 Optimising for Gamma (and Alpha)\n", "\n", "Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/t'\t0.0\t98.00\t0.5705\t0.3694\n", "0.05\t0.25\t'1.0/t'\t0.0\t97.18\t0.5726\t0.3538\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664\n", "0.05\t0.75\t'1.0/t'\t0.0\t94.02\t0.5573\t0.3822\n", "0.05\t0.99\t'1.0/t'\t0.0\t75.30\t0.5399\t0.6030" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.plot([0.01,0.25,0.50,0.75,0.99], [98.00, 97.18,96.50,94.02,75.30], 'b-')\n", "plt.plot([0.01,0.25,0.50,0.75,0.99], [98.00, 97.18,96.50,94.02,75.30], 'ro')\n", "plt.xlabel('Gamma')\n", "plt.ylabel('')\n", "plt.legend(handles=[red_patch])\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "line1, = plt.plot([1,2,3], label=\"Line 1\", linestyle='--')\n", "line2, = plt.plot([3,2,1], label=\"Line 2\", linewidth=4)\n", "\n", "# Create a legend for the first line.\n", "first_legend = plt.legend(handles=[line1], loc=1)\n", "\n", "# Add the legend manually to the current Axes.\n", "ax = plt.gca().add_artist(first_legend)\n", "\n", "# Create another legend for the second line.\n", "plt.legend(handles=[line2], loc=4)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations** \n", "* It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower. \n", "* The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5. \n", "* Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.\n", "\n", "**Next actions** This motivates us to try more Gamma values in the range (0,0.5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.3 Pre-emptive checking for robustness\n", "\n", "We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/(t**0.5)'\t0.0\t98.06\t0.5709\t0.3710\n", "0.05\t0.20\t'1.0/(t**0.5)'\t0.0\t97.76\t0.5767\t0.3568\n", "0.05\t0.25\t'1.0/(t**0.5)'\t0.0\t97.68\t0.5722\t0.3636\n", "0.05\t0.50\t'1.0/(t**0.5)'\t0.0\t96.62\t0.5696\t0.3616\n", "0.05\t0.75\t'1.0/(t**0.5)'\t0.0\t93.76\t0.5539\t0.3888\n", "0.05\t0.99\t'1.0/(t**0.5)'\t0.0\t69.60\t0.5312\t0.7028" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** The **trend differences** were that average penalties continued to decrease as Gamma was increased up to 0.50. \n", "\n", "**Decision-making and next actions** The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was **not worthwhile to experiment with increasing Gamma beyond 0.25**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.4 Continue optimising for Gamma" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/t'\t0.0\t98.00\t0.5705\t0.3694\n", "0.05\t0.25\t'1.0/t'\t0.0\t97.18\t0.5726\t0.3538\n", "0.05\t0.50\t'1.0/t'\t0.0\t96.50\t0.5709\t0.3664" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for **setting Gammma to be around 0.1**.\n", "\n", "For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that **setting Gamma to be around 0.01** would be appropriate because an increase in successes of 0.003% seems to be more signi\n", "...\n", "\n", "**Next Actions**: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.\n", "\n", "We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.5 Optimising for Alpha" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.05\t0.01\t'1.0/(t**0.01)'\t0.0\t97.72\t0.5761\t0.3618\n", "0.05\t0.01\t'1.0/(t**0.25)'\t0.0\t98.06\t0.5722\t0.3608\n", "0.05\t0.01\t'1.0/(t**0.5)'\t0.0\t98.06\t0.5709\t0.3710\n", "0.05\t0.01\t'1.0/(t**0.75)'\t0.0\t97.84\t0.5713\t0.3718\n", "0.05\t0.01\t'1.0/t'\t 0.0\t98.00\t0.5705\t0.3694\n", "\n", "0.05\t0.10\t'1.0/t**0.001'\t0.0\t97.72\t0.5733\t0.3616\n", "0.05\t0.10\t'1.0/(t**0.01)'\t0.0\t98.34\t0.5737\t0.3634\n", "0.05\t0.10\t'1.0/(t**0.25)'\t0.0\t98.06\t0.5723\t0.3608\n", "0.05\t0.10\t'1.0/(t**0.5)'\t0.0\t97.98\t0.5682\t0.3638\n", "0.05\t0.10\t'1.0/(t**0.75)'\t0.0\t97.80\t0.5707\t0.3788\n", "0.05\t0.10\t'1.0/t'\t 0.0\t98.10\t0.5747\t0.3604\n", "\n", "0.05\t0.20\t'1.0/(t**0.01)'\t0.0\t97.80\t0.5653\t0.3730\n", "0.05\t0.20\t'1.0/(t**0.25)'\t0.0\t97.60\t0.5724\t0.3606\n", "0.05\t0.20\t'1.0/(t**0.5)'\t0.0\t97.76\t0.5767\t0.3568\n", "0.05\t0.20\t'1.0/(t**0.75)'\t0.0\t97.88\t0.5694\t0.3632\n", "0.05\t0.20\t'1.0/t'\t 0.0\t97.12\t0.5685\t0.3834" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Alpha=0.01 was doing so well I decided to try Alpha=0.001.)\n", "\n", "For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.\n", "* Pick exp=0.25\n", "\n", "For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.\n", "* Pick exp=0.01\n", "\n", "For Gamma=0.2, \n", "* Pick exp=0.75\n", "\n", "**Overall**: pick Gamma=0.1, Alpha=1/(t**0.01)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.6 Finale: Optimising Epsilon" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "epsi gamma alpha q success avg_buf avg_penalties\n", "0.000\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.70\t0.5861\t0.1706\n", "0.000001\t0.10\t'1.0/(t**0.01)'\t0.0\t98.90\t0.5885\t0.1728\n", "0.000005\t0.10\t'1.0/(t**0.01)'\t0.0\t98.96\t0.5869\t0.1686\n", "0.00001\t 0.10\t'1.0/(t**0.01)'\t0.0\t99.12\t0.5926\t0.1640\n", "0.001\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.98\t0.5963\t0.1692\n", "0.01\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.66\t0.5884\t0.2058\n", "0.05\t 0.10\t'1.0/(t**0.01)'\t0.0\t98.34\t0.5737\t0.3634" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose epsilon = 0.00001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTION\n", "Parameters chosen:\n", "\n", "\n", "\n", "
Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t**0.01)0.0
\n", "\n", "\n", "### Discussion: How well does the final driving agent perform?\n", "\n", "- An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.\n", "- It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)\n", "- It would maxmise net reward and thus likely incur close to 0 -1.0 penalties.\n", "\n", "#### Comparing our driving agent to the optimal policy\n", "\n", "\n", "\n", "\n", "
PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
\n", "\n", "* Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.\n", "\n", "* As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.\n", "\n", "* There are still a significant number of penalties occurring (violations of traffic rules or ). This is suboptimal.\n", "\n", "We then conclude that **our policy is efficient but not nearly as safe as it could be**.\n" ] }, { "cell_type": "code", "execution_count": 115, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 116, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df = pd.read_csv(\"smartcab_parameter_search.csv\")" ] }, { "cell_type": "code", "execution_count": 137, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Len: 1800\n", "epsilon 0.000500\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 98.920000\n", " avg_buffer 0.593003\n", " avg_penalties 0.171400\n", "dtype: float64\n", "epsilon 0.000010\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 99.120000\n", " avg_buffer 0.592551\n", " avg_penalties 0.164000\n", "dtype: float64\n", "epsilon 1.000000e-06\n", " gamma 1.000000e-01\n", " defaultq 0.000000e+00\n", " successes 9.890000e+01\n", " avg_buffer 5.885499e-01\n", " avg_penalties 1.728000e-01\n", "dtype: float64\n", "epsilon 0.000005\n", " gamma 0.100000\n", " defaultq 0.000000\n", " successes 98.960000\n", " avg_buffer 0.586901\n", " avg_penalties 0.168600\n", "dtype: float64\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
epsilongammaalphadefaultqsuccessesavg_bufferavg_penalties
00.2000000.50'1.0/t'0.0880.5226981.06
500.1000000.50'1.0/t'0.0960.5583570.61
1000.0500000.50'1.0/t'0.0960.5367750.43
1500.0100000.50'1.0/t'0.0980.6136010.19
2000.0500000.25'1.0/t'0.0980.6070520.39
2500.0500000.01'1.0/t'0.0990.5673780.33
3000.0500000.75'1.0/t'0.0990.5861670.30
3500.0500000.99'1.0/t'0.0800.5091290.36
4000.0500000.50'1.0/(t**0.5)'0.0920.5574080.31
4500.0500000.25'1.0/(t**0.5)'0.0980.5807030.31
5000.0500000.01'1.0/(t**0.5)'0.0990.5847470.37
5500.0500000.75'1.0/(t**0.5)'0.0930.5607600.48
6000.0500000.20'1.0/(t**0.5)'0.01000.5963770.37
6500.0500000.99'1.0/(t**0.5)'0.0770.5001400.57
7000.0500000.10'1.0/(t**0.5)'0.0990.5594650.31
7500.0500000.10'1.0/t'0.0970.5649910.42
8000.0500000.20'1.0/t'0.0980.5555740.40
8500.0500000.20'1.0/(t**0.25)'0.0960.5490780.37
9000.0500000.20'1.0/(t**0.75)'0.0980.5706070.38
9500.0500000.10'1.0/(t**0.75)'0.0970.5886440.44
10000.0500000.01'1.0/(t**0.75)'0.0990.5695910.44
10500.0500000.01'1.0/(t**0.25)'0.0990.5901370.35
11000.0500000.10'1.0/(t**0.25)'0.0960.5826410.27
11500.0500000.10'1.0/(t**0.01)'0.0990.5722230.26
12000.0500000.01'1.0/(t**0.01)'0.0980.5793700.34
12500.0500000.20'1.0/(t**0.01)'0.0970.5579510.34
13000.0500000.20'1.0/(t**0.001)'0.0940.5429080.40
13500.0500000.10'1.0/(t**0.001)'0.0980.5778330.35
14000.0500000.01'1.0/(t**0.001)'0.0980.5873060.35
14500.0100000.10'1.0/(t**0.01)'0.0990.5854670.15
15000.0010000.10'1.0/(t**0.01)'0.0990.5983600.16
15500.0000000.10'1.0/(t**0.01)'0.0970.6032970.18
16000.0005000.10'1.0/(t**0.01)'0.01000.5984220.17
16500.0000100.10'1.0/(t**0.01)'0.0990.6055510.14
17000.0000010.10'1.0/(t**0.01)'0.01000.6037990.16
17500.0000050.10'1.0/(t**0.01)'0.0980.6159080.16
\n", "
" ], "text/plain": [ " epsilon gamma alpha defaultq successes avg_buffer \\\n", "0 0.200000 0.50 '1.0/t' 0.0 88 0.522698 \n", "50 0.100000 0.50 '1.0/t' 0.0 96 0.558357 \n", "100 0.050000 0.50 '1.0/t' 0.0 96 0.536775 \n", "150 0.010000 0.50 '1.0/t' 0.0 98 0.613601 \n", "200 0.050000 0.25 '1.0/t' 0.0 98 0.607052 \n", "250 0.050000 0.01 '1.0/t' 0.0 99 0.567378 \n", "300 0.050000 0.75 '1.0/t' 0.0 99 0.586167 \n", "350 0.050000 0.99 '1.0/t' 0.0 80 0.509129 \n", "400 0.050000 0.50 '1.0/(t**0.5)' 0.0 92 0.557408 \n", "450 0.050000 0.25 '1.0/(t**0.5)' 0.0 98 0.580703 \n", "500 0.050000 0.01 '1.0/(t**0.5)' 0.0 99 0.584747 \n", "550 0.050000 0.75 '1.0/(t**0.5)' 0.0 93 0.560760 \n", "600 0.050000 0.20 '1.0/(t**0.5)' 0.0 100 0.596377 \n", "650 0.050000 0.99 '1.0/(t**0.5)' 0.0 77 0.500140 \n", "700 0.050000 0.10 '1.0/(t**0.5)' 0.0 99 0.559465 \n", "750 0.050000 0.10 '1.0/t' 0.0 97 0.564991 \n", "800 0.050000 0.20 '1.0/t' 0.0 98 0.555574 \n", "850 0.050000 0.20 '1.0/(t**0.25)' 0.0 96 0.549078 \n", "900 0.050000 0.20 '1.0/(t**0.75)' 0.0 98 0.570607 \n", "950 0.050000 0.10 '1.0/(t**0.75)' 0.0 97 0.588644 \n", "1000 0.050000 0.01 '1.0/(t**0.75)' 0.0 99 0.569591 \n", "1050 0.050000 0.01 '1.0/(t**0.25)' 0.0 99 0.590137 \n", "1100 0.050000 0.10 '1.0/(t**0.25)' 0.0 96 0.582641 \n", "1150 0.050000 0.10 '1.0/(t**0.01)' 0.0 99 0.572223 \n", "1200 0.050000 0.01 '1.0/(t**0.01)' 0.0 98 0.579370 \n", "1250 0.050000 0.20 '1.0/(t**0.01)' 0.0 97 0.557951 \n", "1300 0.050000 0.20 '1.0/(t**0.001)' 0.0 94 0.542908 \n", "1350 0.050000 0.10 '1.0/(t**0.001)' 0.0 98 0.577833 \n", "1400 0.050000 0.01 '1.0/(t**0.001)' 0.0 98 0.587306 \n", "1450 0.010000 0.10 '1.0/(t**0.01)' 0.0 99 0.585467 \n", "1500 0.001000 0.10 '1.0/(t**0.01)' 0.0 99 0.598360 \n", "1550 0.000000 0.10 '1.0/(t**0.01)' 0.0 97 0.603297 \n", "1600 0.000500 0.10 '1.0/(t**0.01)' 0.0 100 0.598422 \n", "1650 0.000010 0.10 '1.0/(t**0.01)' 0.0 99 0.605551 \n", "1700 0.000001 0.10 '1.0/(t**0.01)' 0.0 100 0.603799 \n", "1750 0.000005 0.10 '1.0/(t**0.01)' 0.0 98 0.615908 \n", "\n", " avg_penalties \n", "0 1.06 \n", "50 0.61 \n", "100 0.43 \n", "150 0.19 \n", "200 0.39 \n", "250 0.33 \n", "300 0.30 \n", "350 0.36 \n", "400 0.31 \n", "450 0.31 \n", "500 0.37 \n", "550 0.48 \n", "600 0.37 \n", "650 0.57 \n", "700 0.31 \n", "750 0.42 \n", "800 0.40 \n", "850 0.37 \n", "900 0.38 \n", "950 0.44 \n", "1000 0.44 \n", "1050 0.35 \n", "1100 0.27 \n", "1150 0.26 \n", "1200 0.34 \n", "1250 0.34 \n", "1300 0.40 \n", "1350 0.35 \n", "1400 0.35 \n", "1450 0.15 \n", "1500 0.16 \n", "1550 0.18 \n", "1600 0.17 \n", "1650 0.14 \n", "1700 0.16 \n", "1750 0.16 " ] }, "execution_count": 137, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"smartcab_parameter_search.csv\")\n", "print(\"Len: \", len(df))\n", "\n", "tries = int(len(df)/50)\n", "for i in range(tries-4,tries):\n", " print(df[50*i:50*(i+1)].mean())\n", "\n", "df[::50]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Randos" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df_noa = df.drop(' alpha', axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Add plots" ] } ], "metadata": { "kernelspec": { "display_name": "Python [Root]", "language": "python", "name": "Python [Root]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/smartcab/__init__.py ================================================ ================================================ FILE: p4-smartcab/smartcab/agent.py ================================================ import random from environment import Agent, Environment from planner import RoutePlanner from simulator import Simulator import numpy as np class LearningAgent(Agent): """ An agent that learns to drive in the smartcab world.""" def __init__(self, env): super(LearningAgent, self).__init__(env) # sets self.env = env, state = None, next_waypoint = None, and a default color self.color = 'red' # override color self.planner = RoutePlanner(self.env, self) # simple route planner to get next_waypoint # TODO: Initialize any additional variables here self.q = {} self.actions = [None, 'forward', 'left', 'right'] # Q-Learning parameters self.epsilon = 0.000005 self.alpha = 1 # Alpha is the learning rate self.gamma = 0.1 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.defaultq = 0.0 self.alpha_formula = "" def get_q(self, state, action): """Returns the Q-value array for the given state""" return self.q.get(str((state,action)), self.defaultq) def learn_q(self, state, action, reward, state2): max_state2_q = max([self.get_q(state2, a) for a in self.actions]) old_q = self.get_q(state, action) new_q = old_q*(1 - self.alpha) + \ self.alpha*(reward + self.gamma * max_state2_q) self.q[str((state, action))] = new_q def reset(self, destination=None): self.planner.route_to(destination) # TODO: Prepare for a new trip; reset any variables here, if required # print "q: ", self.q self.alpha = 1 def choose_action(self, state): """Choose an action for a given state.""" # Get all the Q-values corresponding to the current state q = [self.get_q(state, a) for a in self.actions] print "q: ", q # Find the max Q-value for this state max_q = max(q) print "max_q: ", max_q # Find the action corresponding to the max Q-value for this state count = len([i for i in q if i == max_q]) print "count: ", count # If there are multiple actions with Q-value = max Q-value for this state if count > 1: best = [i for i in range(len(self.env.valid_actions)) if q[i] == max_q] print "best: ", best # Pick among the 'best' actions randomly i = random.choice(best) # Else if there is only one 'best' action, else: # Pick the action corresponding to the max Q-value i = q.index(max_q) print "action index: ", i # Return the action return self.actions[i] def update(self, t): """Updates state, chooses action (calls choose_action), executes action, gets reward and learns Q values (calls learn_q)""" # Gather inputs self.next_waypoint = self.planner.next_waypoint() # from route planner, also displayed by simulator print "next_waypoint: ", self.next_waypoint if t != 0: self.alpha = 1.0/(t**(0.01)) self.alpha_formula = "1.0/(t**0.01)" # Variables for state inputs = self.env.sense(self) self.inputs = inputs deadline = self.env.get_deadline(self) # TODO: Update state self.state = [v for v in self.inputs.values()] self.state.append(self.next_waypoint) # print "self.state:" + str(self.state) # TODO: Select action according to your policy random_action = (random.random() < self.epsilon) # Allow for exploration if random_action: print "random" action = random.choice([None, 'forward', 'left', 'right']) else: action = self.choose_action(self.state) print "action: ", action # Execute action and get reward reward = self.env.act(self, action) self.inputs = self.env.sense(self) state2 = [v for v in self.inputs.values()] state2.append(self.next_waypoint) # print "state2: ", state2 # TODO: Learn policy based on state, action, reward self.learn_q(self.state, action, reward, state2) print "LearningAgent.update(): deadline = {}, inputs = {}, \ action = {}, reward = {}".format(deadline, inputs, action, reward) # [debug] # print "location = {}".format(Environment().agent_states[agent]['location']) def run(): """Run the agent for a finite number of trials.""" # Set up environment and agent e = Environment() # create environment (also adds some dummy traffic) a = e.create_agent(LearningAgent) # create agent e.set_primary_agent(a, enforce_deadline=True) # specify agent to track # NOTE: You can set enforce_deadline=False while debugging to allow longer trials # Now simulate it sim = Simulator(e, update_delay=0.001, display=False) # create simulator (uses pygame when display=True, if available) # NOTE: To speed up simulation, reduce update_delay and/or set display=False sim.run(n_trials=100) # run for a specified number of trials # NOTE: To quit midway, press Esc or close pygame window, or hit Ctrl+C on the command-line # Prints relevant figures print "epsilon: ", a.epsilon, "gamma: ", a.gamma, \ "alpha: ", a.alpha_formula, "defaultq: ", a.defaultq """ Commented out because typical env does not have results or penalties attributes print "Results: ", e.results print "Number of Successful Outcomes: ", len(e.results) print "Average buffer: ", np.mean([i[2] for i in e.results]) print "Avg Penalties per Trial: ", e.penalties/100.0 """ print "Q-table: ", a.q # Writes data to file with open('smartcab_parameter_search.csv', "a") as f: f.write(" \n" + repr(a.epsilon) + ", ") f.write(repr(a.gamma) + ", ") f.write(repr(a.alpha_formula) + ", ") f.write(repr(a.defaultq) + ", ") """ Commented out because typical env does not have results or penalties attributes # Number of Successful Outcomes f.write(repr(len(e.results)) + ",") # Average buffer f.write(repr(np.mean([i[2] for i in e.results])) + ", ") # Average Penalties per Trial f.write(repr(e.penalties/100.0)) """ if __name__ == '__main__': for i in range(50): run() ================================================ FILE: p4-smartcab/smartcab/environment.py ================================================ import time import random from collections import OrderedDict from simulator import Simulator class TrafficLight(object): """A traffic light that switches periodically.""" valid_states = [True, False] # True = NS open, False = EW open def __init__(self, state=None, period=None): self.state = state if state is not None else random.choice(self.valid_states) self.period = period if period is not None else random.choice([3, 4, 5]) self.last_updated = 0 def reset(self): self.last_updated = 0 def update(self, t): if t - self.last_updated >= self.period: self.state = not self.state # assuming state is boolean self.last_updated = t class Environment(object): """Environment within which all agents operate.""" valid_actions = [None, 'forward', 'left', 'right'] valid_inputs = {'light': TrafficLight.valid_states, 'oncoming': valid_actions, 'left': valid_actions, 'right': valid_actions} valid_headings = [(1, 0), (0, -1), (-1, 0), (0, 1)] # ENWS hard_time_limit = -100 # even if enforce_deadline is False, end trial when deadline reaches this value (to avoid deadlocks) def __init__(self, num_dummies=3): self.num_dummies = num_dummies # no. of dummy agents # Initialize simulation variables self.done = False self.t = 0 self.agent_states = OrderedDict() self.status_text = "" self.results = [] self.total_reward = 0.0 self.penalties = 0.0 # Road network self.grid_size = (8, 6) # (cols, rows) self.bounds = (1, 1, self.grid_size[0], self.grid_size[1]) self.block_size = 100 self.intersections = OrderedDict() self.roads = [] for x in xrange(self.bounds[0], self.bounds[2] + 1): for y in xrange(self.bounds[1], self.bounds[3] + 1): self.intersections[(x, y)] = TrafficLight() # a traffic light at each intersection for a in self.intersections: for b in self.intersections: if a == b: continue if (abs(a[0] - b[0]) + abs(a[1] - b[1])) == 1: # L1 distance = 1 self.roads.append((a, b)) # Dummy agents for i in xrange(self.num_dummies): self.create_agent(DummyAgent) # Primary agent and associated parameters self.primary_agent = None # to be set explicitly self.enforce_deadline = False def create_agent(self, agent_class, *args, **kwargs): agent = agent_class(self, *args, **kwargs) self.agent_states[agent] = {'location': random.choice(self.intersections.keys()), 'heading': (0, 1)} return agent def set_primary_agent(self, agent, enforce_deadline=False): self.primary_agent = agent self.enforce_deadline = enforce_deadline def reset(self): self.done = False self.t = 0 self.total_reward = 0.0 # Reset traffic lights for traffic_light in self.intersections.itervalues(): traffic_light.reset() # Pick a start and a destination start = random.choice(self.intersections.keys()) destination = random.choice(self.intersections.keys()) # Ensure starting location and destination are not too close while self.compute_dist(start, destination) < 4: start = random.choice(self.intersections.keys()) destination = random.choice(self.intersections.keys()) start_heading = random.choice(self.valid_headings) deadline = self.compute_dist(start, destination) * 5 self.initial_deadline = deadline print "Environment.reset(): Trial set up with start = {}, destination = {}, deadline = {}".format(start, destination, deadline) # Initialize agent(s) for agent in self.agent_states.iterkeys(): self.agent_states[agent] = { 'location': start if agent is self.primary_agent else random.choice(self.intersections.keys()), 'heading': start_heading if agent is self.primary_agent else random.choice(self.valid_headings), 'destination': destination if agent is self.primary_agent else None, 'deadline': deadline if agent is self.primary_agent else None} agent.reset(destination=(destination if agent is self.primary_agent else None)) def step(self): #print "Environment.step(): t = {}".format(self.t) # [debug] # Update traffic lights for intersection, traffic_light in self.intersections.iteritems(): traffic_light.update(self.t) # Update agents for agent in self.agent_states.iterkeys(): agent.update(self.t) if self.done: return # primary agent might have reached destination if self.primary_agent is not None: agent_deadline = self.agent_states[self.primary_agent]['deadline'] if agent_deadline <= self.hard_time_limit: self.done = True print "Environment.step(): Primary agent hit hard time limit ({})! Trial aborted.".format(self.hard_time_limit) elif self.enforce_deadline and agent_deadline <= 0: self.done = True self.results.append((state['deadline'], self.initial_deadline, float(state['deadline'])/float(self.initial_deadline), reward, self.total_reward, self.penalties)) print "Results: ", self.results print "Environment.step(): Primary agent ran out of time! Trial aborted." self.agent_states[self.primary_agent]['deadline'] = agent_deadline - 1 self.t += 1 def sense(self, agent): assert agent in self.agent_states, "Unknown agent!" state = self.agent_states[agent] location = state['location'] heading = state['heading'] light = 'green' if (self.intersections[location].state and heading[1] != 0) or ((not self.intersections[location].state) and heading[0] != 0) else 'red' # Populate oncoming, left, right oncoming = None left = None right = None for other_agent, other_state in self.agent_states.iteritems(): if agent == other_agent or location != other_state['location'] or (heading[0] == other_state['heading'][0] and heading[1] == other_state['heading'][1]): continue other_heading = other_agent.get_next_waypoint() if (heading[0] * other_state['heading'][0] + heading[1] * other_state['heading'][1]) == -1: if oncoming != 'left': # we don't want to override oncoming == 'left' oncoming = other_heading elif (heading[1] == other_state['heading'][0] and -heading[0] == other_state['heading'][1]): if right != 'forward' and right != 'left': # we don't want to override right == 'forward or 'left' right = other_heading else: if left != 'forward': # we don't want to override left == 'forward' left = other_heading return {'light': light, 'oncoming': oncoming, 'left': left, 'right': right} def get_deadline(self, agent): return self.agent_states[agent]['deadline'] if agent is self.primary_agent else None def act(self, agent, action): assert agent in self.agent_states, "Unknown agent!" assert action in self.valid_actions, "Invalid action!" state = self.agent_states[agent] location = state['location'] heading = state['heading'] light = 'green' if (self.intersections[location].state and heading[1] != 0) or ((not self.intersections[location].state) and heading[0] != 0) else 'red' inputs = self.sense(agent) # Move agent if within bounds and obeys traffic rules reward = 0 # reward/penalty move_okay = True if action == 'forward': if light != 'green': move_okay = False elif action == 'left': if light == 'green' and (inputs['oncoming'] == None or inputs['oncoming'] == 'left'): heading = (heading[1], -heading[0]) else: move_okay = False elif action == 'right': if light == 'green' or inputs['left'] != 'forward': heading = (-heading[1], heading[0]) else: move_okay = False if move_okay: # Valid move (could be null) if action is not None: # Valid non-null move location = ((location[0] + heading[0] - self.bounds[0]) % (self.bounds[2] - self.bounds[0] + 1) + self.bounds[0], (location[1] + heading[1] - self.bounds[1]) % (self.bounds[3] - self.bounds[1] + 1) + self.bounds[1]) # wrap-around #if self.bounds[0] <= location[0] <= self.bounds[2] and self.bounds[1] <= location[1] <= self.bounds[3]: # bounded state['location'] = location state['heading'] = heading reward = 2.0 if action == agent.get_next_waypoint() else -0.5 # valid, but is it correct? (as per waypoint) else: # Valid null move reward = 0.0 else: # Invalid move reward = -1.0 self.penalties += 1.0 if agent is self.primary_agent: if state['location'] == state['destination']: if state['deadline'] >= 0: reward += 10 # bonus self.done = True print "Environment.act(): Primary agent has reached destination!" # [debug] self.results.append((state['deadline'], self.initial_deadline, float(state['deadline'])/float(self.initial_deadline), reward, self.total_reward, self.penalties)) print "Results: ", self.results self.status_text = "state: {}\naction: {}\nreward: {}".format(agent.get_state(), action, reward) #print "Environment.act() [POST]: location: {}, heading: {}, action: {}, reward: {}".format(location, heading, action, reward) # [debug] self.total_reward += reward return reward def compute_dist(self, a, b): """L1 distance between two points.""" return abs(b[0] - a[0]) + abs(b[1] - a[1]) class Agent(object): """Base class for all agents.""" def __init__(self, env): self.env = env self.state = None self.next_waypoint = None self.color = 'cyan' def reset(self, destination=None): pass def update(self, t): pass def get_state(self): return self.state def get_next_waypoint(self): return self.next_waypoint class DummyAgent(Agent): color_choices = ['blue', 'cyan', 'magenta', 'orange'] def __init__(self, env): super(DummyAgent, self).__init__(env) # sets self.env = env, state = None, next_waypoint = None, and a default color self.next_waypoint = random.choice(Environment.valid_actions[1:]) self.color = random.choice(self.color_choices) def update(self, t): inputs = self.env.sense(self) action_okay = True if self.next_waypoint == 'right': if inputs['light'] == 'red' and inputs['left'] == 'forward': action_okay = False elif self.next_waypoint == 'forward': if inputs['light'] == 'red': action_okay = False elif self.next_waypoint == 'left': if inputs['light'] == 'red' or (inputs['oncoming'] == 'forward' or inputs['oncoming'] == 'right'): action_okay = False action = None if action_okay: action = self.next_waypoint self.next_waypoint = random.choice(Environment.valid_actions[1:]) reward = self.env.act(self, action) #print "DummyAgent.update(): t = {}, inputs = {}, action = {}, reward = {}".format(t, inputs, action, reward) # [debug] #print "DummyAgent.update(): next_waypoint = {}".format(self.next_waypoint) # [debug] ================================================ FILE: p4-smartcab/smartcab/planner.py ================================================ import random class RoutePlanner(object): """Silly route planner that is meant for a perpendicular grid network.""" def __init__(self, env, agent): self.env = env self.agent = agent self.destination = None def route_to(self, destination=None): self.destination = destination if destination is not None else random.choice(self.env.intersections.keys()) print "RoutePlanner.route_to(): destination = {}".format(destination) # [debug] def next_waypoint(self): location = self.env.agent_states[self.agent]['location'] heading = self.env.agent_states[self.agent]['heading'] delta = (self.destination[0] - location[0], self.destination[1] - location[1]) if delta[0] == 0 and delta[1] == 0: return None elif delta[0] != 0: # EW difference if delta[0] * heading[0] > 0: # facing correct EW direction return 'forward' elif delta[0] * heading[0] < 0: # facing opposite EW direction return 'right' # long U-turn elif delta[0] * heading[1] > 0: return 'left' else: return 'right' elif delta[1] != 0: # NS difference (turn logic is slightly different) if delta[1] * heading[1] > 0: # facing correct NS direction return 'forward' elif delta[1] * heading[1] < 0: # facing opposite NS direction return 'right' # long U-turn elif delta[1] * heading[0] > 0: return 'right' else: return 'left' ================================================ FILE: p4-smartcab/smartcab/qtable.js ================================================ Q - table: { "(['green', None, None, None, 'forward'], 'right')": -0.4931163522466796, "(['green', None, 'right', None, 'left'], 'forward')": -0.27778718266687985, "(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.9709848728109067, "(['red', None, None, 'right', 'forward'], 'right')": -0.4931163522466796, "(['red', None, None, None, 'left'], 'forward')": -0.9822419709752422, "(['green', None, 'forward', None, 'forward'], 'left')": -0.29179648422368565, "(['red', 'right', None, None, 'forward'], 'forward')": -0.9862327044933592, "(['green', None, None, 'left', 'forward'], 'forward')": 2.0049584124086355, "(['red', 'left', None, None, 'forward'], 'right')": -0.48815312906252556, "(['green', 'left', None, None, 'forward'], 'right')": -0.4891336928645855, "(['green', None, None, None, 'forward'], 'forward')": 2.2193657785006304, "(['green', None, None, None, 'right'], 'left')": -0.5, "(['green', None, None, 'forward', 'left'], 'left')": 11.700135637090813, "(['red', None, None, 'left', 'forward'], 'forward')": -0.9794202975869267, "(['red', None, 'right', None, 'forward'], 'right')": -0.49453700208608536, "(['green', None, 'right', None, 'forward'], 'forward')": 2.2274659403436936, "(['red', None, None, None, 'forward'], 'forward')": -0.9732828871408282, "(['red', 'left', None, None, 'forward'], 'left')": -0.980729004722915, "(['green', 'left', None, None, 'forward'], 'left')": -0.48524347519648, "(['green', None, None, 'left', 'left'], 'right')": -0.27547409231969017, "(['red', None, None, None, 'left'], 'right')": -0.4891336928645855, "(['green', None, 'right', None, 'forward'], 'right')": -0.48815312906252556, "(['red', None, 'right', None, 'forward'], 'forward')": -0.978267385729171, "(['green', None, None, None, 'right'], 'right')": 13.171420731131954, "(['green', None, 'left', None, 'left'], 'right')": -0.5, "(['red', None, 'forward', None, 'forward'], 'forward')": -0.9739546146477603, "(['red', None, 'forward', None, 'forward'], 'right')": -0.48971014879346336, "(['green', None, None, None, 'left'], 'left')": 3.1759412296983642, "(['red', None, None, None, 'forward'], 'right')": -0.29658952523395604, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.9992281432099894, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.9794202975869267, "(['green', None, None, None, 'forward'], 'left')": -0.487728565039398, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['red', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -0.9890740041721707, "(['green', 'left', None, None, 'forward'], 'forward')": 12.190438177539278, "(['red', None, None, None, 'right'], 'right')": 2.2222222153127493, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.48971014879346336, "(['green', 'forward', None, None, 'forward'], 'forward')": 3.126853392296446, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.9840344433634577, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'forward'], 'left')": -0.9930924954370358, "(['green', None, None, 'forward', 'forward'], 'left')": -0.27389085408427283, "(['red', None, 'left', None, 'forward'], 'right')": -0.49453700208608536, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.9890740041721707, "(['red', None, None, 'forward', 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'left')": -0.9746766601759773, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 2.222222220400406, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.9930924954370358, "(['green', None, None, 'forward', 'right'], 'left')": 9.534865318455505, "(['green', None, None, None, 'right'], 'forward')": -0.5, "(['green', None, 'right', None, 'forward'], 'left')": -0.16735469516070461, "(['green', None, 'left', None, 'forward'], 'forward')": 2.2791243298638224, "(['green', None, 'left', None, 'forward'], 'right')": -0.5, "(['red', None, None, 'forward', 'forward'], 'right')": -0.9794202975869267, "(['green', 'right', None, None, 'forward'], 'right')": -0.4903645023614575, "(['green', 'right', None, None, 'left'], 'right')": -0.2734188189395401 } ================================================ FILE: p4-smartcab/smartcab/report.html ================================================ smartcab-report

P4 Smartcab

1. Implement a Basic Driving Agent

Process

Understanding the game The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so enforce_deadline was set to True.

In [28]:
from IPython.display import Image
Image(filename='img/grid.png') 
Out[28]:

Changing Code I then (1) modified action within the LearningAgent's update function in agent.py to make the car choose actions randomly instead of not at all:

action = random.choice([None, 'forward', 'left', 'right'])

and (2) set enforce_deadline=False.

QUESTIONS:

  1. Observe what you see with the agent's behavior as it takes random actions.
    • The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn)
    • The agent often goes around in loops.
  2. Does the smartcab eventually make it to the destination?
    • It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)
  3. Are there any other interesting observations to note?
    • The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa.
In [ ]:
# Console output for Trial 2 - Did not make it to destination

Simulator.run(): Trial 2
Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30
RoutePlanner.route_to(): destination = (6, 6)
LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0
LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0
...
LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0
LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0
LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0
...
LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0
LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5
Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted.

2. Inform the Driving Agent

QUESTIONS:

  • What states have you identified that are appropriate for modeling the smartcab and environment?
  • Why do you believe each of these states to be appropriate for this problem?

States:

AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4

OPTIONAL:

  • How many states in total exist for the smartcab in this environment?
  • Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?

Total number of states: 4^4 * 2 = 512 states.

The minimum 'deadline' is minimum distance x 5 = 4 x 5 = 20 and the maximum is 12 x 5 = 60.

If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means each state will be visited an average of 20 turns x 100 trials / 512 states i.e. about 4 times. This is reasonable but is still quite low.

This low number is why I did not include further state attributes I considered (see boloew) because that would only reduce the number of visits to each state even further.

States that I considered:

AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38

Glossary:

  • Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).
  • Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS
  • inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do.
In [ ]:
Image(filename="img/input_right.png")

3. Implement a Q-Learning Driving Agent

Q-learning algorithm The crux of the Q-learning algorithm is

new_q = old_q*(1 - self.alpha) + self.alpha*(reward + self.gamma * max_state2_q)

in the learn_q function in agent.py.

Choosing actions The agent chooses the best action to take by choosing the action with the maximum Q-value for the corresponding state. It chooses a random action if there are multiple actions where the resulting Q-value = maxQ.

Exploration The agent also chooses a random action with probability epsilon. This allows it to escape if it 'gets stuck' in some suboptimal local optima.

Decaying learning rate (1/t) The initial learning rate is high at Alpha=1 so the agent learns quickly. As time goes on, the agent becomes more confident with what it's learned and is less persuaded by new information.

QUESTION:

  • What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?

The agent is more likely to take actions corresponding to next_waypoint when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that maximise total expected reward.

The agent is less likely to take actions tha result in penalties (crashing into cars, making illegal moves or making moves that are legal but are not equal to next_waypoint so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.

The agent reaches the destination more frequently: after implementing Q-learning, it reaches the destination in time over 80% of the time, whereas while it was moving randomly it reached the destination in time less than 10% of the time. The agent does not just move randomly in loops any more.

As the agent gains experience, it is less likely to go around in loops or get penalised for going against traffic rules or crashing into other cars.

Notes: Debugging 'Implementing a Q-Learning Driving Agent'

  1. I realised the agent wasn't acting because the count variable was defined wrongly:
    • count was used to see there were multiple actions with q-value = maxQ for that state.
    • If count > 1, we would randomly choose one action out of the set of actions where q-value = maxQ.
    • count was wrongly defined as len([maxq]), which is always equal to one since it is an array with a float in it.
    • It should've been len([i in q if q[i] == max_q]) instead.
    • Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.
    • This meant the agent often chose None.
  2. I'd forgotten to incorporate next_waypoint into my state. Pretty silly.
  3. I wanted to print results after every turn for debugging purposes and put self.results in TrafficLight instead of Environment.

4. Improve the Q-Learning Driving Agent

4.1 Planning

Procedure:

  1. Run each configuration 50 times (50 sets of 100 trials)
  2. Write metrics into separate file
  3. Convert to summary statistics over 50 sets
  4. Observe statistics
  5. Alter list of configurations as appropriate and repeat until satisfied

The metrics considered were

  • Total number of successful outcomes (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates inefficiency.

    • Average buffer (Time left / Initial deadline) -> Indicates how efficient the driving agent was.
  • Average number of incorrect actions per trial (penalties of -1.0) because this indicates an action was unsafe.

The parameters considered were

  • Exploration rate Epsilon (epsilon)
  • Discount rate Gamma (gamma)
  • Learning rate Alpha (alpha)
  • Default Q value (if one did not exist before (default_q)

4.2 Optimising

4.2.1 Optimising for Epsilon

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.200.50'1.0/t'0.087.780.51791.0810
0.100.50'1.0/t'0.094.200.57090.5732
0.050.50'1.0/t'0.096.500.57090.3664
0.010.50'1.0/t'0.098.360.58290.1926

Observation It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.

Interpretation This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.

Next actions For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.

Once we have chosen our gamma and alpha, we will optimise for epsilon.

4.2.2 Optimising for Gamma (and Alpha)

Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma.

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
0.050.75'1.0/t'0.094.020.55730.3822
0.050.99'1.0/t'0.075.300.53990.6030

Observations

  • It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower.
  • The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5.
  • Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.

Next actions This motivates us to try more Gamma values in the range (0,0.5).

4.2.3 Pre-emptive checking for robustness

We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
0.050.75'1.0/(t^0.5)'0.093.760.55390.3888
0.050.99'1.0/(t^0.5)'0.069.600.53120.7028

Observation The trend differences were that average penalties continued to decrease as Gamma was increased up to 0.50.

Decision-making and next actions The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was not worthwhile to experiment with increasing Gamma beyond 0.25.

4.2.4 Continue optimising for Gamma

Alpha = '1.0/t'

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664

Alpha = '1.0/(t^0.5)'

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616

Observations: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for setting Gammma to be around 0.1.

For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that setting Gamma to be around 0.01 would be appropriate because an increase in successes of 0.3 trials (per 100) is more important than decreasing average penalty by 0.008 per trial.

Next Actions: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.

We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20.

4.2.5 Optimising for Alpha

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.01)'0.097.720.57610.3618
0.050.01'1.0/(t^0.25)'0.098.060.57220.3608
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.01'1.0/(t^0.75)'0.097.840.57130.3718
0.050.01'1.0/t' 0.098.000.57050.3694
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.10'1.0/(t^0.001)'0.097.720.57330.3616
0.050.10'1.0/(t^0.01)'0.098.340.57370.3634
0.050.10'1.0/(t^0.25)'0.098.060.57230.3608
0.050.10'1.0/(t^0.5)'0.097.980.56820.3638
0.050.10'1.0/(t^0.75)'0.097.800.57070.3788
0.050.10'1.0/t' 0.098.100.57470.3604
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.20'1.0/(t^0.01)'0.097.800.56530.3730
0.050.20'1.0/(t^0.25)'0.097.600.57240.3606
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.20'1.0/(t^0.75)'0.097.880.56940.3632
0.050.20'1.0/t' 0.097.120.56850.3834
In [29]:
Image(filename='img/heatmap-alpha-gamma.png') 
Out[29]:

(Alpha=0.01 was doing so well I decided to try Alpha=0.001. The heat map is not continuous which seems strange.)

For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.

  • Pick exp=0.25

For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.

  • Pick exp=0.01

For Gamma=0.2,

  • Pick exp=0.75

Overall: pick Gamma=0.1, Alpha=1/(t^0.01).

4.2.6 Optimising Epsilon

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.000 0.10'1.0/(t^0.01)'0.098.700.58610.1706
0.0000010.10'1.0/(t^0.01)'0.098.900.58850.1728
0.0000050.10'1.0/(t^0.01)'0.098.960.58690.1686
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.001 0.10'1.0/(t^0.01)'0.098.980.59630.1692
0.01 0.10'1.0/(t^0.01)'0.098.660.58840.2058
0.05 0.10'1.0/(t^0.01)'0.098.340.57370.3634

Choose epsilon = 0.00001.

4.2.7 Optimising default Q-value

epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.00001 0.10'1.0/(t^0.01)'0.598.660.58890.1760
0.00001 0.10'1.0/(t^0.01)'1.098.880.58860.1844
0.00001 0.10'1.0/(t^0.01)'2.099.120.59120.1848
0.00001 0.10'1.0/(t^0.01)'2.598.480.58270.1974

successes 98.480000 avg_buffer 0.582687 avg_penalties 0.197400

A default Q-value of 0.0 has the best performance, though a default Q-value of 2.0 interestingly comes very close. For more robust results, I would try smaller increments of Q with larger 100-trial sets.

It seems that moderate optimism in the face of uncertainty is a less optimal assumption here.

(Note: I only tested different Q-values on this particular set of epsilon, gamma and alpha values. It is possible higher Q-values will work better for other epsilon, gamma and alpha.)

QUESTIONS:

Parameters chosen:

Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t^0.01)0.0

Discussion: How well does the final driving agent perform?

  • An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.
  • It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)
  • It would maxmise net reward and thus likely incur close to zero -1.0 penalties.

Comparing our driving agent to the optimal policy

PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
  • Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.

  • As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.

  • There are still a significant number of penalties occurring (violations of traffic rules or crashing). This is suboptimal.

Penalties that occurred in the last 10 trials in a set:

Trial 94:

  • next_waypoint: forward
  • q: [0.0, 0.0, 0.0, 0.0]
  • max_q: 0.0
  • action: forward
  • LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0

Trial 99:

  • next_waypoint: forward
  • q: [0.0, 0.0, 0.0, -0.48971014879346336]
  • max_q: 0.0
  • action: forward
  • LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -1.0

The penalties occur because the agent has had little (99) or no (94) previous experience in this state. These are usually states where oncoming, right, or left are not blank.

We then conclude that our policy is efficient but not nearly as safe as it could be.

================================================ FILE: p4-smartcab/smartcab/simulator.py ================================================ import os import time import random import importlib class Simulator(object): """Simulates agents in a dynamic smartcab environment. Uses PyGame to display GUI, if available. """ colors = { 'black' : ( 0, 0, 0), 'white' : (255, 255, 255), 'red' : (255, 0, 0), 'green' : ( 0, 255, 0), 'blue' : ( 0, 0, 255), 'cyan' : ( 0, 200, 200), 'magenta' : (200, 0, 200), 'yellow' : (255, 255, 0), 'orange' : (255, 128, 0) } def __init__(self, env, size=None, update_delay=1.0, display=True): self.env = env self.size = size if size is not None else ((self.env.grid_size[0] + 1) * self.env.block_size, (self.env.grid_size[1] + 1) * self.env.block_size) self.width, self.height = self.size self.bg_color = self.colors['white'] self.road_width = 5 self.road_color = self.colors['black'] self.quit = False self.start_time = None self.current_time = 0.0 self.last_updated = 0.0 self.update_delay = update_delay # duration between each step (in secs) self.display = display if self.display: try: self.pygame = importlib.import_module('pygame') self.pygame.init() self.screen = self.pygame.display.set_mode(self.size) self.frame_delay = max(1, int(self.update_delay * 1000)) # delay between GUI frames in ms (min: 1) self.agent_sprite_size = (32, 32) self.agent_circle_radius = 10 # radius of circle, when using simple representation for agent in self.env.agent_states: agent._sprite = self.pygame.transform.smoothscale(self.pygame.image.load(os.path.join("images", "car-{}.png".format(agent.color))), self.agent_sprite_size) agent._sprite_size = (agent._sprite.get_width(), agent._sprite.get_height()) self.font = self.pygame.font.Font(None, 28) self.paused = False except ImportError as e: self.display = False print "Simulator.__init__(): Unable to import pygame; display disabled.\n{}: {}".format(e.__class__.__name__, e) except Exception as e: self.display = False print "Simulator.__init__(): Error initializing GUI objects; display disabled.\n{}: {}".format(e.__class__.__name__, e) def run(self, n_trials=1): self.quit = False for trial in xrange(n_trials): print "Simulator.run(): Trial {}".format(trial) # [debug] self.env.reset() self.current_time = 0.0 self.last_updated = 0.0 self.start_time = time.time() while True: try: # Update current time self.current_time = time.time() - self.start_time #print "Simulator.run(): current_time = {:.3f}".format(self.current_time) # Handle GUI events if self.display: for event in self.pygame.event.get(): if event.type == self.pygame.QUIT: self.quit = True elif event.type == self.pygame.KEYDOWN: if event.key == 27: # Esc self.quit = True elif event.unicode == u' ': self.paused = True if self.paused: self.pause() # Update environment if self.current_time - self.last_updated >= self.update_delay: self.env.step() self.last_updated = self.current_time # Render GUI and sleep if self.display: self.render() self.pygame.time.wait(self.frame_delay) except KeyboardInterrupt: self.quit = True finally: if self.quit or self.env.done: break if self.quit: break def render(self): # Clear screen self.screen.fill(self.bg_color) # Draw elements # * Static elements for road in self.env.roads: self.pygame.draw.line(self.screen, self.road_color, (road[0][0] * self.env.block_size, road[0][1] * self.env.block_size), (road[1][0] * self.env.block_size, road[1][1] * self.env.block_size), self.road_width) for intersection, traffic_light in self.env.intersections.iteritems(): self.pygame.draw.circle(self.screen, self.road_color, (intersection[0] * self.env.block_size, intersection[1] * self.env.block_size), 10) if traffic_light.state: # North-South is open self.pygame.draw.line(self.screen, self.colors['green'], (intersection[0] * self.env.block_size, intersection[1] * self.env.block_size - 15), (intersection[0] * self.env.block_size, intersection[1] * self.env.block_size + 15), self.road_width) else: # East-West is open self.pygame.draw.line(self.screen, self.colors['green'], (intersection[0] * self.env.block_size - 15, intersection[1] * self.env.block_size), (intersection[0] * self.env.block_size + 15, intersection[1] * self.env.block_size), self.road_width) # * Dynamic elements for agent, state in self.env.agent_states.iteritems(): # Compute precise agent location here (back from the intersection some) agent_offset = (2 * state['heading'][0] * self.agent_circle_radius, 2 * state['heading'][1] * self.agent_circle_radius) agent_pos = (state['location'][0] * self.env.block_size - agent_offset[0], state['location'][1] * self.env.block_size - agent_offset[1]) agent_color = self.colors[agent.color] if hasattr(agent, '_sprite') and agent._sprite is not None: # Draw agent sprite (image), properly rotated rotated_sprite = agent._sprite if state['heading'] == (1, 0) else self.pygame.transform.rotate(agent._sprite, 180 if state['heading'][0] == -1 else state['heading'][1] * -90) self.screen.blit(rotated_sprite, self.pygame.rect.Rect(agent_pos[0] - agent._sprite_size[0] / 2, agent_pos[1] - agent._sprite_size[1] / 2, agent._sprite_size[0], agent._sprite_size[1])) else: # Draw simple agent (circle with a short line segment poking out to indicate heading) self.pygame.draw.circle(self.screen, agent_color, agent_pos, self.agent_circle_radius) self.pygame.draw.line(self.screen, agent_color, agent_pos, state['location'], self.road_width) if agent.get_next_waypoint() is not None: self.screen.blit(self.font.render(agent.get_next_waypoint(), True, agent_color, self.bg_color), (agent_pos[0] + 10, agent_pos[1] + 10)) if state['destination'] is not None: self.pygame.draw.circle(self.screen, agent_color, (state['destination'][0] * self.env.block_size, state['destination'][1] * self.env.block_size), 6) self.pygame.draw.circle(self.screen, agent_color, (state['destination'][0] * self.env.block_size, state['destination'][1] * self.env.block_size), 15, 2) # * Overlays text_y = 10 for text in self.env.status_text.split('\n'): self.screen.blit(self.font.render(text, True, self.colors['red'], self.bg_color), (100, text_y)) text_y += 20 # Flip buffers self.pygame.display.flip() def pause(self): abs_pause_time = time.time() pause_text = "[PAUSED] Press any key to continue..." self.screen.blit(self.font.render(pause_text, True, self.colors['cyan'], self.bg_color), (100, self.height - 40)) self.pygame.display.flip() print pause_text # [debug] while self.paused: for event in self.pygame.event.get(): if event.type == self.pygame.KEYDOWN: self.paused = False self.pygame.time.wait(self.frame_delay) self.screen.blit(self.font.render(pause_text, True, self.bg_color, self.bg_color), (100, self.height - 40)) self.start_time += (time.time() - abs_pause_time) ================================================ FILE: p4-smartcab/smartcab/trial-data/data.js ================================================ # Sample console output Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (6, 5), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 2), deadline = 25 RoutePlanner.route_to(): destination = (4, 2) LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (3, 2), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 # Console output for Trial 2 - Did not make it to destination Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30 RoutePlanner.route_to(): destination = (6, 6) LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 LearningAgent.update(): deadline = -3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = -14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -55, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -56, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -57, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -58, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -59, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -60, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -61, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -62, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -63, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -64, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = -65, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -66, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = -67, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -68, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -69, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -70, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -71, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -72, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -73, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -74, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -75, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -76, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 LearningAgent.update(): deadline = -77, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -78, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -79, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -80, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -81, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -82, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -83, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -84, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 LearningAgent.update(): deadline = -85, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -86, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -87, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 LearningAgent.update(): deadline = -88, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = -89, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -90, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 LearningAgent.update(): deadline = -91, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 LearningAgent.update(): deadline = -92, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 LearningAgent.update(): deadline = -93, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -94, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -95, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -96, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 LearningAgent.update(): deadline = -97, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -98, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted. ================================================ FILE: p4-smartcab/smartcab/trial-data/trial1.js ================================================ 2016-09-19 19:19:58.238 python[48521:16906622] 19:19:58.238 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API's in AudioComponent.h. Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (4, 2), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) {} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (5, 4), destination = (1, 5), deadline = 25 RoutePlanner.route_to(): destination = (1, 5) {"(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (4, 3), destination = (8, 5), deadline = 30 RoutePlanner.route_to(): destination = (8, 5) {"(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 0.9833735701200897, "(['red', None, None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (6, 6), destination = (2, 4), deadline = 30 RoutePlanner.route_to(): destination = (2, 4) {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 0.8663659501212374, "(['green', None, None, None, 'possible'], 'left')": 0.023605794097292934, "(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 1.2930297365488193, "(['green', None, None, None, 'possible'], 'left')": 0.023605794097292934, "(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.4040276127959852} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (1, 4), destination = (4, 1), deadline = 30 RoutePlanner.route_to(): destination = (4, 1) {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 2.1590342037627703, "(['green', None, None, None, 'possible'], 'left')": 0.023605794097292934, "(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['red', None, None, None, 'possible'], 'left')": 0.10568110108602534, "(['red', None, None, None, 'possible'], 'forward')": -0.04313678037609564, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.20763054018195115, "(['red', None, None, None, 'possible'], 'right')": 2.121615301674145} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (8, 2), destination = (2, 1), deadline = 35 RoutePlanner.route_to(): destination = (2, 1) {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 2.474170684212484, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.7526187401553863, "(['green', None, None, None, 'possible'], 'left')": 0.22634045808352143, "(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['red', None, None, None, 'possible'], 'left')": 0.10568110108602534, "(['red', None, None, None, 'possible'], 'forward')": -0.04313678037609564, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.20763054018195115, "(['red', None, None, None, 'possible'], 'right')": 3.150150093055677, "(['green', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 ================================================ FILE: p4-smartcab/smartcab/trial-data/trial10.js ================================================ ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (2, 4), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {} next_waypoint: right random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, -1.0, -1.0, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.0, -0.16666666666666666, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.2, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.2, -0.16666666666666666, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.2, -0.16666666666666666, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.2, -0.16666666666666666, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.07692307692307693, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 0.125] max_q: 0.125 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, 0.0, -0.03571428571428571] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, 0.0, -0.03571428571428571] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (3, 6), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['green', None, None, None, 'forward'], 'forward')": 0.16666666666666666, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 0.2389705882352941, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['red', None, None, None, 'forward'], 'right')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'left')": -0.125} next_waypoint: left q: [0.0, 0.0, 0.0, -0.05] max_q: 0.0 count: 3 best: [0, 1, 2] action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -1.0, 0.0, -0.03333333333333333] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, 0.0, -0.03333333333333333] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.025, 0.0, -0.05] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.16666666666666666, 0.0, 0.0] max_q: 0.166666666667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 0.2389705882352941] max_q: 0.238970588235 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.03571428571428571] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 0.3270220588235294] max_q: 0.327022058824 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -1.0, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -1.0, 0.08] max_q: 0.08 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.4716666666666667, 0.0, 0.0] max_q: 0.471666666667 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0)] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 1), deadline = 40 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 0.9073765432098766, "(['green', None, None, None, 'right'], 'right')": 0.3967294730392157, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 0.5, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 0.1614755667892157, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -1.0, -1.0, 0.1614755667892157] max_q: 0.161475566789 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 0.3967294730392157] max_q: 0.396729473039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07561471193415638, 0.9073765432098766, 0.0, 0.0] max_q: 0.90737654321 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07561471193415638, 1.0634656084656084, 0.0, 0.0] max_q: 1.06346560847 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07561471193415638, 1.1675249853027632, 0.0, 0.0] max_q: 1.1675249853 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.025, 0.5, -0.05] max_q: 0.5 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 1.2368979031941996, 0.0, 0.0] max_q: 1.23689790319 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 1.3232448437193807, 0.0, 0.0] max_q: 1.32324484372 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 1.4019729365511635, 0.0, 0.0] max_q: 1.40197293655 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (4, 5), destination = (6, 3), deadline = 20 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, None, 'forward'], None)": 0.07561471193415638, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.0296959105358536, "(['green', None, None, None, 'right'], 'right')": 1.1278063406352123, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 0.6166666666666667, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 1.1799201516544118, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 1.1278063406352123] max_q: 1.12780634064 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 2.0296959105358536, 0.0, 0.0] max_q: 2.02969591054 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.025, 0.6166666666666667, -0.05] max_q: 0.616666666667 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 2.0, 0.0, 0.0] max_q: 2.0 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, None, 'forward'], None)": 0.07561471193415638, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.5, "(['green', None, None, None, 'right'], 'right')": 1.2075894978397899, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.1805555555555556, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 1.1799201516544118, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 1.2075894978397899] max_q: 1.20758949784 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 1.556640810609816] max_q: 1.55664081061 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 4.5, 0.0, 0.0] max_q: 4.5 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 4.375, 0.0, 0.0] max_q: 4.375 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, None, None, 'forward'], None)": 0.07561471193415638, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 6.916666666666667, "(['green', None, None, None, 'right'], 'right')": 2.7783204053049078, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.1805555555555556, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 1.1799201516544118, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.0, -1.0, -1.0, 1.1799201516544118] max_q: 1.17992015165 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 6.916666666666667, 0.0, 0.0] max_q: 6.91666666667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 5.458333333333334, 0.0, 0.0] max_q: 5.45833333333 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 3.729166666666667, 0.0, 0.0] max_q: 3.72916666667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 2.7783204053049078] max_q: 2.7783204053 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -0.05263157894736842, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -1.0, -1.0, 1.9163335019870926] max_q: 1.91633350199 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 2.9310303546417944] max_q: 2.93103035464 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -1.0, 2.011045615533134] max_q: 2.01104561553 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.05] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, -1.0, -1.0, 2.010195952799816] max_q: 2.0101959528 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 2.937238059068859] max_q: 2.93723805907 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.1805555555555556, -0.05] max_q: 1.18055555556 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07561471193415638, 3.7743055555555562, 0.0, 0.0] max_q: 3.77430555556 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (2, 2), destination = (7, 1), deadline = 30 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], None)": 0.07561471193415638, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.23398042929293, "(['green', None, None, None, 'right'], 'right')": 2.9445176853119133, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.2476851851851851, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.1074241579154567, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.05263157894736842, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.07692307692307693, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: left q: [0.02951388888888889, -0.025, 1.2476851851851851, -0.05] max_q: 1.24768518519 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07561471193415638, 4.23398042929293, 0.0, 0.0] max_q: 4.23398042929 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.5] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.281881313131313, -0.05] max_q: 1.28188131313 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.07692307692307693, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.18688440734505551, 3.489320286195287, 0.0, 0.0] max_q: 3.4893202862 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.3536931818181817, -0.05] max_q: 1.35369318182 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.18688440734505551, 3.5020872790404045, 0.0, 0.0] max_q: 3.50208727904 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0)] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (1, 3), destination = (5, 6), deadline = 35 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.18688440734505551, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.929127127393729, "(['green', None, None, None, 'right'], 'right')": 2.9445176853119133, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.3844696969696968, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.1074241579154567, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1188811188811189, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 2.9445176853119133] max_q: 2.94451768531 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.18688440734505551, 3.929127127393729, 0.0, 0.0] max_q: 3.92912712739 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.18688440734505551, 3.446845345545297, 0.0, 0.0] max_q: 3.44684534555 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1188811188811189, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.18688440734505551, 3.2860847515958196, 0.0, 0.0] max_q: 3.2860847516 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.125, 3.0537120789577283] max_q: 3.05371207896 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.315831220279327, 0.0, 0.0] max_q: 3.31583122028 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.2500396592653606, 0.0, 0.0] max_q: 3.25003965927 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.265038866080053, 0.0, 0.0] max_q: 3.26503886608 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (8, 4), destination = (3, 2), deadline = 35 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.125, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.663788118655437, "(['green', None, None, None, 'right'], 'right')": 3.090107768228585, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.3844696969696968, "(['red', None, None, None, 'forward'], 'right')": -0.055900621118012424, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.1074241579154567, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1989828353464717, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.3844696969696968, -0.05] max_q: 1.38446969697 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.663788118655437, 0.0, 0.0] max_q: 3.66378811866 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.4558146038235074, 0.0, 0.0] max_q: 3.45581460382 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.055900621118012424] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.5075757575757573, -0.05] max_q: 1.50757575758 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.4860471258333123, 0.0, 0.0] max_q: 3.48604712583 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, -0.16666666666666666, -0.06928314837550988, 3.090107768228585] max_q: 3.09010776823 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.16666666666666666, -0.06928314837550988, 3.1107871371324807] max_q: 3.11078713713 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -1.0, 2.1074241579154567] max_q: 2.10742415792 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.5404040404040402, -0.05] max_q: 1.5404040404 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 2), deadline = 25 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.4988959476874792, "(['green', None, None, None, 'right'], 'right')": 3.1083056128640134, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 1.9147306397306396, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.167704518270313, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1989828353464717, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.0, -1.0, -1.0, 2.167704518270313] max_q: 2.16770451827 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.4988959476874792, 0.0, 0.0] max_q: 3.49889594769 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.74944797384374, 0.0, 0.0] max_q: 3.74944797384 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.812085980382805, 0.0, 0.0] max_q: 3.81208598038 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.02951388888888889, -0.025, 1.9147306397306396, -0.05] max_q: 1.91473063973 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (1, 2), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.2080573202552034, "(['green', None, None, None, 'right'], 'right')": 3.1083056128640134, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.123257575757576, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.213919461209036, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1989828353464717, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: left q: [0.02951388888888889, -0.025, 4.123257575757576, -0.05] max_q: 4.12325757576 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.2080573202552034, 0.0, 0.0] max_q: 3.20805732026 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.9060429901914024, 0.0, 0.0] max_q: 2.90604299019 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 2.7550358251595024, 0.0, 0.0] max_q: 2.75503582516 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.1083056128640134] max_q: 3.10830561286 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (2, 2), destination = (6, 6), deadline = 40 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.8172840339015273, "(['green', None, None, None, 'right'], 'right')": 3.9415267893423884, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.6986060606060605, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.213919461209036, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1989828353464717, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0} next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.9415267893423884] max_q: 3.94152678934 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.943963173119789] max_q: 3.94396317312 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.8172840339015273, 0.0, 0.0] max_q: 2.8172840339 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.9651235296638365, 0.0, 0.0] max_q: 2.96512352966 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.09090909090909091, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.106959730604518] max_q: 3.1069597306 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 2.868611176697453, 0.0, 0.0] max_q: 2.8686111767 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 2.9063241374742046, 0.0, 0.0] max_q: 2.90632413747 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.8496788788820666, 0.0, 0.0] max_q: 2.84967887888 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (1, 6), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.358030052277507, "(['green', None, None, None, 'right'], 'right')": 3.1388540259400712, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.6986060606060605, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.213919461209036, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.1989828353464717, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.1989828353464717, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.2919580646875275, 3.358030052277507, 0.0, 0.0] max_q: 3.35803005228 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.438276295742819, 0.0, 0.0] max_q: 3.43827629574 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.1506210365942553, 0.0, 0.0] max_q: 3.15062103659 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.6986060606060605, -0.05] max_q: 3.69860606061 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (3, 6), destination = (6, 2), deadline = 35 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.9588508638285465, "(['green', None, None, None, 'right'], 'right')": 3.1388540259400712, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.736280303030303, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.213919461209036, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.2919580646875275, 2.9588508638285465, 0.0, 0.0] max_q: 2.95885086383 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.0239226848392624, 0.0, 0.0] max_q: 3.02392268484 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.511961342419631, 0.0, 0.0] max_q: 3.51196134242 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 4.736280303030303, -0.05] max_q: 4.73628030303 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 2.755980671209816, 0.0, 0.0] max_q: 2.75598067121 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -1.0, -1.0, 2.213919461209036] max_q: 2.21391946121 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.1388540259400712] max_q: 3.13885402594 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -1.0, 2.349470216385136] max_q: 2.34947021639 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.6299838926748467, 0.0, -0.05555555555555555] max_q: 2.62998389267 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.675651096252352, 0.0, -0.05555555555555555] max_q: 2.67565109625 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (7, 3), destination = (8, 6), deadline = 20 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.1418685414397345, "(['green', None, None, None, 'right'], 'right')": 3.177997024760977, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.189024242424242, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.418242290702422, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.2919580646875275, 3.1418685414397345, 0.0, -0.05555555555555555] max_q: 3.14186854144 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.177997024760977] max_q: 3.17799702476 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.163321827903741, 0.0, -0.05555555555555555] max_q: 3.1633218279 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.5816609139518705, 0.0, -0.05555555555555555] max_q: 2.58166091395 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.465328731161497, "(['green', None, None, None, 'right'], 'right')": 3.5889985123804884, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.189024242424242, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 2.418242290702422, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.0, -1.0, -1.0, 2.418242290702422] max_q: 2.4182422907 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 4.465328731161497, 0.0, -0.05555555555555555] max_q: 4.46532873116 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 4.2326643655807485, 0.0, -0.05555555555555555] max_q: 4.23266436558 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 4.174498274185561, 0.0, -0.05555555555555555] max_q: 4.17449827419 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.3366867104749983, -1.0, -1.0, 2.6934936837999865] max_q: 2.6934936838 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (4, 2), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.4496655161237078, "(['green', None, None, None, 'right'], 'right')": 3.5889985123804884, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.189024242424242, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.913694798278039, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": -1.0, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.3366867104749983, -1.0, -1.0, 4.913694798278039] max_q: 4.91369479828 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.3366867104749983, -1.0, 1.4111626592251176, 4.822325318450235] max_q: 4.82232531845 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 3.4496655161237078, 0.0, -0.05555555555555555] max_q: 3.44966551612 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.504698964511337, 0.0, -0.05555555555555555] max_q: 3.50469896451 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.5459740508020587, 0.0, -0.05555555555555555] max_q: 3.5459740508 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.3366867104749983, -1.0, 1.4111626592251176, 4.616743988837676] max_q: 4.61674398884 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (5, 6), destination = (1, 6), deadline = 20 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.3251206149731933, "(['green', None, None, None, 'right'], 'right')": 3.5889985123804884, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.189024242424242, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.828197489535322, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 4.189024242424242, -0.05] max_q: 4.18902424242 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.3251206149731933, 0.0, -0.05555555555555555] max_q: 3.32512061497 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.993840461229895, 0.0, -0.05555555555555555] max_q: 2.99384046123 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.828200384358246, 0.0, -0.05555555555555555] max_q: 2.82820038436 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (2, 5), destination = (5, 2), deadline = 30 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.004411474116121, "(['green', None, None, None, 'right'], 'right')": 3.5889985123804884, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.459349494949495, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.828197489535322, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.3366867104749983, -1.0, 1.4111626592251176, 5.828197489535322] max_q: 5.82819748954 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.5889985123804884] max_q: 3.58899851238 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.02951388888888889, -0.025, 3.459349494949495, -0.05] max_q: 3.45934949495 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 4.004411474116121, 0.0, -0.05555555555555555] max_q: 4.00441147412 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.5134145454545456, -0.05] max_q: 3.51341454545 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 3.781699088103218, 0.0, -0.05555555555555555] max_q: 3.7816990881 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (4, 2), destination = (2, 4), deadline = 20 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.700712765916708, "(['green', None, None, None, 'right'], 'right')": 3.9598060437403735, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.5377438181818186, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.4028422129202855, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.02951388888888889, -0.025, 3.5377438181818186, -0.05] max_q: 3.53774381818 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.2919580646875275, 4.700712765916708, 0.0, -0.05555555555555555] max_q: 4.70071276592 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.5587554628099176, -0.05] max_q: 3.55875546281 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.2919580646875275, 2.0, 0.0, -0.05555555555555555] max_q: 2.0 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (8, 3), destination = (2, 5), deadline = 40 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": -0.05555555555555555, "(['green', None, None, None, 'forward'], None)": 0.2919580646875275, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.03333333333333333, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.1, "(['green', None, None, None, 'right'], 'right')": 3.9598060437403735, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.613911029958678, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3333333333333333, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.4028422129202855, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -1.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.9598060437403735] max_q: 3.95980604374 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.3333333333333333, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.1, 0.0, 0.49722222222222223] max_q: 3.1 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.1] max_q: 0.0 count: 3 best: [0, 1, 2] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.99, 0.0, 0.49722222222222223] max_q: 2.99 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.913846153846154, 0.0, 0.49722222222222223] max_q: 2.91384615385 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.03333333333333333] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3366867104749983, -1.0, 1.4111626592251176, 5.4028422129202855] max_q: 5.40284221292 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3366867104749983, -1.0, 1.4111626592251176, 5.367771157597278] max_q: 5.3677711576 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.3366867104749983, -0.878745336871489, 1.4111626592251176, 5.335205177654485] max_q: 5.33520517765 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.3449258582988985, -0.05] max_q: 3.3449258583 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.950051282051282, 0.0, 0.49722222222222223] max_q: 2.95005128205 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.9675504273504276, 0.0, 0.49722222222222223] max_q: 2.96755042735 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (1, 6), destination = (7, 5), deadline = 35 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.49722222222222223, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.306783484973808, "(['green', None, None, None, 'right'], 'right')": 3.961815741553355, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.296892791931081, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.2763226860511026, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.878745336871489, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.306783484973808, 0.0, 0.49722222222222223] max_q: 3.30678348497 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.3934355493520822, 0.0, 0.49722222222222223] max_q: 3.39343554935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.4271335743880775, 0.0, 0.49722222222222223] max_q: 3.42713357439 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.4557768956686736, 0.0, 0.49722222222222223] max_q: 3.45577689567 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.323433541516976, 0.0, 0.49722222222222223] max_q: 3.32343354152 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.296892791931081, -0.05] max_q: 3.29689279193 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (8, 5), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.49722222222222223, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.2352046387491775, "(['green', None, None, None, 'right'], 'right')": 3.961815741553355, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8144704721328035, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.2763226860511026, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.878745336871489, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward random action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.02951388888888889, -0.025, 3.8144704721328035, -0.05] max_q: 3.81447047213 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.2352046387491775, 0.0, 0.5282412270798406] max_q: 3.23520463875 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.961815741553355] max_q: 3.96181574155 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.6176023193745888, 0.0, 0.5282412270798406] max_q: 2.61760231937 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.704002174413677, 0.0, 0.5282412270798406] max_q: 2.70400217441 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (3, 1), destination = (7, 4), deadline = 35 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.3366867104749983, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.887113164724028, "(['green', None, None, None, 'right'], 'right')": 3.968179784627796, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.907235236066402, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.2763226860511026, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4111626592251176, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.878745336871489, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.5924061140917264, -0.878745336871489, 1.4111626592251176, 5.2763226860511026] max_q: 5.27632268605 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.887113164724028, 0.0, 0.5282412270798406] max_q: 3.88711316472 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.5096905317792224, 0.0, 0.5282412270798406] max_q: 3.50969053178 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.14128661876654608, -0.16666666666666666, -0.06928314837550988, 3.968179784627796] max_q: 3.96817978463 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.907235236066402, -0.05] max_q: 3.90723523607 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.3587214786013004, -0.041666666666666664, 0.5282412270798406] max_q: 3.3587214786 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.867031979860047, "(['green', None, None, None, 'right'], 'right')": 3.9692404584735366, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.910134134939327, "(['red', None, None, None, 'forward'], 'right')": -0.09290890269151139, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.638161343025551, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4040794294010912, "(['green', None, None, None, 'right'], None)": 0.14128661876654608, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 4.638161343025551] max_q: 4.63816134303 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 3.9692404584735366] max_q: 3.96924045847 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.867031979860047, -0.041666666666666664, 0.5282412270798406] max_q: 3.86703197986 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, -0.09290890269151139] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.02951388888888889, -0.025, 3.910134134939327, -0.05] max_q: 3.91013413494 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 4.5997177480968] max_q: 4.5997177481 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.4936255838880377, "(['green', None, None, None, 'right'], 'right')": 4.134549666260968, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.7191207214453947, "(['red', None, None, None, 'forward'], 'right')": 0.05594906337910309, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.460404755827135, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4040794294010912, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.02951388888888889, -0.025, 3.7191207214453947, -0.05] max_q: 3.71912072145 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.02951388888888889, -0.025, 3.731887961379695, -0.05] max_q: 3.73188796138 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, 0.05594906337910309] max_q: 0.0559490633791 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.134549666260968] max_q: 4.13454966626 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 5.460404755827135] max_q: 5.46040475583 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 5.136941138138497] max_q: 5.13694113814 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, 0.651380927661561] max_q: 0.651380927662 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 4.942862967525315] max_q: 4.94286296753 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.333100570145168] max_q: 4.33310057015 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 4.831961155746353] max_q: 4.83196115575 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.4936255838880377, -0.041666666666666664, 0.5282412270798406] max_q: 3.49362558389 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, 0.5137658503564309] max_q: 0.513765850356 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4040794294010912, 4.758602170169601] max_q: 4.75860217017 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.726993746412534] max_q: 4.72699374641 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.687332070637037] max_q: 4.68733207064 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.46598855689764784, -1.0, 0.4449583117038658] max_q: 0.444958311704 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.343460571111169] max_q: 4.34346057111 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = left, reward = -0.5 next_waypoint: forward q: [1.55, 3.344263025499234, -0.041666666666666664, 0.5282412270798406] max_q: 3.3442630255 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (6, 6), destination = (2, 2), deadline = 40 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.361519261670307, "(['green', None, None, None, 'right'], 'right')": 4.224646703048604, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.0, "(['red', None, None, None, 'forward'], 'right')": 0.49040663676922525, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.652958618298274, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.224646703048604] max_q: 4.22464670305 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.361519261670307, -0.041666666666666664, 0.5282412270798406] max_q: 3.36151926167 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.652958618298274] max_q: 4.6529586183 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.0, -0.041666666666666664, 0.5282412270798406] max_q: 2.0 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.02951388888888889, -0.025, 2.0, -0.05] max_q: 2.0 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0)] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (4, 1), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.25, "(['green', None, None, None, 'right'], 'right')": 4.219030535472389, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.2, "(['red', None, None, None, 'forward'], 'right')": 0.49040663676922525, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.544132181915229, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.49040663676922525] max_q: 0.490406636769 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.544132181915229] max_q: 4.54413218192 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (1, 6), destination = (7, 3), deadline = 45 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.25, "(['green', None, None, None, 'right'], 'right')": 4.219030535472389, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.0, "(['red', None, None, None, 'forward'], 'right')": 0.5173253094153802, "(['green', None, None, None, 'left'], None)": 0.02951388888888889, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.375, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 9.326823724825712, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.375, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.02951388888888889, -0.025, 2.0, -0.05] max_q: 2.0 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.5173253094153802] max_q: 0.517325309415 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.0, -0.05] max_q: 2.0 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 2.25, -0.041666666666666664, 0.5282412270798406] max_q: 2.25 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.5388602475323042] max_q: 0.538860247532 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.1, -0.05] max_q: 2.1 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.47474107055179154] max_q: 0.474741070552 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.0933333333333337, -0.05] max_q: 2.09333333333 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.48418745285754927] max_q: 0.484187452858 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.087843137254902, -0.05] max_q: 2.08784313725 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.0832198142414864, -0.05] max_q: 2.08321981424 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (5, 2), destination = (1, 1), deadline = 25 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 0.125, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.251766374887832, "(['green', None, None, None, 'right'], 'right')": 4.219030535472389, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.539819401444789, "(['red', None, None, None, 'forward'], 'right')": 0.4920594381123474, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 9.326823724825712, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.219030535472389] max_q: 4.21903053547 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 9.326823724825712] max_q: 9.32682372483 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.251766374887832, -0.041666666666666664, 0.5282412270798406] max_q: 2.25176637489 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.6888247811658736, -0.041666666666666664, 0.5282412270798406] max_q: 2.68882478117 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.907353984304895, -0.041666666666666664, 0.5282412270798406] max_q: 2.9073539843 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.160439878714121] max_q: 4.16043987871 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.4920594381123474] max_q: 0.492059438112 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.3208797574282425] max_q: 4.32087975743 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.297959774754797] max_q: 4.29795977475 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.144395890842709] max_q: 4.14439589084 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.125, 0.0, 0.0] max_q: 0.125 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 2), deadline = 30 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 2.742022917992715, "(['green', None, None, None, 'right'], 'right')": 4.279337288832622, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.539819401444789, "(['red', None, None, None, 'forward'], 'right')": 0.5552181082596824, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.143870641239776, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.279337288832622] max_q: 4.27933728883 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.742022917992715, -0.041666666666666664, 0.5282412270798406] max_q: 2.74202291799 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.5552181082596824] max_q: 0.55521810826 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.539819401444789, -0.05] max_q: 2.53981940144 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.5970113176623015] max_q: 0.597011317662 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.449849501203991, -0.05] max_q: 2.4498495012 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.60298177614839] max_q: 0.602981776148 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.393618313553492, -0.05] max_q: 2.39361831355 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.4739373978758175, -0.05] max_q: 2.47393739788 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 2.277609054129841, -0.041666666666666664, 0.5282412270798406] max_q: 2.27760905413 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (4, 1), destination = (8, 6), deadline = 45 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.1130983863609285, "(['green', None, None, None, 'right'], 'right')": 4.265370424390991, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.5433038797905527, "(['red', None, None, None, 'forward'], 'right')": 0.6069620818057823, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.143870641239776, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.4009576943091817, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.143870641239776] max_q: 4.14387064124 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.137876031188118] max_q: 4.13787603119 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.1130983863609285, -0.041666666666666664, 0.5282412270798406] max_q: 3.11309838636 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.334823789770696, -0.041666666666666664, 0.5282412270798406] max_q: 3.33482378977 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.6069620818057823] max_q: 0.606962081806 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.5433038797905527, -0.05] max_q: 2.54330387979 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.132685212195495] max_q: 4.1326852122 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.991042873481428, -0.041666666666666664, 0.5282412270798406] max_q: 2.99104287348 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.7041019205395151] max_q: 0.70410192054 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.265370424390991] max_q: 4.26537042439 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.250627623035935] max_q: 4.25062762304 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.238096241884138] max_q: 4.23809624188 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -1.0, 0.734824075125275] max_q: 0.734824075125 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 4.132685212195495] max_q: 4.1326852122 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.05263157894736842, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 3.9686325035650727] max_q: 3.96863250357 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.8997583144511894, -0.041666666666666664, 0.5282412270798406] max_q: 2.89975831445 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.9341408671245897, -0.041666666666666664, 0.5282412270798406] max_q: 2.93414086712 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -0.9815961183705078, 0.6625397386617219] max_q: 0.662539738662 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 3.978299459508563] max_q: 3.97829945951 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.4009576943091817, 3.9788161390440733] max_q: 3.97881613904 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.227273685434859] max_q: 4.22727368543 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.03571428571428571, -0.05] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -0.9815961183705078, 0.6776344331335884] max_q: 0.677634433134 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.130435699111605] max_q: 4.13043569911 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.127927320282536] max_q: 4.12792732028 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -0.9815961183705078, 0.6885026131533323] max_q: 0.688502613153 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.049115197309109] max_q: 4.04911519731 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.047227096612929] max_q: 4.04722709661 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.046489173228352] max_q: 4.04648917323 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.8986778672543703, -0.041666666666666664, 0.5282412270798406] max_q: 2.89867786725 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (7, 2), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.012260165919230633, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.1760607314400278, "(['green', None, None, None, 'right'], 'right')": 4.045784791815802, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.6889734918114976, "(['red', None, None, None, 'forward'], 'right')": 0.6593904991334473, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.984944352847408, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.045784791815802] max_q: 4.04578479182 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -0.9815961183705078, 0.6593904991334473] max_q: 0.659390499133 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.6889734918114976, -0.05] max_q: 2.68897349181 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012260165919230633, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.0122601659192 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.01103414932730757, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.0110341493273 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.01024599580392846, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.0102459958039 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00960562106618293, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00960562106618 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.1760607314400278, -0.041666666666666664, 0.5282412270798406] max_q: 3.17606073144 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.009071975451394989, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00907197545139 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.008659612930877034, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00865961293088 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.008298795725423823, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00829879572542 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.007979611274445984, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00797961127445 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.0589082570685946, -0.041666666666666664, 0.5282412270798406] max_q: 3.05890825707 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.007694625157501485, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.0076946251575 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.007454168121329564, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00745416812133 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00723492788246693, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00723492788247 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.007033957663509515, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00703395766351 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.090277981832975, -0.041666666666666664, 0.5282412270798406] max_q: 3.09027798183 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.006848853514469792, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00684885351447 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.006685785573649082, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00668578557365 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.006533835901520693, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00653383590152 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.1130210322871505, -0.041666666666666664, 0.5282412270798406] max_q: 3.11302103229 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (3, 1), destination = (7, 6), deadline = 45 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.006391795990618069, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.4833118226085196, "(['green', None, None, None, 'right'], 'right')": 4.044216773716034, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.85285180533506, "(['red', None, None, None, 'forward'], 'right')": -0.17030475043327636, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.984944352847408, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 3.984944352847408] max_q: 3.98494435285 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.044216773716034] max_q: 4.04421677372 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.4833118226085196, -0.041666666666666664, 0.5282412270798406] max_q: 3.48331182261 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.03571428571428571, -0.05] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.03571428571428571, -0.05] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.03571428571428571, -0.05] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.006391795990618069, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00639179599062 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00585914632473323, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00585914632473 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.005440635872966571, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00544063587297 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': 'forward', 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.03571428571428571, -0.05] max_q: 0.0 count: 2 best: [0, 1] action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.74165591130426, -0.041666666666666664, 0.5282412270798406] max_q: 2.7416559113 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0)] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (2, 6), destination = (1, 1), deadline = 30 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.00510059613090616, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.5835554010098227, "(['green', None, None, None, 'right'], 'right')": 4.022108386858017, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.85285180533506, "(['red', None, None, None, 'forward'], 'right')": -0.17030475043327636, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.9864928542645166, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 3.9864928542645166] max_q: 3.98649285426 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.022108386858017] max_q: 4.02210838686 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (8, 2), destination = (2, 6), deadline = 50 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.00510059613090616, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.5835554010098227, "(['green', None, None, None, 'right'], 'right')": 14.011054193429008, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.85285180533506, "(['red', None, None, None, 'forward'], 'right')": -0.17030475043327636, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.9887257032794703, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.85285180533506, -0.05] max_q: 2.85285180534 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.5835554010098227, -0.041666666666666664, 0.5282412270798406] max_q: 3.58355540101 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.6182591175923378, -0.041666666666666664, 0.5282412270798406] max_q: 3.61825911759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00510059613090616, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00510059613091 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.3870792436505752, -0.041666666666666664, 0.5282412270798406] max_q: 3.38707924365 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.421130396781099, -0.041666666666666664, 0.5282412270798406] max_q: 3.42113039678 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.004781808872724525, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00478180887272 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.2792564475466253, -0.041666666666666664, 0.5282412270798406] max_q: 3.27925644755 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.6822814442680483, -0.05] max_q: 2.68228144427 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.1728419291645715, -0.041666666666666664, 0.5282412270798406] max_q: 3.17284192916 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.004564453923964319, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00456445392396 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.004437663537187532, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00443766353719 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00432088291778786, -0.46598855689764784, -0.9815961183705078, -0.17030475043327636] max_q: 0.00432088291779 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.197170107718555, -0.041666666666666664, 0.5282412270798406] max_q: 3.19717010772 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 14.011054193429008] max_q: 14.0110541934 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 13.793422580528379] max_q: 13.7934225805 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 13.589392943434039] max_q: 13.5893929434 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.1402623135615957, -0.041666666666666664, 0.5282412270798406] max_q: 3.14026231356 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (1, 4), destination = (3, 6), deadline = 20 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.004212860844843164, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.526553752199344, "(['green', None, None, None, 'right'], 'right')": 13.404981540675692, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.7234601491346715, "(['red', None, None, None, 'forward'], 'right')": -0.11392130010536392, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.9887257032794703, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.55, 3.526553752199344, -0.041666666666666664, 0.5282412270798406] max_q: 3.5265537522 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.004212860844843164, -0.46598855689764784, -0.9815961183705078, -0.11392130010536392] max_q: 0.00421286084484 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.002106430422421582, -0.46598855689764784, -0.9815961183705078, -0.11392130010536392] max_q: 0.00210643042242 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.4700927402816806, -0.041666666666666664, 0.5282412270798406] max_q: 3.47009274028 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 13.404981540675692] max_q: 13.4049815407 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0015798228168161866, -0.46598855689764784, -0.9815961183705078, -0.11392130010536392] max_q: 0.00157982281682 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.5584106169014005, -0.041666666666666664, 0.5282412270798406] max_q: 3.5584106169 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (4, 2), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.001421840535134568, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 5.261876398826283, "(['green', None, None, None, 'right'], 'right')": 11.052326868416703, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.7234601491346715, "(['red', None, None, None, 'forward'], 'right')": -0.11392130010536392, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 3.9887257032794703, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 3.9887257032794703] max_q: 3.98872570328 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 11.052326868416703] max_q: 11.0523268684 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.578298658434283] max_q: 4.57829865843 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.7234601491346715, -0.05] max_q: 2.72346014913 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.001421840535134568, -0.46598855689764784, -0.9815961183705078, -0.11392130010536392] max_q: 0.00142184053513 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.001244110468242747, -0.46598855689764784, -0.9815961183705078, -0.11392130010536392] max_q: 0.00124411046824 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 5.261876398826283, -0.041666666666666664, 0.5282412270798406] max_q: 5.26187639883 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.361436661521427] max_q: 4.36143666152 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.338846870176338] max_q: 4.33884687018 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 4.718323640640355, -0.041666666666666664, 0.5282412270798406] max_q: 4.71832364064 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (7, 4), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0011196994214184724, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 5.594763475156703, "(['green', None, None, None, 'right'], 'right')": 4.289149329217142, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.4823067660897813, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.317261069557698, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.317261069557698] max_q: 4.31726106956 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.4823067660897813, -0.05] max_q: 2.48230676609 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.09090909090909091, 0.0, -0.041666666666666664] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 5.594763475156703, -0.041666666666666664, 0.5282412270798406] max_q: 5.59476347516 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0011196994214184724, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.00111969942142 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (1, 4), destination = (2, 1), deadline = 20 RoutePlanner.route_to(): destination = (2, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0009797369937411635, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 5.917454453705806, "(['green', None, None, None, 'right'], 'right')": 4.289149329217142, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.0, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.301562305471413, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.0, -0.05] max_q: 2.0 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.2, -0.05] max_q: 2.2 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 5.917454453705806, -0.041666666666666664, 0.5282412270798406] max_q: 5.91745445371 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0009797369937411635, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000979736993741 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 5.525757995184912, -0.041666666666666664, 0.5282412270798406] max_q: 5.52575799518 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (8, 3), destination = (3, 4), deadline = 30 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.000935203494025656, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 6.065317129065086, "(['green', None, None, None, 'right'], 'right')": 4.289149329217142, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.177777777777778, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.301562305471413, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [0.000935203494025656, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000935203494026 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.000896236681774587, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000896236681775 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0004481183408872935, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000448118340887 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 6.065317129065086, -0.041666666666666664, 0.5282412270798406] max_q: 6.06531712907 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 5.505960406609958, -0.041666666666666664, 0.5282412270798406] max_q: 5.50596040661 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 5.355364365948963, -0.041666666666666664, 0.5282412270798406] max_q: 5.35536436595 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 5.242417335453217, -0.041666666666666664, 0.5282412270798406] max_q: 5.24241733545 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.301562305471413] max_q: 4.30156230547 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.284808844056334] max_q: 4.28480884406 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.289149329217142] max_q: 4.28914932922 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.177777777777778, -0.05] max_q: 2.17777777778 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 2), deadline = 50 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.0003360887556654701, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.803292201500272, "(['green', None, None, None, 'right'], 'right')": 4.275171455020653, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.9051851851851858, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.2707854261115585, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.46598855689764784, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.275171455020653] max_q: 4.27517145502 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.265999073186632] max_q: 4.26599907319 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 4.803292201500272, -0.041666666666666664, 0.5282412270798406] max_q: 4.8032922015 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0003360887556654701, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000336088755665 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00028007396305455845, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000280073963055 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.4017301229390524, -0.041666666666666664, 0.5282412270798406] max_q: 3.40173012294 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.1214086048230096, -0.041666666666666664, 0.5282412270798406] max_q: 3.12140860482 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.1946245544210923, -0.041666666666666664, 0.5282412270798406] max_q: 3.19462455442 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.252151371962443, -0.041666666666666664, 0.5282412270798406] max_q: 3.25215137196 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00024506471767273864, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000245064717673 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00023145001113536427, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000231450011135 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00021987751057859605, -0.46598855689764784, -0.9815961183705078, -0.1689954215602106] max_q: 0.000219877510579 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.095647767011992, -0.041666666666666664, 0.5282412270798406] max_q: 3.09564776701 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [1.55, 3.1333291100531593, -0.041666666666666664, 0.5282412270798406] max_q: 3.13332911005 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0)] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (2, 6), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.00020988307827956895, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.749085287880789, "(['green', None, None, None, 'right'], 'right')": 4.132999536593315, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.835555555555556, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.2707854261115585, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.2707854261115585] max_q: 4.27078542611 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.132999536593315] max_q: 4.13299953659 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.066499768296658] max_q: 4.0664997683 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.835555555555556, -0.05] max_q: 2.83555555556 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.749085287880789, -0.041666666666666664, 0.5282412270798406] max_q: 3.74908528788 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00020988307827956895, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 0.00020988307828 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00019489142983102832, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 0.000194891429831 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00018271071546658904, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 0.000182710715467 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.457588563490514, -0.041666666666666664, 0.5282412270798406] max_q: 3.45758856349 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (1, 2), destination = (7, 1), deadline = 35 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 0.00017256012016288966, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.484709135315988, "(['green', None, None, None, 'right'], 'right')": 4.097541479712637, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668444444444445, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.257166382257232, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.13734567901234568, -0.025, 2.668444444444445, -0.05] max_q: 2.66844444444 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.00017256012016288966, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 0.000172560120163 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.628006008144483e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 8.62800600814e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.471004506108363e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 6.47100450611e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.484709135315988, -0.041666666666666664, 0.5282412270798406] max_q: 4.48470913532 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.392503755090303e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 5.39250375509e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.863538592116685, -0.041666666666666664, 0.5282412270798406] max_q: 3.86353859212 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.5065924238968964e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 4.5065924239e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.552952871141721, -0.041666666666666664, 0.5282412270798406] max_q: 3.55295287114 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.5777888227449584, -0.041666666666666664, 0.5282412270798406] max_q: 3.57778882274 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.5988993816077106, -0.041666666666666664, 0.5282412270798406] max_q: 3.59889938161 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.601600000000001, -0.05] max_q: 2.6016 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 5), deadline = 30 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 4.2249303974033405e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 0.3752797680644168, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.453546812793554, "(['green', None, None, None, 'right'], 'right')": 4.097541479712637, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.3848000000000007, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.257166382257232, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.55, 3.453546812793554, -0.041666666666666664, 0.5282412270798406] max_q: 3.45354681279 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.4763156955938226, -0.041666666666666664, 0.5282412270798406] max_q: 3.47631569559 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.3752797680644168, 0.0, 0.0] max_q: 0.375279768064 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.097541479712637] max_q: 4.09754147971 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 2.187639884032208, -0.041666666666666664, 0.5282412270798406] max_q: 2.18763988403 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.414184898528182, -0.041666666666666664, 0.5282412270798406] max_q: 2.41418489853 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (2, 5), destination = (6, 6), deadline = 25 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 4.2249303974033405e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 4.572766408675364, "(['green', None, None, None, 'right'], 'right')": 4.081284566427198, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.3848000000000007, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.257166382257232, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 3.3848000000000007, -0.05] max_q: 3.3848 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [4.2249303974033405e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 4.2249303974e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.872852864286396e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.87285286429e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.596220516837368e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.59622051684e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.572766408675364, -0.041666666666666664, 0.5282412270798406] max_q: 4.57276640868 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.371456734535033e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.37145673454e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.202883897808281e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.20288389781e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.286905347409621, -0.041666666666666664, 0.5282412270798406] max_q: 4.28690534741 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.057298266089723e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.05729826609e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.9397098712401185e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.93970987124e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.257166382257232] max_q: 4.25716638226 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 6), deadline = 35 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.5282412270798406, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 2.8347202329815426e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, None, 'forward'], 'forward')": 3.9565755199127537, "(['green', None, None, None, 'right'], 'right')": 4.081284566427198, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.446320000000001, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.8686336260670044, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.041666666666666664, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.8686336260670044] max_q: 4.86863362607 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 3.446320000000001, -0.05] max_q: 3.44632 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.8347202329815426e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.83472023298e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.3622668608179525e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.36226686082e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.081284566427198] max_q: 4.08128456643 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.9565755199127537, 0.26232421865794203, 1.4782877599563768] max_q: 3.95657551991 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.0669835032157086e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.06698350322e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.9377970342647268e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.93779703426e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.5] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.074510852558264] max_q: 4.07451085256 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.100197870328346] max_q: 4.10019787033 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.7231600000000005, -0.05] max_q: 2.72316 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.5093605020643412, 0.26232421865794203, 1.4782877599563768] max_q: 3.50936050206 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (5, 4), destination = (8, 2), deadline = 25 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.4782877599563768, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 1.781980021275604e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.021626489512732, "(['green', None, None, None, 'right'], 'right')": 4.119775003393056, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.682984444444445, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.787709732598, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.021085827274914, 0.26232421865794203, 1.4782877599563768] max_q: 4.02108582727 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.781980021275604e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.78198002128e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.3364850159567029e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.33648501596e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.000008909900106, 0.26232421865794203, 1.4782877599563768] max_q: 2.0000089099 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.682984444444445, -0.05] max_q: 2.68298444444 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1137375132972525e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.1137375133e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0209260538558149e-05, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.02092605386e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.480027642946853e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 9.48002764295e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.000008074596971, 0.26232421865794203, 1.4782877599563768] max_q: 2.0000080746 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (8, 3), destination = (5, 6), deadline = 30 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.4782877599563768, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 8.887525915262675e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.1111187822820803, "(['green', None, None, None, 'right'], 'right')": 4.119775003393056, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.5537486666666673, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.787709732598, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.787709732598] max_q: 4.7877097326 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.743948080787] max_q: 4.74394808079 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.16666666666666666, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.887525915262675e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 8.88752591526e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.1111187822820803, 0.26232421865794203, 1.4782877599563768] max_q: 3.11111878228 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.2222289344968202, 0.26232421865794203, 1.4782877599563768] max_q: 3.2222289345 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.5537486666666673, -0.05] max_q: 2.55374866667 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 3.3000060410471383, 0.26232421865794203, 1.4782877599563768] max_q: 3.30000604105 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (1, 2), destination = (8, 3), deadline = 40 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.4782877599563768, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 7.40627159605223e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.7785770381152, "(['green', None, None, None, 'right'], 'right')": 4.119775003393056, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.6742696111111117, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.3719740403935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.13734567901234568, -0.025, 2.6742696111111117, -0.05] max_q: 2.67426961111 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [7.40627159605223e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 7.40627159605e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.703135798026115e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 3.70313579803e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.7773518485195862e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.77735184852e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.7785770381152, 0.26232421865794203, 1.4782877599563768] max_q: 4.77857703812 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.6812549083508, 0.26232421865794203, 1.4782877599563768] max_q: 4.68125490835 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.1450041581266275, 0.26232421865794203, 1.4782877599563768] max_q: 4.14500415813 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.5779453809523813, -0.05] max_q: 2.57794538095 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.314459873766322e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.31445987377e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.132920478282742, 0.26232421865794203, 1.1956753881383142] max_q: 4.13292047828 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.127382125020961, 0.26232421865794203, 1.1956753881383142] max_q: 4.12738212502 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (4, 6), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.1956753881383142, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 2.2092571522314896e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.732968200375393, "(['green', None, None, None, 'right'], 'right')": 4.119775003393056, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.5201508428571433, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.3719740403935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.55, 4.732968200375393, 0.26232421865794203, 1.1956753881383142] max_q: 4.73296820038 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.2092571522314896e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.20925715223e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1046285761157448e-06, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.10462857612e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.522739962241023, 0.26232421865794203, 1.1956753881383142] max_q: 4.52273996224 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.5201508428571433, -0.05] max_q: 2.52015084286 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [8.284714320868086e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 8.28471432087e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.594321460795746e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 7.5943214608e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.051869927881765e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 7.05186992788e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.681826779572588, 0.26232421865794203, 1.1956753881383142] max_q: 3.68182677957 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 3), deadline = 25 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.1956753881383142, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 6.611128057389154e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.6060682852374555, "(['green', None, None, None, 'right'], 'right')": 4.119775003393056, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668135758571429, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.3719740403935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.3719740403935] max_q: 4.37197404039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 4.6060682852374555, 0.26232421865794203, 1.1956753881383142] max_q: 4.60606828524 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.303034142618728, 0.26232421865794203, 1.1956753881383142] max_q: 4.30303414262 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.119775003393056] max_q: 4.11977500339 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [6.611128057389154e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 6.61112805739e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.1360662953147145] max_q: 4.13606629531 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.124727437371822] max_q: 4.12472743737 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.337297758316058] max_q: 4.33729775832 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.151517236587565, 0.26232421865794203, 0.8565403683580218] max_q: 3.15151723659 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (6, 5), destination = (1, 2), deadline = 40 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 5.78473705021551e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.3097662789993665, "(['green', None, None, None, 'right'], 'right')": 4.131001929055566, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668135758571429, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.303323159092524, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.55, 4.3097662789993665, 0.26232421865794203, 0.8565403683580218] max_q: 4.309766279 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.78473705021551e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 5.78473705022e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.892368525107755e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.89236852511e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.053125613470198, 0.26232421865794203, 0.8565403683580218] max_q: 4.05312561347 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.09090909090909091, 0.0, -0.041666666666666664] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.044271344558498, 0.26232421865794203, 0.8565403683580218] max_q: 4.04427134456 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.7887374400466634, 0.26232421865794203, 0.8565403683580218] max_q: 3.78873744005 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.1692763938308164e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.16927639383e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.0608125741392757e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 2.06081257414e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.967139275314763e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.96713927531e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8851751388433144e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.88517513884e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.812668402733956e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.81266840273e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.80047424893296, 0.26232421865794203, 0.8565403683580218] max_q: 3.80047424893 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.131001929055566] max_q: 4.13100192906 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.8071251073018613, 0.26232421865794203, 0.8565403683580218] max_q: 3.8071251073 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.699376627563084e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.69937662756e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6546561899956346e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.65465619e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.8127978982635713, 0.26232421865794203, 0.8565403683580218] max_q: 3.81279789826 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 6), deadline = 40 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 1.6132897852457436e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.293445567352534, "(['green', None, None, None, 'right'], 'right')": 4.12690811877258, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668135758571429, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.303323159092524, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.303323159092524] max_q: 4.30332315909 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.29610117911413] max_q: 4.29610117911 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 4.293445567352534, 0.26232421865794203, 0.8565403683580218] max_q: 4.29344556735 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.220084175514401, 0.26232421865794203, 0.8565403683580218] max_q: 4.22008417551 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6132897852457436e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.61328978525e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4116285620900256e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.41162856209e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.480056143897764, 0.26232421865794203, 0.8565403683580218] max_q: 3.4800561439 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.2704657058810232e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.27046570588e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1797181554609502e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.17971815546e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1059857707446408e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.10598577074e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.233380130502018, 0.26232421865794203, 0.8565403683580218] max_q: 3.2333801305 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0445421168143829e-07, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 1.04454211681e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.1100421226745265, 0.26232421865794203, 0.8565403683580218] max_q: 3.11004212267 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [9.970629296864564e-08, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 9.97062929686e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [9.587143554677466e-08, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 9.58714355468e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.0175386166060783, 0.26232421865794203, 0.8565403683580218] max_q: 3.01753861661 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.12690811877258] max_q: 4.12690811877 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.0482405348371384, 0.26232421865794203, 0.8565403683580218] max_q: 3.04824053484 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (6, 4), destination = (2, 4), deadline = 20 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 9.267572102854884e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.6302338533138845, "(['green', None, None, None, 'right'], 'right')": 4.1231755270439745, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668135758571429, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.06345405938629, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.1231755270439745] max_q: 4.12317552704 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.119753984626086] max_q: 4.11975398463 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.6302338533138845, 0.26232421865794203, 0.8565403683580218] max_q: 3.63023385331 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [9.267572102854884e-08, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 9.26757210285e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.815116949825873, 0.26232421865794203, 0.8565403683580218] max_q: 2.81511694983 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.722976752379071e-08, -0.5041247355807345, -0.9815961183705078, -0.1689954215602106] max_q: 7.72297675238e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.6113377220231255, 0.26232421865794203, 0.8565403683580218] max_q: 2.61133772202 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.06345405938629] max_q: 4.06345405939 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (1, 2), destination = (2, 5), deadline = 20 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 6.950679077141164e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 2.5094481074781707, "(['green', None, None, None, 'right'], 'right')": 4.059876992313043, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.668135758571429, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.487493055144412, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9815961183705078, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.668135758571429, -0.05] max_q: 2.66813575857 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 5.487493055144412] max_q: 5.48749305514 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [6.950679077141164e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.95067907714e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.45420200020251e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.4542020002e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.050814375189854e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.05081437519e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 2.5094481074781707, 0.26232421865794203, 0.8565403683580218] max_q: 2.50944810748 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 2.5839757021042624, 0.26232421865794203, 0.8565403683580218] max_q: 2.5839757021 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 5), deadline = 35 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 5.7146580210126395e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.439977911003875, "(['green', None, None, None, 'right'], 'right')": 4.059876992313043, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.501101818928572, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 5.3387437496299714, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3877807421193276, "(['green', None, None, None, 'right'], None)": 1.9846202292367683, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.26232421865794203, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [1.9846202292367683, -0.16666666666666666, -0.06928314837550988, 4.059876992313043] max_q: 4.05987699231 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 5.3387437496299714] max_q: 5.33874374963 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 3.439977911003875, 0.26232421865794203, 0.8565403683580218] max_q: 3.439977911 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.7146580210126395e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 5.71465802101e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.501101818928572, -0.05] max_q: 2.50110181893 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [5.143192218911375e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 5.14319221891e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.821742705229414e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 4.82174270523e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3877807421193276, 4.90202171822736] max_q: 4.90202171823 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 4.638201562024872] max_q: 4.63820156202 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.429515844795919, -0.05] max_q: 2.4295158448 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (7, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 4.5538681104944466e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.05789473684210526, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.156651487029876, "(['green', None, None, None, 'right'], 'right')": 4.057155310844268, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.1485319833027217, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.613655348100839, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.16666666666666666, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.057155310844268] max_q: 4.05715531084 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.5538681104944466e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 4.55386811049e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.415401082870835e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 3.41540108287e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.156651487029876, 0.1860917990690819, 0.8565403683580218] max_q: 3.15665148703 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.05789473684210526] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [2.846167569059029e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 2.84616756906e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.2620700511511416, 0.1860917990690819, 0.8565403683580218] max_q: 3.26207005115 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 3.3030661594205224, 0.1860917990690819, 0.8565403683580218] max_q: 3.30306615942 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.8565403683580218, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 2.6682820959928394e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.337912851449497, "(['green', None, None, None, 'right'], 'right')": 4.306827674050419, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.1485319833027217, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.613655348100839, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward random action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 3.1485319833027217, -0.05] max_q: 3.1485319833 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.6682820959928394e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 2.66828209599e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.0012115719946295e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 2.00121157199e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.337912851449497, 0.1860917990690819, 0.9377819740946944] max_q: 4.33791285145 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6676763099955246e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.66767631e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.500908678995972e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.500908679e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.3758329557463078e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.37583295575e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2775591731930002e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.27755917319e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1977117248684376e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.19771172487e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.29567374501831, 0.1860917990690819, 0.9377819740946944] max_q: 4.29567374502 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.280890057767395, 0.1860917990690819, 0.9377819740946944] max_q: 4.28089005777 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.268122327868876, 0.1860917990690819, 0.9377819740946944] max_q: 4.26812232787 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.0, -0.05] max_q: 2.0 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (2, 2), destination = (1, 6), deadline = 25 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.9377819740946944, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 1.1311721845979688e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.256950564207672, "(['green', None, None, None, 'right'], 'right')": 4.306827674050419, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.8461538461538463, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.613655348100839, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.8461538461538463, -0.05] max_q: 2.84615384615 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.6346153846153846, -0.05] max_q: 2.63461538462 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 4.256950564207672, 0.1860917990690819, 0.9377819740946944] max_q: 4.25695056421 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.006178279924137, 0.1860917990690819, 0.9377819740946944] max_q: 4.00617827992 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.16666666666666666, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1311721845979688e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.1311721846e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.08404001023972e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.08404001024e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0423461636920384e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.04234616369e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 3.8055604524973097, 0.1860917990690819, 0.9377819740946944] max_q: 3.8055604525 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (1, 6), destination = (5, 2), deadline = 40 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 0.9377819740946944, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 1.0051195149887514e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.351856422665862, "(['green', None, None, None, 'right'], 'right')": 4.306827674050419, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.5552884615384617, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'right')": 4.613655348100839, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 4.613655348100839] max_q: 4.6136553481 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 4.582972580695797] max_q: 4.5829725807 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.306827674050419] max_q: 4.30682767405 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0051195149887514e-08, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 1.00511951499e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.046075634898761e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 9.0460756349e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.292235998657198e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 8.29223599866e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.351856422665862, 0.1860917990690819, 1.675928211332931] max_q: 4.35185642267 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.699933427324541e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 7.69993342732e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.2721593480287335e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 7.27215934803e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.908551380627297e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.90855138063e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.329865396249246, 0.1860917990690819, 1.675928211332931] max_q: 4.32986539625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.316121004738861, 0.1860917990690819, 1.675928211332931] max_q: 4.31612100474 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 2.5552884615384617, -0.275] max_q: 2.55528846154 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.55, 4.303962504556597, 0.1860917990690819, 1.675928211332931] max_q: 4.30396250456 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.293830421071377, 0.1860917990690819, 1.675928211332931] max_q: 4.29383042107 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.59452631787151e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.59452631787e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.4005696614635245e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.40056966146e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.222776059756204e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.22277605976e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.55, 4.150466019960494, 0.1860917990690819, 1.675928211332931] max_q: 4.15046601996 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (1, 2), destination = (7, 3), deadline = 35 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.55, "(['red', None, None, None, 'forward'], None)": 6.059018795025778e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.646704369461482, "(['green', None, None, None, 'right'], 'right')": 4.29084706602696, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.515625, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['red', None, None, None, 'right'], 'right')": 4.4858104839131645, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 4.4858104839131645] max_q: 4.48581048391 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.55, 4.646704369461482, 0.1860917990690819, 1.675928211332931] max_q: 4.64670436946 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.55, 4.323352184730741, 0.1860917990690819, 1.675928211332931] max_q: 4.32335218473 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 3.161676093880125, 0.1860917990690819, 1.675928211332931] max_q: 3.16167609388 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 3.2664665821451093, 0.1860917990690819, 1.675928211332931] max_q: 3.26646658215 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -1.0 next_waypoint: forward q: [6.059018795025778e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 6.05901879503e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.626231738238223e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 5.62623173824e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.274592254598334e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 5.2745922546e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 3.0131732663219895, 0.1860917990690819, 1.675928211332931] max_q: 3.01317326632 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 4.46879113636818] max_q: 4.46879113637 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (5, 2), destination = (1, 1), deadline = 25 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.3402609054129844, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 4.981559351565093e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 2.9118559399388686, "(['green', None, None, None, 'right'], 'right')": 4.29084706602696, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.515625, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['red', None, None, None, 'right'], 'right')": 5.356573357442354, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: left q: [0.13734567901234568, -0.025, 2.515625, -0.275] max_q: 2.515625 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 2.9118559399388686, 0.1860917990690819, 1.675928211332931] max_q: 2.91185593994 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 1.3402609054129844, 0.0, 0.0] max_q: 1.34026090541 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [4.981559351565093e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 4.98155935157e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 2.4559279699694345, 0.1860917990690819, 1.675928211332931] max_q: 2.45592796997 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (2, 3), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 4.483403416408584e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.251267305805315, "(['green', None, None, None, 'right'], 'right')": 4.29084706602696, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2578125, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.356573357442354, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.29084706602696] max_q: 4.29084706603 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.266609810524713] max_q: 4.26660981052 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.483403416408584e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 4.48340341641e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.251267305805315, 0.1860917990690819, 1.675928211332931] max_q: 4.25126730581 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.362552562306438e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 3.36255256231e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.942233492018133e-09, -0.5041247355807345, -0.9846634261831906, -0.1689954215602106] max_q: 2.94223349202e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 3.500844871097302, 0.1860917990690819, 1.675928211332931] max_q: 3.5008448711 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.678286678721177] max_q: 4.67828667872 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 3.5424411318391935, 0.1860917990690819, 1.675928211332931] max_q: 3.54244113184 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (3, 4), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 2.64801014281632e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.599635990524795, "(['green', None, None, None, 'right'], 'right')": 4.629837630241093, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2578125, "(['red', None, None, None, 'forward'], 'right')": -0.1689954215602106, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.356573357442354, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9846634261831906, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.5041247355807345, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 5.356573357442354] max_q: 5.35657335744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [2.64801014281632e-09, -0.999999998675995, -0.9846634261831906, -0.1689954215602106] max_q: 2.64801014282e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.599635990524795, 0.1860917990690819, 1.675928211332931] max_q: 4.59963599052 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.499696658770663, 0.1860917990690819, 1.675928211332931] max_q: 4.49969665877 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.13734567901234568, -0.025, 3.2578125, -0.275] max_q: 3.2578125 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 5.271787522602207] max_q: 5.2717875226 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 5.1923008024395685] max_q: 5.19230080244 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.629837630241093] max_q: 4.62983763024 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.437234576424331, 0.1860917990690819, 1.675928211332931] max_q: 4.43723457642 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.98600760711224e-09, -0.999999998675995, -0.9872195216538249, -0.21628178976689427] max_q: 1.98600760711e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 5.094813914959676] max_q: 5.09481391496 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.598345748729039] max_q: 4.59834574873 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5924061140917264, -0.7217577648440416, 1.3820574120270865, 5.055713417996831] max_q: 5.055713418 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.215667796839664, 0.1860917990690819, 1.675928211332931] max_q: 4.21566779684 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (5, 1), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 1.9032572901492296e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.5924061140917264, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.683483891012778, "(['green', None, None, None, 'right'], 'right')": 4.578400890438071, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.00625, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.007806357198219, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9872195216538249, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.5602793489800209, 4.683483891012778, 0.1860917990690819, 1.675928211332931] max_q: 4.68348389101 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.007806357198219] max_q: 5.0078063572 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.525631897479769, 0.1860917990690819, 1.675928211332931] max_q: 4.52563189748 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.9032572901492296e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.90325729015e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6653501288805759e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.66535012888e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4988151159925186e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.49881511599e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.3739138563264755e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.37391385633e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.438026581233141, 0.1860917990690819, 1.675928211332931] max_q: 4.43802658123 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (7, 3), destination = (1, 3), deadline = 30 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 1.2757771523031558e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.12105263157894737, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 5.383273258658734, "(['green', None, None, None, 'right'], 'right')": 4.578400890438071, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.00625, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.648503401208627, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9872195216538249, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.12105263157894737] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.648503401208627] max_q: 4.64850340121 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.005075545599805] max_q: 4.0050755456 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.2757771523031558e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.2757771523e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.169462389611226e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.16946238961e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 5.383273258658734, 0.1860917990690819, 1.675928211332931] max_q: 5.38327325866 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0255999527939723e-09, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 1.02559995279e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.743199551542738e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 9.74319955154e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 5.296818679992564, 0.1860917990690819, 1.675928211332931] max_q: 5.29681867999 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 5.242784568326206, 0.1860917990690819, 1.675928211332931] max_q: 5.24278456833 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 5.194985161852121, 0.1860917990690819, 1.675928211332931] max_q: 5.19498516185 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [9.300326844654432e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 9.30032684465e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.990315949832618e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 8.99031594983e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.709368576400349e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 8.7093685764e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -1.0 next_waypoint: forward q: [8.453210677094455e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 8.45321067709e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 5.152307120357402, 0.1860917990690819, 1.675928211332931] max_q: 5.15230712036 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [8.230757764539338e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 8.23075776454e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.034787341574115e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 8.03478734157e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.852178538356523e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 7.85217853836e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 5.001973014339531, 0.1860917990690819, 1.675928211332931] max_q: 5.00197301434 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.004567991039825] max_q: 4.00456799104 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (8, 1), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 7.68147900491399e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.24736842105263157, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.9810985765407905, "(['green', None, None, None, 'right'], 'right')": 4.578400890438071, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.00625, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9872195216538249, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.578400890438071] max_q: 4.57840089044 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 3.00625, -0.275] max_q: 3.00625 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.9810985765407905, 0.1860917990690819, 1.675928211332931] max_q: 4.98109857654 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.68147900491399e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 7.68147900491e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.04135575450449e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 7.0413557545e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.538401772039885e-10, -0.999999998675995, -0.9872195216538249, -0.23810626740393098] max_q: 6.53840177204e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.5602793489800209, 4.384878861309447, 0.1860917990690819, 1.675928211332931] max_q: 4.38487886131 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.129751661287392e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 6.12975166129e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.146390975209152, 0.1860917990690819, 1.675928211332931] max_q: 4.14639097521 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (6, 3), destination = (3, 2), deadline = 20 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 5.851126585774328e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.24736842105263157, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.800858393966102, "(['green', None, None, None, 'right'], 'right')": 4.563583920604688, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.1304687500000004, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.13734567901234568, -0.025, 3.1304687500000004, -0.275] max_q: 3.13046875 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [5.851126585774328e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.85112658577e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.266013927196895e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.2660139272e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.827179433263821e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.82717943326e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.482380902316405e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.48238090232e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.20223209592163e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.20223209592e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.800858393966102, 0.1860917990690819, 1.675928211332931] max_q: 4.80085839397 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5602793489800209, 4.7608154742677975, 0.1860917990690819, 1.675928211332931] max_q: 4.76081547427 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 4.563583920604688] max_q: 4.5635839206 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 4), deadline = 30 RoutePlanner.route_to(): destination = (4, 4) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5602793489800209, "(['red', None, None, None, 'forward'], None)": 3.968774757259317e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.24736842105263157, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.726232952710171, "(['green', None, None, None, 'right'], 'right')": 5.367283314271255, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2391601562500005, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 5.367283314271255] max_q: 5.36728331427 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [3.968774757259317e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.96877475726e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -1.0 next_waypoint: forward q: [1.9843873786296584e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.98438737863e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.726232952710171, 0.1860917990690819, 1.675928211332931] max_q: 4.72623295271 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6536561488580487e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.65365614886e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.488290533972244e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.48829053397e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.3642663228078903e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.36426632281e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2668187283216124e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.26681872832e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1876425578015115e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.1876425578e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5602793489800209, 4.08681006397828, 0.1860917990690819, 1.675928211332931] max_q: 4.08681006398 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.24736842105263157] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.1216624157014275e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.1216624157e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0816030437120909e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.08160304371e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5839534227183338, 3.8781290575860603, 0.1860917990690819, 1.675928211332931] max_q: 3.87812905759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5839534227183338, 3.881713497068823, 0.1860917990690819, 1.675928211332931] max_q: 3.88171349707 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.5839534227183338, "(['red', None, None, None, 'forward'], None)": 1.0455496089216879e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.332729413901237, "(['green', None, None, None, 'right'], 'right')": 5.270674425132275, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2391601562500005, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 5.270674425132275] max_q: 5.27067442513 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0455496089216879e-10, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.04554960892e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.2277480446084396e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.22774804461e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5839534227183338, 4.332729413901237, 0.1860917990690819, 1.675928211332931] max_q: 4.3327294139 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.92081103345633e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.92081103346e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.430709654274289e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.43070965427e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.08763868884686e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.08763868885e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.830335464776288e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.83033546478e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.2772745115843644, 0.1860917990690819, 1.675928211332931] max_q: 4.27727451158 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 5.211635659547342] max_q: 5.21163565955 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (3, 2), destination = (4, 6), deadline = 25 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.6281686458636962e-11, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.0242440102986725, "(['green', None, None, None, 'right'], 'right')": 6.111269758052957, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2391601562500005, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 6.111269758052957] max_q: 6.11126975805 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.0242440102986725, 0.1860917990690819, 1.675928211332931] max_q: 4.0242440103 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.6281686458636962e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.62816864586e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.190140538219747e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.19014053822e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.916372970942279e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.91637297094e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.018183007724005, 0.1860917990690819, 1.675928211332931] max_q: 4.01818300772 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.7247356738480508e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.72473567385e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.681819173104775, 0.1860917990690819, 1.675928211332931] max_q: 3.6818191731 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (4, 1), destination = (1, 6), deadline = 40 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.6015402685731902e-11, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.951705474785727, "(['green', None, None, None, 'right'], 'right')": 5.002853135075155, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.2391601562500005, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.13734567901234568, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.33708279556521303, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.6015402685731902e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.60154026857e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5014440017873656e-11, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.50144400179e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.507220008936828e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 7.50722000894e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.6304150067026216e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.6304150067e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.692012505585518e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.69201250559e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.951705474785727, 0.1860917990690819, 1.675928211332931] max_q: 4.95170547479 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [4.1055109423873285e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.10551094239e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.763385030521718e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.76338503052e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.361364379828992, 0.1860917990690819, 1.675928211332931] max_q: 4.36136437983 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.4945718140558815e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.49457181406e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.3004289354972214e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.3004289355e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.1354074887223605e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.13540748872e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.33877910608968, 0.1860917990690819, 1.675928211332931] max_q: 4.33877910609 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.2513637097133191, -0.025, 3.2391601562500005, -0.275] max_q: 3.23916015625 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.9928889665077074e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.99288896651e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.3246633100026095, 0.1860917990690819, 1.675928211332931] max_q: 4.32466331 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.3145175815650285, 0.1860917990690819, 1.675928211332931] max_q: 4.31451758157 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.8931260009574506e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.89312600096e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.16666666666666666, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.33708279556521303, -0.03571428571428571, -0.05] max_q: 0.337082795565 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.812761389819744e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.81276138982e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.745790880538321e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.74579088054e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.6833865423442685e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.68338654234e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.625052052293306e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.62505205229e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.178369488531876, 0.1860917990690819, 1.675928211332931] max_q: 4.17836948853 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (4, 5), destination = (7, 6), deadline = 20 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.570363467870529e-12, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.491234708990652, "(['green', None, None, None, 'right'], 'right')": 5.002853135075155, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.150648716517858, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.2513637097133191, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.4159532892069935, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [2.570363467870529e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.57036346787e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.5189561985131184e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 2.51895619851e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2594780992565592e-12, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 1.25947809926e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.446085744424194e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 9.44608574442e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.491234708990652, 0.1860917990690819, 1.675928211332931] max_q: 4.49123470899 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.429830370366821, 0.1860917990690819, 1.675928211332931] max_q: 4.42983037037 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.943864296293535, 0.1860917990690819, 1.675928211332931] max_q: 3.94386429629 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.4159532892069935] max_q: 4.41595328921 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 5), deadline = 35 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 7.871738120353496e-13, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.6198869135780116, "(['green', None, None, None, 'right'], 'right')": 5.002853135075155, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.150648716517858, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.2513637097133191, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.856735186111363, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6926839258951891, -0.025, 3.150648716517858, -0.275] max_q: 3.15064871652 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [7.871738120353496e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 7.87173812035e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.084564308318147e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 7.08456430832e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.494183949291635e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 6.49418394929e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.6198869135780116, 0.1860917990690819, 1.675928211332931] max_q: 3.61988691358 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.643643981479386, 0.1860917990690819, 1.675928211332931] max_q: 3.64364398148 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.6926839258951891, -0.025, 2.8629865373883936, -0.275] max_q: 2.86298653739 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.4610168724261543, 0.1860917990690819, 1.675928211332931] max_q: 3.46101687243 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.030313667199376e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 6.0303136672e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.779050597732735e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.77905059773e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.556779420896861e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.5567794209e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.3281971567510764, 0.1860917990690819, 1.675928211332931] max_q: 3.32819715675 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.358323013007687e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.35832301301e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.190875418851197e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.19087541885e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.038202612414397e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 5.03820261241e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.89825253984733e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.89825253985e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.2396506796343556, 0.1860917990690819, 1.675928211332931] max_q: 3.23965067963 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (8, 2), destination = (3, 5), deadline = 40 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 4.769351157219768e-13, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": -0.06928314837550988, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.7586594126434965, "(['green', None, None, None, 'right'], 'right')": 5.002853135075155, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.919837210518974, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.6926839258951891, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.856735186111363, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, -0.06928314837550988, 5.002853135075155] max_q: 5.00285313508 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: forward q: [1.653288901852565, 3.7586594126434965, 0.1860917990690819, 1.675928211332931] max_q: 3.75865941264 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.818994559482622, 0.1860917990690819, 1.675928211332931] max_q: 3.81899455948 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, 1.9888909033491378, 4.9777818066982755] max_q: 4.9777818067 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.769351157219768e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.76935115722e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.2924160414977915e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 4.2924160415e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.934714704706309e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.93471470471e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.6536636543701443e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.65366365437e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.4253096759720104e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.42530967597e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.849162132902185, 0.1860917990690819, 1.675928211332931] max_q: 3.8491621329 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0)] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (2, 1), destination = (1, 6), deadline = 30 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 3.235014693973565e-13, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.664245919611982, "(['green', None, None, None, 'right'], 'right')": 4.855559080860991, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.919837210518974, "(['red', None, None, None, 'forward'], 'right')": -0.23810626740393098, "(['green', None, None, None, 'left'], None)": 0.6926839258951891, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.856735186111363, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.028577655422134, -0.05365037852741328, 1.9888909033491378, 4.855559080860991] max_q: 4.85555908086 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.6926839258951891, -0.025, 2.919837210518974, -0.275] max_q: 2.91983721052 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.664245919611982, 0.1860917990690819, 1.675928211332931] max_q: 4.66424591961 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.235014693973565e-13, -0.999999998675995, -0.9886395747693457, -0.23810626740393098] max_q: 3.23501469397e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [2.6958455783113045e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.69584557831e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.498184439708987, 0.1860917990690819, 1.675928211332931] max_q: 4.49818443971 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6926839258951891, -0.025, 3.459918605259487, -0.275] max_q: 3.45991860526 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.4262610204801743e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.42626102048e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.3049479694561656e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.30494796946e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.200177607208158e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.20017760721e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.1085035402411512e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.10850354024e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.0274072502318763e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 2.02740725023e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.0818203664241555, 0.1860917990690819, 1.675928211332931] max_q: 4.08182036642 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.079093020876684, 0.1860917990690819, 1.675928211332931] max_q: 4.07909302088 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.076621363974287, 0.1860917990690819, 1.675928211332931] max_q: 4.07662136397 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.954467166093453, 0.1860917990690819, 1.675928211332931] max_q: 3.95446716609 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.954999848437881e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.95499984844e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.489923127189515, -0.275] max_q: 3.48992312719 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.9035524840053054e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.90355248401e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.849738515444393, 0.1860917990690819, 1.675928211332931] max_q: 3.84973851544 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.8621709082660596e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.86217090827e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8249274901007386e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.8249274901e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7898327306757246e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.78983273068e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7566876801076558e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.75668768011e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7253182572485906e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.72531825725e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.8528689630393016, 0.1860917990690819, 1.675928211332931] max_q: 3.85286896304 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 3), deadline = 20 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.6955713907443046e-13, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.791106664271328, "(['green', None, None, None, 'right'], 'right')": 4.812781126817941, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.4221993486809006, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.856735186111363, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.999999998675995, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: left q: [0.7427923848332638, -0.025, 3.4221993486809006, -0.275] max_q: 3.42219934868 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6955713907443046e-13, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 1.69557139074e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.477856953721523e-14, -0.999999998675995, -0.9886395747693457, -0.30357970055291456] max_q: 8.47785695372e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [6.358392715291142e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 6.35839271529e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.791106664271328, 0.1860917990690819, 1.675928211332931] max_q: 3.79110666427 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.432885331417068, 0.1860917990690819, 1.675928211332931] max_q: 3.43288533142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.856735186111363] max_q: 5.85673518611 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 2), deadline = 25 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 5.563593625879749e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.194071109514228, "(['green', None, None, None, 'right'], 'right')": 4.812781126817941, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.3747927037248706, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 7.152682672817695, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 7.152682672817695] max_q: 7.15268267282 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.028577655422134, -0.05365037852741328, 1.9888909033491378, 4.812781126817941] max_q: 4.81278112682 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.3747927037248706, -0.275] max_q: 3.37479270372 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [5.563593625879749e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 5.56359362588e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.194071109514228, 0.1860917990690819, 1.675928211332931] max_q: 3.19407110951 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.895553332135677, 0.1860917990690819, 1.675928211332931] max_q: 2.89555333214 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (7, 1), destination = (1, 5), deadline = 50 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 4.636328021566458e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 5.005997998922109, "(['green', None, None, None, 'right'], 'right')": 4.406390563408971, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.6873963518624353, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.760355228616449, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9886395747693457, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: forward q: [1.653288901852565, 5.005997998922109, 0.1860917990690819, 1.675928211332931] max_q: 5.00599799892 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.905398199029898, 0.1860917990690819, 1.675928211332931] max_q: 4.90539819903 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.452699099514949, 0.1860917990690819, 1.675928211332931] max_q: 4.45269909951 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [4.636328021566458e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 4.63632802157e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.8636066846387156e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 3.86360668464e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.226349549757486, 0.1860917990690819, 1.675928211332931] max_q: 3.22634954976 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.303714594781738, 0.1860917990690819, 1.675928211332931] max_q: 3.30371459478 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.3617383785499264, 0.1860917990690819, 1.675928211332931] max_q: 3.36173837855 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 2.6873963518624353, -0.275] max_q: 2.68739635186 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [3.380655849058876e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 3.38065584906e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.1672043244713683, 0.1860917990690819, 1.675928211332931] max_q: 3.16720432447 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.2269896741016546e-14, -0.9999999991173194, -0.9886395747693457, -0.30357970055291456] max_q: 3.2269896741e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.653288901852565, 3.0699372974320887, 0.1860917990690819, 1.675928211332931] max_q: 3.06993729743 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.1028746866362065e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.10287468664e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.005909852678825e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.00590985268e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.9175007393647415e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.91750073936e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.836459052160165e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.83645905216e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.9986081442699493, 0.1860917990690819, 1.675928211332931] max_q: 2.99860814427 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0)] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (7, 6), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.7618153928927925e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.4486777370564523, "(['green', None, None, None, 'right'], 'right')": 4.406390563408971, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.618656716676192, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.760355228616449, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.028577655422134, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.406390563408971] max_q: 4.40639056341 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.4486777370564523, 0.1860917990690819, 1.675928211332931] max_q: 3.44867773706 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.724338868528233, 0.1860917990690819, 1.675928211332931] max_q: 2.72433886853 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.2031952817044855] max_q: 4.2031952817 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 2), deadline = 40 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.7618153928927925e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 2.4828925790188263, "(['green', None, None, None, 'right'], 'right')": 6.99744086485542, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.618656716676192, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.760355228616449, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664} next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 6.760355228616449] max_q: 6.76035522862 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.4828925790188263, 0.1860917990690819, 1.675928211332931] max_q: 2.48289257902 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.241446289509413, 0.1860917990690819, 1.675928211332931] max_q: 3.24144628951 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.4310847171320598, 0.1860917990690819, 1.675928211332931] max_q: 3.43108471713 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.7618153928927925e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.76181539289e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.4165884687811934e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.41658846878e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.9540564780880443, 0.1860917990690819, 1.675928211332931] max_q: 2.95405647809 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 2.618656716676192, -0.275] max_q: 2.61865671668 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.07142857142855409] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.07142857142855409] max_q: 0.0 count: 3 best: [0, 1, 2] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.7950470650733723, 0.1860917990690819, 1.675928211332931] max_q: 2.79504706507 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0)] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (2, 2), destination = (4, 6), deadline = 30 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.1749296219030742e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.678586770695315, "(['green', None, None, None, 'right'], 'right')": 6.99744086485542, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 2.695398010194181, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.444946529569265, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, None, None, 'forward'], 'left')": 0.1860917990690819, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 2.695398010194181, -0.275] max_q: 2.69539801019 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.1749296219030742e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.1749296219e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.993685486744485e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.99368548674e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8512793805484505e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.85127938055e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7355744192641724e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.73557441926e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.678586770695315, 0.1860917990690819, 1.675928211332931] max_q: 3.6785867707 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.99744086485542] max_q: 6.99744086486 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6391536181939406e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.63915361819e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.570855550769193e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.57085555077e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5104380295857625e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.51043802959e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right random action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.77178125429102] max_q: 6.77178125429 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 2.5563184081553447, -0.275] max_q: 2.55631840816 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (6, 5), destination = (6, 1), deadline = 20 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.4564938142434138e-14, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.694657432160549, "(['green', None, None, None, 'right'], 'right')": 6.680645490202409, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.0285024877475775, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.444946529569265, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.2635075935364947, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 6.444946529569265] max_q: 6.44494652957 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4564938142434138e-14, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 1.45649381424e-14 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.282469071217069e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 7.28246907122e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.694657432160549, 0.2635075935364947, 1.675928211332931] max_q: 3.69465743216 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.129771621440367, 0.2635075935364947, 1.675928211332931] max_q: 3.12977162144 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.461851803412802e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 5.46185180341e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.9156666230715225e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 4.91566662307e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.506027737815563e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 4.50602773782e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.1841686136858806e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 4.18416861369e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.922658075330513e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.92265807533e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.8998572980536528, 0.2635075935364947, 1.675928211332931] max_q: 2.89985729805 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (3, 1), destination = (8, 5), deadline = 45 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 3.70473262670104e-15, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.8098715682482878, "(['green', None, None, None, 'right'], 'right')": 6.680645490202409, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.0285024877475775, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.383822866330033, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.2635075935364947, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.09090909090909091, -0.25, -0.041666666666666664] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.8098715682482878, 0.2635075935364947, 1.675928211332931] max_q: 3.80987156825 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.3574036761862165, 0.2635075935364947, 1.675928211332931] max_q: 3.35740367619 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.70473262670104e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.7047326267e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.3960049078092866e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.39600490781e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.153433128680052e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 3.15343312868e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.9563435581375487e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.95634355814e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.085922940948974, 0.2635075935364947, 1.675928211332931] max_q: 3.08592294095 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 6.383822866330033] max_q: 6.38382286633 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.792102249352129e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.79210224935e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.6847137013001243e-15, -0.9999999991173194, -0.9894510337143914, -0.30357970055291456] max_q: 2.6847137013e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.131626793901525, 0.19409781230590442, 1.675928211332931] max_q: 3.1316267939 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.0285024877475775, -0.275] max_q: 3.02850248775 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (7, 2), destination = (2, 1), deadline = 30 RoutePlanner.route_to(): destination = (2, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.675928211332931, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.588831069110834e-15, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.0561850076414236, "(['green', None, None, None, 'right'], 'right')": 6.680645490202409, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.5269190162060453, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.284496913566281, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.19409781230590442, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999991173194, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.680645490202409] max_q: 6.6806454902 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.0561850076414236, 0.19409781230590442, 1.675928211332931] max_q: 3.05618500764 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.3696717774676044, 0.19409781230590442, 1.675928211332931] max_q: 2.36967177747 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [2.588831069110834e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 2.58883106911e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.2652271854719795e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 2.26522718547e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.777253833100703, 0.19409781230590442, 1.675928211332931] max_q: 2.7772538331 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.0387044669247817e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 2.03870446692e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8930827192872976e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.89308271929e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, -0.025, 3.5269190162060453, -0.275] max_q: 3.52691901621 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 5), deadline = 20 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.5812534949394896, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.7747650493318415e-15, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 2.6477115275839194, "(['green', None, None, None, 'right'], 'right')": 6.606183115474564, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.374227114585441, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.284496913566281, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.19409781230590442, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.606183115474564] max_q: 6.60618311547 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 6.284496913566281] max_q: 6.28449691357 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.7747650493318415e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.77476504933e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.6477115275839194, 0.19409781230590442, 1.5812534949394896] max_q: 2.64771152758 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3310737869988811e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.331073787e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.164689563624021e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.16468956362e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.4318076850559462, 0.19409781230590442, 1.5812534949394896] max_q: 2.43180768506 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (8, 5), destination = (3, 6), deadline = 30 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.5812534949394896, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.0482206072616188e-15, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.026506404213288, "(['green', None, None, None, 'right'], 'right')": 6.459789649605421, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.374227114585441, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.142248456783141, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.19409781230590442, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.459789649605421] max_q: 6.45978964961 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.653288901852565, 4.026506404213288, 0.19409781230590442, 1.5812534949394896] max_q: 4.02650640421 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.013253202106644, 0.19409781230590442, 1.5812534949394896] max_q: 3.01325320211 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0482206072616188e-15, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.04822060726e-15 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.171930313539165e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 9.17193031354e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 4.374227114585441, -0.275] max_q: 4.37422711459 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [8.254737282185249e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 8.25473728219e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 2.675502134737763, 0.19409781230590442, 1.2343779124495748] max_q: 2.67550213474 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 4.136804403126897, -0.275] max_q: 4.13680440313 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.6192102901762824, 0.19409781230590442, 1.2343779124495748] max_q: 2.61921029018 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (5, 4), destination = (1, 6), deadline = 30 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2343779124495748, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 7.879521951176828e-16, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.2873599686082735, "(['green', None, None, None, 'right'], 'right')": 6.2548071788049695, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 4.1322442563560005, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.142248456783141, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.19409781230590442, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward q: [1.653288901852565, 3.2873599686082735, 0.19409781230590442, 1.2343779124495748] max_q: 3.28735996861 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.879521951176828e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 7.87952195118e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.939760975588414e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 3.93976097559e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.2068999705702566, 0.19409781230590442, 1.2343779124495748] max_q: 3.20689997057 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.142248456783141] max_q: 5.14224845678 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, -0.025, 4.1322442563560005, -0.275] max_q: 4.13224425636 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.827637934019429, -0.275] max_q: 3.82763793402 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.3390833088085476, 0.020573359229428365, 1.2235718694420248] max_q: 3.33908330881 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (1, 5), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.9548207316913104e-16, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.126439371644134, "(['green', None, None, None, 'right'], 'right')": 6.2548071788049695, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8362560373184573, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.13927948330701, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward q: [2.9548207316913104e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 2.95482073169e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.8205106984326145e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 2.82051069843e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4102553492163072e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.41025534922e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0576915119122304e-16, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 1.05769151191e-16 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.814095932601922e-17, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 8.8140959326e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.126439371644134, 0.020573359229428365, 1.2235718694420248] max_q: 4.12643937164 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.11379543447972, 0.020573359229428365, 1.2235718694420248] max_q: 4.11379543448 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.10431248160641, 0.020573359229428365, 1.2235718694420248] max_q: 4.10431248161 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.13927948330701] max_q: 5.13927948331 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (6, 4), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 7.712333941026681e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.096861590063096, "(['green', None, None, None, 'right'], 'right')": 6.2548071788049695, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8362560373184573, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 6.387794996568944, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.2548071788049695] max_q: 6.2548071788 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 6.113881730129659] max_q: 6.11388173013 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.096861590063096, 0.020573359229428365, 1.2235718694420248] max_q: 4.09686159006 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 6.387794996568944] max_q: 6.38779499657 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.048430795031548, 0.020573359229428365, 1.2235718694420248] max_q: 3.04843079503 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 2.786323096273661, 0.020573359229428365, 1.2235718694420248] max_q: 2.78632309627 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (8, 2), destination = (1, 2), deadline = 35 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 7.712333941026681e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.62905847701893, "(['green', None, None, None, 'right'], 'right')": 5.0569408650648295, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8362560373184573, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.768020141890101, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9894510337143914, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward q: [7.712333941026681e-17, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 7.71233394103e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.941100546924014e-17, -0.9999999994115458, -0.9894510337143914, -0.30357970055291456] max_q: 6.94110054692e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [3.470550273462007e-17, -0.9999999994115458, -0.9947255168571957, -0.30357970055291456] max_q: 3.47055027346e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.892125227885006e-17, -0.9999999994115458, -0.9947255168571957, -0.30357970055291456] max_q: 2.89212522789e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.62905847701893, 0.020573359229428365, 1.2235718694420248] max_q: 4.62905847702 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.5306095743993806e-17, -0.9999999994115458, -0.9947255168571957, -0.30357970055291456] max_q: 2.5306095744e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [2.319725443199432e-17, -0.9999999994115458, -0.9947255168571957, -0.30357970055291456] max_q: 2.3197254432e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.145269647193847, 0.020573359229428365, 1.2235718694420248] max_q: 4.14526964719 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.906906353061197, 0.020573359229428365, 1.2235718694420248] max_q: 3.90690635306 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.1747426029994675e-17, -0.9999999994115458, -0.9947255168571957, -0.30357970055291456] max_q: 2.174742603e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.7162157177550776, 0.020573359229428365, 1.2235718694420248] max_q: 3.71621571776 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.728040062848616, 0.020573359229428365, 1.2235718694420248] max_q: 3.72804006285 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.653288901852565, 3.5951139041679534, 0.020573359229428365, 1.2235718694420248] max_q: 3.59511390417 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.488772977223423, 0.020573359229428365, 1.2235718694420248] max_q: 3.48877297722 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 5), deadline = 20 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 2.0758906664994916e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.129748821685191, "(['green', None, None, None, 'right'], 'right')": 5.0569408650648295, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8362560373184573, "(['red', None, None, None, 'forward'], 'right')": -0.30357970055291456, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.768020141890101, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9951022656531102, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 5.0569408650648295] max_q: 5.05694086506 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.0758906664994916e-17, -0.9999999994115458, -0.9951022656531102, -0.30357970055291456] max_q: 2.0758906665e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8164043331870552e-17, -0.9999999994115458, -0.9951022656531102, -0.30357970055291456] max_q: 1.81640433319e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 4.129748821685191, 0.020573359229428365, 1.2235718694420248] max_q: 4.12974882169 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.768020141890101] max_q: 5.76802014189 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6347638998683498e-17, -0.9999999994115458, -0.9951022656531102, -0.30357970055291456] max_q: 1.63476389987e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.653288901852565, 3.7747906847376598, 0.020573359229428365, 1.2235718694420248] max_q: 3.77479068474 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5325911561265778e-17, -0.9999999994115458, -0.9951022656531102, -0.30357970055291456] max_q: 1.53259115613e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.455961598320249e-17, -0.9999999994115458, -0.9951022656531102, -0.30357970055291456] max_q: 1.45596159832e-17 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.865882060998278] max_q: 4.865882061 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.832578904806036] max_q: 4.83257890481 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.229731550191516] max_q: 5.22973155019 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.7873023133633454, 0.020573359229428365, 1.2235718694420248] max_q: 3.78730231336 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0)] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (2, 1), destination = (6, 5), deadline = 40 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.300595918778136, "(['green', None, None, None, 'right'], 'right')": 4.802843943920107, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.8362560373184573, "(['red', None, None, None, 'forward'], 'right')": -0.16214379578336563, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.174510911642751, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.9951022656531102, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward q: [1.653288901852565, 4.300595918778136, 0.020573359229428365, 1.2235718694420248] max_q: 4.30059591878 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, -0.025, 3.8362560373184573, -0.275] max_q: 3.83625603732 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.5784043369272514] max_q: 1.57840433693 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.877192027988843, -0.275] max_q: 3.87719202799 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.5784043369272514] max_q: 1.57840433693 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.6894728251899593, -0.275] max_q: 3.68947282519 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.802843943920107] max_q: 4.80284394392 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 1), deadline = 40 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 4.156808673854503, "(['green', None, None, None, 'right'], 'right')": 5.402755070672603, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.6998237310169606, "(['red', None, None, None, 'forward'], 'right')": 1.4612041397941944, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 5.174510911642751, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.174510911642751] max_q: 5.17451091164 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 5.402755070672603] max_q: 5.40275507067 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.4612041397941944] max_q: 1.46120413979 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, -0.025, 3.6998237310169606, -0.275] max_q: 3.69982373102 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 4.156808673854503, 0.020573359229428365, 1.2235718694420248] max_q: 4.15680867385 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.8459031048456458] max_q: 0.845903104846 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, -0.025, 3.7498531091808007, -0.275] max_q: 3.74985310918 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.144940075623598] max_q: 5.14494007562 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.6613127943610813] max_q: 0.661312794361 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.572470037811799] max_q: 4.57247003781 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.550451959434422] max_q: 4.55045195943 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.0928973449134345] max_q: 5.09289734491 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.723344393496583, 0.020573359229428365, 1.2235718694420248] max_q: 3.7233443935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.7196760778933488] max_q: 0.719676077893 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 5.037730620615313] max_q: 5.03773062062 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.530792960883193] max_q: 4.53079296088 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.7549341099683639] max_q: 0.754934109968 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.5158101451624715] max_q: 4.51581014516 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9888909033491378, 4.514973846936528] max_q: 4.51497384694 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.638125246337214, 0.020573359229428365, 1.2235718694420248] max_q: 3.63812524634 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 2), deadline = 45 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9888909033491378, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.988236183933759, "(['green', None, None, None, 'right'], 'right')": 4.50424522512535, "(['green', None, None, None, 'left'], 'forward')": -0.025, "(['green', None, None, None, 'left'], 'left')": 3.574867798262721, "(['red', None, None, None, 'forward'], 'right')": 0.7817973725017087, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.962765070778431, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right random action: left LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.962765070778431] max_q: 4.96276507078 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.481382535389216] max_q: 4.48138253539 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.7817973725017087] max_q: 0.781797372502 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, -0.025, 3.574867798262721, -0.275] max_q: 3.57486779826 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.0192376123234324] max_q: 1.01923761232 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.181150848697041, -0.275] max_q: 3.1811508487 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.988236183933759, 0.020573359229428365, 1.2235718694420248] max_q: 3.98823618393 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1142137082521217] max_q: 1.11421370825 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.222093306262189, -0.275] max_q: 3.22209330626 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.8581335175876044, 0.020573359229428365, 1.2235718694420248] max_q: 3.85813351759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1404514624639286] max_q: 1.14045146246 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.2520127944828743, -0.275] max_q: 3.25201279448 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.1737619948276947, -0.275] max_q: 3.17376199483 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (1, 3), destination = (8, 6), deadline = 50 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9885905686307408, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.863200177673762, "(['green', None, None, None, 'right'], 'right')": 4.50424522512535, "(['green', None, None, None, 'left'], 'forward')": 0.09895282492761337, "(['green', None, None, None, 'left'], 'left')": 3.6641085506706004, "(['red', None, None, None, 'forward'], 'right')": 1.1598613708887922, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.366752573975946, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: forward random action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.6641085506706004, -0.275] max_q: 3.66410855067 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.863200177673762, 0.020573359229428365, 1.2235718694420248] max_q: 3.86320017767 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1749579663303527] max_q: 1.17495796633 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.8320542753353, -0.275] max_q: 3.83205427534 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1541952409568133] max_q: 1.15419524096 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.374040706501475, -0.275] max_q: 3.3740407065 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.225339580419469, 0.020573359229428365, 1.2235718694420248] max_q: 3.22533958042 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1458901508073975] max_q: 1.14589015081 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.426203980959685, -0.275] max_q: 3.42620398096 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.011772016381935] max_q: 1.01177201638 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.3073536492130446, -0.275] max_q: 3.30735364921 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.366752573975946] max_q: 4.36675257398 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.132140365417216, 0.020573359229428365, 1.2235718694420248] max_q: 3.13214036542 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.157665648787298, 0.020573359229428365, 1.2235718694420248] max_q: 3.15766564879 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.9343961695980145] max_q: 0.934396169598 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.50424522512535] max_q: 4.50424522513 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.359588201387616] max_q: 4.35958820139 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.488022668903772] max_q: 4.4880226689 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.1193063396768372, 0.020573359229428365, 1.2235718694420248] max_q: 3.11930633968 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0), (27, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (4, 5), destination = (8, 3), deadline = 30 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9885905686307408, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.5258797301972984, "(['green', None, None, None, 'right'], 'right')": 4.476931244610505, "(['green', None, None, None, 'left'], 'forward')": 0.09895282492761337, "(['green', None, None, None, 'left'], 'left')": 3.2201967392655084, "(['red', None, None, None, 'forward'], 'right')": 0.940988643294878, "(['green', None, None, None, 'left'], None)": 0.7427923848332638, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.354084541057343, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: left q: [0.7427923848332638, 0.09895282492761337, 3.2201967392655084, -0.275] max_q: 3.22019673927 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.940988643294878] max_q: 0.940988643295 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.2629398650986492] max_q: 1.2629398651 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.9726205892696087, -0.275] max_q: 2.97262058927 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1013013033058887] max_q: 1.10130130331 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.8510430156109074, -0.275] max_q: 2.85104301561 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.476931244610505] max_q: 4.47693124461 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0), (27, 12.0), (27, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (8, 2), destination = (2, 6), deadline = 50 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9885905686307408, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.5258797301972984, "(['green', None, None, None, 'right'], 'right')": 5.227818504433178, "(['green', None, None, None, 'left'], 'forward')": 0.09895282492761337, "(['green', None, None, None, 'left'], 'left')": 2.8989162232937864, "(['red', None, None, None, 'forward'], 'right')": 0.9845623420111171, "(['green', None, None, None, 'left'], None)": 1.1631823691975143, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.354084541057343, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 5.227818504433178] max_q: 5.22781850443 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 5.180594715801133] max_q: 5.1805947158 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 0.9845623420111171] max_q: 0.984562342011 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.8989162232937864, -0.275] max_q: 2.89891622329 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.5258797301972984, 0.020573359229428365, 1.2235718694420248] max_q: 3.5258797302 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.9906732046859705, -0.275] max_q: 2.99067320469 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.1237511035548833] max_q: 1.12375110355 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.884687910338146, -0.275] max_q: 2.88468791034 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.0175635483771392] max_q: 1.01756354838 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.8109639178099672, -0.275] max_q: 2.81096391781 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 2.853429492173897, -0.275] max_q: 2.85342949217 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0), (27, 12.0), (27, 12.0), (17, 12.0), (30, 12.0)] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (5, 3), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', 'left', None, None, 'forward'], 'forward')": 1.505195679682433, "(['green', None, None, None, 'forward'], 'right')": 1.2235718694420248, "(['green', None, None, None, 'forward'], None)": 1.653288901852565, "(['red', None, None, None, 'forward'], None)": 1.3897815256693287e-17, "(['green', None, None, 'forward', 'right'], 'forward')": 0.6472496280951221, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.187650446358202, "(['red', None, None, None, 'left'], 'forward')": -1.0, "(['red', 'left', None, None, 'forward'], 'forward')": -0.3333333333333333, "(['green', None, None, 'right', 'forward'], 'forward')": 0.7393435549352083, "(['green', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 2.5039031785991095, "(['red', 'forward', None, None, 'right'], 'right')": 0.29383120305124494, "(['red', None, None, 'left', 'left'], 'right')": -0.5, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.26680161943319836, "(['green', None, None, None, 'right'], 'left')": 1.9885905686307408, "(['red', None, None, 'right', 'forward'], 'forward')": -0.05555555555555555, "(['green', 'right', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, 'right', None, 'forward'], 'right')": -0.1, "(['green', None, 'right', None, 'left'], 'left')": 0.2961002331002331, "(['red', None, 'forward', None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'right')": 0.14258829201513226, "(['red', 'forward', None, None, 'left'], 'forward')": -0.2, "(['green', None, 'left', None, 'left'], 'forward')": -0.5, "(['green', None, None, 'left', 'left'], 'right')": 0.07179833333333335, "(['green', None, None, None, 'forward'], 'forward')": 3.3078969115976844, "(['green', None, None, None, 'right'], 'right')": 4.177042270528672, "(['green', None, None, None, 'left'], 'forward')": 0.09895282492761337, "(['green', None, None, None, 'left'], 'left')": 3.310758017565202, "(['red', None, None, None, 'forward'], 'right')": 1.0280546951018856, "(['green', None, None, None, 'left'], None)": 1.1631823691975143, "(['red', None, 'forward', None, 'forward'], 'left')": -0.16666666666666666, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'right')": -0.07142857142855409, "(['green', None, 'left', 'forward', 'right'], 'left')": 0.08957351952912788, "(['red', None, None, None, 'left'], 'left')": -0.5833333333333333, "(['red', None, None, 'forward', 'forward'], 'right')": -0.5, "(['green', None, 'right', None, 'forward'], 'forward')": 0.29125, "(['red', 'forward', None, None, 'left'], 'left')": -0.16666666666666666, "(['red', None, 'right', None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.275, "(['green', None, 'forward', None, 'right'], 'left')": 0.14958395754668002, "(['red', None, None, None, 'right'], 'right')": 4.354084541057343, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.09090909090909091, "(['green', None, 'forward', None, 'forward'], 'right')": -0.05, "(['red', None, None, None, 'right'], 'left')": 1.3820574120270865, "(['green', None, None, None, 'right'], None)": 2.037308536736252, "(['green', None, 'forward', None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'left'], None)": 0.0, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'forward')": 0.4202286557870227, "(['red', None, None, None, 'forward'], 'left')": -0.733667454280865, "(['green', None, None, 'right', 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'right')": -0.125, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.07142857142857142, "(['green', None, 'right', None, 'right'], 'right')": 0.4144574664608571, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'left')": -0.25, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.020573359229428365, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'left')": -0.03571428571428571, "(['green', None, 'left', None, 'forward'], 'left')": -0.1273983408076937, "(['green', None, None, None, 'right'], 'forward')": -0.05365037852741328, "(['red', None, None, None, 'forward'], 'forward')": -0.9999999994115458, "(['red', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'right')": 0.14424355697485527, "(['green', None, 'left', None, 'right'], 'right')": 1.6280033569816834, "(['red', 'forward', None, None, 'right'], 'forward')": -0.05263157894736842, "(['green', 'right', None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.7217577648440416, "(['red', None, None, 'forward', 'forward'], 'left')": -0.16666666666666666, "(['green', None, 'forward', None, 'left'], 'right')": 0.07361111111111113, "(['red', 'forward', None, None, 'forward'], 'right')": -0.041666666666666664, "(['green', None, None, 'left', 'forward'], 'forward')": 0.1818181818181828} next_waypoint: left random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 3.310758017565202, -0.275] max_q: 3.31075801757 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -1.0, -0.5833333333333333, -0.26680161943319836] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.1631823691975143, 0.09895282492761337, 3.048606414052162, -0.275] max_q: 3.04860641405 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.733667454280865, 1.0280546951018856] max_q: 1.0280546951 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.354084541057343] max_q: 4.35408454106 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.3393310185132865] max_q: 4.33933101851 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.177042270528672] max_q: 4.17704227053 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.3897815256693287e-17, -0.9999999994115458, -0.7202272776361717, 0.9358703907790726] max_q: 0.935870390779 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.170719332295505] max_q: 4.1707193323 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.037308536736252, -0.05365037852741328, 1.9885905686307408, 4.165698175463284] max_q: 4.16569817546 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [2.5039031785991095, -0.7217577648440416, 1.3820574120270865, 4.320037950571059] max_q: 4.32003795057 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.653288901852565, 3.3078969115976844, 0.020573359229428365, 1.2235718694420248] max_q: 3.3078969116 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 epsilon: 0.1 gamma: 0.5 alpha: 0.05 defaultq: 0.0 Results: [(3, 12.0), (22, 12.0), (16, 12.0), (17, 12.0), (18, 12.0), (6, 12.0), (9, 12.0), (5, 12.0), (20, 12.0), (18, 12.0), (22, 12.0), (12, 12.0), (15, 12.0), (15, 12.0), (20, 12.0), (12, 12.0), (11, 12.0), (19, 12.0), (10, 12.0), (9, 12.0), (15, 12.0), (21, 12.0), (18, 12.0), (9, 12.0), (35, 12.0), (23, 12.0), (21, 12.0), (15, 12.0), (18, 12.0), (11, 12.0), (11, 12.0), (34, 12.0), (29, 12.0), (23, 12.0), (14, 12.0), (9, 12.0), (15, 12.0), (8, 12.0), (15, 12.0), (35, 12.0), (10, 12.0), (23, 12.0), (25, 12.0), (9, 12.0), (15, 12.0), (16, 12.0), (23, 12.0), (27, 12.0), (11, 12.0), (16, 12.0), (19, 12.0), (22, 12.0), (13, 12.0), (9, 12.0), (20, 12.0), (10, 12.0), (12, 12.0), (10, 12.0), (20, 12.0), (24, 12.0), (19, 12.0), (12, 12.0), (13, 12.0), (12, 12.0), (5, 12.0), (13, 12.0), (8, 12.0), (12, 12.0), (10, 12.0), (17, 12.0), (15, 12.0), (13, 12.0), (15, 12.0), (30, 12.0), (13, 12.0), (20, 12.0), (30, 12.0), (16, 12.0), (28, 12.0), (10, 12.0), (10, 12.0), (27, 12.0), (20, 12.0), (14, 12.0), (14, 12.0), (19, 12.0), (12, 12.0), (15, 12.0), (19, 12.0), (4, 12.0), (24, 12.0), (15, 12.0), (27, 12.0), (27, 12.0), (17, 12.0), (30, 12.0)] Number of Successful Outcomes: 96 ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ ================================================ FILE: p4-smartcab/smartcab/trial-data/trial2.js ================================================ self.epsilon = 0.1 self.alpha = 0.2 self.gamma = 0.9 self.actions = [None, 'forward', 'left', 'right'] self.q = {} self.defaultq = 0.0 SUCCESS: 10/100 ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py 2016-09-19 19:48:51.916 python[48771:16919169] 19:48:51.916 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API's in AudioComponent.h. Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (7, 1), destination = (3, 3), deadline = 30 RoutePlanner.route_to(): destination = (3, 3) q: {} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', Nuone, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (2, 5), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (2, 1), destination = (8, 4), deadline = 45 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'forward', 'possible'] random action: forward state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (1, 6), destination = (8, 4), deadline = 45 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.12170880000000002, "(['green', None, None, None, 'possible'], 'right')": 1.9982513795003838, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.4965361671266266, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 2.2304236387437015} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (3, 2), destination = (7, 4), deadline = 30 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.11302803520705257, "(['green', None, None, None, 'possible'], None)": 0.12170880000000002, "(['green', None, None, None, 'possible'], 'right')": 3.8305107821787336, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.3311085956130976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.8623361968389528, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 3.4222377409236495} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (1, 6), destination = (4, 2), deadline = 35 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.5661051656645739, "(['green', None, None, None, 'possible'], None)": 0.7868589807921722, "(['green', None, None, None, 'possible'], 'right')": 4.149007740950564, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.3311085956130976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.8623361968389528, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 3.677823565798665} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (5, 6), destination = (5, 1), deadline = 25 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.988282711344681, "(['green', None, None, None, 'possible'], None)": 0.7868589807921722, "(['green', None, None, None, 'possible'], 'right')": 4.966630294699182, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.3311085956130976, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.8623361968389528, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 5.217794981611931} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (5, 4), destination = (1, 2), deadline = 30 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.988282711344681, "(['green', None, None, None, 'possible'], None)": 0.7868589807921722, "(['green', None, None, None, 'possible'], 'right')": 5.071951735029095, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.3311085956130976, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.8623361968389528, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 5.217794981611931} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (1, 6), destination = (7, 3), deadline = 45 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.988282711344681, "(['green', None, None, None, 'possible'], None)": 1.6408064824407953, "(['green', None, None, None, 'possible'], 'right')": 5.886506364513418, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.3311085956130976, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.8623361968389528, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 5.678451153969825} self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (1, 6), destination = (2, 3), deadline = 20 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.9771700771967514, "(['green', None, None, None, 'possible'], None)": 1.57583054573614, "(['green', None, None, None, 'possible'], 'right')": 1.4897939211619167, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 0.9651475183055132, "(['red', None, None, None, 'possible'], 'left')": 0.16081302995858637, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.0254657268305771, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, None, 'possible'], 'right')": 1.8644264964411927} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (1, 3), destination = (8, 1), deadline = 45 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": 0.9771700771967514, "(['green', None, None, None, 'possible'], None)": 1.3959374824731192, "(['green', None, None, None, 'possible'], 'right')": 1.9845061221924567, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 1.0824316624400252, "(['red', None, None, None, 'possible'], 'left')": 0.16081302995858637, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.0254657268305771, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.633929860220568} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (8, 6), destination = (5, 2), deadline = 35 RoutePlanner.route_to(): destination = (5, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.0007957212637626, "(['green', None, None, None, 'possible'], None)": 1.477853153854768, "(['green', None, None, None, 'possible'], 'right')": 2.73904776869426, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.40065073519823335, "(['green', None, None, None, 'possible'], 'forward')": 1.2526980212127619, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 0.16081302995858637, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.0254657268305771, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 3.3799348174426767} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (3, 6), destination = (1, 3), deadline = 25 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.0007957212637626, "(['green', None, None, None, 'possible'], None)": 1.477853153854768, "(['green', None, None, None, 'possible'], 'right')": 4.456093572636473, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.9508617847470451, "(['green', None, None, None, 'possible'], 'forward')": 1.5588784800922326, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 0.6686907608500016, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.0254657268305771, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 4.703986993551068} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (7, 6), destination = (3, 3), deadline = 35 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.0007957212637626, "(['green', None, None, None, 'possible'], None)": 1.477853153854768, "(['green', None, None, None, 'possible'], 'right')": 4.562181333900981, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.9508617847470451, "(['green', None, None, None, 'possible'], 'forward')": 1.5588784800922326, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 1.1912523830918986, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.8124045105876456, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 4.884039497665802} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (3, 6), destination = (7, 6), deadline = 20 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.0007957212637626, "(['green', None, None, None, 'possible'], None)": 2.0685126112954704, "(['green', None, None, None, 'possible'], 'right')": 5.115941068499571, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.9508617847470451, "(['green', None, None, None, 'possible'], 'forward')": 1.5588784800922326, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 1.1912523830918986, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.59935681744053, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 3.9871093609264836} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (1, 3), destination = (8, 4), deadline = 40 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.458653940644342, "(['green', None, None, None, 'possible'], None)": 2.0685126112954704, "(['green', None, None, None, 'possible'], 'right')": 5.250128767152807, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.9508617847470451, "(['green', None, None, None, 'possible'], 'forward')": 3.732086784536609, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 1.6637555148402252, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.937502817585756, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 4.794588641601957} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (1, 3), destination = (8, 5), deadline = 45 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": 1.458653940644342, "(['green', None, None, None, 'possible'], None)": 2.0685126112954704, "(['green', None, None, None, 'possible'], 'right')": 5.934293865222027, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 0.9508617847470451, "(['green', None, None, None, 'possible'], 'forward')": 3.732086784536609, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.0569736557337164, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.8975928426787232, "(['red', None, None, None, 'possible'], 'right')": 5.336888547405623} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (5, 5), destination = (2, 6), deadline = 20 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": 2.4227582045215534, "(['green', None, None, None, 'possible'], None)": 3.218136144939088, "(['green', None, None, None, 'possible'], 'right')": 4.86031470766642, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 2.0354199574680245, "(['green', None, None, None, 'possible'], 'forward')": 3.732086784536609, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.0569736557337164, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['red', None, None, None, 'possible'], 'right')": 5.118911779528942} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (5, 1), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], None)": 3.530268475735869, "(['green', None, None, None, 'possible'], 'right')": 5.309775332136656, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 2.0354199574680245, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.4162941018308692, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['red', None, None, None, 'possible'], 'right')": 5.392862095799422} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30 RoutePlanner.route_to(): destination = (6, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], None)": 3.530268475735869, "(['green', None, None, None, 'possible'], 'right')": 5.006396064641602, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 2.536980334563326, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.6804105732551147, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['red', None, None, None, 'possible'], 'right')": 5.263196065502328} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (6, 4), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], None)": 3.530268475735869, "(['green', None, None, None, 'possible'], 'right')": 5.3524921435037, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 2.536980334563326, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.6804105732551147, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['red', None, None, None, 'possible'], 'right')": 5.263196065502328} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (7, 2), destination = (1, 2), deadline = 30 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], None)": 3.827150108814574, "(['green', None, None, None, 'possible'], 'right')": 5.526326767493362, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, None, 'possible'], 'left')": 2.536980334563326, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['red', None, None, None, 'possible'], 'right')": 5.749201235117987} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (8, 6), destination = (2, 6), deadline = 30 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.8787310734983422, "(['green', None, None, None, 'possible'], None)": 3.827150108814574, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.0836258187008463, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.937685852237033, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], 'right')": 5.267707670427608, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.2759714979301413, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] random action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'forward', None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (5, 4), destination = (7, 6), deadline = 20 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.8787310734983422, "(['green', None, None, None, 'possible'], None)": 3.827150108814574, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.635684108363343, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.9149850632693095, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], 'right')": 4.92978517435425, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.6781158359662225, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (8, 4), destination = (1, 1), deadline = 50 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.086338889076547, "(['green', None, None, None, 'possible'], None)": 3.827150108814574, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.635684108363343, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.672323217393001, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], 'right')": 6.300835458196801, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.706029932089622, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.6781158359662225, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (5, 6), destination = (5, 2), deadline = 20 RoutePlanner.route_to(): destination = (5, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0579581308478616, "(['green', None, None, None, 'possible'], None)": 3.8062994846526297, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.9835646765548196, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.959944291759337, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.601518430856469, "(['green', None, None, None, 'possible'], 'right')": 4.826510554391619, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.5926574158737887, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.6781158359662225, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (2, 1), destination = (2, 5), deadline = 20 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2619776693641995, "(['green', None, None, None, 'possible'], None)": 3.8062994846526297, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.9835646765548196, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.755101163084899, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.8751219831167667, "(['green', None, None, None, 'possible'], 'right')": 4.443725251622375, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.5926574158737887, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.6781158359662225, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (7, 1), destination = (3, 5), deadline = 40 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2619776693641995, "(['green', None, None, None, 'possible'], None)": 3.8062994846526297, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.9835646765548196, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.78379699029763, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.8751219831167667, "(['green', None, None, None, 'possible'], 'right')": 5.6406602011895135, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.5926574158737887, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.9988967693690336, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (4, 1), destination = (7, 3), deadline = 25 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.482657963390242, "(['green', None, None, None, 'possible'], None)": 3.8062994846526297, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 2.9835646765548196, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.9038725804969636, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": -0.36000000000000004, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.8751219831167667, "(['green', None, None, None, 'possible'], 'right')": 4.277261335226841, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.5926574158737887, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.922906705857772, "(['red', None, None, None, 'possible'], None)": 3.1380011714129465, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, 'right', 'right', 'possible'] action: None state2: ['red', None, 'right', 'right', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (1, 1), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.482657963390242, "(['green', None, None, None, 'possible'], None)": 3.8062994846526297, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.5578540475498595, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.6176195434544316, "(['green', None, None, None, 'possible'], 'right')": 3.929238730682983, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.556137036579798, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.664448571740617, "(['red', None, None, None, 'possible'], None)": 2.6696953614564647, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (1, 4), destination = (5, 6), deadline = 30 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.1572978885339915, "(['green', None, None, None, 'possible'], None)": 3.510809452067995, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.743819009667038, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.3652671525853433, "(['green', None, None, None, 'possible'], 'right')": 3.705973095616206, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.3850142958482023, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.402815101984711, "(['red', None, None, None, 'possible'], None)": 2.4624419983071357, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (8, 3), destination = (1, 5), deadline = 45 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.1572978885339915, "(['green', None, None, None, 'possible'], None)": 3.525385289828682, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.336247959642664, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.4958015079067817, "(['green', None, None, None, 'possible'], 'right')": 4.3022387422822215, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.3850142958482023, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.402815101984711, "(['red', None, None, None, 'possible'], None)": 2.4624419983071357, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (2, 4), destination = (8, 3), deadline = 35 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0776445592702824, "(['green', None, None, None, 'possible'], None)": 3.1229356986047634, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.9487229081901507, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.511450397546441, "(['green', None, None, None, 'possible'], 'right')": 3.0199405051499277, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.108011436678562, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.402815101984711, "(['red', None, None, None, 'possible'], None)": 2.566840844713943, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] random action: left state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (2, 5), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.362115647416226, "(['green', None, None, None, 'possible'], None)": 2.771776896617756, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.1590168456119785, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.511450397546441, "(['green', None, None, None, 'possible'], 'right')": 2.7538810901873636, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.2000931897447153, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.2578978461470216, "(['red', None, None, None, 'possible'], None)": 2.566840844713943, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (3, 5), destination = (8, 1), deadline = 45 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.362115647416226, "(['green', None, None, None, 'possible'], None)": 2.7163413586854013, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.307842367223577, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.561493175178441, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.4760167741540488, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.511450397546441, "(['green', None, None, None, 'possible'], 'right')": 3.6282258950331454, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.7297169826902135, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.2578978461470216, "(['red', None, None, None, 'possible'], None)": 2.566840844713943, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (2, 6), destination = (7, 5), deadline = 30 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.564851284249568, "(['green', None, None, None, 'possible'], None)": 3.06171533927453, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.088894664852519, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.4760167741540488, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.511450397546441, "(['green', None, None, None, 'possible'], 'right')": 4.185315918615733, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.2668620552391285, "(['red', None, None, None, 'possible'], None)": 2.566840844713943, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 3), deadline = 40 RoutePlanner.route_to(): destination = (2, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2052378927504863, "(['green', None, None, None, 'possible'], None)": 3.244315828586219, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.8803643768138545, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.367037194544593, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.511450397546441, "(['green', None, None, None, 'possible'], 'right')": 4.162535403136971, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.224953581772295, "(['red', None, None, None, 'possible'], None)": 2.639696450992508, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (8, 5), destination = (5, 2), deadline = 30 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.9660458254110784, "(['green', None, None, None, 'possible'], None)": 3.115840921774206, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.971413101687415, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.2612213895955127, "(['green', None, None, None, 'possible'], 'right')": 3.7555249037328844, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.224953581772295, "(['red', None, None, None, 'possible'], None)": 2.291587889127346, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (8, 3), destination = (2, 6), deadline = 45 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.9660458254110784, "(['green', None, None, None, 'possible'], None)": 2.932604548846509, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.506924738034774, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.2612213895955127, "(['green', None, None, None, 'possible'], 'right')": 2.920900164285264, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.224953581772295, "(['red', None, None, None, 'possible'], None)": 2.291587889127346, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (3, 1), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.6256627008521356, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.9520964391462756, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.7756770225675305, "(['green', None, None, None, 'possible'], 'right')": 3.107232517779568, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7276454292608372, "(['red', None, None, None, 'possible'], None)": 1.9571333986048218, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (7, 5), destination = (2, 2), deadline = 40 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.6256627008521356, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.2068176721003727, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.10778158139028, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.04904164177986753, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.7756770225675305, "(['green', None, None, None, 'possible'], 'right')": 4.265736258736054, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.5352182306457336, "(['red', None, None, None, 'possible'], None)": 2.191016684180565, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (4, 1), destination = (8, 5), deadline = 40 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.6256627008521356, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.747093528554281, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.990420428855071, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.0185960148394066, "(['green', None, None, None, 'possible'], 'right')": 4.990646604277032, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.736962840640356, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.8262289813019694, "(['red', None, None, None, 'possible'], None)": 2.191016684180565, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 6), deadline = 40 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0349755997811814, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.747093528554281, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.095114287316173, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.3671869755215598, "(['green', None, None, None, 'possible'], 'right')": 5.467444963457616, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.145931931322389, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.3070245847527096, "(['red', None, None, None, 'possible'], None)": 2.191016684180565, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (1, 1), destination = (8, 6), deadline = 60 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2946121239028945, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.555015814864685, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.162772284424388, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.3671869755215598, "(['green', None, None, None, 'possible'], 'right')": 4.385799843585814, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.145931931322389, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.612251311880117, "(['red', None, None, None, 'possible'], None)": 2.191016684180565, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 60, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 59, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 58, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 57, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 56, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (8, 1), destination = (2, 1), deadline = 30 RoutePlanner.route_to(): destination = (2, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.31449180381531, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.555015814864685, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.542593070960722, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5535282250586624, "(['green', None, None, None, 'possible'], 'right')": 3.652793027217635, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.9337792621638297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.8284274456586043, "(['red', None, None, None, 'possible'], None)": 2.6125919919858664, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (8, 2), destination = (7, 5), deadline = 20 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.31449180381531, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.555015814864685, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.409007046300815, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5535282250586624, "(['green', None, None, None, 'possible'], 'right')": 3.479737166673283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.3330896539226025, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.8284274456586043, "(['red', None, None, None, 'possible'], None)": 2.744455271570911, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (6, 5), destination = (1, 4), deadline = 30 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.1482019677390043, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.555015814864685, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.806831138509467, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.41646049440196115, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5535282250586624, "(['green', None, None, None, 'possible'], 'right')": 4.003599064515253, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.180092991472229, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.8284274456586043, "(['red', None, None, None, 'possible'], None)": 2.7758507663676624, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (6, 5), destination = (1, 2), deadline = 40 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.210771213362202, "(['green', None, None, None, 'possible'], None)": 2.717139191392069, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.259165672342993, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.925583897914157, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5535282250586624, "(['green', None, None, None, 'possible'], 'right')": 4.6963098625864035, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.258059173248876, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.8284274456586043, "(['red', None, None, None, 'possible'], None)": 2.880885582900593, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] random action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (8, 4), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.3589492581389804, "(['green', None, None, None, 'possible'], None)": 3.0640436405628737, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.129196299352201, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.069001416749194, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.6438469047843385, "(['green', None, None, None, 'possible'], 'right')": 4.728657433041565, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.258059173248876, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.863766281264292, "(['red', None, None, None, 'possible'], None)": 3.114610007792905, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 6), deadline = 25 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 4.015903189364685, "(['green', None, None, None, 'possible'], None)": 3.0640436405628737, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.129196299352201, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.294243736389741, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.6438469047843385, "(['green', None, None, None, 'possible'], 'right')": 4.6697568704848145, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.258059173248876, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.863766281264292, "(['red', None, None, None, 'possible'], None)": 3.114610007792905, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 1), deadline = 20 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.145344068965495, "(['green', None, None, None, 'possible'], None)": 3.2120838264016993, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.129196299352201, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.701678456443452, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.6438469047843385, "(['green', None, None, None, 'possible'], 'right')": 4.102595578924694, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.258059173248876, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.863766281264292, "(['red', None, None, None, 'possible'], None)": 3.114610007792905, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (4, 4), destination = (8, 1), deadline = 35 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.145344068965495, "(['green', None, None, None, 'possible'], None)": 3.2120838264016993, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.0865207816403206, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.6438469047843385, "(['green', None, None, None, 'possible'], 'right')": 3.1181334205026197, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.4002563391967016, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.863766281264292, "(['red', None, None, None, 'possible'], None)": 3.114610007792905, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (8, 1), destination = (3, 2), deadline = 30 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.949070841037963, "(['green', None, None, None, 'possible'], None)": 2.9034693717494173, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.77826060170477, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5562184540143225, "(['green', None, None, None, 'possible'], 'right')": 4.45393541415706, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.8554726663603747, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5803905035343684, "(['red', None, None, None, 'possible'], None)": 3.052317807637047, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (2, 2), destination = (4, 5), deadline = 25 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.790089424217204, "(['green', None, None, None, 'possible'], None)": 2.8513126784140375, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.848091878317346, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.428884619258886, "(['green', None, None, None, 'possible'], 'right')": 3.0400881406082396, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.8554726663603747, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5803905035343684, "(['red', None, None, None, 'possible'], None)": 2.815360759965418, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (3, 1), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.70759381770503, "(['green', None, None, None, 'possible'], None)": 2.6836326824218655, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.9319930577702715, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.428884619258886, "(['green', None, None, None, 'possible'], 'right')": 2.7258643556297444, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.698363213033167, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5803905035343684, "(['red', None, None, None, 'possible'], None)": 2.649795024393372, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (8, 4), destination = (3, 6), deadline = 35 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.70759381770503, "(['green', None, None, None, 'possible'], None)": 2.6836326824218655, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.662735554370812, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.428884619258886, "(['green', None, None, None, 'possible'], 'right')": 3.4341457238212048, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.698363213033167, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5803905035343684, "(['red', None, None, None, 'possible'], None)": 2.649795024393372, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (8, 6), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4716270779808487, "(['green', None, None, None, 'possible'], None)": 2.629960028773428, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.977750594431885, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.3307520932899783, "(['green', None, None, None, 'possible'], 'right')": 3.2152668705663148, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.489827439791674, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.3364267085172954, "(['red', None, None, None, 'possible'], None)": 2.3473007332102065, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, 'forward', 'possible'] random action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (7, 1), destination = (1, 3), deadline = 40 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4716270779808487, "(['green', None, None, None, 'possible'], None)": 2.4752973394013207, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.977750594431885, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.8424543103956954, "(['green', None, None, None, 'possible'], 'right')": 2.4259505755669464, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.1498072851481878, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.8479042108600108, "(['red', None, None, None, 'possible'], None)": 2.0793384701107427, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (4, 5), destination = (7, 6), deadline = 20 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.3977408787041368, "(['green', None, None, None, 'possible'], None)": 2.4257913926132946, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.0782997049696044, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.6334228483215407, "(['green', None, None, None, 'possible'], 'right')": 3.7221883103554787, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.4095221785447656, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6526042933079423, "(['red', None, None, None, 'possible'], None)": 1.807739564817786, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (5, 5), destination = (1, 6), deadline = 25 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.9729285464197606, "(['green', None, None, None, 'possible'], None)": 2.618010500680196, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.6374213525358408, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.6334228483215407, "(['green', None, None, None, 'possible'], 'right')": 3.897453949290795, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 0.6006600649174327, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.499312443048513, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6526042933079423, "(['red', None, None, None, 'possible'], None)": 2.1178863520669298, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'left', None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'left', 'possible'] random action: forward state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (2, 1), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0294286576558447, "(['green', None, None, None, 'possible'], None)": 2.618010500680196, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.560807146180201, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.6334228483215407, "(['green', None, None, None, 'possible'], 'right')": 4.220535910996953, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.6204942435581167, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6526042933079423, "(['red', None, None, None, 'possible'], None)": 2.1178863520669298, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (4, 6), destination = (3, 3), deadline = 20 RoutePlanner.route_to(): destination = (3, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0294286576558447, "(['green', None, None, None, 'possible'], None)": 2.618010500680196, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.751428812060813, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.6334228483215407, "(['green', None, None, None, 'possible'], 'right')": 4.812437207280566, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.6204942435581167, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6526042933079423, "(['red', None, None, None, 'possible'], None)": 2.1178863520669298, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (8, 5), destination = (1, 3), deadline = 45 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.0294286576558447, "(['green', None, None, None, 'possible'], None)": 2.618010500680196, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.8959630219286066, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.982065035489041, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.9859972614264074, "(['green', None, None, None, 'possible'], 'right')": 4.233759098317071, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.6204942435581167, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6526042933079423, "(['red', None, None, None, 'possible'], None)": 2.1178863520669298, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (3, 1), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.868840084502728, "(['green', None, None, None, 'possible'], None)": 2.691424594396063, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.081199171481091, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.0455965371077007, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.953226563079332, "(['green', None, None, None, 'possible'], 'right')": 2.4765733389980795, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.6204942435581167, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6865121885845598, "(['red', None, None, None, 'possible'], None)": 2.25873783559175, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (6, 3), destination = (2, 2), deadline = 25 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.5016114134700405, "(['green', None, None, None, 'possible'], None)": 2.5125411181054487, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.081199171481091, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.0666563504870323, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.953226563079332, "(['green', None, None, None, 'possible'], 'right')": 2.4765733389980795, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.566755206787142, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.6865121885845598, "(['red', None, None, None, 'possible'], None)": 2.432662551729305, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 5), deadline = 40 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.5016114134700405, "(['green', None, None, None, 'possible'], None)": 2.518269594490439, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.081199171481091, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.6379408194443275, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.6920953434621682, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.9730013860266529, "(['green', None, None, None, 'possible'], 'right')": 2.5988969500468895, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.5488248693327158, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.9923287159256136, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7596298864308353, "(['red', None, None, None, 'possible'], None)": 2.432662551729305, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (8, 1), destination = (1, 5), deadline = 55 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.5016114134700405, "(['green', None, None, None, 'possible'], None)": 2.518269594490439, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.750197781373379, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.8708785345542374, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.9730013860266529, "(['green', None, None, None, 'possible'], 'right')": 3.2548496123303177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.814095496113381, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.1414650610893986, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7596298864308353, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.432662551729305, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 1), deadline = 55 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.5016114134700405, "(['green', None, None, None, 'possible'], None)": 2.8005382292934446, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.084338710510572, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.8708785345542374, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 1.9730013860266529, "(['green', None, None, None, 'possible'], 'right')": 3.809865773659331, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.761217865619234, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7596298864308353, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.876379255714267, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (3, 5), destination = (7, 2), deadline = 35 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7382066960848617, "(['green', None, None, None, 'possible'], None)": 2.8005382292934446, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.1925111346342, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 1.8708785345542374, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 4.951975311151633, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.806497520138356, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7596298864308353, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.9502321350813543, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (8, 3), destination = (4, 4), deadline = 25 RoutePlanner.route_to(): destination = (4, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.1111217069199246, "(['green', None, None, None, 'possible'], None)": 2.882222742252108, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.8919797225113077, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 2.926870257634197, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.9080656236804368, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7281248577730193, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.833402942532133, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 6), deadline = 30 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.8784455108086098, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 3.2062990845996264, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.273504480501162, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7281248577730193, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (6, 4), destination = (3, 2), deadline = 25 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 3.8755954761879954, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 4.071262381506845, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.273504480501162, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7628607617357444, "(['green', None, None, 'right', 'possible'], 'forward')": 0.5750356006472083, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] action: forward state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 3), deadline = 30 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.833442133057639, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 4.455222665883706, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 4.496362100496333, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.273504480501162, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7628607617357444, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (6, 3), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.289108197730227, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.200299537444457, "(['green', None, None, None, 'possible'], 'right')": 5.180691294315823, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.1697583490514196, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 1.7628607617357444, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (2, 2), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.1329645850051415, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.4841732552564912, "(['green', None, None, None, 'possible'], 'right')": 4.175079613353466, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.1697583490514196, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.134222234689521, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 1), deadline = 40 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 2.8117011380384143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.359592339395282, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.4841732552564912, "(['green', None, None, None, 'possible'], 'right')": 6.8122056281026016, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 1.905553680842955, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.8141711706354484, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.134222234689521, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.61344065864195, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (1, 5), destination = (7, 5), deadline = 30 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.7887476737247003, "(['green', None, None, None, 'possible'], None)": 3.519622468179213, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.970750667308228, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.9594533572963524, "(['green', None, None, None, 'possible'], 'right')": 6.726898965628696, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.8141711706354484, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.134222234689521, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.9727066798040216, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (4, 3), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.4622619996366675, "(['green', None, None, None, 'possible'], None)": 3.519622468179213, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.233241289755122, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.4542012692808512, "(['green', None, None, None, 'possible'], 'right')": 5.727893142936496, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.688186412984814, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.672048849948896, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 4.3428364060404965, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (7, 5), destination = (3, 3), deadline = 30 RoutePlanner.route_to(): destination = (3, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.4622619996366675, "(['green', None, None, None, 'possible'], None)": 3.519622468179213, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.240800056597341, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.727997760513989, "(['green', None, None, None, 'possible'], 'right')": 6.447660241981979, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.8718009720139985, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.4222982655946605, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 4.3428364060404965, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (6, 2), destination = (2, 4), deadline = 30 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.4622619996366675, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 5.889522718387907, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.945120316741556, "(['green', None, None, None, 'possible'], 'right')": 6.374222740578375, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.8718009720139985, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.5348777812211316, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 4.411404777830692, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 6), deadline = 35 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 4.333152503348989, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 6.343899709129916, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.945120316741556, "(['green', None, None, None, 'possible'], 'right')": 6.545550765903401, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.8718009720139985, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.7403047348628884, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 4.411404777830692, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 5), deadline = 30 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 4.333152503348989, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 6.080758166694469, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.945120316741556, "(['green', None, None, None, 'possible'], 'right')": 6.101906831926955, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.8718009720139985, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.7403047348628884, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 4.605714069685742, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (3, 4), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 4.333152503348989, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.9238407772829254, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.76854421528581, "(['green', None, None, None, 'possible'], 'right')": 4.260089792749396, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.363073115188525, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.8468895284952156, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.9983379827278576, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (8, 1), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.333285228911585, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.2818272879367147, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.055073770748712, "(['green', None, None, None, 'possible'], 'right')": 4.074887996894408, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.614988286707168, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.2985527031668056, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.4016381074891124, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 5), deadline = 20 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.333285228911585, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.2818272879367147, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 3.055073770748712, "(['green', None, None, None, 'possible'], 'right')": 4.074887996894408, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.614988286707168, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 3.2985527031668056, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.4016381074891124, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (3, 5), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.333285228911585, "(['green', None, None, None, 'possible'], None)": 3.963058067847478, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.7470453636090877, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.793972295333738, "(['green', None, None, None, 'possible'], 'right')": 4.0077743155470085, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 4.069074156743636, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.9530488959763503, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 5), deadline = 40 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2990615313431224, "(['green', None, None, None, 'possible'], None)": 3.8061209683607182, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.360507748600973, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.097377876865445, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.793972295333738, "(['green', None, None, None, 'possible'], 'right')": 3.7195431182802627, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.829727490844545, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.9530488959763503, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (8, 6), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2990615313431224, "(['green', None, None, None, 'possible'], None)": 3.655398578013634, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.661287663381548, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.030593589057872, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.793972295333738, "(['green', None, None, None, 'possible'], 'right')": 3.8642492107963653, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.3639133883881764, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.9530488959763503, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 4), deadline = 35 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2990615313431224, "(['green', None, None, None, 'possible'], None)": 3.3041907952596725, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.661287663381548, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 2.6639779530180463, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.5380928494270636, "(['green', None, None, None, 'possible'], 'right')": 3.7428559982101497, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.641304143564612, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.7264238103614917, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'forward', None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (3, 1), destination = (8, 3), deadline = 35 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2990615313431224, "(['green', None, None, None, 'possible'], None)": 3.3041907952596725, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.1099712908530055, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.705926721029421, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.288058383650684, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.331183521176502, "(['green', None, None, None, 'possible'], 'right')": 3.6539564950486785, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.3303716986675838, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.618457427471177, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (7, 5), destination = (1, 2), deadline = 45 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.4604186947019353, "(['green', None, None, None, 'possible'], None)": 3.2381069793544794, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.1099712908530055, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.73433804344434, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 2.6643721299936955, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.064297358934067, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.618457427471177, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (2, 4), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.2075530481636068, "(['green', None, None, None, 'possible'], None)": 3.17334483976739, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.1099712908530055, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.293328525581276, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 2.6643721299936955, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.0457357705862376, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5599407488927772, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.618457427471177, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (6, 5), destination = (3, 4), deadline = 20 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4660424385308857, "(['green', None, None, None, 'possible'], None)": 3.1098779429720427, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.1099712908530055, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.5290969167270556, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 3.3307205036904883, "(['green', None, None, 'left', 'possible'], 'left')": 0.9712020711581304, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.075769383317859, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5253518394047525, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.618457427471177, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 1), deadline = 35 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4660424385308857, "(['green', None, None, None, 'possible'], None)": 3.173092621059864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 4.1099712908530055, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.500778376578018, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 3.947870734008964, "(['green', None, None, 'left', 'possible'], 'left')": 0.9712020711581304, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.075769383317859, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5253518394047525, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.618457427471177, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (8, 4), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4660424385308857, "(['green', None, None, None, 'possible'], None)": 3.173092621059864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.8204155406479523, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 4.376672835695761, "(['green', None, None, 'left', 'possible'], 'left')": 0.9712020711581304, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.075769383317859, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5253518394047525, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.748946973311531, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 3), deadline = 40 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.4660424385308857, "(['green', None, None, None, 'possible'], None)": 2.810859922141661, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 2.438501681946808, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 2.8220740138459237, "(['green', None, None, 'left', 'possible'], 'left')": 1.8096346821076084, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.638845753951058, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.827963410895382, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5253518394047525, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.5355411617109267, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (2, 5), destination = (4, 1), deadline = 30 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.320103411750516, "(['green', None, None, None, 'possible'], None)": 2.8892371611735066, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 3.7890465065144276, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.32644040633361, "(['green', None, None, None, 'possible'], 'right')": 3.669749126698023, "(['green', None, None, 'left', 'possible'], 'left')": 1.8096346821076084, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.6778415844293955, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.7623920590289632, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.2634514785358695, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.4351337317071744, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (5, 5), destination = (8, 3), deadline = 25 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.320103411750516, "(['green', None, None, None, 'possible'], None)": 2.8892371611735066, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 4.6583060593890036, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.391347314821197, "(['green', None, None, None, 'possible'], 'right')": 4.358932251839628, "(['green', None, None, 'left', 'possible'], 'left')": 1.8096346821076084, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.6778415844293955, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.7623920590289632, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.3646004509887337, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 2.4351337317071744, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 4), deadline = 25 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 2.639004230560811, "(['green', None, None, None, 'possible'], None)": 2.8892371611735066, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 5.067036834924602, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.391347314821197, "(['green', None, None, None, 'possible'], 'right')": 5.073740182232492, "(['green', None, None, 'left', 'possible'], 'left')": 1.8096346821076084, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.6778415844293955, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.7623920590289632, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.3646004509887337, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.14905727616767, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] random action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 1), deadline = 30 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 3.423270014735077, "(['green', None, None, None, 'possible'], None)": 2.8892371611735066, "(['green', None, None, 'left', 'possible'], None)": 0.3257342427793695, "(['red', 'left', None, None, 'possible'], 'right')": 3.3469554644861885, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.541901947643385, "(['red', None, None, None, 'possible'], 'right')": 5.081914227373403, "(['red', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], 'forward')": -0.1, "(['red', 'left', None, None, 'possible'], 'left')": 0.9530712421972123, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 2.9503239125947585, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": 2.4833633197863865, "(['green', None, None, None, 'possible'], 'right')": 4.84808541793615, "(['green', None, None, 'left', 'possible'], 'left')": 2.760980978487935, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.1, "(['red', None, 'forward', None, 'possible'], 'right')": 0.9646973113884757, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], 'forward')": -0.2, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], 'forward')": 2.6778415844293955, "(['green', 'forward', None, None, 'possible'], 'forward')": 0.5345960620884033, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.966740586768504, "(['red', None, None, 'left', 'possible'], 'forward')": -0.2, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": 2.5591079305812943, "(['green', None, None, 'right', 'possible'], 'forward')": 0.3600284805177666, "(['red', None, None, None, 'possible'], None)": 3.14905727616767, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.2, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. ================================================ FILE: p4-smartcab/smartcab/trial-data/trial3.js ================================================ self.epsilon = 0.1 self.alpha = 0.5 # Alpha is the learning rate self.gamma = 0.5 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.actions = [None, 'forward', 'left', 'right'] self.q = {} self.defaultq = 0.0 SUCCESS: 11/100 Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (1, 4), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (1, 2), destination = (7, 6), deadline = 50 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 6), deadline = 25 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.25} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] random action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (7, 2), destination = (3, 4), deadline = 30 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.375, "(['green', None, None, None, 'possible'], 'forward')": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.75, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.25} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (1, 3), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.375, "(['green', None, None, None, 'possible'], 'forward')": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.75, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.375} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (3, 4), destination = (5, 6), deadline = 20 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.375, "(['green', None, None, None, 'possible'], 'forward')": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4375} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (5, 5), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.3863525390625, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.375, "(['green', None, None, None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'forward')": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.085235595703125, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.5170516967773438} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 2), deadline = 30 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.3863525390625, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 0.03468299051746726, "(['green', None, None, None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'forward')": -0.1724272508872673, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0035999369792989455, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1811056137084961} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (8, 4), destination = (1, 2), deadline = 45 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.3863525390625, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.008789984405838197, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.29459666146861274, "(['green', None, None, None, 'possible'], 'forward')": -0.33592886480366957, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.00027030013871590097, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1811056137084961} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] random action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (2, 6), destination = (8, 3), deadline = 45 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.29459666146861274, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3404852318195691, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.3863525390625, "(['green', None, None, None, 'possible'], 'right')": 0.9050167624837112, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4179644324018348, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.428842702435349e-07, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.24337006845847917, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3404852318195691, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.2678093096837142, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45898221529481864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.0387222731491665e-09, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (2, 5), destination = (1, 1), deadline = 25 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.24337006845847917, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3404852318195691, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45898221529481864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.1480761671751511e-10, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (7, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3716850342287282, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.4601213079468199, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45898221529481864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.0456361462315783e-12, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (6, 1), destination = (4, 6), deadline = 35 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.43584251711414834, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.4601213079468199, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45898221529481864, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.63977209082807e-14, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 2), deadline = 50 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.43584251711414834, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.4601213079468199, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4794911076473877, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.1545725747243271e-15, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (5, 4), destination = (2, 5), deadline = 20 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.43584251711414834, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.581204540401242, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4794911076473877, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.509145481478303e-18, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', 'left', 'possible'] action: None state2: ['green', None, 'forward', 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (6, 2), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.43584251711414834, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.1552347626744843, "(['red', None, None, None, 'possible'], 'left')": -0.875, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6931761088101824, "(['green', None, None, None, 'possible'], 'right')": -0.3839046548418571, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.509145481478303e-18, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (5, 6), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.589924030695042, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.266849280755891, "(['red', None, None, None, 'possible'], 'left')": -0.272432605295992, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.18152065970108322, "(['green', None, None, None, 'possible'], 'right')": 0.930249499832623, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.713853601928938, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (3, 6), destination = (6, 4), deadline = 25 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.589924030695042, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.7048076716283456, "(['red', None, None, None, 'possible'], 'left')": -0.272432605295992, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.18152065970108322, "(['green', None, None, None, 'possible'], 'right')": 1.0416393209353547, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.713853601928938, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (1, 6), destination = (8, 3), deadline = 50 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.589924030695042, "(['green', None, None, None, 'possible'], None)": 0.6039887000709946, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.8648730262260771, "(['red', None, None, None, 'possible'], 'left')": -0.44813892202015765, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.40268294922270326, "(['green', None, None, None, 'possible'], 'right')": 0.8717899110413283, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.564232141883515, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: forward state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (5, 2), destination = (7, 4), deadline = 20 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 0.0806227592196817, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.029199522631760955, "(['red', None, None, None, 'possible'], 'left')": -0.21350074536130112, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6635973891236663, "(['green', None, None, None, 'possible'], 'right')": -0.054402580299845876, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.007540094228738322, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 4), deadline = 25 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 0.0034051132029268637, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.7396466122479801, "(['red', None, None, None, 'possible'], 'left')": -0.21350074536130112, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6635973891236663, "(['green', None, None, None, 'possible'], 'right')": -0.054402580299845876, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0031809772527489795, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (4, 3), destination = (2, 1), deadline = 20 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 0.0001438154193303311, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.1522031551108405, "(['red', None, None, None, 'possible'], 'left')": -0.12326855519891793, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6635973891236663, "(['green', None, None, None, 'possible'], 'right')": -0.054402580299845876, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0031809772527489795, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, 'right', 'possible'] action: None state2: ['red', 'forward', None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (2, 4), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 2.5624956651738826e-06, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.26155983695883456, "(['red', None, None, None, 'possible'], 'left')": -0.12326855519891793, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6635973891236663, "(['green', None, None, None, 'possible'], 'right')": -0.054402580299845876, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0031809772527489795, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 3), deadline = 25 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 2.565389108155188e-07, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.006653878040901368, "(['red', None, None, None, 'possible'], 'left')": -0.12326855519891793, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6822774218411778, "(['green', None, None, None, 'possible'], 'right')": 1.4867348806870282, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0013419747785034758, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (8, 5), destination = (2, 3), deadline = 40 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.01761182316585652, "(['green', None, None, None, 'possible'], None)": 2.565389108155188e-07, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.006653878040901368, "(['red', None, None, None, 'possible'], 'left')": -0.12326855519891793, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.840803217225963, "(['green', None, None, None, 'possible'], 'right')": 1.4470555443620072, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.188164911848301e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'right', 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (8, 3), destination = (1, 3), deadline = 35 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.003302136197544936, "(['green', None, None, None, 'possible'], None)": 8.126216846866021e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.006653878040901368, "(['red', None, None, None, 'possible'], 'left')": -0.12326855519891793, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.920400190050835, "(['green', None, None, None, 'possible'], 'right')": 0.16610838193722738, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 3.1953688120079083e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (8, 5), destination = (5, 1), deadline = 35 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.003302136197544936, "(['green', None, None, None, 'possible'], None)": 8.126216846866021e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.006653878040901368, "(['red', None, None, None, 'possible'], 'left')": -0.5616342523235924, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.920400190050835, "(['green', None, None, None, 'possible'], 'right')": 0.16610838193722738, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 1.0110346631743773e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'forward', 'forward', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (6, 2), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.0006191476852007438, "(['green', None, None, None, 'possible'], None)": 1.0847190090390617e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.006653878040901368, "(['red', None, None, None, 'possible'], 'left')": -0.5616342523235924, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 0.15818349833394355, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 7.599893794452607e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (5, 1), destination = (3, 6), deadline = 35 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.06261609013461603, "(['green', None, None, None, 'possible'], None)": 4.5761583193835415e-10, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.7569144414717837, "(['red', None, None, None, 'possible'], 'left')": -0.5616342523235924, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 0.05018477726464779, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3545949862735386, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 7.608475217499323e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (5, 1), destination = (7, 4), deadline = 25 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.06261609013461603, "(['green', None, None, None, 'possible'], None)": 0.24354207943608072, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.739533665980293, "(['red', None, None, None, 'possible'], 'left')": -0.31454247196801255, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 1.426372901957431, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48062623762181844, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.24094360128543282, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (7, 6), destination = (1, 3), deadline = 45 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.06261609013461603, "(['green', None, None, None, 'possible'], None)": 0.24354207943608072, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.025645969595665674, "(['red', None, None, None, 'possible'], 'left')": -0.47238781948893305, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 1.5461393584428287, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48062623762181844, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.07623606134421898, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (5, 1), destination = (4, 5), deadline = 25 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.06261609013461603, "(['green', None, None, None, 'possible'], None)": 0.24354207943608072, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.5768545687286784, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 1.147357158408479, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.17122382091610933, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.005724160749199915, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (8, 5), destination = (5, 6), deadline = 20 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.11219649786986362, "(['green', None, None, None, 'possible'], None)": 0.1369924196827954, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.5768545687286784, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 0.013219847875328344, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.17122382091610933, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.0001019927986504136, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (7, 6), destination = (7, 2), deadline = 20 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.11219649786986362, "(['green', None, None, None, 'possible'], None)": 0.10274431476209656, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.7884253698400168, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9801000448241155, "(['green', None, None, None, 'possible'], 'right')": 0.013219847875328344, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.02946535855807303, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.4230698454785845e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (8, 6), destination = (4, 2), deadline = 40 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.10396251302147289, "(['green', None, None, None, 'possible'], None)": 0.04334525779025948, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.7884253698400168, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.8879372670624497, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 1.0233868453907842e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (5, 3), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.39641905769258723, "(['green', None, None, None, 'possible'], None)": 0.0032545650828768816, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.894212678848646, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.0911569832350026, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 1.8255243275163282e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (1, 2), destination = (8, 5), deadline = 50 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.39641905769258723, "(['green', None, None, None, 'possible'], None)": 0.00024436799822336454, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.07898648271447675, "(['red', None, None, None, 'possible'], 'left')": -0.894212678848646, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.0911569832350026, "(['green', 'left', None, None, 'possible'], 'right')": 1.2872307159053686, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 5.782595122692613e-12, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (1, 4), destination = (8, 1), deadline = 50 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.39641905769258723, "(['green', None, None, None, 'possible'], None)": 0.00010309274925048192, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.8090123137582226, "(['red', None, None, None, 'possible'], 'left')": -0.894212678848646, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 1.0806396714912316, "(['green', 'left', None, None, 'possible'], 'right')": 0.39361535795412994, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 5.789124542234229e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (3, 5), destination = (8, 4), deadline = 30 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.39641905769258723, "(['green', None, None, None, 'possible'], None)": 0.00010309274925048192, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.9880821532925217, "(['red', None, None, None, 'possible'], 'left')": -0.894212678848646, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.6965246747009112, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.549982133022633, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.49331241676220583, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (1, 4), destination = (5, 1), deadline = 35 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.0942846381667296, "(['green', None, None, None, 'possible'], None)": 0.2668321029687464, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.3613796602629038, "(['red', None, None, None, 'possible'], 'left')": -0.894212678848646, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 1.8182875589228635, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.549982133022633, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.49331241676220583, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (3, 6), destination = (1, 4), deadline = 20 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.12641775120505822, "(['green', None, None, None, 'possible'], None)": 0.04749038160747463, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.2808376420512033, "(['red', None, None, None, 'possible'], 'left')": -0.9347596034075656, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.1082762020595627, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.549982133022633, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.008789814996304775, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, 'left', None, 'possible'] random action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.12641775120505822, "(['green', None, None, None, 'possible'], None)": 0.0015043220455561832, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.3487912441243753, "(['red', None, None, None, 'possible'], 'left')": -0.9347596034075656, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.1082762020595627, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2352672129073699, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.008789814996304775, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (8, 4), destination = (2, 4), deadline = 30 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.12641775120505822, "(['green', None, None, None, 'possible'], None)": 0.0006346358629690149, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.8116718200189604, "(['red', None, None, None, 'possible'], 'left')": -0.7644618466990427, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 1.9908575172635947, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3316974124137704, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.008789814996304775, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (4, 2), destination = (7, 4), deadline = 25 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.12641775120505822, "(['green', None, None, None, 'possible'], None)": 2.0102949002511277e-05, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3147058601254217, "(['red', None, None, None, 'possible'], 'left')": -0.7644618466990427, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.1143496427620442, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.41545760665047005, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.0004949853760879522, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 8.490507857675228e-07, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3147058601254217, "(['red', None, None, None, 'possible'], 'left')": -0.7644618466990427, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.1143496427620442, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.41545760665047005, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 1.5679331019732794e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (1, 5), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 6.375071188454495e-08, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3147058601254217, "(['red', None, None, None, 'possible'], 'left')": -0.7644618466990427, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.30717473183269706, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.41545760665047005, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 6.622186785108102e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 5), deadline = 35 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 4.7867022019329e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3147058601254217, "(['red', None, None, None, 'possible'], 'left')": -0.8822308709669892, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.30717473183269706, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.41545760665047005, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.796889596990454e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (6, 3), destination = (2, 3), deadline = 20 RoutePlanner.route_to(): destination = (2, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 6.389476144792025e-10, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.3147058601254217, "(['red', None, None, None, 'possible'], 'left')": -0.8822308709669892, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.30717473183269706, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.035212924915643, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 6.652147261392309e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (3, 5), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 6.389476144792025e-10, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.1845283818120107, "(['red', None, None, None, 'possible'], 'left')": -0.8822308709669892, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.30717473183269706, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 3.1921029388248385, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 3.741832834533174e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (8, 4), destination = (4, 1), deadline = 35 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.1407451191471651, "(['green', None, None, None, 'possible'], None)": 6.396690824276807e-11, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.2059301283017267, "(['red', None, None, None, 'possible'], 'left')": -0.8822308709669892, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": -0.4035873658658068, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.0009279869869912305, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.4755468187214108, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 3), deadline = 30 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.5617334083624795, "(['green', None, None, None, 'possible'], None)": 0.14030199319694117, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.4182898709141316, "(['red', None, None, None, 'possible'], 'left')": -0.8822308709669892, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 1.6340170330195762, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2431471840396729, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.4755468187214108, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (7, 1), destination = (8, 6), deadline = 30 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.5617334083624795, "(['green', None, None, None, 'possible'], None)": 0.14030199319694117, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.4010135214842196, "(['red', None, None, None, 'possible'], 'left')": -0.7572934223861949, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 2.383450447254688, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2431471840396729, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.2674950855307936, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (5, 6), destination = (5, 2), deadline = 20 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.5617334083624795, "(['green', None, None, None, 'possible'], None)": 0.14030199319694117, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.296369372555782, "(['red', None, None, None, 'possible'], 'left')": -0.7572934223861949, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 2.383450447254688, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2431471840396729, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.2674950855307936, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (8, 2), destination = (1, 1), deadline = 40 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.5617334083624795, "(['green', None, None, None, 'possible'], None)": 0.4995102063091069, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.7132104648028448, "(['red', None, None, None, 'possible'], 'left')": -0.42819680211511957, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 1.4344230244806386, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2431471840396729, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.2674950855307936, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (7, 2), destination = (1, 3), deadline = 35 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.17130005627185965, "(['green', None, None, None, 'possible'], None)": 0.37463265473183016, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.060359250818479, "(['red', None, None, None, 'possible'], 'left')": -0.42819680211511957, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.4007092534180585, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2431471840396729, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.2674950855307936, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 1), deadline = 25 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.17130005627185965, "(['green', None, None, None, 'possible'], None)": 0.37463265473183016, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.060359250818479, "(['red', None, None, None, 'possible'], 'left')": -0.42819680211511957, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.05053194006354389, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.38666340472445615, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.2674950855307936, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (5, 1), destination = (6, 6), deadline = 30 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.6632514701654847, "(['green', None, None, None, 'possible'], None)": 0.15804815121499086, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.1472022665008823, "(['red', None, None, None, 'possible'], 'left')": -0.42819680211511957, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.05053194006354389, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.08463711690622766, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (2, 1), destination = (3, 6), deadline = 30 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 1.3740780602453726, "(['green', None, None, None, 'possible'], None)": 0.15804815121499086, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.0078578460252812, "(['red', None, None, None, 'possible'], 'left')": -0.35165598539518533, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.05053194006354389, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.08463711690622766, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 6), deadline = 30 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 1.3740780602453726, "(['green', None, None, None, 'possible'], None)": 0.15804815121499086, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.8474484380739837, "(['red', None, None, None, 'possible'], 'left')": -0.35165598539518533, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9900496816678608, "(['green', None, None, None, 'possible'], 'right')": 0.05053194006354389, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.08463711690622766, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 2), deadline = 35 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.05000742284536821, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.35165598539518533, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9824060917396855, "(['green', None, None, None, 'possible'], 'right')": 0.08537949043924192, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.02129413909653824, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (1, 4), destination = (8, 2), deadline = 45 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.1529126843774158, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.8368826305323978, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 0.13372691886419508, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.00012005018334624563, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 6), deadline = 45 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.11468451328306184, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.9184390617836102, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.4629219665130102, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 3.807045746988292e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (8, 1), destination = (1, 2), deadline = 40 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.3422538272108968, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.9184390617836102, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.8943306215793583, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.23000122322832894, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.864967371830926e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (8, 4), destination = (3, 4), deadline = 25 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.10143832735239079, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.9184390617836102, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 0.11384127285922088, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.33654029339935926, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 5.104783969178345e-12, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (3, 4), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.0760787455142931, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.13521089444123904, "(['red', None, None, None, 'possible'], 'left')": -0.9592195308917513, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.8008320138341476, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4182701466996257, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 1.2127570051092398e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 3), deadline = 25 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.04239714126379207, "(['green', None, None, None, 'possible'], None)": 0.0760787455142931, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.588853660518184, "(['red', None, None, None, 'possible'], 'left')": -0.9796097654458529, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.3884128771886062, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.7908649266501903, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.12087522061051764, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] random action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (8, 6), destination = (2, 3), deadline = 45 RoutePlanner.route_to(): destination = (2, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.19740251068119027, "(['green', None, None, None, 'possible'], None)": 0.0760787455142931, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.8214293061535232, "(['red', None, None, None, 'possible'], 'left')": -0.9796097654458529, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.704815760197177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.7908649266501903, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.12087522061051764, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (2, 6), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.14516024848156567, "(['green', None, None, None, 'possible'], None)": 0.49599081291223807, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.1294533605069808, "(['red', None, None, None, 'possible'], 'left')": -0.5597693511107267, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.2567105226042858, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.2437036288672942, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.016895092347891365, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.14516024848156567, "(['green', None, None, None, 'possible'], None)": 0.49599081291223807, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.9957380982617616, "(['red', None, None, None, 'possible'], 'left')": -0.5597693511107267, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 0.9034608833671222, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5667699330720068, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.016895092347891365, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (4, 4), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.6872062636524745, "(['green', None, None, None, 'possible'], None)": 0.486274806371089, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.7745066890746304, "(['red', None, None, None, 'possible'], 'left')": -0.5597693511107267, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 2.667371778270545, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5667699330720068, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.016895092347891365, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (6, 1), destination = (2, 2), deadline = 25 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 1.5154046977393558, "(['green', None, None, None, 'possible'], None)": 0.486274806371089, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.0470175803862913, "(['red', None, None, None, 'possible'], 'left')": -0.5597693511107267, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 0.5800019971436979, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5667699330720068, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.016895092347891365, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (8, 6), destination = (5, 1), deadline = 40 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.4149151424783877, "(['green', None, None, None, 'possible'], None)": 0.486274806371089, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.7660723259657136, "(['red', None, None, None, 'possible'], 'left')": -0.5597693511107267, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9954590902814062, "(['green', None, None, None, 'possible'], 'right')": 1.6459337143087942, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.17507744980400514, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.6653473355395998, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (2, 5), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.06118635685879076, "(['green', None, None, None, 'possible'], None)": 0.3647061047783168, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.6135478416704634, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8313927112558032, "(['green', None, None, None, 'possible'], 'right')": 0.28687062185076634, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.17507744980400514, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.02107577641883495, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (6, 6), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": 0.017505375627878794, "(['green', None, None, None, 'possible'], None)": 0.015403411947051162, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.6135478416704634, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9153996428665576, "(['green', None, None, None, 'possible'], 'right')": -0.03484703361192523, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.11869191264699616, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.0005007027847678392, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (4, 6), destination = (2, 4), deadline = 20 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.24121760740659318, "(['green', None, None, None, 'possible'], None)": 0.0008674202652563326, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.8067442160557643, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9153996428665576, "(['green', None, None, None, 'possible'], 'right')": -0.03484703361192523, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.11869191264699616, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 8.921496189230108e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (1, 1), destination = (7, 6), deadline = 55 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.24121760740659318, "(['green', None, None, None, 'possible'], None)": 6.51299784890762e-05, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.8067442160557643, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9576992921550624, "(['green', None, None, None, 'possible'], 'right')": -0.03484703361192523, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5299998176964799, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.11869191264699616, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 3.768006051620355e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (1, 3), destination = (5, 5), deadline = 30 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.24121760740659318, "(['green', None, None, None, 'possible'], None)": 8.713446976423377e-08, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.9516860385801096, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.989424795561805, "(['green', None, None, None, 'possible'], 'right')": -0.47092778527937074, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.015001538936240677, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.11869191264699616, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 6.721394499491627e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 1.1644180893351347e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.1341928442310494, "(['red', None, None, None, 'possible'], 'left')": -0.9516860385801096, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9947123977682857, "(['green', None, None, None, 'possible'], 'right')": -0.47092778527937074, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.015001538936240677, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.8387901101146784e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (5, 4), destination = (8, 3), deadline = 20 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 6.557247520175015e-11, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.025161158253621918, "(['red', None, None, None, 'possible'], 'left')": -0.9879215096428199, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9947123977682857, "(['green', None, None, None, 'possible'], 'right')": -0.47092778527937074, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.015001538936240677, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.8419955310764163e-12, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (2, 5), destination = (7, 1), deadline = 45 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 2.0770968075807875e-12, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.025161158253621918, "(['red', None, None, None, 'possible'], 'left')": -0.9879215096428199, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9947123977682857, "(['green', None, None, None, 'possible'], 'right')": -0.47092778527937074, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.015001538936240677, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 2.1339034285803645e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (6, 1), destination = (1, 1), deadline = 25 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 6.572064117736085e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.0515165533396655, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.9879215096428199, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9947123977682857, "(['green', None, None, None, 'possible'], 'right')": 0.23429256962646583, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.015001538936240677, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.4083033018465847, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] random action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (4, 1), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.060098535958138244, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.48108161648649356, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9399385470619669, "(['green', None, None, None, 'possible'], 'right')": 1.120274852058537, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.09689228744992194, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (5, 4), destination = (1, 4), deadline = 20 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 2.933319198832078, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": 0.20219338006478738, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9399385470619669, "(['green', None, None, None, 'possible'], 'right')": 2.6532626925962193, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30934595625260836, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (5, 1), destination = (4, 6), deadline = 30 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.4418235107987685, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": 0.20219338006478738, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9399385470619669, "(['green', None, None, None, 'possible'], 'right')": 2.25239384813646, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14924493610230985, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (6, 1), destination = (1, 5), deadline = 45 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.4418235107987685, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": 0.20219338006478738, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9399385470619669, "(['green', None, None, None, 'possible'], 'right')": 2.4866528017679217, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14924493610230985, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (6, 3), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.3706088035352617, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.6242723434739683, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.01922247041321895, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9399385470619669, "(['green', None, None, None, 'possible'], 'right')": 1.8744127343564327, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14924493610230985, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (1, 2), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.25842005931411666, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.689125438908916, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.08314117717432663, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 0.6381104656033227, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.26589273885164955, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (2, 2), destination = (4, 5), deadline = 25 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.25842005931411666, "(['green', None, None, None, 'possible'], None)": 3.6967860662265476e-13, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.7173968675866806, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.08314117717432663, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 0.4913365925288904, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.26589273885164955, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 1), deadline = 45 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.007018519333720469, "(['green', None, None, None, 'possible'], None)": 0.12283414813240744, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 1.6672318367485555, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.08314117717432663, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 2.4085770136714237, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.05058044586126284, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (2, 6), destination = (3, 3), deadline = 20 RoutePlanner.route_to(): destination = (3, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.007018519333720469, "(['green', 'left', None, None, 'possible'], 'left')": 0.4550060848284807, "(['green', None, None, None, 'possible'], None)": 0.12283414813240744, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.06234104591446882, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.08314117717432663, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 1.8650182544854421, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.05058044586126284, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.05450191169058109, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (2, 4), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.007018519333720469, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 0.12283414813240744, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.06234104591446882, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.5383371988066918, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 0.7841156505372154, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.05058044586126284, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.004092258940909224, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (1, 1), destination = (6, 5), deadline = 45 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.007018519333720469, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 0.12283414813240744, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": 0.9110085381641957, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.5383371988066918, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.4057627543430874, "(['green', None, None, None, 'possible'], 'right')": 0.5720177182123385, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.05058044586126284, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.0003072659787518168, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 5), deadline = 20 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.11050483011377561, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 0.03886549218251954, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.08628752155462681, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.35902663752337693, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.5467869423069334, "(['green', None, None, None, 'possible'], 'right')": -0.06684001256458488, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.15837905949133418, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.17144968050557413, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (6, 2), destination = (3, 4), deadline = 25 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.11050483011377561, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 0.0029182032876149443, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.08628752155462681, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.5467869423069334, "(['green', None, None, None, 'possible'], 'right')": -0.06684001256458488, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.15837905949133418, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 0.00965493410508504, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (4, 4), destination = (7, 1), deadline = 30 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.13820227662952, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 0.0005193774894217027, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.08628752155462681, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.5467869423069334, "(['green', None, None, None, 'possible'], 'right')": -0.06684001256458488, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.32886733521307704, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 9.676750160171194e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (7, 4), destination = (5, 1), deadline = 25 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.13820227662952, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 6.9406808294407054e-06, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.08628752155462681, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.5467869423069334, "(['green', None, None, None, 'possible'], 'right')": -0.06684001256458488, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.32886733521307704, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 9.69861551028664e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (6, 3), destination = (1, 3), deadline = 25 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.13820227662952, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 1.6489158693010202e-07, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.29314358706436583, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7733933944359026, "(['green', None, None, None, 'possible'], 'right')": -0.2834199085687594, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4144335908889744, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 7.282175029333951e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (8, 4), destination = (2, 2), deadline = 40 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.31910112010932246, "(['green', 'left', None, None, 'possible'], 'left')": 1.7120673863495746, "(['green', None, None, None, 'possible'], None)": 2.938029723791343e-09, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.29314358706436583, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8866966953953519, "(['green', None, None, None, 'possible'], 'right')": -0.2834199085687594, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4144335908889744, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 5.467798275084691e-09, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 4), deadline = 25 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'left')": -0.25, "(['green', None, None, None, 'possible'], 'left')": -0.31910112010932246, "(['green', 'left', None, None, 'possible'], 'left')": 0.6060336931922372, "(['green', None, None, None, 'possible'], None)": 1.6563759888053423e-11, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.5, "(['red', 'left', None, None, 'possible'], 'right')": -0.24993242496532103, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.2499993227227441, "(['red', None, None, None, 'possible'], 'right')": -0.05496442238937263, "(['red', 'left', None, None, 'possible'], 'left')": -0.5, "(['red', None, None, None, 'possible'], 'left')": -0.6554032074405921, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], 'right')": -0.2499999999994886, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', None, 'forward', 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9433483472651646, "(['green', None, None, None, 'possible'], 'right')": -0.2834199085687594, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.08744996255281054, "(['red', 'forward', None, 'right', 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45721679544448723, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], 'left')": -0.002201477387843487, "(['red', None, None, None, 'possible'], None)": 4.110114884653337e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.5, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.5, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. ================================================ FILE: p4-smartcab/smartcab/trial-data/trial4.js ================================================ self.epsilon = 0.1 self.alpha = 0.7 # Alpha is the learning rate self.gamma = 0.4 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.actions = [None, 'forward', 'left', 'right'] self.q = {} self.defaultq = 0.0 SUCCESS: 1/100 ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (6, 6), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 4), deadline = 35 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.1904, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.19600000000000006} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 1), deadline = 20 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.72797088, "(['green', None, None, None, 'possible'], 'right')": -0.35, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.06696014729599992} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 5), deadline = 25 RoutePlanner.route_to(): destination = (6, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.72797088, "(['green', None, None, None, 'possible'], 'right')": -0.35, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.3799119558111999} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', 'forward', None, 'possible'] action: None state2: ['green', 'left', 'forward', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', 'forward', None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (4, 6), destination = (2, 3), deadline = 25 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.72797088, "(['green', None, None, None, 'possible'], 'right')": -0.45499999999999996, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.586624652372864, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.8448607145804663} self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (3, 1), destination = (5, 6), deadline = 35 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.72797088, "(['green', None, None, None, 'possible'], 'right')": -0.45499999999999996, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6394263956293286, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (8, 6), destination = (5, 3), deadline = 30 RoutePlanner.route_to(): destination = (5, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.918391264, "(['green', None, None, None, 'possible'], 'right')": -0.49595, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'forward')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8918279186887985, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (7, 3), destination = (2, 5), deadline = 35 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.918391264, "(['green', None, None, None, 'possible'], 'right')": -0.49595, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'forward')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8918279186887985, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 6), deadline = 40 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.918391264, "(['green', None, None, None, 'possible'], 'right')": -0.49595, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8918279186887985, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (1, 6), destination = (4, 4), deadline = 25 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.99265521376, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9675483756066395, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (7, 6), destination = (8, 2), deadline = 25 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.997796564128, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9675483756066395, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (7, 6), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9902645126819918, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (4, 3), destination = (1, 4), deadline = 20 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": 2.190158726, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9902645126819918, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (1, 1), destination = (2, 4), deadline = 20 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], 'forward')": 1.9901084386197132, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2890072991016085} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (2, 6), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.469169108844056, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.20672113168016976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.45886214734490643, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.1743191575512477} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (8, 3), destination = (5, 1), deadline = 25 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.469169108844056, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.4996355, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.20672113168016976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0019767974346308085, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1704903131859783} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (7, 3), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.469169108844056, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.23744464353749484, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.20672113168016976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.516126510269062e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1704903131859783} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', 'right', None, 'possible'] action: None state2: ['red', 'right', 'right', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'right', 'right': 'right', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (3, 3), destination = (5, 6), deadline = 25 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.45499999999999996, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.469169108844056, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9993389692384, "(['green', None, None, None, 'possible'], 'right')": -0.23744464353749484, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.20672113168016976, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.0906014052055501e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1704903131859783} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (5, 3), destination = (2, 6), deadline = 30 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.469169108844056, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998016900972715, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.034337525790308805, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.3776788137954935, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.3488529061205077} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (5, 4), destination = (3, 6), deadline = 20 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998016900972715, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.034337525790308805, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.12705115296080405, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.7168972756697154} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (1, 3), destination = (6, 2), deadline = 30 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9970793538045976, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998016900972715, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0083390884128027, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.07537935678387109} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (3, 5), destination = (6, 1), deadline = 35 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48007268454953134, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998016900972715, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.10132834016159048, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.23044680301078016} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (6, 3), destination = (3, 1), deadline = 25 RoutePlanner.route_to(): destination = (3, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48007268454953134, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998993897013385, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.8651728821786987e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.23044680301078016} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (5, 1), destination = (2, 4), deadline = 30 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48007268454953134, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998993897013385, "(['green', None, None, None, 'possible'], 'right')": -0.33541100504407034, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.01418603865401167, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.10529651422466976} self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 1), deadline = 30 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4865, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8426855940119607, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9998993897013385, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.00010536905398941063, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4987847808592951, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8426855940119607, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999691654814333, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1595700205495723, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.856803252805897e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 1), deadline = 55 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4987847808592951, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8426855940119607, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999691654814333, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3978710061648717, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.2835503811727418e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', 'forward', 'possible'] action: None state2: ['red', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 2), deadline = 25 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.34246718908216933, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8426855940119607, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49080839055482284, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.5635535469211497e-16, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (5, 3), destination = (7, 6), deadline = 25 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4527401567246508, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9528056782035882, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49080839055482284, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 7.622627002217851e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (8, 4), destination = (3, 5), deadline = 30 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4527401567246508, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9528056782035882, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.44665121069009783, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49080839055482284, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.9046386725046665e-22, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1712545935733753} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (7, 4), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4527401567246508, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9528056782035882, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.48399536320702935, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49080839055482284, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.385580249421457e-26, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (4, 5), destination = (1, 2), deadline = 30 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.48582204701739523, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.995752511038323, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 0.15772263585915536, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.48399536320702935, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49724251716644685, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.896940035805932e-28, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (7, 2), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.48582204701739523, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.995752511038323, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.49519860896210877, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49975182654498024, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.723313853651719e-30, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.34211719526946965, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.995752511038323, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.49519860896210877, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49975182654498024, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.401489504474354e-34, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (5, 4), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4526351585808409, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9987257533114968, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', 'left', None, None, 'possible'], 'right')": 0.09075073265321687, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.49855958268863265, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49975182654498024, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.24033969439441e-36, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (4, 4), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4526351585808409, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9987257533114968, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.49855958268863265, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49975182654498024, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.442802545389568e-40, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4013763780720126} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4857905475742523, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9987257533114968, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.08520638992548091, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49975182654498024, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 4.40895903709218e-42, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.08435422136675236} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (7, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4857905475742523, "(['green', None, None, None, 'possible'], None)": 0.5597777594118032, "(['red', None, None, None, 'possible'], 'left')": -0.9996177259934491, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.08520638992548091, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.24992856552522258, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 7.230760233424776e-46, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.08435422136675236} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (5, 3), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4857905475742523, "(['green', None, None, None, 'possible'], None)": 0.0024115461368332844, "(['red', None, None, None, 'possible'], 'left')": -0.9996177259934491, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.08520638992548091, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1182836577071283, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.1150419276403266e-48, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.08435422136675236} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (5, 2), destination = (2, 3), deadline = 20 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4956054182271177, "(['green', None, None, None, 'possible'], None)": 0.0002729025221128932, "(['red', None, None, None, 'possible'], 'left')": -0.9996177259934491, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": 2.263158253732896, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.46564552919364155, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.877963257490507e-50, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3753062664100257} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (2, 5), destination = (7, 2), deadline = 40 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4956054182271177, "(['green', None, None, None, 'possible'], None)": 1.7912141739306714e-05, "(['red', None, None, None, 'possible'], 'left')": -0.9996177259934491, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.46564552919364155, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 9.96771872294579e-53, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3753062664100257} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (7, 5), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4956054182271177, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 5.731646466736148e-10, "(['red', None, None, None, 'possible'], 'left')": -0.9998853177980347, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 9.481382444477726e-57, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3753062664100257} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (3, 6), destination = (1, 2), deadline = 30 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4956054182271177, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 4.817739473643165e-13, "(['red', None, None, None, 'possible'], 'left')": -0.9998853177980347, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.369079277695844e-59, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4625918799230077} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (4, 2), destination = (6, 5), deadline = 25 RoutePlanner.route_to(): destination = (6, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49960448764044063, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.0755024329908062e-15, "(['red', None, None, None, 'possible'], 'left')": -0.9998853177980347, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.7596712401889244e-61, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.12872477252182102} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (7, 6), destination = (7, 2), deadline = 20 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49960448764044063, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 3.0078707440478873e-18, "(['red', None, None, None, 'possible'], 'left')": -0.9999655953394104, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.4790929000407015e-64, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.12872477252182102} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (1, 5), destination = (7, 6), deadline = 35 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49960448764044063, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 6.641330980900593e-20, "(['red', None, None, None, 'possible'], 'left')": -0.9999655953394104, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.20087894174654283, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.8858877391274137e-65, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.12872477252182102} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (1, 5), destination = (8, 1), deadline = 55 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 1.2500355961123601, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.6594457290703341e-22, "(['red', None, None, None, 'possible'], 'left')": -0.9999896786018232, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.41026368252396284, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.7450820099395565e-69, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (6, 1), destination = (1, 4), deadline = 40 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 4.692269600782292e-26, "(['red', None, None, None, 'possible'], 'left')": -0.9999969035805469, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.18053314325209546, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.765369803604203e-75, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: forward state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (2, 2), destination = (8, 3), deadline = 35 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.287572499901906e-29, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 9.455294629905105e-79, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (4, 4), destination = (2, 1), deadline = 25 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 4.245557608815765e-34, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.5506827763662722e-82, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (5, 3), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 3.153455307778645e-36, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.4473167907577464, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.42388301911231e-84, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (4, 5), destination = (1, 3), deadline = 25 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 4.038412047741681e-38, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.543143463043143e-86, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (6, 2), destination = (2, 4), deadline = 30 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0441929164313975, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.0090636416290098e-40, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.48969365875809245, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 7.191024420395349e-90, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.3886174317565463} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (6, 4), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.06602263752117432, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 9.598302844439213e-45, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999907496444299, "(['green', None, None, None, 'possible'], 'right')": -0.23349259412207177, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4969080976274277, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.0979235722226804e-92, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4665852295269639} self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (3, 6), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.06602263752117432, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 9.598302844439213e-45, "(['red', None, None, None, 'possible'], 'left')": -0.9999997213222492, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999991674679987, "(['green', None, None, None, 'possible'], 'right')": 2.370234891367809, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.025278271213531545, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.334598507566367e-94, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4665852295269639} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (1, 3), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31170687023771887, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.08619155745885e-45, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999991674679987, "(['green', None, None, None, 'possible'], 'right')": -0.20529508568878985, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45272495559078213, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.08064202542253e-96, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4899755688580892} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (2, 3), destination = (8, 6), deadline = 45 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31170687023771887, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 8.067860214687769e-48, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.7, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999991674679987, "(['green', None, None, None, 'possible'], 'right')": -0.20529508568878985, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.45272495559078213, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.7737275143136995e-98, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.34222934035916835} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (1, 3), destination = (8, 6), deadline = 50 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31170687023771887, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 0.2286758762338716, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999997502403997, "(['green', None, None, None, 'possible'], 'right')": 0.19616755288831722, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.18058272314902246, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.4366087248724165e-99, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.34222934035916835} self.state:['green', None, 'left', None, 'possible'] random action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 2), deadline = 25 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.38858514626258683, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.2616074241509134e-05, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999932564908, "(['green', None, None, None, 'possible'], 'right')": -0.2911497341335048, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.43454495206334387, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.5464161069256397e-104, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.34222934035916835} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (8, 3), destination = (3, 5), deadline = 35 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.38858514626258683, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.8283534633630352e-08, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999932564908, "(['green', None, None, None, 'possible'], 'right')": -0.2911497341335048, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4803634767924692, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.2411054269126295e-107, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.34222934035916835} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (4, 4), destination = (8, 5), deadline = 25 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.38858514626258683, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.5368237910933578e-11, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999932564908, "(['green', None, None, None, 'possible'], 'right')": -0.43734491727080543, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4803634767924692, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.2364204267905547e-111, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4526688011088962} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', 'forward', 'possible'] action: None state2: ['green', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, 'left', 'forward', 'possible'] action: None state2: ['green', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, 'left', 'forward', 'possible'] action: None state2: ['green', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, 'left', 'forward', 'possible'] action: None state2: ['green', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, 'left', 'forward', 'possible'] action: None state2: ['green', None, 'left', 'forward', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (6, 4), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.38858514626258683, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.1415002663208837e-13, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999932564908, "(['green', None, None, None, 'possible'], 'right')": -0.48120347518120965, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4803634767924692, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.0893997038748344e-114, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4526688011088962} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, 'left', None, 'possible'] random action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (2, 6), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.17790257149081046, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 6.620701544661126e-14, "(['red', None, None, None, 'possible'], 'left')": -0.9999999749190025, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": 1.834195037227324, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999932564908, "(['green', None, None, None, 'possible'], 'right')": 0.9383753677419817, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.3784167550381104, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.35397582070685274, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": 2.7349903818370005} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (2, 3), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.21904133021093333, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 0.07325024306754857, "(['red', None, None, None, 'possible'], 'left')": -0.9008867626777819, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4505631624817261, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6538375599666183, "(['green', None, None, None, 'possible'], 'right')": 0.12968173901643648, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.11907746608578526, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (1, 1), destination = (7, 1), deadline = 30 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.21904133021093333, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 0.0005440778081017927, "(['red', None, None, None, 'possible'], 'left')": -0.9008867626777819, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6538375599666183, "(['green', None, None, None, 'possible'], 'right')": -0.2747845913704668, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.367049397665672e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 2), deadline = 45 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4157117427684559, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.3439100861086016e-06, "(['red', None, None, None, 'possible'], 'left')": -0.9008867626777819, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6538375599666183, "(['green', None, None, None, 'possible'], 'right')": -0.10977104018352868, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.641501930457519e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4747135179558028, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 3.844048379395947e-10, "(['red', None, None, None, 'possible'], 'left')": -0.9702660287018511, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8961512679892317, "(['green', None, None, None, 'possible'], 'right')": -0.3718793726019625, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.252587254376849e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (4, 4), destination = (7, 5), deadline = 20 RoutePlanner.route_to(): destination = (7, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4747135179558028, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 5.570892365772035e-13, "(['red', None, None, None, 'possible'], 'left')": -0.9702660287018511, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8961512679892317, "(['green', None, None, None, 'possible'], 'right')": -0.3718793726019625, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.726625107882718e-15, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (5, 5), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4747135179558028, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.3999638673583775e-15, "(['red', None, None, None, 'possible'], 'left')": -0.991079808610555, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8961512679892317, "(['green', None, None, None, 'possible'], 'right')": -0.3718793726019625, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.897858394711047e-17, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.12175239166331248} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (7, 5), destination = (1, 4), deadline = 35 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4747135179558028, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.017291318680008e-18, "(['red', None, None, None, 'possible'], 'left')": -0.991079808610555, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8961512679892317, "(['green', None, None, None, 'possible'], 'right')": -0.3718793726019625, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16775687912155604, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.3969595519190254, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": 2.0666820072639656} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 4), deadline = 25 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4747135179558028, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 9.834686702856708e-22, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9646140956791349, "(['green', None, None, None, 'possible'], 'right')": -0.25602208777976115, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4003270637364668, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.008764804057957447, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.24053251837896206} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (4, 6), destination = (8, 2), deadline = 40 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49240348282625057, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.780868373133548e-25, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9646140956791349, "(['green', None, None, None, 'possible'], 'right')": -0.25602208777976115, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4003270637364668, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.775914460817055e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.24053251837896206} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 6), deadline = 50 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49240348282625057, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.5342082614537257e-29, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9646140956791349, "(['green', None, None, None, 'possible'], 'right')": -0.25602208777976115, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4003270637364668, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 7.007805160294048e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.24053251837896206} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (5, 6), destination = (2, 2), deadline = 35 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49240348282625057, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 5.555564178359135e-35, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9968152686111194, "(['green', None, None, None, 'possible'], 'right')": -0.42680662633392835, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4003270637364668, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.5376158045557612e-15, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": 1.327840244486312} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 2), deadline = 35 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49925230783611735, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 3.0650111101341365e-39, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9968152686111194, "(['green', None, None, None, 'possible'], 'right')": -0.42680662633392835, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4003270637364668, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0001325830663650686, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.2931483133988695} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 5), deadline = 30 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49925230783611735, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.5762972468985423e-42, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9990443048444397, "(['green', None, None, None, 'possible'], 'right')": -0.4780419879001785, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2858193701700782, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.9214274102342905e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4379436743439889} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (5, 3), destination = (3, 5), deadline = 20 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49925230783611735, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.1098796921872502e-44, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9997132879221347, "(['green', None, None, None, 'possible'], 'right')": -0.263406137323823, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2858193701700782, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.6150571626754586e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4379436743439889} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (6, 6), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23746097046239256, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 8.243807595629059e-47, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.835196974125949, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9997132879221347, "(['green', None, None, None, 'possible'], 'right')": -0.4290218411971469, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.43574581104590593, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.5660206448788697e-12, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4379436743439889} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (1, 6), destination = (4, 4), deadline = 25 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23746097046239256, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 6.123218953562546e-49, "(['red', None, None, None, 'possible'], 'left')": -0.9791119869259927, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9997132879221347, "(['green', None, None, None, 'possible'], 'right')": -0.4290218411971469, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.43574581104590593, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.910288835082909e-15, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4379436743439889} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (2, 1), destination = (6, 2), deadline = 25 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23746097046239256, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 8.873924143408554e-52, "(['red', None, None, None, 'possible'], 'left')": -0.9937335960777978, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999139863766403, "(['green', None, None, None, 'possible'], 'right')": -0.4290218411971469, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.43574581104590593, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.2913016473530256e-17, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4379436743439889} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (3, 1), destination = (6, 4), deadline = 30 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23746097046239256, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.286031584043777e-54, "(['red', None, None, None, 'possible'], 'left')": -0.9937335960777978, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999741959129921, "(['green', None, None, None, 'possible'], 'right')": -0.4290218411971469, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.43574581104590593, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.2265294559237394e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4813831023031967} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (7, 4), destination = (3, 6), deadline = 30 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23746097046239256, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.8637495750813094e-57, "(['red', None, None, None, 'possible'], 'left')": -0.9937335960777978, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999741959129921, "(['green', None, None, None, 'possible'], 'right')": -0.4290218411971469, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1558424498462287, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.7120616061876517e-23, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4813831023031967} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (2, 3), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.42123829113871775, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.7009931340049575e-60, "(['red', None, None, None, 'possible'], 'left')": -0.9937335960777978, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999976776321693, "(['green', None, None, None, 'possible'], 'right')": 1.2712934476408557, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1558424498462287, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.3221826698364335e-26, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4813831023031967} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (6, 5), destination = (5, 1), deadline = 25 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.42123829113871775, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.006205525751288e-62, "(['red', None, None, None, 'possible'], 'left')": -0.9981200788233393, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999976776321693, "(['green', None, None, None, 'possible'], 'right')": -0.05838458535595059, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4690258204861606, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.9161406451147007e-29, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.494414930690959} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (3, 4), destination = (6, 6), deadline = 25 RoutePlanner.route_to(): destination = (6, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.47637148734161533, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 4.4296700377141824e-64, "(['red', None, None, None, 'possible'], 'left')": -0.9981200788233393, "(['green', None, None, 'left', 'possible'], 'right')": -0.35, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999993032896508, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4690258204861606, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.4181033717397306e-33, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.494414930690959} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 6), deadline = 40 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.47637148734161533, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.1068258827056422e-66, "(['red', None, None, None, 'possible'], 'left')": -0.9981200788233393, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999993032896508, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4690258204861606, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 4.5541906043576774e-36, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.494414930690959} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (8, 6), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.47637148734161533, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.0541832218024435e-71, "(['red', None, None, None, 'possible'], 'left')": -0.9981200788233393, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999997909868952, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49070774614584817, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.5125521642605774e-40, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (7, 6), destination = (3, 1), deadline = 45 RoutePlanner.route_to(): destination = (3, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.47637148734161533, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.5257771960252904e-73, "(['red', None, None, None, 'possible'], 'left')": -0.9981200788233393, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999372960686, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49070774614584817, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.278024646022451e-43, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (2, 1), destination = (8, 3), deadline = 40 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.47637148734161533, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.8317244521083083e-78, "(['red', None, None, None, 'possible'], 'left')": -0.9994360236470018, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9505590922377973, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999811888206, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49070774614584817, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.1651528117861388e-47, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (8, 5), destination = (5, 3), deadline = 25 RoutePlanner.route_to(): destination = (5, 3) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4929114462024846, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 8.007019652196491e-82, "(['red', None, None, None, 'possible'], 'left')": -0.9994360236470018, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9851677276713393, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999811888206, "(['green', None, None, None, 'possible'], 'right')": -0.46025461268203555, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.49070774614584817, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.2542114244334698e-52, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (8, 4), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4929114462024846, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.0254036120369995e-83, "(['red', None, None, None, 'possible'], 'left')": -0.9998308070941005, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9851677276713393, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999811888206, "(['green', None, None, None, 'possible'], 'right')": -0.34142687454241494, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.33501494434881324, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 3.1338534363259645e-55, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, 'right', None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (5, 5), destination = (2, 1), deadline = 35 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4929114462024846, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 0.6030380719113257, "(['red', None, None, None, 'possible'], 'left')": -0.9999492421282301, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.9851677276713393, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999943566462, "(['green', None, None, None, 'possible'], 'right')": -0.34142687454241494, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.1865071692534643, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 6.919498770836165e-57, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.4929114462024846, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 9.889916583333405e-05, "(['red', None, None, None, 'possible'], 'left')": -0.9999492421282301, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4736650954904205, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": -0.34142687454241494, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3943982809918794, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.816189564299131e-60, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.49832447920728773} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (7, 6), destination = (4, 2), deadline = 35 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.49786411835051725, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.0645853694071086e-09, "(['red', None, None, None, 'possible'], 'left')": -0.9999492421282301, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4736650954904205, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": -0.34142687454241494, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3943982809918794, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.8355052956226017e-63, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.34245417617596874} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 2), deadline = 35 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 0.07001994966069766, "(['red', None, None, None, 'possible'], 'left')": -0.9999954317915407, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4736650954904205, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": 2.2840295556758856, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.12184267451770042, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 8.017710412838222e-67, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.33682662302952576} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (3, 1), destination = (6, 4), deadline = 30 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 3.413608443590355e-05, "(['red', None, None, None, 'possible'], 'left')": -0.9999954317915407, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4736650954904205, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": -0.20977365719371868, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.38272751727821464, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 2.2670978736444032e-70, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.33682662302952576} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (1, 3), destination = (6, 2), deadline = 30 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.869310981005406e-08, "(['red', None, None, None, 'possible'], 'left')": -0.9999995888612387, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4736650954904205, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": -0.20977365719371868, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.46481825518346437, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.1052542141803595e-73, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4510479869088577} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (8, 6), destination = (1, 5), deadline = 40 RoutePlanner.route_to(): destination = (1, 5) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.7, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 2.411801365554095e-11, "(['red', None, None, None, 'possible'], 'left')": -0.9999995888612387, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 0.09209952864712623, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999983069938, "(['green', None, None, None, 'possible'], 'right')": -0.41293209249835455, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4968336428536202, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 5.388328806465333e-77, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4510479869088577} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: forward state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (4, 2), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.8842121319788045, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 7.717442713739151e-16, "(['red', None, None, None, 'possible'], 'left')": -0.9999998766583716, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4276298585941474, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999994920982, "(['green', None, None, None, 'possible'], 'right')": -0.41293209249835455, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4968336428536202, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 4.529163572550057e-80, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4510479869088577} self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (8, 4), destination = (4, 2), deadline = 30 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'right', 'right', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'forward')": -0.8842121319788045, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1404886911084731, "(['green', 'left', None, None, 'possible'], 'left')": -0.34999999917746677, "(['green', None, None, None, 'possible'], None)": 1.1184313633432563e-18, "(['red', None, None, None, 'possible'], 'left')": -0.9999998766583716, "(['green', None, None, 'left', 'possible'], 'right')": -0.45499999999999996, "(['green', 'left', 'forward', None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": 1.4276298585941474, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], 'right')": -0.22352420597262135, "(['green', 'right', None, None, 'possible'], 'forward')": 1.4, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": -0.32277478020403494, "(['green', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'left')": -0.9099999999999999, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9999999994920982, "(['green', None, None, None, 'possible'], 'right')": -0.41293209249835455, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', 'forward', None, 'possible'], 'left')": -0.35, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, 'left', 'forward', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": 0.39176208170856897, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4968336428536202, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 1.9511827207901082e-82, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.7, "(['red', None, None, None, 'possible'], 'right')": -0.4510479869088577} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ ================================================ FILE: p4-smartcab/smartcab/trial-data/trial5.js ================================================ self.epsilon = 0.1 self.alpha = 0.2 # Alpha is the learning rate self.gamma = 0.5 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.actions = [None, 'forward', 'left', 'right'] self.q = {} self.defaultq = 0.0 SUCCESS: 8/100 ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (8, 4), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'possible'], 'forward')": -0.1, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 0.42620800000000025, "(['green', None, None, None, 'possible'], 'left')": -0.1, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', None, 'right', None, 'possible'], None)": 0.0} self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (6, 6), destination = (8, 4), deadline = 20 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (2, 1), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (3, 4), destination = (6, 3), deadline = 20 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.2, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (6, 1), destination = (2, 1), deadline = 20 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.48800000000000004, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (3, 5), destination = (7, 2), deadline = 35 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.48800000000000004, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.2, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (2, 4), destination = (8, 2), deadline = 40 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.48800000000000004, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.0065041919999998254, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.18000000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.36000000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] random action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (3, 1), destination = (6, 5), deadline = 35 RoutePlanner.route_to(): destination = (6, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.5904, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 1.0968644366376739, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.24400000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.36000000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (6, 4), destination = (1, 6), deadline = 35 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.5904, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 0.9122300825757362, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.24400000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.36000000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] random action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (7, 5), destination = (2, 6), deadline = 30 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 1.2699990146455533, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.24400000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48800000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', 'right', None, 'possible'] action: None state2: ['red', 'left', 'right', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 1.332453991353804, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.24400000000000002, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48800000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (3, 2), destination = (6, 4), deadline = 25 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.01555533608651212, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.14860368069169572, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.48800000000000004, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (5, 3), destination = (8, 4), deadline = 20 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.01555533608651212, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.21888294455335658, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5904, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (7, 5), destination = (8, 1), deadline = 25 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.01555533608651212, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.01807657606273337, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5904, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (3, 5), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.031004458490463228, "(['green', None, None, None, 'possible'], 'right')": 0.23474282747117173, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.01807657606273337, "(['green', None, None, None, 'possible'], 'forward')": -0.18000000000000002, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.67232, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (8, 2), destination = (4, 6), deadline = 40 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], None)": 0.031004458490463228, "(['green', None, None, None, 'possible'], 'right')": 1.060577032694368, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.01807657606273337, "(['green', None, None, None, 'possible'], 'forward')": 0.256, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7378560000000001, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 1), deadline = 40 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.01807657606273337, "(['green', None, None, None, 'possible'], None)": 0.031004458490463228, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.18000000000000002, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], 'right')": 0.14138282037388442, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5277852682240003, "(['red', None, None, None, 'possible'], 'left')": -0.7378560000000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (2, 6), destination = (5, 3), deadline = 30 RoutePlanner.route_to(): destination = (5, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.031004458490463228, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.18000000000000002, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], 'right')": 0.5898128373762125, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.09000485380915224, "(['red', None, None, None, 'possible'], 'left')": -0.7378560000000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (6, 4), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.031004458490463228, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.18000000000000002, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.67232, "(['green', None, None, None, 'possible'], 'right')": 0.9201350140556279, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.09000485380915224, "(['red', None, None, None, 'possible'], 'left')": -0.7902848, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (6, 1), destination = (3, 6), deadline = 40 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.11305328780437582, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.18000000000000002, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7378560000000001, "(['green', None, None, None, 'possible'], 'right')": 0.6205492429809883, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.09000485380915224, "(['red', None, None, None, 'possible'], 'left')": -0.7902848, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (2, 1), destination = (4, 6), deadline = 35 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.11305328780437582, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15435606056152096, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7378560000000001, "(['green', None, None, None, 'possible'], 'right')": 1.2274579899678013, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.9003489054346376, "(['red', None, None, None, 'possible'], 'left')": -0.83222784, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (1, 1), destination = (8, 5), deadline = 55 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.11305328780437582, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2234848484492168, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7902848, "(['green', None, None, None, 'possible'], 'right')": 1.1454063791462383, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.6202791243477102, "(['red', None, None, None, 'possible'], 'left')": -0.8657822720000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (6, 2), destination = (8, 5), deadline = 25 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09040816187560843, "(['green', None, None, None, 'possible'], None)": 0.10174795902393824, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.27878787875937344, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7902848, "(['green', None, None, None, 'possible'], 'right')": 0.03260864020357526, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.0871381808541998, "(['red', None, None, None, 'possible'], 'left')": -0.8657822720000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (2, 3), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.16316921318833233, "(['green', None, None, None, 'possible'], None)": 0.03547731963582553, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3230303030074988, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7902848, "(['green', None, None, None, 'possible'], 'right')": -0.06373829193474596, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.030289455316640165, "(['red', None, None, None, 'possible'], 'left')": -0.8926258176000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (1, 6), destination = (8, 3), deadline = 50 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.16316921318833233, "(['green', None, None, None, 'possible'], None)": 0.012370176469548758, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.07432165205482576, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7902848, "(['green', None, None, None, 'possible'], 'right')": -0.06373829193474596, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.030289455316640165, "(['red', None, None, None, 'possible'], 'left')": -0.8926258176000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', 'right', 'possible'] action: None state2: ['green', None, 'right', 'right', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': 'right'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (1, 3), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 1.0353493814611356, "(['green', None, None, None, 'possible'], None)": 0.004313213835163988, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21597418124846046, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.83222784, "(['green', None, None, None, 'possible'], 'right')": -0.14137383415559548, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.12332977838868203, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (5, 5), destination = (2, 2), deadline = 30 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.18037707733844552, "(['green', None, None, None, 'possible'], None)": 0.004313213835163988, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21597418124846046, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.83222784, "(['green', None, None, None, 'possible'], 'right')": -0.14137383415559548, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.22425038616274573, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] random action: forward state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', 'forward', None, None, 'possible'] random action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 1), deadline = 50 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.18037707733844552, "(['green', None, None, None, 'possible'], None)": 0.004313213835163988, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21597418124846046, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.83222784, "(['green', None, None, None, 'possible'], 'right')": -0.14137383415559548, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.0267927807062585, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (7, 1), destination = (5, 6), deadline = 35 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.18037707733844552, "(['green', None, None, None, 'possible'], None)": 0.004313213835163988, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.83222784, "(['green', None, None, None, 'possible'], 'right')": -0.2130990673244764, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.7214342245650068, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (4, 4), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1401028034530554, "(['green', None, None, None, 'possible'], None)": 0.002829899597251093, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.83222784, "(['green', None, None, None, 'possible'], 'right')": 0.6544564991490923, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (7, 2), destination = (6, 5), deadline = 20 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1401028034530554, "(['green', None, None, None, 'possible'], None)": 0.06770956959271011, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8657822720000001, "(['green', None, None, None, 'possible'], 'right')": 1.0917268116368308, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.931280523264, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (5, 2), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1401028034530554, "(['green', None, None, None, 'possible'], None)": 0.06770956959271011, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8657822720000001, "(['green', None, None, None, 'possible'], 'right')": 1.3600580886419773, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.9450244186112, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (5, 2), destination = (1, 2), deadline = 20 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1401028034530554, "(['green', None, None, None, 'possible'], None)": 0.06770956959271011, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8926258176000001, "(['green', None, None, None, 'possible'], 'right')": 1.0019229432257584, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.9450244186112, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (2, 6), destination = (6, 2), deadline = 40 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.1401028034530554, "(['green', None, None, None, 'possible'], None)": 0.16632341407545453, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2727793449987684, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8926258176000001, "(['green', None, None, None, 'possible'], 'right')": 0.912437464181604, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.9450244186112, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 6), deadline = 25 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.16438674534136882, "(['green', None, None, None, 'possible'], None)": 0.05799338857193591, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3182234759990147, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8926258176000001, "(['green', None, None, None, 'possible'], 'right')": 0.012726065145394885, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.95601953488896, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (1, 2), destination = (1, 6), deadline = 20 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.016379045853334395, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3182234759990147, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8926258176000001, "(['green', None, None, None, 'possible'], 'right')": 0.012726065145394885, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.09680824378928726, "(['red', None, None, None, 'possible'], 'left')": -0.95601953488896, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (7, 2), destination = (2, 3), deadline = 30 RoutePlanner.route_to(): destination = (2, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.0057110201584670145, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3545787807992118, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.931280523264, "(['green', None, None, None, 'possible'], 'right')": -0.08854654136914461, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.17666319034576905, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (3, 2), destination = (6, 4), deadline = 25 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.0013064982287134845, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3545787807992118, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.931280523264, "(['green', None, None, None, 'possible'], 'right')": -0.08854654136914461, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.17666319034576905, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (8, 6), destination = (5, 1), deadline = 40 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.00033209432023391735, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3545787807992118, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.931280523264, "(['green', None, None, None, 'possible'], 'right')": -0.08854654136914461, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.17666319034576905, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (8, 1), destination = (2, 5), deadline = 50 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 3.633742481631203e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3545787807992118, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.931280523264, "(['green', None, None, None, 'possible'], 'right')": -0.08854654136914461, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.17666319034576905, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 2.608656415353443e-06, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9450244186112, "(['green', None, None, None, 'possible'], 'right')": -0.17083679131706114, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.20693621173613116, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (3, 5), destination = (3, 1), deadline = 20 RoutePlanner.route_to(): destination = (3, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.13456966014153335, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9450244186112, "(['green', None, None, None, 'possible'], 'right')": -0.17083679131706114, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.3456757321640105, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.13456966014153335, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9450244186112, "(['green', None, None, None, 'possible'], 'right')": -0.17083679131706114, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.9765405857312085, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (8, 4), destination = (1, 5), deadline = 40 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.09810128224317782, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.95601953488896, "(['green', None, None, None, 'possible'], 'right')": -0.17083679131706114, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.04931091171444685, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.01636052908939752, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.22784031765176294, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.05562017945699785, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9648156279111679, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (8, 2), destination = (1, 2), deadline = 35 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.009689907691801067, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.013640525838342368, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14398273282700913, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9718525023289344, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (4, 3), destination = (8, 3), deadline = 20 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2257100574159015, "(['green', None, None, None, 'possible'], None)": 0.0057217935929316155, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.013640525838342368, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14398273282700913, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9718525023289344, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (2, 5), destination = (5, 2), deadline = 30 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.28010458065169375, "(['green', None, None, None, 'possible'], None)": 0.0017955594581018143, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.4255443357691965, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.013640525838342368, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14398273282700913, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9718525023289344, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (4, 6), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04852999869789519, "(['green', None, None, None, 'possible'], None)": 0.0006260728709577423, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.04765162510771426, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.013640525838342368, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.14398273282700913, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9718525023289344, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (2, 1), destination = (1, 5), deadline = 25 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.13882399895831615, "(['green', None, None, None, 'possible'], None)": 0.00017682147074792422, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.06181609262673283, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.21516435645040388, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9774820018631476, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (7, 5), destination = (7, 1), deadline = 20 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.13882399895831615, "(['green', None, None, None, 'possible'], None)": 0.01062403567713733, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.06181609262673283, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.4629578390093059, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9774820018631476, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 3), deadline = 20 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.13882399895831615, "(['green', None, None, None, 'possible'], None)": 0.01062403567713733, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.06181609262673283, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.1504962646377845, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9774820018631476, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 6), deadline = 35 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04132433129214379, "(['green', None, None, None, 'possible'], None)": 0.01062403567713733, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.06181609262673283, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.054667474675820935, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (2, 3), destination = (7, 4), deadline = 30 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04132433129214379, "(['green', None, None, None, 'possible'], None)": 0.0019686552596817736, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.056266020259343255, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (1, 1), destination = (5, 1), deadline = 20 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04132433129214379, "(['green', None, None, None, 'possible'], None)": 0.0004503651779110732, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.056266020259343255, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (2, 2), destination = (6, 5), deadline = 35 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04132433129214379, "(['green', None, None, None, 'possible'], None)": 0.00012719642844460764, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.056266020259343255, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (4, 6), destination = (8, 1), deadline = 45 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.04132433129214379, "(['green', None, None, None, 'possible'], None)": 1.9091501538474245e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9718525023289344, "(['green', None, None, None, 'possible'], 'right')": -0.1109124206706739, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1450128162074746, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (6, 6), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.20644533127652798, "(['green', None, None, None, 'possible'], None)": 1.8800755194083097e-06, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9774820018631476, "(['green', None, None, None, 'possible'], 'right')": -0.18872993653653913, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2160102529659797, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (5, 5), destination = (8, 1), deadline = 35 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.05029999038641772, "(['green', None, None, None, 'possible'], None)": 7.283797770860967e-07, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9774820018631476, "(['green', None, None, None, 'possible'], 'right')": -0.18872993653653913, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.4, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.27280810245786236, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (6, 3), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.34467553013411834, "(['green', None, None, None, 'possible'], None)": 0.007171593223686862, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9774820018631476, "(['green', None, None, None, 'possible'], 'right')": -0.18872993653653913, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.30158704258925007, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (8, 6), destination = (6, 3), deadline = 25 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.05973736563547967, "(['green', None, None, None, 'possible'], None)": 0.007171593223686862, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9819856014905182, "(['green', None, None, None, 'possible'], 'right')": -0.18872993653653913, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3235210378896801, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (2, 1), destination = (4, 5), deadline = 30 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.0462363709280683, "(['green', None, None, None, 'possible'], None)": 0.0030871357262553904, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9855884811924145, "(['green', None, None, None, 'possible'], 'right')": -0.18872993653653913, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3235210378896801, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (7, 5), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.034836828992811736, "(['green', None, None, None, 'possible'], None)": 0.0007847084809982211, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9855884811924145, "(['green', None, None, None, 'possible'], 'right')": -0.2508870716389846, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.35856677231791745, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, 'forward', 'possible'] action: None state2: ['red', 'right', None, 'forward', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (3, 1), destination = (7, 3), deadline = 30 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.034836828992811736, "(['green', None, None, None, 'possible'], None)": 0.00033779127047864235, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9855884811924145, "(['green', None, None, None, 'possible'], 'right')": -0.2508870716389846, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.35856677231791745, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (1, 4), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 0.00013086725918876692, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.14945287410138627, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9884707849539316, "(['green', None, None, None, 'possible'], 'right')": -0.3007096573111877, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (5, 2), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 1.9642473540255852e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.8797627628823348, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9884707849539316, "(['green', None, None, None, 'possible'], 'right')": -0.07520876261124411, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (6, 4), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 4.4935679048249644e-06, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.270369683281185, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9884707849539316, "(['green', None, None, None, 'possible'], 'right')": -0.07520876261124411, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.11395846520731825, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (7, 2), destination = (2, 4), deadline = 35 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 1.2691163005056142e-06, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.015053744702345, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8673100107669, "(['green', None, None, None, 'possible'], 'right')": -0.07520876261124411, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9819856014905182, "(['red', None, None, None, 'possible'], None)": 0.11395846520731825, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: None state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (1, 4), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 1.714387934464804e-07, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.9529130568472381, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8673100107669, "(['green', None, None, None, 'possible'], 'right')": -0.07520876261124411, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875262392172779, "(['red', None, None, None, 'possible'], None)": 0.11395846520731825, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (1, 6), destination = (6, 2), deadline = 45 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 5.977701107154492e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.06947113047129375, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8673100107669, "(['green', None, None, None, 'possible'], 'right')": -0.07520876261124411, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875262392172779, "(['red', None, None, None, 'possible'], None)": 0.11402897584076924, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (7, 1), destination = (1, 2), deadline = 35 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 5.2979995010488604e-09, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.037475982575835634, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.88943029245548, "(['green', None, None, None, 'possible'], 'right')": -0.15805403014552485, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.875262392172779, "(['red', None, None, None, 'possible'], None)": 0.013863261409109588, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (8, 3), destination = (6, 5), deadline = 20 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 9.817300035970529e-10, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.37001921403750454, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9110071428129588, "(['green', None, None, None, 'possible'], 'right')": -0.15805403014552485, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8991992819814992, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (4, 3), destination = (7, 4), deadline = 20 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 2.0212950185188115e-10, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.44257436849018883, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9110071428129588, "(['green', None, None, None, 'possible'], 'right')": -0.15805403014552485, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8991992819814992, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (8, 6), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 8.701012272086916e-11, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.0831969310445058, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9110071428129588, "(['green', None, None, None, 'possible'], 'right')": -0.15805403014552485, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.386853417854334, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8991992819814992, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (1, 5), destination = (5, 2), deadline = 35 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.020859412149873566, "(['green', None, None, None, 'possible'], None)": 2.4574228629210013e-11, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.7097291168076147, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9110071428129588, "(['green', None, None, None, 'possible'], 'right')": -0.15805403014552485, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.22000000000000006, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8991992819814992, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 2), deadline = 20 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5988259648194938, "(['green', None, None, None, 'possible'], None)": 0.03833124704791525, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.58864706522962, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7073598269447571, "(['green', None, None, None, 'possible'], 'right')": -0.01744500169703217, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8991992819814992, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (1, 5), destination = (5, 2), deadline = 35 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.8433656258104407, "(['green', None, None, None, 'possible'], None)": 0.03833124704791525, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.4462426792037411, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.4849631757514965, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7073598269447571, "(['green', None, None, None, 'possible'], 'right')": -0.01744500169703217, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 4), deadline = 25 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.17817655124810322, "(['green', None, None, None, 'possible'], None)": 0.03833124704791525, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.5031509463039625, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.4849631757514965, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6501680980208424, "(['green', None, None, None, 'possible'], 'right')": -0.01744500169703217, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (6, 5), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.23851268256296598, "(['green', None, None, None, 'possible'], None)": 0.03833124704791525, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.5303400836144957, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.4849631757514965, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6501680980208424, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.0025688903274410702, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] random action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (1, 5), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.02350518196728167, "(['green', None, None, None, 'possible'], None)": 0.03833124704791525, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.54790256272855, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.565344222143819, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.4094827342793056, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.11166120386943595, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (8, 5), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.02350518196728167, "(['green', None, None, None, 'possible'], None)": 0.009743288702833268, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.17422223754150223, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.565344222143819, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.42554910779720534, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.11166120386943595, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] random action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (1, 1), destination = (7, 6), deadline = 55 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.02350518196728167, "(['green', None, None, None, 'possible'], None)": 0.003057547235713073, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.723257852972657, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.565344222143819, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.36191141154536005, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8003546602747729, "(['red', None, None, None, 'possible'], None)": 0.11166120386943595, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 2), deadline = 40 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.02350518196728167, "(['green', None, None, None, 'possible'], None)": 0.00012961296880306287, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.05344920028582736, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.38950203038434, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8374454502351605, "(['red', None, None, None, 'possible'], None)": 0.01862194185734097, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] random action: left state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (1, 5), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 2.965128986779006e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.31404984427516336, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8693070532242834, "(['red', None, None, None, 'possible'], None)": 0.00473344776643045, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (3, 2), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 1.1487517220059976e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": -0.09031360600553892, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8693070532242834, "(['red', None, None, None, 'possible'], None)": 0.0020375940536960487, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (6, 4), destination = (5, 1), deadline = 20 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 1.1487517220059976e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": 0.8350691140799307, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8693070532242834, "(['red', None, None, None, 'possible'], None)": 0.00046613616273867195, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (7, 1), destination = (2, 2), deadline = 30 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 1.1487517220059976e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.8373045145102642, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": 1.7449265967851557, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5744926596785156, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8693070532242834, "(['red', None, None, None, 'possible'], None)": 0.00013165062037931517, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (8, 1), destination = (7, 6), deadline = 30 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 0.12616008349536034, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.6487713308204157, "(['green', None, None, None, 'possible'], 'right')": 1.227113056340289, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5744926596785156, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8954419243770577, "(['red', None, None, None, 'possible'], None)": 2.7105695270860083e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (8, 6), destination = (2, 2), deadline = 50 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 0.12616008349536034, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.7752087726999173, "(['green', None, None, None, 'possible'], 'right')": 1.3816931556417584, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5744926596785156, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.10543613772455504, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9163508289321192, "(['red', None, None, None, 'possible'], None)": 2.7105695270860083e-05, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (7, 1), destination = (1, 1), deadline = 30 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 0.05430777915561483, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.048492735780707334, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.8201645786473596, "(['green', None, None, None, 'possible'], 'right')": -0.047302874411478825, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5744926596785156, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.8065696083561338, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9163508289321192, "(['red', None, None, None, 'possible'], None)": 1.4185701461565564e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (8, 4), destination = (4, 1), deadline = 35 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 0.04738452134470257, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1387941391620833, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.8201645786473596, "(['green', None, None, None, 'possible'], 'right')": -0.047302874411478825, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5744926596785156, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.030141894472019745, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9330806136832128, "(['red', None, None, None, 'possible'], None)": 4.00646108844781e-07, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (6, 1), destination = (2, 2), deadline = 25 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.11879118427694504, "(['green', None, None, None, 'possible'], None)": 0.008780447469081493, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1387941391620833, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.8849052690354555, "(['green', None, None, None, 'possible'], 'right')": -0.047302874411478825, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.030141894472019745, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9330806136832128, "(['red', None, None, None, 'possible'], None)": 6.681647954468804e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (2, 1), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.12117254829627247, "(['green', None, None, None, 'possible'], None)": 0.003401725252110366, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1387941391620833, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.6813873148961734, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9079242108445352, "(['green', None, None, None, 'possible'], 'right')": -0.047302874411478825, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.16343590335938962, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9330806136832128, "(['red', None, None, None, 'possible'], None)": 2.3297465860615405e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (4, 4), destination = (3, 1), deadline = 20 RoutePlanner.route_to(): destination = (3, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19693803820531125, "(['green', None, None, None, 'possible'], None)": 0.0014643311784624967, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1387941391620833, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.25642805470862795, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9079242108445352, "(['green', None, None, None, 'possible'], 'right')": 0.6719312342722008, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.0754010195128427, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9464644904668962, "(['red', None, None, None, 'possible'], None)": 2.832427959771622e-09, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 5), deadline = 35 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19693803820531125, "(['green', None, None, None, 'possible'], None)": 0.0014643311784624967, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.6600682199130341, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.25642805470862795, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9263393684462016, "(['green', None, None, None, 'possible'], 'right')": 0.6846486130933758, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.0754010195128427, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9571715922062649, "(['red', None, None, None, 'possible'], None)": 1.2192673613688829e-09, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 2), deadline = 25 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.015436309930207823, "(['green', None, None, None, 'possible'], None)": 0.008362127982515833, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.03565638229455537, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.25642805470862795, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9263393684462016, "(['green', None, None, None, 'possible'], 'right')": -0.08748671935901571, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.0754010195128427, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9571715922062649, "(['red', None, None, None, 'possible'], None)": 3.826190174642508e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 1), deadline = 30 RoutePlanner.route_to(): destination = (3, 1) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.015436309930207823, "(['green', None, None, None, 'possible'], None)": 0.0029156937408601827, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.03565638229455537, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.25642805470862795, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9263393684462016, "(['green', None, None, None, 'possible'], 'right')": -0.08748671935901571, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1594846028120226, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9571715922062649, "(['red', None, None, None, 'possible'], None)": 7.877786266665695e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'right', 'possible'] action: None state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (3, 6), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, 'right', 'right', 'possible'], None)": 0.0, "(['green', None, None, 'right', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.015436309930207823, "(['green', None, None, None, 'possible'], None)": 0.0008234780317516948, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'left', None, None, 'possible'], 'right')": -0.1, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.03565638229455537, "(['red', 'left', 'right', None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.07296438966123998, "(['green', None, 'forward', None, 'possible'], 'forward')": 0.25642805470862795, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], 'left')": -0.2, "(['red', None, None, None, 'possible'], 'forward')": -0.9410714947555016, "(['green', None, None, None, 'possible'], 'right')": -0.08748671935901571, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7296438966123998, "(['green', None, 'forward', None, 'possible'], 'right')": 0.400000000027727, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, None, 'forward', 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8595941417124786, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, 'forward', 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.22758768224687126, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9571715922062649, "(['red', None, None, None, 'possible'], None)": 1.4597696995591313e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'forward')": -0.2, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. ================================================ FILE: p4-smartcab/smartcab/trial-data/trial6.js ================================================ self.epsilon = 0.1 self.alpha = 0.3 # Alpha is the learning rate self.gamma = 0.5 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.actions = [None, 'forward', 'left', 'right'] self.q = {} self.defaultq = 0.0 SUCCESS: 2/100 ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (2, 1), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (8, 4), destination = (2, 6), deadline = 40 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, None, 'possible'], 'forward')": -0.15, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (3, 1), destination = (7, 2), deadline = 25 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, None, 'possible'], 'forward')": -0.15, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (1, 6), destination = (6, 3), deadline = 40 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.15, "(['red', None, None, None, 'possible'], 'left')": -0.3, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (7, 4), destination = (1, 1), deadline = 45 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.3, "(['green', None, None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.15, "(['red', None, None, None, 'possible'], 'left')": -0.3, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] random action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (3, 6), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.51, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.255, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, None, 'possible'], 'left')": -0.3, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (1, 6), destination = (6, 4), deadline = 35 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.51, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.255, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, None, 'possible'], 'left')": -0.3, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (1, 6), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.51, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": 1.083919259727666, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, None, 'possible'], 'left')": -0.3, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 4), deadline = 30 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.51, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.25854783719670743, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, None, 'possible'], 'left')": -0.51, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (2, 5), destination = (7, 3), deadline = 35 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.657, "(['green', None, None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'right')": -0.25854783719670743, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, None, 'possible'], 'left')": -0.51, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3285, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (4, 3), destination = (6, 1), deadline = 20 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.657, "(['green', None, None, None, 'possible'], None)": 0.07789722387113569, "(['green', None, None, None, 'possible'], 'right')": 0.5193148258075713, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.255, "(['green', None, None, None, 'possible'], 'forward')": -0.255, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.51, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.37995, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (8, 6), destination = (1, 5), deadline = 40 RoutePlanner.route_to(): destination = (1, 5) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.657, "(['green', None, None, None, 'possible'], None)": 0.21054123668862695, "(['green', None, None, None, 'possible'], 'right')": 1.4840746865467143, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.255, "(['green', None, None, None, 'possible'], 'forward')": -0.3285, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.51, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.37995, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: None state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (6, 4), destination = (2, 1), deadline = 35 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.657, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7176872962294041, "(['green', None, None, None, 'possible'], None)": 0.21054123668862695, "(['green', None, None, None, 'possible'], 'right')": 1.245879815517684, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.255, "(['green', None, None, None, 'possible'], 'forward')": -0.19306802767234738, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.657, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.41596500000000003, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (5, 6), destination = (3, 2), deadline = 30 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.8319300000000001, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', None, None, None, 'possible'], None)": 0.21054123668862695, "(['green', None, None, None, 'possible'], 'right')": 1.2151162402067357, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.255, "(['green', None, None, None, 'possible'], 'forward')": -0.21519710286225835, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.657, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.41596500000000003, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: None state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 1), deadline = 50 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', None, None, None, 'possible'], 'forward')": -0.8319300000000001, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', None, None, None, 'possible'], None)": 0.21054123668862695, "(['green', None, None, None, 'possible'], 'right')": 1.568474297898311, "(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.255, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.657, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.41596500000000003, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (5, 5), destination = (2, 3), deadline = 25 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.4215, "(['green', None, None, None, 'possible'], None)": 0.20771542127612938, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.41596500000000003, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8823509999999999, "(['green', None, None, None, 'possible'], 'right')": 0.436571049479196, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7599, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (4, 5), destination = (8, 4), deadline = 25 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.33013797213672086, "(['green', None, None, None, 'possible'], None)": 0.20771542127612938, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.41596500000000003, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8823509999999999, "(['green', None, None, None, 'possible'], 'right')": 1.648831842108085, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8319300000000001, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (8, 5), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.33013797213672086, "(['green', None, None, None, 'possible'], None)": 0.39340459635428404, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.0104080012078471, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9176456999999998, "(['green', None, None, None, 'possible'], 'right')": 1.1303765494510907, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7112965597889475, "(['red', None, None, None, 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (2, 6), destination = (3, 3), deadline = 20 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.33013797213672086, "(['green', None, None, None, 'possible'], None)": 0.4310541857247229, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.9393268252588934, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9176456999999998, "(['green', None, None, None, 'possible'], 'right')": 1.8598151638662208, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7112965597889475, "(['red', None, None, None, 'possible'], None)": 0.1319668018896233, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (3, 1), destination = (3, 5), deadline = 20 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.33013797213672086, "(['green', None, None, None, 'possible'], None)": 0.4310541857247229, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.8950152158104622, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7747044460198662, "(['green', None, None, None, 'possible'], 'right')": 1.7510667371322586, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.1381888475651297, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6636553094806938, "(['red', None, None, None, 'possible'], None)": 0.1319668018896233, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (1, 2), destination = (2, 6), deadline = 25 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.33013797213672086, "(['green', None, None, None, 'possible'], None)": 0.4310541857247229, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.1800607780596626, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7747044460198662, "(['green', None, None, None, 'possible'], 'right')": 1.549825592474985, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.06846864594091696, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5386078191974585, "(['red', None, None, None, 'possible'], None)": 0.1319668018896233, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.2831198293788023, "(['green', None, None, None, 'possible'], None)": 0.26472115180819544, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.2991227350741257, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7110240913850518, "(['green', None, None, None, 'possible'], 'right')": 1.005629134205372, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5386078191974585, "(['red', None, None, None, 'possible'], None)": 0.0953460143652528, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (3, 3), destination = (8, 3), deadline = 25 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09065185497198197, "(['green', None, None, None, 'possible'], None)": 0.1912610321814212, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.9497151619587991, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7110240913850518, "(['green', None, None, None, 'possible'], 'right')": 0.3302495442463198, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2846485433915933, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.22057624191095923, "(['red', None, None, None, 'possible'], None)": 0.0953460143652528, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'forward', None, None, 'possible'] random action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (1, 1), destination = (8, 3), deadline = 45 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09065185497198197, "(['green', None, None, None, 'possible'], None)": 0.1912610321814212, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.6280875655873395, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7110240913850518, "(['green', None, None, None, 'possible'], 'right')": 0.9742519970214203, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.6791485109609439, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.22057624191095923, "(['red', None, None, None, 'possible'], None)": 0.0953460143652528, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (2, 6), destination = (6, 6), deadline = 20 RoutePlanner.route_to(): destination = (6, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.07213400564516054, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.1662632695984743, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.794404301066403, "(['green', None, None, None, 'possible'], 'right')": 0.06668976707997351, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.6791485109609439, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.22057624191095923, "(['red', None, None, None, 'possible'], None)": 0.0070795451348993725, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (4, 2), destination = (8, 5), deadline = 35 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.06131390479838646, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.398186134716611, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.794404301066403, "(['green', None, None, None, 'possible'], 'right')": 0.7640852008513559, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.6791485109609439, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4536361236336767, "(['red', None, None, None, 'possible'], None)": 0.001393781231436574, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (2, 4), destination = (8, 1), deadline = 45 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.11302964286534788, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.7543479387081782, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.794404301066403, "(['green', None, None, None, 'possible'], 'right')": 2.1756057481332465, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.7822674360310103, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2738275031171725, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4536361236336767, "(['red', None, None, None, 'possible'], None)": 0.001393781231436574, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (3, 4), destination = (8, 1), deadline = 40 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.3281439697149655, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.7950929872929245, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.794404301066403, "(['green', None, None, None, 'possible'], 'right')": 2.3743286536302644, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.6637389371730298, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.6310044129999013, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4536361236336767, "(['red', None, None, None, 'possible'], None)": 0.001393781231436574, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (7, 5), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.44994919547705875, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.8811563814039798, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.794404301066403, "(['green', None, None, None, 'possible'], 'right')": 1.8480743611673032, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.5576895951407947, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.6310044129999013, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4536361236336767, "(['red', None, None, None, 'possible'], None)": 0.208744208326292, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, 'right', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (5, 6), destination = (6, 3), deadline = 20 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.44994919547705875, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.5195603179003685, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.29822707576795765, "(['green', None, None, None, 'possible'], 'right')": 2.021666525171803, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.272556173809153, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.6310044129999013, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4536361236336767, "(['red', None, None, None, 'possible'], None)": 0.208744208326292, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.44994919547705875, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.058875241282011, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.29822707576795765, "(['green', None, None, None, 'possible'], 'right')": 2.715690808573445, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.11733013487609, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5949530678757013, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.17830486955108182, "(['red', None, None, None, 'possible'], None)": 0.208744208326292, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (7, 1), destination = (2, 3), deadline = 35 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.598204951204143, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.29822707576795765, "(['green', None, None, None, 'possible'], 'right')": 2.1167549286994944, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.11733013487609, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.5949530678757013, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.28583329755840686, "(['red', None, None, None, 'possible'], None)": 0.208744208326292, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (3, 3), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.036546017431290795, "(['green', None, None, 'forward', 'possible'], 'left')": 0.12513482012031868, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.4815036508470392, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.059963140016477685, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.29822707576795765, "(['green', None, None, None, 'possible'], 'right')": 1.5835936674376534, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.8958192999822375, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3111896688236621, "(['red', None, None, None, 'possible'], None)": 0.5026100952552934, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (6, 1), destination = (2, 2), deadline = 25 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.8279324016629533, "(['green', None, None, 'forward', 'possible'], 'left')": 0.12513482012031868, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.9897045614972496, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.059963140016477685, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2865334054105145, "(['green', None, None, None, 'possible'], 'right')": 1.447153412570723, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.8958192999822375, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3111896688236621, "(['red', None, None, None, 'possible'], None)": 0.5026100952552934, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (5, 4), destination = (8, 6), deadline = 25 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5859278051810354, "(['green', None, None, 'forward', 'possible'], 'left')": 0.12513482012031868, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.7548857822179934, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.059963140016477685, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2865334054105145, "(['green', None, None, None, 'possible'], 'right')": 0.9458546927904896, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.8958192999822375, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3111896688236621, "(['red', None, None, None, 'possible'], None)": 0.5026100952552934, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (5, 6), destination = (1, 3), deadline = 35 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5859278051810354, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.8902625194008076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2865334054105145, "(['green', None, None, None, 'possible'], 'right')": 1.4222522802473005, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 0.8958192999822375, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3111896688236621, "(['red', None, None, None, 'possible'], None)": 0.308665424748657, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'right', None, 'possible'] action: None state2: ['green', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (4, 5), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5859278051810354, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.6560845548445203, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.457923591712838, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.3382352653571416, "(['green', None, None, None, 'possible'], 'right')": 1.3187964178963831, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.273949519822188, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3957695922176954, "(['red', None, None, None, 'possible'], None)": 0.33812897328292796, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', 'left', None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (8, 2), destination = (2, 1), deadline = 35 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5859278051810354, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.7332505020316104, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.267511417772738, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2990313442288598, "(['green', None, None, None, 'possible'], 'right')": 1.2049164805663106, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9794980053966709, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.48869269514004676, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3957695922176954, "(['red', None, None, None, 'possible'], None)": 0.4024913656791888, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.35698882662949283, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.41821398763946566, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.009205029469120149, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2990313442288598, "(['green', None, None, None, 'possible'], 'right')": 0.3255102148982898, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9794980053966709, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.2585992574945635, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3957695922176954, "(['red', None, None, None, 'possible'], None)": 0.17858755718723618, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (8, 5), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.1266803122187304, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.3021596060695139, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.009205029469120149, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.2990313442288598, "(['green', None, None, None, 'possible'], 'right')": 0.5228305336519854, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9794980053966709, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.14975428030242716, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.55768428804222, "(['red', None, None, None, 'possible'], None)": 0.04866341722339356, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 6), deadline = 35 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.1266803122187304, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.3021596060695139, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.129311464494526, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.7984812003427035, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6508445821666219, "(['green', None, None, None, 'possible'], 'right')": 1.8177068056034553, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9794980053966709, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.14975428030242716, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.55768428804222, "(['red', None, None, None, 'possible'], None)": 0.008143494087183714, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (3, 3), destination = (7, 2), deadline = 25 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.1266803122187304, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.1975251640341364, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.09654224978890408, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.5603678727739628, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6508445821666219, "(['green', None, None, None, 'possible'], 'right')": 0.19084688492009522, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9794980053966709, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.14975428030242716, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.55768428804222, "(['red', None, None, None, 'possible'], None)": 0.0036133115887957506, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (4, 2), destination = (8, 4), deadline = 30 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.02809632641082617, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21733908802008287, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.5603678727739628, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6508445821666219, "(['green', None, None, None, 'possible'], 'right')": -0.03906010778446782, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.044711306560729525, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6900960759446717, "(['red', None, None, None, 'possible'], None)": 0.0013627587155165162, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 1), deadline = 40 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 0.0028874501802724616, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21733908802008287, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.2464719599033979, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": -0.03906010778446782, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.044711306560729525, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6900960759446717, "(['red', None, None, None, 'possible'], None)": 0.00014005026284396468, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (7, 5), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 9.512878276466837e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.2464719599033979, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": -0.03906010778446782, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.18129658873478233, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7830659273035419, "(['red', None, None, None, 'possible'], None)": 8.839051522239037e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (6, 6), destination = (2, 1), deadline = 45 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.8876900637490582, "(['green', None, None, None, 'possible'], None)": 1.3531285214671623e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.2464719599033979, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": -0.03906010778446782, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7830659273035419, "(['red', None, None, None, 'possible'], None)": 1.068689886949371e-06, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (1, 5), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 7.259048718221363e-07, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": 0.21430366109906124, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7830659273035419, "(['red', None, None, None, 'possible'], None)": 3.520863105898222e-08, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (6, 6), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.06078178470856935, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 1.4291208924801163e-07, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": -0.12266560485592827, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7830659273035419, "(['red', None, None, None, 'possible'], None)": 9.594018363168702e-09, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (2, 1), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19254724121111474, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 2.391537257722189e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": 0.26736024638422673, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8481461482286903, "(['red', None, None, None, 'possible'], None)": 1.6054941529103732e-09, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (6, 5), destination = (2, 3), deadline = 30 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19254724121111474, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 2.391537257722189e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7555141129482146, "(['green', None, None, None, 'possible'], 'right')": 1.2243272702086827, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8481461482286903, "(['red', None, None, None, 'possible'], None)": 1.0132823207935781e-10, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (5, 5), destination = (7, 2), deadline = 25 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19254724121111474, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 2.391537257722189e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.880201915329844, "(['green', None, None, None, 'possible'], 'right')": 1.0421024387111868, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8937023037507489, "(['red', None, None, None, 'possible'], None)": 1.2251139911699234e-11, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (6, 3), destination = (3, 2), deadline = 20 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 2.391537257722189e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.880201915329844, "(['green', None, None, None, 'possible'], 'right')": 0.39305762030811753, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2769037238605533, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8937023037507489, "(['red', None, None, None, 'possible'], None)": 6.572296722882223e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (6, 6), destination = (3, 2), deadline = 35 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 2.391537257722189e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9161413407308678, "(['green', None, None, None, 'possible'], 'right')": 1.2195388914708571, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3906828246916173, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8937023037507489, "(['red', None, None, None, 'possible'], None)": 1.0998294520977319e-13, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'right', None, None, 'possible'] action: None state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (2, 2), destination = (7, 6), deadline = 45 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.17355245486384763, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.02253037721367318, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.958909256958123, "(['green', None, None, None, 'possible'], 'right')": 1.3084442436262016, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.3906828246916173, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8937023037507489, "(['red', None, None, None, 'possible'], None)": 6.9414001768770814e-15, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (8, 1), destination = (1, 3), deadline = 45 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.2852363651042249, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.958909256958123, "(['green', None, None, None, 'possible'], 'right')": 1.5089052612722644, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.3137933660080193, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9255916126255241, "(['red', None, None, None, 'possible'], None)": 1.9438531300633286e-16, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (7, 5), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.04899214529125839, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.3021244603589076, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9712364798706861, "(['green', None, None, None, 'possible'], 'right')": 0.007336381107699685, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.0682929472252285, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9255916126255241, "(['red', None, None, None, 'possible'], None)": 7.534283581842003e-18, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (2, 1), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.2561344052857965, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2665759880963554, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9712364798706861, "(['green', None, None, None, 'possible'], 'right')": 1.2713239866126589, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2861906005159889, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.29130129716427633, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9479141288378667, "(['red', None, None, None, 'possible'], None)": 2.053020889009315e-18, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (4, 4), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.23340042619270296, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.2561344052857965, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2665759880963554, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9712364798706861, "(['green', None, None, None, 'possible'], 'right')": 1.898213873151089, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.29130129716427633, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 4.0418726462276947e-19, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (8, 2), destination = (1, 2), deadline = 35 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.2561344052857965, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2665759880963554, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 0.40689746396235227, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.29130129716427633, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 4.886846072220482e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (2, 5), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.2561344052857965, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2665759880963554, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 0.40689746396235227, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.29130129716427633, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 4.886846072220482e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (6, 4), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.217714244492927, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.0690767651670499, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 1.036584269052967, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.13891634492734675, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (6, 6), destination = (1, 2), deadline = 45 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5572817342389648, "(['green', None, None, None, 'possible'], None)": 0.217714244492927, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.756122306190869, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 0.5388386196902255, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.3269637907524976, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (5, 5), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5386668848828302, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.3012125768019658, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 1.5771367987419807, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.4194354212532139, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9635398901865067, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'right', 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (2, 6), destination = (4, 1), deadline = 35 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.5386668848828302, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.171917773311027, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 2.238917934983153, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.4194354212532139, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7241105937079269, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.5417822290724288, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9798655359094801, "(['green', None, None, None, 'possible'], 'right')": 1.2613204241573057, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5594650024408041, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (7, 3), destination = (2, 5), deadline = 35 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.31338029833489206, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.4800728035073574, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.015436139949244032, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 1.2140253700848478, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.913976439008477, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5594650024408041, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (5, 1), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.8129520025463847, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.6482782825656936, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 0.5804861231089306, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.5594650024408041, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (5, 6), destination = (6, 2), deadline = 25 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5410092021644269, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.16340743117779, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 1.6783678544472886, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.4484928440605017, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (7, 4), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5410092021644269, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.6871430283981336, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 1.8471640893232304, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.3213607104884582, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (6, 5), destination = (6, 1), deadline = 20 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5410092021644269, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.5864371926435865, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 1.2910550544829782, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4494149316246387, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.34734176122115873, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (1, 6), destination = (5, 1), deadline = 45 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5410092021644269, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2574229162061607, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 2.4451200087797527, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 2.6548889284443473, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.36119916122708084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.34734176122115873, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.5509641924870423e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (4, 1), destination = (7, 2), deadline = 20 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.27135738461521264, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2706672144751923, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.11754329810406755, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 0.20463704162349003, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.7601591391082819, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 1.545769483913738, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.34734176122115873, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.566610884711104e-20, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] random action: left state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'left', 'possible'] action: None state2: ['red', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (5, 6), destination = (1, 6), deadline = 20 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.27135738461521264, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2706672144751923, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.11754329810406755, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8196141139287255, "(['green', None, None, None, 'possible'], 'right')": 1.1206693608262868, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5219171931867397, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.39589791648937267, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.543139232854811, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 5.0221955589039855e-21, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'left', None, 'possible'] action: None state2: ['green', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (4, 2), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5214576438460514, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.2846373330193947, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.11754329810406755, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8737298797501079, "(['green', None, None, None, 'possible'], 'right')": 0.6344685525784006, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5219171931867397, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.39589791648937267, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.543139232854811, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 8.404304952705673e-22, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09925314767877214, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.18080848147620654, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.11754329810406755, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8737298797501079, "(['green', None, None, None, 'possible'], 'right')": -0.005459138312199435, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.5219171931867397, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.12712854154256084, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6801974629983677, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.290093469151161e-22, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09925314767877214, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.3112569550236127, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.11754329810406755, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8737298797501079, "(['green', None, None, None, 'possible'], 'right')": -0.005459138312199435, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9653420352307177, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 2.0267463826256935, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6801974629983677, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.7004192766658954e-23, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'right', None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (6, 3), destination = (5, 6), deadline = 20 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09925314767877214, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.09978184834875777, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21467174719953708, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9116109158250754, "(['green', None, None, None, 'possible'], 'right')": -0.005459138312199435, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9653420352307177, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.18776353757815617, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.6801974629983677, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.4853879805786445e-24, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (2, 4), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19594437713113058, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.016697818164026296, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21467174719953708, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9116109158250754, "(['green', None, None, None, 'possible'], 'right')": -0.005459138312199435, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.1154872616014004, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9653420352307177, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.18776353757815617, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7761382240988574, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.761813537818675e-25, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (8, 5), destination = (1, 2), deadline = 50 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19594437713113058, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.016697818164026296, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21467174719953708, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9116109158250754, "(['green', None, None, None, 'possible'], 'right')": 0.5178801207702022, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.9653420352307177, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.18776353757815617, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8432967568692, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 9.374792038396404e-26, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (7, 3), destination = (2, 5), deadline = 35 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.19594437713113058, "(['green', None, None, 'forward', 'possible'], 'left')": 0.48993924939410527, "(['green', None, None, None, 'possible'], None)": 0.0004676017125693746, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.21467174719953708, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9116109158250754, "(['green', None, None, None, 'possible'], 'right')": -0.0678318708319996, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": 0.4236456060378449, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8432967568692, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.6252943762317723e-27, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (4, 3), destination = (1, 2), deadline = 20 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2871610639917914, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 4.8055273472830156e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.30021060382132336, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9381276410775528, "(['green', None, None, None, 'possible'], 'right')": -0.1974316332468, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8432967568692, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.6980063546662825e-28, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (5, 6), destination = (7, 2), deadline = 30 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2871610639917914, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 4.8055273472830156e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.36014742267492633, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9381276410775528, "(['green', None, None, None, 'possible'], 'right')": 1.2354047882936818, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.5149313488504724e-29, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['green', None, None, 'left', 'possible'] action: None state2: ['green', None, None, 'left', 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (1, 1), destination = (3, 5), deadline = 30 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2871610639917914, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 4.8055273472830156e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.40210319587244836, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9381276410775528, "(['green', None, None, None, 'possible'], 'right')": 1.352357158707006, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.6399800267599264e-30, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (4, 6), destination = (7, 1), deadline = 40 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2871610639917914, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 6.835466538434638e-06, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.40210319587244836, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9381276410775528, "(['green', None, None, None, 'possible'], 'right')": -0.14768668926528072, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.76849213980021e-31, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'forward', None, None, 'possible'] action: None state2: ['green', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (3, 5), destination = (8, 5), deadline = 25 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2871610639917914, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 4.314096930976834e-07, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 0.31852776288928614, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": 0.13325662785148695, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.9381276410775528, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.8482451931884843e-32, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, 'forward', None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (7, 4), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.37572038188023693, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 8.493352635542034e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.3893067252222964, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7349272108186291, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.8482451931884843e-32, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (7, 6), destination = (1, 1), deadline = 55 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.37572038188023693, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 1.672123740978044e-08, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.353726987694193, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7349272108186291, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.2758737913609153, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.9232154108659079, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.8482451931884843e-32, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 53, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 52, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] action: None state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', 'forward', None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'right', None, 'possible'] action: None state2: ['red', None, 'right', None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (8, 2), destination = (3, 4), deadline = 35 RoutePlanner.route_to(): destination = (3, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.15852300324646806, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 2.8756866146702896e-10, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": 1.2078095725996802, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7279320701270084, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.4931116540670124, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7200938659798181, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.8482451931884843e-32, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'forward', 'possible'] action: None state2: ['red', None, None, 'forward', 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 1), deadline = 20 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.26096610227252764, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 2.1352285481377822e-11, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6970638383377121, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 1.4931116540670124, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.7200938659798181, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.1350535792668777e-32, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (6, 3), destination = (3, 6), deadline = 30 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.26096610227252764, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 4.945551159363903e-12, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.6970638383377121, "(['green', None, None, None, 'possible'], 'right')": -0.327365869618381, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.02543086440748231, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8040657061858727, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.234629973129716e-33, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (3, 2), destination = (7, 2), deadline = 20 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.26096610227252764, "(['green', None, None, 'forward', 'possible'], 'left')": 0.19295747457587367, "(['green', None, None, None, 'possible'], None)": 7.034638869147545e-13, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": -0.41540927611248735, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16780160508523762, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8040657061858727, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.9520435628299723e-34, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'forward', None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (6, 1), destination = (8, 5), deadline = 30 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.26096610227252764, "(['green', None, None, 'forward', 'possible'], 'left')": 0.10753765040885054, "(['green', None, None, None, 'possible'], None)": 4.3201475955152356e-13, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": 1.5851814149594639, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.4692302842046852, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16780160508523762, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8040657061858727, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.5212636903446195e-35, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, 'forward', 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (1, 6), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.26096610227252764, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.2426954252658838, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": 1.1878770526543874, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16780160508523762, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8040657061858727, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.646487753187029e-36, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.5955052863073887, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.2426954252658838, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": 1.0120275443340083, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16780160508523762, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 4.77518010874332e-37, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (6, 6), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": 0.09932564535289629, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.0990854846681373, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": 0.09300947221511441, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.16780160508523762, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 9.401107395285077e-38, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: left state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] random action: forward state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, 'left', None, 'possible'] action: None state2: ['red', None, 'left', None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (2, 3), destination = (6, 3), deadline = 20 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09374160809736315, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.043964755938889814, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": -0.08489336944941991, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2548277242644788, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.1774557865763663e-38, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['green', None, 'forward', None, 'possible'] action: None state2: ['green', None, 'forward', None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (3, 4), destination = (2, 1), deadline = 20 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09374160809736315, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.011979979429002318, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.7879446868363984, "(['green', None, None, None, 'possible'], 'right')": -0.08489336944941991, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.8951781578501115, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2548277242644788, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 5.043356599535079e-39, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'forward', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: forward state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 6), deadline = 45 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.09374160809736315, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 0.0012311785269053601, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8515612807854789, "(['green', None, None, None, 'possible'], 'right')": -0.08489336944941991, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.47662471049507793, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2548277242644788, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 2.2377641160456486e-39, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: left state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (2, 6), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2156191256681542, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 4.7719902384174845e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.15288670732179105, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8515612807854789, "(['green', None, None, None, 'possible'], 'right')": -0.29659775103021574, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.47662471049507793, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2548277242644788, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 5.32659401548057e-41, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, 'right', 'possible'] action: None state2: ['red', None, None, 'right', 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'right', None, None, 'possible'] action: None state2: ['green', 'right', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'left')": -0.2156191256681542, "(['green', None, None, 'forward', 'possible'], 'left')": 0.07763619079287562, "(['green', None, None, None, 'possible'], None)": 1.1052738067155119e-05, "(['green', None, None, 'left', 'possible'], None)": 0.0, "(['green', None, 'left', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'right')": -0.2570206951252537, "(['red', 'left', None, None, 'possible'], None)": 0.0, "(['red', None, 'forward', None, 'possible'], None)": 0.0, "(['green', 'right', None, None, 'possible'], None)": 0.0, "(['red', None, None, 'right', 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], 'left')": -0.05672029579250516, "(['red', None, 'right', None, 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'forward')": -0.8515612807854789, "(['green', None, None, None, 'possible'], 'right')": -0.29659775103021574, "(['red', 'right', None, None, 'possible'], None)": 0.0, "(['green', 'left', None, None, 'possible'], 'right')": 1.6284611989432793, "(['red', None, 'forward', None, 'possible'], 'right')": -0.15, "(['green', None, 'right', None, 'possible'], None)": 0.0, "(['green', None, 'forward', None, 'possible'], None)": 0.0, "(['green', None, 'right', None, 'possible'], 'right')": -0.15, "(['red', 'forward', None, None, 'possible'], 'right')": 0.47662471049507793, "(['green', 'forward', None, None, 'possible'], None)": 0.0, "(['green', None, None, None, 'possible'], 'forward')": -0.2548277242644788, "(['red', None, None, 'forward', 'possible'], None)": 0.0, "(['red', None, None, None, 'possible'], 'left')": -0.8628459943301108, "(['green', None, None, 'right', 'possible'], 'forward')": 0.10036732942262783, "(['red', None, None, None, 'possible'], None)": 1.233729439955994e-41, "(['red', None, None, 'left', 'possible'], None)": 0.0, "(['red', 'forward', None, None, 'possible'], 'left')": -0.1859761291337577, "(['red', None, 'left', None, 'possible'], None)": 0.0} self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] random action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 self.state:['red', None, None, None, 'possible'] random action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] action: None state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', None, None, None, 'possible'] random action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['green', None, None, None, 'possible'] action: right state2: ['green', None, None, None, 'possible'] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 self.state:['red', None, None, None, 'possible'] action: None state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['red', 'left', None, None, 'possible'] action: None state2: ['red', 'left', None, None, 'possible'] LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 self.state:['green', 'left', None, None, 'possible'] action: right state2: ['red', None, None, None, 'possible'] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. ================================================ FILE: p4-smartcab/smartcab/trial-data/trial7.js ================================================ self.epsilon = 0.1 self.alpha = 0.3 # Alpha is the learning rate self.gamma = 0.5 # gamma is the value of future reward. Learning doesn't work well with high gamma. self.defaultq = 0.0 SUCCESS: 94/10 :O oh. my. goodness! ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (4, 2), destination = (6, 5), deadline = 25 RoutePlanner.route_to(): destination = (6, 5) q: {} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, -0.15, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, -0.3, 0.69] max_q: 0.69 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, -0.15, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.15, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 1.1864999999999999] max_q: 1.1865 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.6] max_q: 0.6 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 1.1099999999999999] max_q: 1.11 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 1.5205499999999998] max_q: 1.52055 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.6, -0.15, 0.0] max_q: 0.6 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 1.1099999999999999, -0.15, 0.0] max_q: 1.11 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (8, 6), destination = (7, 2), deadline = 25 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'right')": 1.8959099999999998, "(['green', None, None, None, 'forward'], 'forward')": 1.3769999999999998, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 1.5434999999999999, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.3} next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.3769999999999998, -0.15, 0.0] max_q: 1.377 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 1.5434999999999999] max_q: 1.5435 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.7704499999999999, -0.15, 0.0] max_q: 1.77045 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 2.3891501249999996, -0.15, 0.0] max_q: 2.389150125 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (3, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'right')": 1.8959099999999998, "(['green', None, None, None, 'forward'], 'forward')": 2.3891501249999996, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 1.9648364999999999, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 1.9648364999999999] max_q: 1.9648365 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 1.8959099999999998] max_q: 1.89591 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 2.3891501249999996, -0.15, 0.0] max_q: 2.389150125 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 2.6307776062499997, -0.15, 0.0] max_q: 2.63077760625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 0.0, -0.15] max_q: 0.0 count: 2 best: [0, 2] action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (5, 6), destination = (7, 1), deadline = 35 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'right')": 2.2115234999999998, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'forward')": 2.4415443243749997, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.2597720499999996, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.0, 0.0, -0.3, 2.2115234999999998] max_q: 2.2115235 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 2.4415443243749997, -0.15, 0.0] max_q: 2.44154432437 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.15, 0.0, -0.15] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 0.0, -0.15] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 2.2597720499999996] max_q: 2.25977205 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 2.7078257287499996] max_q: 2.70782572875 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.15, 0.0, -0.15] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 2.5880142943124995] max_q: 2.58801429431 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.006778252137187] max_q: 3.00677825214 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 2.8626267438393276] max_q: 2.86262674384 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.0772029478350205] max_q: 3.07720294784 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.155761514316609] max_q: 3.15576151432 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.215622505659767] max_q: 3.21562250566 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.343295347037204] max_q: 3.34329534704 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.4326663360014105] max_q: 3.432666336 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.2823972871691174] max_q: 3.28239728717 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 2.6753126757187498, -0.15, 0.42720473230828115] max_q: 2.67531267572 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.4952260282763548] max_q: 3.49522602828 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.5599525205824234] max_q: 3.55995252058 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, -0.3, 3.421962005259835] max_q: 3.42196200526 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (2, 2), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5801456787699374, "(['green', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'right')": 3.539267350056143, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'forward')": 2.874015774360937, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.6259596424950598, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 0.6, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523} next_waypoint: left q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, 0.0, -0.3, -0.15] max_q: 0.0 count: 2 best: [0, 1] action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 0.6, -0.15] max_q: 0.6 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 2.874015774360937, -0.15, 0.5801456787699374] max_q: 2.87401577436 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.45643701123101943, 3.0429134082067963, -0.15, 0.5801456787699374] max_q: 3.04291340821 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 3), deadline = 35 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5801456787699374, "(['green', None, None, None, 'forward'], None)": 0.45643701123101943, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.7300393857447576, "(['green', None, None, None, 'right'], 'right')": 3.6259596424950598, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 1.02, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'right')": 3.539267350056143, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: forward q: [0.45643701123101943, 2.7300393857447576, -0.15, 0.5801456787699374] max_q: 2.73003938574 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.45643701123101943, 2.51102757002133, -0.15, 0.5801456787699374] max_q: 2.51102757002 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.45643701123101943, 2.7343734345181305, -0.15, 0.5801456787699374] max_q: 2.73437343452 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.45643701123101943, 2.924217419340411, -0.15, 0.5801456787699374] max_q: 2.92421741934 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.6259596424950598] max_q: 3.6259596425 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.539267350056143] max_q: 3.53926735006 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.45643701123101943, 2.646952193538288, -0.15, 0.25610197513895616] max_q: 2.64695219354 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.608377247547721] max_q: 3.60837724755 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.6874358881832338, 2.4528665354768013, -0.15, 0.25610197513895616] max_q: 2.45286653548 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (3, 1), destination = (5, 5), deadline = 30 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.6874358881832338, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4528665354768013, "(['green', None, None, None, 'right'], 'right')": 3.6690618522549627, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 1.02, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.667120660415563, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: left q: [0.0, -0.15, 1.02, -0.102] max_q: 1.02 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.6874358881832338, 2.4528665354768013, -0.15, 0.25610197513895616] max_q: 2.45286653548 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.667120660415563] max_q: 3.66712066042 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.3170065748337607, -0.15, 0.25610197513895616] max_q: 2.31700657483 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.6874358881832338, 2.221904602383632, -0.15, 0.25610197513895616] max_q: 2.22190460238 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.6874358881832338, 2.1553332216685424, -0.15, 0.25610197513895616] max_q: 2.15533322167 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (4, 1), destination = (7, 6), deadline = 40 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.6874358881832338, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.1553332216685424, "(['green', None, None, None, 'right'], 'right')": 3.6690618522549627, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 1.314, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.717343740129138, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, -0.3, 3.717343740129138] max_q: 3.71734374013 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.6690618522549627] max_q: 3.66906185225 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.1553332216685424, -0.15, 0.25610197513895616] max_q: 2.15533322167 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.1087332551679796, -0.15, 0.25610197513895616] max_q: 2.10873325517 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (3, 5), destination = (6, 6), deadline = 20 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.6874358881832338, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.1087332551679796, "(['green', None, None, None, 'right'], 'right')": 3.718702574416718, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 1.314, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.752499895928641, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 1.314, -0.102] max_q: 1.314 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.1087332551679796, -0.15, 0.25610197513895616] max_q: 2.10873325517 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.0761132786175858, -0.15, 0.25610197513895616] max_q: 2.07611327862 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.718702574416718] max_q: 3.71870257442 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (1, 6), destination = (2, 1), deadline = 30 RoutePlanner.route_to(): destination = (2, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.6874358881832338, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.05327929503231, "(['green', None, None, None, 'right'], 'right')": 3.718702574416718, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 1.7168999999999999, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.752499895928641, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, -0.3, 3.752499895928641] max_q: 3.75249989593 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.718702574416718] max_q: 3.71870257442 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 1.7168999999999999, -0.102] max_q: 1.7169 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.6874358881832338, 2.05327929503231, -0.15, 0.25610197513895616] max_q: 2.05327929503 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.3452874007774636, -0.15, 0.25610197513895616] max_q: 2.34528740078 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5934942906608436, -0.15, 0.25610197513895616] max_q: 2.59349429066 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (2, 6), destination = (7, 1), deadline = 50 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5934942906608436, "(['green', None, None, None, 'right'], 'right')": 3.7707750990885858, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.0593649999999997, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.7845553133125565, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, -0.3, 3.7845553133125565] max_q: 3.78455531331 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5934942906608436, -0.15, 0.25610197513895616] max_q: 2.59349429066 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 2.0593649999999997, -0.102] max_q: 2.059365 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.4154460034625904, -0.15, 0.25610197513895616] max_q: 2.41544600346 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.290812202423813, -0.15, 0.25610197513895616] max_q: 2.29081220242 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.15, 2.35046025, -0.102] max_q: 2.35046025 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.547190372060241, -0.15, 0.25610197513895616] max_q: 2.54719037206 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7651118162512045, -0.15, 0.25610197513895616] max_q: 2.76511181625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.107793287241495, -0.15, 0.25610197513895616] max_q: 3.10779328724 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (6, 2), destination = (6, 6), deadline = 20 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.107793287241495, "(['green', None, None, None, 'right'], 'right')": 3.8051588342252978, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.2453221749999996, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8148049841820773, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left random action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 2.2453221749999996, -0.102] max_q: 2.245322175 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.8329982318448831, 3.107793287241495, -0.15, 0.25610197513895616] max_q: 3.10779328724 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.2416242941552706, -0.15, 0.25610197513895616] max_q: 3.24162429416 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.3553806500319796, -0.15, 0.25610197513895616] max_q: 3.35538065003 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (8, 5), destination = (1, 1), deadline = 55 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.3553806500319796, "(['green', None, None, None, 'right'], 'right')": 3.8051588342252978, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.1717255224999996, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8148049841820773, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.8051588342252978] max_q: 3.80515883423 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.834385009091503] max_q: 3.83438500909 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.3553806500319796, -0.15, 0.25610197513895616] max_q: 3.35538065003 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 52, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.4520735525271826, -0.15, 0.25610197513895616] max_q: 3.45207355253 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 51, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0164514867690277, -0.15, 0.25610197513895616] max_q: 3.01645148677 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.7115160407383194, -0.15, 0.25610197513895616] max_q: 2.71151604074 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9047886346275713, -0.15, 0.25610197513895616] max_q: 2.90478863463 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.6333520442392997, -0.15, 0.25610197513895616] max_q: 2.63335204424 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.856290253991363] max_q: 3.85629025399 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.8383492376034045, -0.15, 0.25610197513895616] max_q: 2.8383492376 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0125968519628934, -0.15, 0.25610197513895616] max_q: 3.01259685196 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.708817796374025, -0.15, 0.25610197513895616] max_q: 2.70881779637 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4961724574618174, -0.15, 0.25610197513895616] max_q: 2.49617245746 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4961724574618174, "(['green', None, None, None, 'right'], 'right')": 3.8716239254212654, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.1717255224999996, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8148049841820773, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.8148049841820773] max_q: 3.81480498418 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4961724574618174, -0.15, 0.25610197513895616] max_q: 2.49617245746 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.347320720223272, -0.15, 0.25610197513895616] max_q: 2.34732072022 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5952226121897812, -0.15, 0.25610197513895616] max_q: 2.59522261219 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.8059392203613136, -0.15, 0.25610197513895616] max_q: 2.80593922036 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 2.1717255224999996, -0.102] max_q: 2.1717255225 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (1, 5), destination = (6, 5), deadline = 25 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5641574542529195, "(['green', None, None, None, 'right'], 'right')": 3.8716239254212654, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.1717255224999996, "(['red', None, None, None, 'forward'], 'right')": -0.255, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8425842365547656, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.0, -0.15, 2.1717255224999996, -0.102] max_q: 2.1717255225 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.5641574542529195, -0.15, 0.25610197513895616] max_q: 2.56415745425 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.3949102179770434, -0.15, 0.25610197513895616] max_q: 2.39491021798 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6356736852804867, -0.15, 0.25610197513895616] max_q: 2.63567368528 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.15, 2.1202078657499994, -0.102] max_q: 2.12020786575 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -1.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.8716239254212654] max_q: 3.87162392542 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.8425842365547656] max_q: 3.84258423655 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.0, 0.0, -0.3, 3.289808965588336] max_q: 3.28980896559 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.396337620750085] max_q: 3.39633762075 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.0841455060249996, -0.102] max_q: 2.08414550602 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (8, 2), destination = (8, 6), deadline = 20 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 2.4449715796963405, "(['green', None, None, None, 'right'], 'right')": 3.8908803366080753, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.0841455060249996, "(['red', None, None, None, 'forward'], 'right')": -0.3285, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.561068385016271, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, -0.3, 3.561068385016271] max_q: 3.56106838502 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4449715796963405, -0.15, 0.25610197513895616] max_q: 2.4449715797 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.678225842741889, -0.15, 0.25610197513895616] max_q: 2.67822584274 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.8764919663306054, -0.15, 0.25610197513895616] max_q: 2.87649196633 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.613544376431424, -0.15, 0.25610197513895616] max_q: 2.61354437643 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4294810635019966, -0.15, 0.25610197513895616] max_q: 2.4294810635 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6650589039766968, -0.15, 0.25610197513895616] max_q: 2.66505890398 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.8653000683801917, -0.15, 0.25610197513895616] max_q: 2.86530006838 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.62690812726383] max_q: 3.62690812726 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, -0.3, 3.6828719081742554] max_q: 3.68287190817 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.7616423862131896] max_q: 3.76164238621 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (2, 2), destination = (1, 5), deadline = 20 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.035505058123163, "(['green', None, None, None, 'right'], 'right')": 3.8908803366080753, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.0841455060249996, "(['red', None, None, None, 'forward'], 'right')": -0.3285, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.816781720840444, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.8908803366080753] max_q: 3.89088033661 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 3.816781720840444] max_q: 3.81678172084 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.0841455060249996, -0.102] max_q: 2.08414550602 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.035505058123163, -0.15, 0.25610197513895616] max_q: 3.03550505812 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (5, 1), destination = (4, 4), deadline = 20 RoutePlanner.route_to(): destination = (4, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.035505058123163, "(['green', None, None, None, 'right'], 'right')": 3.8961334937517194, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.083295128103062, "(['red', None, None, None, 'forward'], 'right')": -0.3285, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8561672286510684, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.8961334937517194] max_q: 3.89613349375 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.083295128103062, -0.102] max_q: 2.0832951281 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.035505058123163, -0.15, 0.25610197513895616] max_q: 3.03550505812 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.1801792994046885, -0.15, 0.25610197513895616] max_q: 3.1801792994 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (4, 1), destination = (8, 3), deadline = 30 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.1801792994046885, "(['green', None, None, None, 'right'], 'right')": 3.9057185299238637, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.0583065896721435, "(['red', None, None, None, 'forward'], 'right')": -0.3285, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8561672286510684, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.3285] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.0583065896721435, -0.102] max_q: 2.05830658967 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.1801792994046885, -0.15, 0.25610197513895616] max_q: 3.1801792994 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.303152404493985, -0.15, 0.25610197513895616] max_q: 3.30315240449 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.407679543819887, -0.15, 0.25610197513895616] max_q: 3.40767954382 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9057185299238637] max_q: 3.90571852992 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (5, 1), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.4965276122469033, "(['green', None, None, None, 'right'], 'right')": 3.9057185299238637, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.349560601221322, "(['red', None, None, None, 'forward'], 'right')": 0.09707689491070326, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8561672286510684, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, -0.3, 3.8561672286510684] max_q: 3.85616722865 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9057185299238637] max_q: 3.90571852992 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.4965276122469033, -0.15, 0.25610197513895616] max_q: 3.49652761225 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, 0.09707689491070326] max_q: 0.0970768949107 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.349560601221322, -0.102] max_q: 2.34956060122 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (4, 3), destination = (6, 6), deadline = 25 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.0621308628094375, "(['green', None, None, None, 'right'], 'right')": 3.919860750435284, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.349560601221322, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.885174839544327, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.919860750435284] max_q: 3.91986075044 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9318816378699912] max_q: 3.93188163787 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0621308628094375, -0.15, 0.25610197513895616] max_q: 3.06213086281 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9420993921894922] max_q: 3.94209939219 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.743491603966606, -0.15, 0.25610197513895616] max_q: 2.74349160397 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9319678633716153, -0.15, 0.25610197513895616] max_q: 2.93196786337 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.092172683865873, -0.15, 0.25610197513895616] max_q: 3.09217268387 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 1), deadline = 20 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.092172683865873, "(['green', None, None, None, 'right'], 'right')": 3.9422458004642933, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.349560601221322, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.885174839544327, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.349560601221322, -0.102] max_q: 2.34956060122 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.092172683865873, -0.15, 0.25610197513895616] max_q: 3.09217268387 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.2283467812859916, -0.15, 0.25610197513895616] max_q: 3.22834678129 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.885174839544327] max_q: 3.88517483954 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (1, 6), destination = (6, 5), deadline = 30 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.344094764093093, "(['green', None, None, None, 'right'], 'right')": 3.9422458004642933, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.2446924208549253, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.885174839544327, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.2446924208549253, -0.102] max_q: 2.24469242085 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.8329982318448831, 3.344094764093093, -0.15, 0.25610197513895616] max_q: 3.34409476409 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.4424805494791286, -0.15, 0.25610197513895616] max_q: 3.44248054948 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.00973638463539, -0.15, 0.25610197513895616] max_q: 3.00973638464 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.1582759269400817, -0.15, 0.25610197513895616] max_q: 3.15827592694 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.1712846945984476, -0.102] max_q: 2.1712846946 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.284534537899069, "(['green', None, None, None, 'right'], 'right')": 3.9422458004642933, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.1712846945984476, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.885174839544327, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.1712846945984476, -0.102] max_q: 2.1712846946 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.284534537899069, -0.15, 0.25610197513895616] max_q: 3.2845345379 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.8991741765293484, -0.15, 0.25610197513895616] max_q: 2.89917417653 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.885174839544327] max_q: 3.88517483954 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.064298050049946, -0.15, 0.25610197513895616] max_q: 3.06429805005 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (8, 1), destination = (8, 6), deadline = 25 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.064298050049946, "(['green', None, None, None, 'right'], 'right')": 3.9422458004642933, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.4455919904086807, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.910959257750673, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9422458004642933] max_q: 3.94224580046 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.064298050049946, -0.15, 0.25610197513895616] max_q: 3.06429805005 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.204653342542454, -0.15, 0.25610197513895616] max_q: 3.20465334254 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.323955341161086, -0.15, 0.25610197513895616] max_q: 3.32395534116 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.92676873881276, -0.15, 0.25610197513895616] max_q: 2.92676873881 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (4, 2), destination = (7, 4), deadline = 25 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 2.92676873881276, "(['green', None, None, None, 'right'], 'right')": 3.9509089303946494, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.4455919904086807, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.910959257750673, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.92676873881276, -0.15, 0.25610197513895616] max_q: 2.92676873881 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.0877534279908456, -0.15, 0.25610197513895616] max_q: 3.08775342799 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.2245904137922183, -0.15, 0.25610197513895616] max_q: 3.22459041379 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.9509089303946494] max_q: 3.95090893039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (5, 4), destination = (3, 2), deadline = 20 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 3.3409018517233853, "(['green', None, None, None, 'right'], 'right')": 3.3656362512762543, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.4455919904086807, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.910959257750673, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.4455919904086807, -0.102] max_q: 2.44559199041 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.06748463932590222] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.3409018517233853, -0.15, 0.25610197513895616] max_q: 3.34090185172 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.3656362512762543] max_q: 3.36563625128 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9386312962063696, -0.15, 0.25610197513895616] max_q: 2.93863129621 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (3, 5), destination = (7, 1), deadline = 40 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, None, None, 'forward'], 'forward')": 2.9386312962063696, "(['green', None, None, None, 'right'], 'right')": 3.5425892645559784, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.3119143932860764, "(['red', None, None, None, 'forward'], 'right')": -0.06748463932590222, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.910959257750673, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.36329430078897523, 3.5425892645559784] max_q: 3.54258926456 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.910959257750673] max_q: 3.91095925775 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9386312962063696, -0.15, 0.25610197513895616] max_q: 2.93863129621 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.097836601775414, -0.15, 0.25610197513895616] max_q: 3.09783660178 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.3119143932860764, -0.102] max_q: 2.31191439329 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.5499684560777678, 0.0, 0.36329430078897523, 3.6664563738517852] max_q: 3.66645637385 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.8876399365032386] max_q: 3.8876399365 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.9044939460277526] max_q: 3.90449394603 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.895595580045187] max_q: 3.89559558005 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.911256243038409] max_q: 3.91125624304 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.565127234293165, -0.102] max_q: 2.56512723429 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.7684856212427897, -0.15, 0.25610197513895616] max_q: 2.76848562124 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.953212778056371, -0.15, 0.25610197513895616] max_q: 2.95321277806 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (8, 2), destination = (3, 5), deadline = 40 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.953212778056371, "(['green', None, None, None, 'right'], 'right')": 3.7496654521717354, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.395589064005215, "(['red', None, None, None, 'forward'], 'right')": -0.19723924752813154, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.9245678065826475, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.5499684560777678, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.395589064005215, -0.102] max_q: 2.39558906401 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.953212778056371, -0.15, 0.25610197513895616] max_q: 2.95321277806 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.1102308613479153, -0.15, 0.25610197513895616] max_q: 3.11023086135 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.19723924752813154] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.2769123448036503, -0.102] max_q: 2.2769123448 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.12850676717183898] max_q: 0.128506767172 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.5353754930831025, -0.102] max_q: 2.53537549308 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.5499684560777678, 0.4124498178257603, 0.36329430078897523, 3.7496654521717354] max_q: 3.74966545217 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.9245678065826475] max_q: 3.92456780658 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (6, 1), destination = (1, 6), deadline = 50 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.7771616029435404, "(['green', None, None, None, 'right'], 'right')": 3.8134509875076117, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.755069169120637, "(['red', None, None, None, 'forward'], 'right')": 0.35652897746181833, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.9245678065826475, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.5499684560777678, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: forward q: [0.0, -0.51, -0.657, 0.35652897746181833] max_q: 0.356528977462 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.755069169120637, -0.102] max_q: 2.75506916912 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7771616029435404, -0.15, 0.25610197513895616] max_q: 2.77716160294 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.960587362502009, -0.15, 0.25610197513895616] max_q: 2.9605873625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.5161445246648039] max_q: 0.516144524665 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.552941692270008, -0.102] max_q: 2.55294169227 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.7700004384295065, -0.102] max_q: 2.77000043843 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (4, 2), destination = (1, 3), deadline = 20 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.749832832451127, "(['green', None, None, None, 'right'], 'right')": 3.8134509875076117, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.7700004384295065, "(['red', None, None, None, 'forward'], 'right')": 0.6237760921330318, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.9245678065826475, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.33371958408380337, "(['green', None, None, None, 'right'], None)": 0.5499684560777678, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.33371958408380337, 3.9245678065826475] max_q: 3.92456780658 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.6237760921330318] max_q: 0.623776092133 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.7700004384295065, -0.102] max_q: 2.77000043843 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.749832832451127, -0.15, 0.25610197513895616] max_q: 2.74983283245 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.9545003726650805, -0.102] max_q: 2.95450037267 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.38020967831307695] max_q: 0.380209678313 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.17317822656611537] max_q: 0.173178226566 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.6681502608655565, -0.102] max_q: 2.66815026087 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.3585119237656933] max_q: 0.358511923766 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.4677051826058896, -0.102] max_q: 2.46770518261 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5819144344627505, -0.15, 0.25610197513895616] max_q: 2.58191443446 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7946272692933376, -0.15, 0.25610197513895616] max_q: 2.79462726929 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.4882455118053979] max_q: 0.488245511805 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (7, 5), destination = (6, 2), deadline = 20 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6294759152761458, "(['green', None, None, None, 'right'], 'right')": 3.8134509875076117, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.3273936278241227, "(['red', None, None, None, 'forward'], 'right')": 0.2650086850345882, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.15, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.93588263559525, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.3273936278241227, -0.102] max_q: 2.32739362782 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.93588263559525] max_q: 3.9358826356 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.2650086850345882] max_q: 0.265008685035 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8134509875076117] max_q: 3.81345098751 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.9455002402559627] max_q: 3.94550024026 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8612407272937226] max_q: 3.86124072729 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6294759152761458, -0.15, 0.25610197513895616] max_q: 2.62947591528 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.941036277273232] max_q: 3.94103627727 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.3587253940912625] max_q: 3.35872539409 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (8, 4), destination = (5, 2), deadline = 25 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.835054527984724, "(['green', None, None, None, 'right'], 'right')": 3.882054618199664, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.229175539476886, "(['red', None, None, None, 'forward'], 'right')": 0.07525738227939995, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.3587253940912625, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.229175539476886, -0.102] max_q: 2.22917553948 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.835054527984724, -0.24371139265809, 0.25610197513895616] max_q: 2.83505452798 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.07525738227939995] max_q: 0.0752573822794 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.494799208555353, -0.102] max_q: 2.49479920856 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.3587253940912625] max_q: 3.35872539409 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (6, 6), destination = (2, 6), deadline = 20 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5958267769312164, "(['green', None, None, None, 'right'], 'right')": 3.882054618199664, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.346359445988747, "(['red', None, None, None, 'forward'], 'right')": 0.2920541841352624, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.3587253940912625, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.346359445988747, -0.102] max_q: 2.34635944599 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5958267769312164, -0.24371139265809, 0.25610197513895616] max_q: 2.59582677693 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.2920541841352624] max_q: 0.292054184135 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.5944055290904346, -0.102] max_q: 2.59440552909 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, 0.09824605651497305] max_q: 0.098246056515 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.8052446997268694, -0.102] max_q: 2.80524469973 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.3] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.9844579947678387, -0.102] max_q: 2.98445799477 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.2879052702813022] max_q: 0.287905270281 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.3587253940912625] max_q: 3.35872539409 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.882054618199664] max_q: 3.8820546182 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.5334159685938333] max_q: 3.53341596859 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.4608868714721406, -0.24371139265809, 0.25610197513895616] max_q: 2.46088687147 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (1, 3), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4608868714721406, "(['green', None, None, None, 'right'], 'right')": 3.84745062802884, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.689120596337487, "(['red', None, None, None, 'forward'], 'right')": 0.42066671991773263, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.650508772220009, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.84745062802884] max_q: 3.84745062803 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.42066671991773263] max_q: 0.420666719918 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.689120596337487, -0.102] max_q: 2.68912059634 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.5135997346632339] max_q: 0.513599734663 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.482384417436241, -0.102] max_q: 2.48238441744 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.7100267548208046, -0.102] max_q: 2.71002675482 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.4608868714721406, -0.24371139265809, 0.25610197513895616] max_q: 2.46088687147 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6917538407513195, -0.24371139265809, 0.25610197513895616] max_q: 2.69175384075 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.2865597744637488] max_q: 0.286559774464 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.840791755453189] max_q: 3.84079175545 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.650508772220009] max_q: 3.65050877222 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.836130544650233] max_q: 3.83613054465 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.4837904568204173] max_q: 0.48379045682 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.844907739592894] max_q: 3.84490773959 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.86817157865396] max_q: 3.86817157865 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.7307757222515416] max_q: 3.73077572225 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.887990764638621, -0.24371139265809, 0.25610197513895616] max_q: 2.88799076464 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.887990764638621, "(['green', None, None, None, 'right'], 'right')": 3.867336463395503, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.497018728374563, "(['red', None, None, None, 'forward'], 'right')": 0.2612218882973547, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.7916434750854044, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.497018728374563, -0.102] max_q: 2.49701872837 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.887990764638621, -0.24371139265809, 0.25610197513895616] max_q: 2.88799076464 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.054792149942828, -0.24371139265809, 0.25610197513895616] max_q: 3.05479214994 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.7224659191183784, -0.102] max_q: 2.72246591912 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.2612218882973547] max_q: 0.261221888297 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.867336463395503] max_q: 3.8673364634 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.7916434750854044] max_q: 3.79164347509 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.8355327394057324] max_q: 3.83553273941 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.4494859900388356] max_q: 0.449485990039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.866255224429962] max_q: 3.86625522443 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.8877609639469224] max_q: 3.88776096395 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (7, 1), destination = (3, 4), deadline = 35 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.777537788204582, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8758820456396625, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.505726143382865, "(['red', None, None, None, 'forward'], 'right')": 0.5812708612578722, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8877609639469224, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8758820456396625] max_q: 3.87588204564 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.894499738793713] max_q: 3.89449973879 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.5812708612578722] max_q: 0.581270861258 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.777537788204582, -0.24371139265809, 0.25610197513895616] max_q: 2.7775377882 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.25688960288051055] max_q: 0.256889602881 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.729867221875435, -0.102] max_q: 2.72986722188 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.909313961747637] max_q: 3.90931396175 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9609071199738946, -0.24371139265809, 0.25610197513895616] max_q: 2.96090711997 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (4, 5), destination = (1, 4), deadline = 20 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.9609071199738946, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9229168674854913, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.920387138594119, "(['red', None, None, None, 'forward'], 'right')": 0.06835616244843397, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8877609639469224, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9229168674854913] max_q: 3.92291686749 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.934479337362667] max_q: 3.93447933736 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9609071199738946, -0.24371139265809, 0.25610197513895616] max_q: 2.96090711997 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, 0.06835616244843397] max_q: 0.0683561624484 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.944307436758267] max_q: 3.94430743676 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (3, 1), destination = (8, 1), deadline = 25 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.1167710519778105, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.944307436758267, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.6442709970158833, "(['red', None, None, None, 'forward'], 'right')": -0.09189726191883113, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8877609639469224, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.944307436758267] max_q: 3.94430743676 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.1167710519778105, -0.24371139265809, 0.25610197513895616] max_q: 3.11677105198 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.2492553941811386, -0.24371139265809, 0.25610197513895616] max_q: 3.24925539418 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.6442709970158833, -0.102] max_q: 2.64427099702 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.874478775926797, -0.24371139265809, 0.25610197513895616] max_q: 2.87447877593 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.450989697911118, -0.102] max_q: 2.45098969791 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (6, 5), destination = (1, 6), deadline = 30 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.0433069595377766, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.952661321244527, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.450989697911118, "(['red', None, None, None, 'forward'], 'right')": -0.09189726191883113, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.8877609639469224, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.0, 0.5239861041979499, 3.8877609639469224] max_q: 3.88776096395 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0433069595377766, -0.24371139265809, 0.25610197513895616] max_q: 3.04330695954 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.51122041017351, -0.24371139265809, 0.25610197513895616] max_q: 2.51122041017 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7345373486474833, -0.24371139265809, 0.25610197513895616] max_q: 2.73453734865 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.450989697911118, -0.102] max_q: 2.45098969791 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 6), deadline = 45 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.514176144053238, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.952661321244527, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.450989697911118, "(['red', None, None, None, 'forward'], 'right')": -0.09189726191883113, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.914331872949525, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.31262182590374993, -0.15, 2.450989697911118, -0.102] max_q: 2.45098969791 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.514176144053238, -0.24371139265809, 0.25610197513895616] max_q: 2.51417614405 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.952661321244527] max_q: 3.95266132124 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.3599233008372664, -0.24371139265809, 0.25610197513895616] max_q: 2.35992330084 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.09189726191883113] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.6833412432244503, -0.102] max_q: 2.68334124322 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.6059348057116765, -0.24371139265809, 0.25610197513895616] max_q: 2.60593480571 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9540127058135974] max_q: 3.95401270581 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4241543639981735, -0.24371139265809, 0.25610197513895616] max_q: 2.424154364 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6605312093984477, -0.24371139265809, 0.25610197513895616] max_q: 2.6605312094 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (1, 5), destination = (1, 1), deadline = 20 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6605312093984477, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9549586750119468, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.914331872949525, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.914331872949525] max_q: 3.91433187295 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.15, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6605312093984477, -0.24371139265809, 0.25610197513895616] max_q: 2.6605312094 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.86145152798868, -0.24371139265809, 0.25610197513895616] max_q: 2.86145152799 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.657, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.0322337987903776, -0.24371139265809, 0.25610197513895616] max_q: 3.03223379879 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.722563659153264, -0.24371139265809, 0.25610197513895616] max_q: 2.72256365915 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9141791102802745, -0.24371139265809, 0.25610197513895616] max_q: 2.91417911028 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0770522437382333, -0.24371139265809, 0.25610197513895616] max_q: 3.07705224374 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9549586750119468] max_q: 3.95495867501 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (8, 1), destination = (8, 6), deadline = 25 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.753936570616763, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.869475919168063, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.3400323110646672, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.869475919168063] max_q: 3.86947591917 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.753936570616763, -0.24371139265809, 0.25610197513895616] max_q: 2.75393657062 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.527755599431734, -0.24371139265809, 0.25610197513895616] max_q: 2.52775559943 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.7599, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8319300000000001, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.3694289196022136, -0.24371139265809, 0.25610197513895616] max_q: 2.3694289196 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8319300000000001, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.2586002437215495, -0.24371139265809, 0.25610197513895616] max_q: 2.25860024372 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.1810201706050845, -0.24371139265809, 0.25610197513895616] max_q: 2.18102017061 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8319300000000001, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.126714119423559, -0.24371139265809, 0.25610197513895616] max_q: 2.12671411942 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.407707001510025, -0.24371139265809, 0.25610197513895616] max_q: 2.40770700151 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.3400323110646672] max_q: 3.34003231106 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.646550951283521, -0.24371139265809, 0.25610197513895616] max_q: 2.64655095128 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4525856658984644, -0.24371139265809, 0.25610197513895616] max_q: 2.4525856659 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6846978160136947, -0.24371139265809, 0.25610197513895616] max_q: 2.68469781601 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.479288471209586, -0.24371139265809, 0.25610197513895616] max_q: 2.47928847121 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (2, 6), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.479288471209586, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.889054531292853, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.521380797439195, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.479288471209586, -0.24371139265809, 0.25610197513895616] max_q: 2.47928847121 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.33550192984671, -0.24371139265809, 0.25610197513895616] max_q: 2.33550192985 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.234851350892697, -0.24371139265809, 0.25610197513895616] max_q: 2.23485135089 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.4996236482587926, -0.24371139265809, 0.25610197513895616] max_q: 2.49962364826 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (6, 1), destination = (3, 2), deadline = 20 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4996236482587926, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.889054531292853, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.521380797439195, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.889054531292853] max_q: 3.88905453129 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.521380797439195] max_q: 3.52138079744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.4996236482587926, -0.24371139265809, 0.25610197513895616] max_q: 2.49962364826 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7246801010199735, -0.24371139265809, 0.25610197513895616] max_q: 2.72468010102 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (8, 1), destination = (3, 2), deadline = 30 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.7246801010199735, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.322338171904997, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.563317283993186, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 0.9524340901831982, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.0, 0.0, 0.9524340901831982, 0.0] max_q: 0.952434090183 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.7246801010199735, -0.24371139265809, 0.25610197513895616] max_q: 2.72468010102 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.5072760707139814, -0.24371139265809, 0.25610197513895616] max_q: 2.50727607071 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.3550932494997867, -0.24371139265809, 0.25610197513895616] max_q: 2.3550932495 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.6018292620748187, -0.24371139265809, 0.25610197513895616] max_q: 2.60182926207 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.478338870257115, -0.102] max_q: 2.47833887026 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (6, 1), destination = (3, 5), deadline = 35 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.421280483452373, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.322338171904997, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.478338870257115, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": -0.24371139265809, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.563317283993186, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.478338870257115, -0.102] max_q: 2.47833887026 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.563317283993186] max_q: 3.56331728399 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.421280483452373, 0.042594097657192964, 0.25610197513895616] max_q: 2.42128048345 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.706588039718548, -0.102] max_q: 2.70658803972 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.658088410934517, 0.042594097657192964, 0.25610197513895616] max_q: 2.65808841093 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4606618876541617, 0.042594097657192964, 0.25610197513895616] max_q: 2.46066188765 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (7, 5), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4606618876541617, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.322338171904997, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.900599833760766, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.59267282458098, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.59267282458098] max_q: 3.59267282458 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.322338171904997] max_q: 3.3223381719 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4606618876541617, 0.042594097657192964, 0.25610197513895616] max_q: 2.46066188765 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.322463321357913, 0.042594097657192964, 0.25610197513895616] max_q: 2.32246332136 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.225724324950539, 0.042594097657192964, 0.25610197513895616] max_q: 2.22572432495 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (3, 6), destination = (5, 2), deadline = 30 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.225724324950539, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.900599833760766, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.613221702992435, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right q: [0.0, 0.2871497809424287, 0.5239861041979499, 3.613221702992435] max_q: 3.61322170299 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.225724324950539, 0.042594097657192964, 0.25610197513895616] max_q: 2.22572432495 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 2.900599833760766, -0.102] max_q: 2.90059983376 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.491865676207958, 0.042594097657192964, 0.25610197513895616] max_q: 2.49186567621 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.376153508423479, 0.042594097657192964, 0.25610197513895616] max_q: 2.37615350842 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.619730482159957, 0.042594097657192964, 0.25610197513895616] max_q: 2.61973048216 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 5), deadline = 35 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.619730482159957, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.065509858696651, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.649398188462059, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5239861041979499, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.2871497809424287, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: right random action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, 0.44841457492900894, 0.6142000012078738, 3.649398188462059] max_q: 3.64939818846 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.619730482159957, 0.042594097657192964, 0.25610197513895616] max_q: 2.61973048216 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.43381133751197, 0.042594097657192964, 0.25610197513895616] max_q: 2.43381133751 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.065509858696651, -0.102] max_q: 3.0655098587 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (5, 6), destination = (8, 3), deadline = 30 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6687396368851743, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.065509858696651, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.2192860779503336, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856} next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.657, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.065509858696651, -0.102] max_q: 3.0655098587 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.6687396368851743, 0.042594097657192964, 0.25610197513895616] max_q: 2.66873963689 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.2056833798921534, -0.102] max_q: 3.20568337989 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0381643876495383, 0.042594097657192964, 0.25610197513895616] max_q: 3.03816438765 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.726715071354677, 0.042594097657192964, 0.25610197513895616] max_q: 2.72671507135 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (2, 1), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.726715071354677, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.3248308729083305, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.2192860779503336, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.31262182590374993, -0.15, 3.3248308729083305, -0.102] max_q: 3.32483087291 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.726715071354677, 0.042594097657192964, 0.25610197513895616] max_q: 2.72671507135 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.917707810651475, 0.042594097657192964, 0.25610197513895616] max_q: 2.91770781065 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4496768272192226, 0.042594097657192964, 0.25610197513895616] max_q: 2.44967682722 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.682225303136339, 0.042594097657192964, 0.25610197513895616] max_q: 2.68222530314 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.44841457492900894, 0.6142000012078738, 3.2192860779503336] max_q: 3.21928607795 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (6, 2), destination = (1, 6), deadline = 45 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.016574240441531, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4775577121954373, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.4261062419720805, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['red', None, None, None, 'right'], 'right')": 3.2192860779503336, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right random action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.2192860779503336] max_q: 3.21928607795 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4775577121954373, 0.042594097657192964, 0.25610197513895616] max_q: 2.4775577122 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.705924055366122, 0.042594097657192964, 0.25610197513895616] max_q: 2.70592405537 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.4261062419720805, -0.102] max_q: 3.42610624197 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.8823509999999999, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.016574240441531, 0.0, -0.15] max_q: 1.01657424044 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.9000354470612035, 0.042594097657192964, 0.25610197513895616] max_q: 2.90003544706 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.0650301300020226, 0.042594097657192964, 0.25610197513895616] max_q: 3.06503013 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (6, 4), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.3116019683090716, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.0650301300020226, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.4676199757823634, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.512190305676268, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.3363931662577833, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.0650301300020226, 0.042594097657192964, 0.25610197513895616] max_q: 3.06503013 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.205275610501719, 0.042594097657192964, 0.25610197513895616] max_q: 3.2052756105 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.4676199757823634] max_q: 3.46761997578 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.3244842689264607, 0.042594097657192964, 0.25610197513895616] max_q: 3.32448426893 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.6, -0.15, 0.0] max_q: 0.6 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (1, 5), destination = (5, 6), deadline = 25 RoutePlanner.route_to(): destination = (5, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.3116019683090716, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.9271389882485224, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.527792957986322, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.512190305676268, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.3363931662577833, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.3363931662577833] max_q: 3.33639316626 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9271389882485224, 0.042594097657192964, 0.25610197513895616] max_q: 2.92713898825 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.6489972917739655, 0.042594097657192964, 0.25610197513895616] max_q: 2.64899729177 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 1.3116019683090716, 0.0, -0.15] max_q: 1.31160196831 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.527792957986322] max_q: 3.52779295799 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (2, 5), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6510383994881366, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.527792957986322, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.512190305676268, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.464644160078396, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.464644160078396] max_q: 3.46464416008 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.5449475360666365] max_q: 3.54494753607 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.6510383994881366, 0.042594097657192964, 0.25610197513895616] max_q: 2.65103839949 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (6, 3), destination = (1, 2), deadline = 30 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4557268796416953, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.527792957986322, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.512190305676268, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.6132054056566405, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.31262182590374993, -0.15, 3.512190305676268, -0.102] max_q: 3.51219030568 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.4557268796416953, 0.042594097657192964, 0.25610197513895616] max_q: 2.45572687964 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.3190088157491866, 0.042594097657192964, 0.25610197513895616] max_q: 2.31900881575 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.2233061710244306, 0.042594097657192964, 0.25610197513895616] max_q: 2.22330617102 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.489810245370766, 0.042594097657192964, 0.25610197513895616] max_q: 2.48981024537 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.6132054056566405] max_q: 3.61320540566 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (4, 4), destination = (1, 3), deadline = 20 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.342867171759536, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.527792957986322, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.0585332139733876, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.657, "(['green', None, None, None, 'forward'], 'left')": 0.042594097657192964, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.6132054056566405, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.6138142094578047, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left random action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3, -0.7599, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.7599, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.7599, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.0585332139733876, -0.102] max_q: 3.05853321397 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.6138142094578047, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.342867171759536, 0.042594097657192964, 0.25610197513895616] max_q: 2.34286717176 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.6132054056566405] max_q: 3.61320540566 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.527792957986322] max_q: 3.52779295799 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.8329982318448831, 2.5914370959956052, -0.12018413163996491, 0.25610197513895616] max_q: 2.591437096 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (8, 5), destination = (3, 4), deadline = 30 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5914370959956052, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.618216979739065, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.1997532318773794, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.658412727657596, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.44841457492900894, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.618216979739065] max_q: 3.61821697974 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.44841457492900894, 0.6142000012078738, 3.658412727657596] max_q: 3.65841272766 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.5914370959956052, -0.12018413163996491, 0.25610197513895616] max_q: 2.591437096 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.8027215315962644, -0.12018413163996491, 0.25610197513895616] max_q: 2.8027215316 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9823133018568244, -0.12018413163996491, 0.25610197513895616] max_q: 2.98231330186 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 3.134966306578301, -0.12018413163996491, 0.25610197513895616] max_q: 3.13496630658 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.713115978605215] max_q: 3.71311597861 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.7944764146048104, -0.12018413163996491, 0.25610197513895616] max_q: 2.7944764146 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (8, 3), destination = (6, 5), deadline = 20 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.3, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.7944764146048104, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.681513794965985, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.1997532318773794, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.7561485818144327, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.8329982318448831, 2.7944764146048104, -0.12018413163996491, 0.25610197513895616] max_q: 2.7944764146 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.9753049524140884, -0.12018413163996491, 0.25610197513895616] max_q: 2.97530495241 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3, -0.7599, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3, -0.7599, -0.255] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.1997532318773794, -0.102] max_q: 3.19975323188 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.682713466689862, -0.12018413163996491, 0.25610197513895616] max_q: 2.68271346669 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 2), deadline = 45 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.682713466689862, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.681513794965985, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.8398272623141656, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.0350053170591804, "(['red', None, None, None, 'right'], 'right')": 3.7561485818144327, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.681513794965985] max_q: 3.68151379497 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.7561485818144327] max_q: 3.75614858181 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.31262182590374993, -0.15, 2.8398272623141656, -0.102] max_q: 2.83982726231 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.682713466689862, -0.12018413163996491, 0.25610197513895616] max_q: 2.68271346669 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.880306446686382, -0.12018413163996491, 0.25610197513895616] max_q: 2.88030644669 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 3.048260479683425, -0.12018413163996491, 0.25610197513895616] max_q: 3.04826047968 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.7927262945422675] max_q: 3.79272629454 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.7337823357783972, -0.12018413163996491, 0.25610197513895616] max_q: 2.73378233578 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9176456999999998, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.0350053170591804, 0.0, -0.15] max_q: 1.03500531706 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.8329982318448831, 2.923714985411637, -0.12018413163996491, 0.25610197513895616] max_q: 2.92371498541 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (8, 4), destination = (1, 5), deadline = 40 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.0152728431864184, "(['green', None, None, None, 'forward'], None)": 0.8329982318448831, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.255, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.923714985411637, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.740481943748354, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.013853172967041, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.823817350360927, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.8329982318448831, 2.923714985411637, -0.12018413163996491, 0.25610197513895616] max_q: 2.92371498541 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.8329982318448831, 2.646600489788146, -0.12018413163996491, 0.25610197513895616] max_q: 2.64660048979 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.452620342851702, -0.12018413163996491, 0.25610197513895616] max_q: 2.45262034285 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.684727291423947, -0.12018413163996491, 0.25610197513895616] max_q: 2.68472729142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.8820181977103547, -0.12018413163996491, 0.25610197513895616] max_q: 2.88201819771 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.740481943748354] max_q: 3.74048194375 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.7919099631779867] max_q: 3.79190996318 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 1.0152728431864184, 0.0, 0.0] max_q: 1.01527284319 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.617412738397248, -0.12018413163996491, 0.25610197513895616] max_q: 2.6174127384 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.51, -0.7599, 0.1235779759450561] max_q: 0.123577975945 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.823817350360927] max_q: 3.82381735036 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.850858581769458] max_q: 3.85085858177 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8279095767787297] max_q: 3.82790957678 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.013853172967041, -0.102] max_q: 3.01385317297 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (6, 6), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 0.9509918137191734, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4321889168780735, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.85372314026192, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.013853172967041, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.8697874437554294, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.8697874437554294] max_q: 3.86978744376 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.85372314026192] max_q: 3.85372314026 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.31262182590374993, -0.15, 3.013853172967041, -0.102] max_q: 3.01385317297 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.4321889168780735, -0.12018413163996491, 0.25610197513895616] max_q: 2.43218891688 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (1, 2), destination = (2, 6), deadline = 25 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 0.9509918137191734, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4321889168780735, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8756646692226315, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.1617751970219845, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.8869096816680884, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8756646692226315] max_q: 3.87566466922 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.8869096816680884] max_q: 3.88690968167 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.6673605793463624, -0.12018413163996491, 0.25610197513895616] max_q: 2.66736057935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.867256492444408, -0.12018413163996491, 0.25610197513895616] max_q: 2.86725649244 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (4, 1), destination = (6, 4), deadline = 25 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 0.9509918137191734, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.31262182590374993, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.867256492444408, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8960017207060553, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.1617751970219845, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.9052370352735695, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.15, 3.1617751970219845, -0.102] max_q: 3.16177519702 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.867256492444408, -0.12018413163996491, 0.25610197513895616] max_q: 2.86725649244 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.9052370352735695] max_q: 3.90523703527 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.6070795447110857, -0.12018413163996491, 0.25610197513895616] max_q: 2.60707954471 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.8160176130044228, -0.12018413163996491, 0.25610197513895616] max_q: 2.816017613 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (1, 2), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 0.9509918137191734, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.8160176130044228, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8960017207060553, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.813242637915389, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.918066182797406, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.918066182797406] max_q: 3.9180661828 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.8160176130044228, -0.12018413163996491, 0.25610197513895616] max_q: 2.816017613 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8960017207060553] max_q: 3.89600172071 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.9509918137191734, 2.993614971053759, -0.12018413163996491, 0.25610197513895616] max_q: 2.99361497105 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.6955304797376316, -0.12018413163996491, 0.25610197513895616] max_q: 2.69553047974 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (2, 6), destination = (7, 5), deadline = 30 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 0.9509918137191734, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6955304797376316, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.916258192403852, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.813242637915389, "(['red', None, None, None, 'forward'], 'right')": -0.21432808334318176, "(['green', None, 'forward', None, 'right'], 'left')": 0.4356740919041629, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.927046586064092, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.6931015576859225, -0.15, 2.813242637915389, -0.102] max_q: 2.81324263792 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.21432808334318176] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.6931015576859225, -0.15, 2.5692698465407724, -0.102] max_q: 2.56926984654 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.6955304797376316, -0.12018413163996491, 0.25610197513895616] max_q: 2.69553047974 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.486871335816342, -0.12018413163996491, 0.25610197513895616] max_q: 2.48687133582 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9509918137191734, 2.3408099350714395, -0.12018413163996491, 0.25610197513895616] max_q: 2.34080993507 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.4356740919041629, 0.0] max_q: 0.435674091904 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.3000296583402272] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.48289291169255, 0.5708575992410885, 0.6142000012078738, 3.927046586064092] max_q: 3.92704658606 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.916258192403852] max_q: 3.9162581924 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.15, 2.7838793695596564, -0.102] max_q: 2.78387936956 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.2385669545500075, -0.12018413163996491, 0.25610197513895616] max_q: 2.23856695455 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.3, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9318364355485125] max_q: 3.93183643555 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (3, 3), destination = (8, 3), deadline = 25 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5027819113675065, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9427412057497753, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.9662974641257076, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.7424105931934918, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.936371339105442, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.6931015576859225, -0.15, 2.9662974641257076, -0.102] max_q: 2.96629746413 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.5027819113675065, -0.12018413163996491, 0.25610197513895616] max_q: 2.50278191137 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.72736462466238, -0.12018413163996491, 0.25610197513895616] max_q: 2.72736462466 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.918259930963023, -0.12018413163996491, 0.25610197513895616] max_q: 2.91825993096 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 3.0805209413185697, -0.12018413163996491, 0.25610197513895616] max_q: 3.08052094132 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 6), deadline = 35 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.0805209413185697, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9427412057497753, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.121352844506851, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.7424105931934918, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.12018413163996491, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.936371339105442, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.6142000012078738, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.7296699466204633, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.5708575992410885, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right random action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.48289291169255, 0.6900560203345781, 0.7203957017113278, 3.936371339105442] max_q: 3.93637133911 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9427412057497753] max_q: 3.94274120575 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 3.0805209413185697, -0.12018413163996491, 0.25610197513895616] max_q: 3.08052094132 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.756364658922999, -0.12018413163996491, 0.25610197513895616] max_q: 2.75636465892 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.942909960084549, -0.12018413163996491, 0.25610197513895616] max_q: 2.94290996008 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.660036972059184, -0.12018413163996491, 0.25610197513895616] max_q: 2.66003697206 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9513300248873087] max_q: 3.95133002489 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7296699466204633, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.8610314262503063, -0.12018413163996491, 0.25610197513895616] max_q: 2.86103142625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.48289291169255, 0.6900560203345781, 0.7203957017113278, 3.945915638239625] max_q: 3.94591563824 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.7424105931934918, 0.0] max_q: 0.742410593193 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9578183631570596] max_q: 3.95781836316 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.48289291169255, 0.6900560203345781, 0.7203957017113278, 3.473502535746761] max_q: 3.47350253575 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.6027219983752143, -0.23412889214797544, 0.25610197513895616] max_q: 2.60272199838 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.6931015576859225, -0.15, 3.121352844506851, -0.102] max_q: 3.12135284451 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.812313698618932, -0.23412889214797544, 0.25610197513895616] max_q: 2.81231369862 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.990466643826092, -0.23412889214797544, 0.25610197513895616] max_q: 2.99046664383 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 3.141896647252178, -0.23412889214797544, 0.25610197513895616] max_q: 3.14189664725 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 3.270612150164351, -0.23412889214797544, 0.25610197513895616] max_q: 3.27061215016 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (7, 5), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.270612150164351, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.891498234571956, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.2531499178308234, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.5524771553847465, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7203957017113278, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right random action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.891498234571956] max_q: 3.89149823457 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9423519899999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 3.270612150164351, -0.23412889214797544, 0.25610197513895616] max_q: 3.27061215016 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 3.380020327639698, -0.23412889214797544, 0.25610197513895616] max_q: 3.38002032764 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (7, 6), destination = (4, 1), deadline = 40 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.48289291169255, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.9660142293477887, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8569203375080807, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.2531499178308234, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.5524771553847465, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7203957017113278, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9423519899999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8569203375080807] max_q: 3.85692033751 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.5524771553847465] max_q: 3.55247715538 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.9660142293477887, -0.23412889214797544, 0.25610197513895616] max_q: 2.96601422935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.676209960543452, -0.23412889214797544, 0.25610197513895616] max_q: 2.67620996054 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (3, 6), destination = (7, 3), deadline = 35 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.676209960543452, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8327158095633687, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 3.2531499178308234, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.102, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.661641380203828, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8327158095633687] max_q: 3.83271580956 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.661641380203828] max_q: 3.6616413802 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.676209960543452, -0.23412889214797544, 0.25610197513895616] max_q: 2.67620996054 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.473346972380416, -0.23412889214797544, 0.25610197513895616] max_q: 2.47334697238 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.3313428806662913, -0.23412889214797544, 0.25610197513895616] max_q: 2.33134288067 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.7379710572014186] max_q: 3.7379710572 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.7914018310997326] max_q: 3.7914018311 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.832147273724932] max_q: 3.83214727372 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.15, 3.2531499178308234, -0.22139999999999999] max_q: 3.25314991783 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.5816414485663475, -0.23412889214797544, 0.25610197513895616] max_q: 2.58164144857 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (6, 1), destination = (2, 4), deadline = 35 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0014793127859225, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.5816414485663475, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8568235975317355, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.877204942481576, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.8288033728285527, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.15, 2.877204942481576, -0.22139999999999999] max_q: 2.87720494248 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.5816414485663475, -0.23412889214797544, 0.25610197513895616] max_q: 2.58164144857 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0014793127859225, 2.407149013996443, -0.23412889214797544, 0.25610197513895616] max_q: 2.407149014 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0014793127859225, 2.6460766618969767, -0.23412889214797544, 0.25610197513895616] max_q: 2.6460766619 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.6931015576859225, -0.15, 3.0456242011093395, -0.22139999999999999] max_q: 3.04562420111 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.4522536633278835, -0.23412889214797544, 0.25610197513895616] max_q: 2.45225366333 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.684415613828701, -0.23412889214797544, 0.25610197513895616] max_q: 2.68441561383 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (1, 3), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.684415613828701, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.8568235975317355, "(['green', None, None, None, 'left'], 'forward')": -0.15, "(['green', None, None, None, 'left'], 'left')": 2.7319369407765377, "(['red', None, None, None, 'forward'], 'right')": -0.024235717655657907, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.8288033728285527, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.8568235975317355] max_q: 3.85682359753 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.024235717655657907] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.255, 2.7319369407765377, -0.22139999999999999] max_q: 2.73193694078 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.23569733971534462] max_q: 0.235697339715 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.6931015576859225, -0.255, 2.9221463996600567, -0.22139999999999999] max_q: 2.92214639966 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.4176504798750464] max_q: 0.417650479875 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.255, 3.0838244397110484, -0.22139999999999999] max_q: 3.08382443971 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.8288033728285527] max_q: 3.82880337283 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.684415613828701, -0.23412889214797544, 0.25610197513895616] max_q: 2.68441561383 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (2, 5), destination = (4, 1), deadline = 30 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.684415613828701, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.874097024196498, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.758677107797734, "(['red', None, None, None, 'forward'], 'right')": 0.2050029078937894, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.8544828669042692, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [1.0688735684493282, 2.684415613828701, -0.23412889214797544, 0.25610197513895616] max_q: 2.68441561383 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.2050029078937894] max_q: 0.205002907894 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.255, 2.758677107797734, -0.22139999999999999] max_q: 2.7586771078 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.6931015576859225, -0.255, 2.5310739754584137, -0.22139999999999999] max_q: 2.53107397546 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.509841365864159, -0.23412889214797544, 0.25610197513895616] max_q: 2.50984136586 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.02425247170972096] max_q: 0.0242524717097 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.874097024196498] max_q: 3.8740970242 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.892982470567023] max_q: 3.89298247057 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9090350999819696] max_q: 3.90903509998 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.3605268268613693, -0.23412889214797544, 0.25610197513895616] max_q: 2.36052682686 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.6064478028321636, -0.23412889214797544, 0.25610197513895616] max_q: 2.60644780283 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.22105575422601006] max_q: 0.221055754226 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.922679834984674] max_q: 3.92267983498 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.8544828669042692] max_q: 3.8544828669 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.4576718251164156, -0.23412889214797544, 0.25610197513895616] max_q: 2.45767182512 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (7, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.6931015576859225, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4576718251164156, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.929845608269197, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.7514128791396515, "(['red', None, None, None, 'forward'], 'right')": 0.3733898017256694, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.886745254011725, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.7514128791396515, -0.22139999999999999] max_q: 2.75141287914 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.3733898017256694] max_q: 0.373389801726 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.525989015397756, -0.22139999999999999] max_q: 2.5259890154 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.929845608269197] max_q: 3.92984560827 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (1, 4), destination = (6, 6), deadline = 35 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4576718251164156, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.929845608269197, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.7470906630880925, "(['red', None, None, None, 'forward'], 'right')": 0.4800236349754309, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['green', None, None, None, 'forward'], 'left')": -0.23412889214797544, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.886745254011725, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.4800236349754309] max_q: 0.480023634975 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.5546673182502639] max_q: 0.55466731825 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.8978830222510934, -0.255, 2.5229634641616645, -0.22139999999999999] max_q: 2.52296346416 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.366074424913165, -0.22139999999999999] max_q: 2.36607442491 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.606917896542647] max_q: 0.606917896543 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.929845608269197] max_q: 3.92984560827 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.940368767028817] max_q: 3.94036876703 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9493134519744943] max_q: 3.94931345197 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.4576718251164156, -0.23412889214797544, 0.25610197513895616] max_q: 2.45767182512 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.689021051348953, -0.23412889214797544, 0.25610197513895616] max_q: 2.68902105135 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.6434933013473152] max_q: 0.643493301347 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.886745254011725] max_q: 3.88674525401 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.9037334659099656] max_q: 3.90373346591 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.947531204483905] max_q: 3.94753120448 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.3969693061452179] max_q: 0.396969306145 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.955401523811319] max_q: 3.95540152381 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.962091295239621] max_q: 3.96209129524 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.967777600953677] max_q: 3.96777760095 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.9181734460234705] max_q: 3.91817344602 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.9386130563380233] max_q: 3.93861305634 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (8, 3), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.25610197513895616, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.51, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.578838731146364, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9726109608106253, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.2562520974392153, "(['red', None, None, None, 'forward'], 'right')": 0.5147043239736071, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23668457590754172, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.9386130563380233, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.5147043239736071] max_q: 0.514704323974 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.8978830222510934, -0.255, 2.2562520974392153, -0.22139999999999999] max_q: 2.25625209744 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.5971188364534796] max_q: 0.597118836453 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.1793764682074506, -0.22139999999999999] max_q: 2.17937646821 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.51, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.452469997976333, -0.22139999999999999] max_q: 2.45246999798 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9726109608106253] max_q: 3.97261096081 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.578838731146364, -0.23668457590754172, 0.08290403424508795] max_q: 2.57883873115 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 2), deadline = 20 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.08290403424508795, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.578838731146364, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9767193166890316, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.3167289985834327, "(['red', None, None, None, 'forward'], 'right')": 0.3575510109854577, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23668457590754172, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.9386130563380233, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.9386130563380233] max_q: 3.93861305634 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.4124498178257603, 0.36329430078897523, 3.9767193166890316] max_q: 3.97671931669 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.3167289985834327, -0.22139999999999999] max_q: 2.31672899858 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.578838731146364, -0.23668457590754172, 0.08290403424508795] max_q: 2.57883873115 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.569219648795918, -0.22139999999999999] max_q: 2.5692196488 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (4, 2), destination = (8, 6), deadline = 40 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.08290403424508795, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.4282748657031004, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9767340772233175, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.569219648795918, "(['red', None, None, None, 'forward'], 'right')": 0.15391835933763903, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23668457590754172, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.22139999999999999, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.953537036939971, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.4124498178257603, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [1.0688735684493282, 2.4282748657031004, -0.23668457590754172, 0.08290403424508795] max_q: 2.4282748657 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, 0.15391835933763903] max_q: 0.153918359338 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.953537036939971] max_q: 3.95353703694 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9767340772233175] max_q: 3.97673407722 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.322880159892816, -0.23668457590754172, 0.08290403424508795] max_q: 2.32288015989 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.226016111924971, -0.23668457590754172, 0.08290403424508795] max_q: 2.22601611192 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.98022396563982] max_q: 3.98022396564 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.4344795865953577, -0.23668457590754172, 0.08290403424508795] max_q: 2.4344795866 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9596463929999997, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.0688735684493282, 2.3041357106167504, -0.23668457590754172, 0.08290403424508795] max_q: 2.30413571062 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.558515354024238, -0.23668457590754172, 0.08290403424508795] max_q: 2.55851535402 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.3909607478169663, -0.23668457590754172, 0.08290403424508795] max_q: 2.39096074782 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (1, 5), destination = (7, 2), deadline = 45 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.08290403424508795, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.3909607478169663, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9831903707938467, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.569219648795918, "(['red', None, None, None, 'forward'], 'right')": -0.019169394563006828, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23668457590754172, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.963986037441477, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.7371485645056415, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9802267325699998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.569219648795918, -0.30498] max_q: 2.5692196488 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.3909607478169663, -0.23668457590754172, 0.08290403424508795] max_q: 2.39096074782 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.632316635644421, -0.23668457590754172, 0.08290403424508795] max_q: 2.63231663564 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.4426216449510947, -0.23668457590754172, 0.08290403424508795] max_q: 2.44262164495 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.3098351514657662, -0.23668457590754172, 0.08290403424508795] max_q: 2.30983515147 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.563359878745901, -0.23668457590754172, 0.08290403424508795] max_q: 2.56335987875 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.78383670147653, -0.30498] max_q: 2.78383670148 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.7788558969340156, -0.23668457590754172, 0.08290403424508795] max_q: 2.77885589693 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.7371485645056415, 3.963986037441477] max_q: 3.96398603744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9831903707938467] max_q: 3.98319037079 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9857118151747697] max_q: 3.98571181517 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9802267325699998, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9878550428985537] max_q: 3.9878550429 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9722687818281104] max_q: 3.97226878183 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9764284645538934] max_q: 3.97642846455 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.987338847303204] max_q: 3.9873388473 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.979964194870809] max_q: 3.97996419487 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (2, 1), destination = (6, 6), deadline = 45 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.05286888520474323, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.51812137781635, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.545199127853811, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.988131822342864, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.548685691033571, "(['red', None, None, None, 'forward'], 'right')": -0.019169394563006828, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": 0.06610066604279241, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.7630609697531718, "(['red', None, None, None, 'right'], 'right')": 3.979964194870809, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.51812137781635, 0.0, -0.15] max_q: 1.51812137782 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.545199127853811, 0.06610066604279241, 0.05286888520474323] max_q: 2.54519912785 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.3816393894976673, 0.06610066604279241, 0.05286888520474323] max_q: 2.3816393895 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.267147572648367, 0.06610066604279241, 0.05286888520474323] max_q: 2.26714757265 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.979964194870809] max_q: 3.97996419487 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 1.7630609697531718, 0.0, -0.15] max_q: 1.76306096975 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.3953614560606753, 0.06610066604279241, 0.05286888520474323] max_q: 2.39536145606 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.2767530192424728, 0.06610066604279241, 0.05286888520474323] max_q: 2.27675301924 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (8, 5), destination = (2, 3), deadline = 40 RoutePlanner.route_to(): destination = (2, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.05286888520474323, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.2767530192424728, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.988131822342864, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.548685691033571, "(['red', None, None, None, 'forward'], 'right')": -0.019169394563006828, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": 0.06610066604279241, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.982969565640188, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.982969565640188] max_q: 3.98296956564 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.988131822342864] max_q: 3.98813182234 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.2767530192424728, 0.06610066604279241, 0.05286888520474323] max_q: 2.27675301924 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.535240066356102, 0.06610066604279241, 0.05286888520474323] max_q: 2.53524006636 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.7549540564026866, 0.06610066604279241, 0.05286888520474323] max_q: 2.7549540564 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.019169394563006828] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.749197663559598, 0.06610066604279241, 0.05286888520474323] max_q: 2.74919766356 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9896370460349386] max_q: 3.98963704603 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.936818014025658, 0.06610066604279241, 0.05286888520474323] max_q: 2.93681801403 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9862984692995607] max_q: 3.9862984693 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.990690702619391] max_q: 3.99069070262 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 6), deadline = 35 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.05286888520474323, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.655772609817961, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.990690702619391, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.548685691033571, "(['red', None, None, None, 'forward'], 'right')": -0.019169394563006828, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9883536989046267, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.8978830222510934, -0.255, 2.548685691033571, -0.30498] max_q: 2.54868569103 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.8574067183452665, -0.10372953377004532, 0.05286888520474323] max_q: 2.85740671835 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.7663828373785355, -0.30498] max_q: 2.76638283738 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.951425411771755, -0.30498] max_q: 2.95142541177 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.6001847028416867, -0.10372953377004532, 0.05286888520474323] max_q: 2.60018470284 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.4201292919891806, -0.10372953377004532, 0.05286888520474323] max_q: 2.42012929199 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9883536989046267] max_q: 3.9883536989 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9901006440689324] max_q: 3.99010064407 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.990690702619391] max_q: 3.99069070262 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.2940905043924262, -0.10372953377004532, -0.11299178035667974] max_q: 2.29409050439 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (2, 3), destination = (6, 3), deadline = 20 RoutePlanner.route_to(): destination = (6, 3) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.2940905043924262, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9922213239523625, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.6659977882402286, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9915855474585924, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9922213239523625] max_q: 3.99222132395 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 2.2058633530746983, -0.10372953377004532, -0.11299178035667974] max_q: 2.20586335307 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.1441043471522887, -0.10372953377004532, -0.11299178035667974] max_q: 2.14410434715 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 2), deadline = 20 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.1441043471522887, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.993388125359508, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.6659977882402286, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9915855474585924, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.993388125359508] max_q: 3.99338812536 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9915855474585924] max_q: 3.99158554746 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.1441043471522887, -0.10372953377004532, -0.11299178035667974] max_q: 2.14410434715 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.422488695079445, -0.10372953377004532, -0.11299178035667974] max_q: 2.42248869508 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.422488695079445, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9941095198704444, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.6659977882402286, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9932263112015813, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9941095198704444] max_q: 3.99410951987 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9932263112015813] max_q: 3.9932263112 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.422488695079445, -0.10372953377004532, -0.11299178035667974] max_q: 2.42248869508 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.659115390817528, -0.10372953377004532, -0.11299178035667974] max_q: 2.65911539082 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (6, 1), destination = (4, 5), deadline = 30 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.659115390817528, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.994860610589548, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.6659977882402286, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.994487509429539, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.994487509429539] max_q: 3.99448750943 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.995314383015108] max_q: 3.99531438302 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.659115390817528, -0.10372953377004532, -0.11299178035667974] max_q: 2.65911539082 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.6659977882402286, -0.30498] max_q: 2.66599778824 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.8602480821948983, -0.10372953377004532, -0.11299178035667974] max_q: 2.86024808219 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.0312108698656637, -0.10372953377004532, -0.11299178035667974] max_q: 3.03121086987 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (3, 3), destination = (5, 1), deadline = 20 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.0312108698656637, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.994860610589548, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.4661984517681597, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9959491596990073, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.994860610589548] max_q: 3.99486061059 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9956315190011154] max_q: 3.995631519 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 3.0312108698656637, -0.10372953377004532, -0.11299178035667974] max_q: 3.03121086987 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.4661984517681597, -0.30498] max_q: 2.46619845177 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (3, 1), destination = (3, 6), deadline = 25 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.1765292393858138, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9963344372556318, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.4661984517681597, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9959491596990073, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: left q: [0.8978830222510934, -0.255, 2.4661984517681597, -0.30498] max_q: 2.46619845177 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.1765292393858138, -0.10372953377004532, -0.11299178035667974] max_q: 3.17652923939 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.300049853477941, -0.10372953377004532, -0.11299178035667974] max_q: 3.30004985348 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.40504237545625, -0.10372953377004532, -0.11299178035667974] max_q: 3.40504237546 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.494286019137812, -0.10372953377004532, -0.11299178035667974] max_q: 3.49428601914 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (1, 6), destination = (3, 1), deadline = 35 RoutePlanner.route_to(): destination = (3, 1) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.494286019137812, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['green', None, None, None, 'right'], 'right')": 3.9963344372556318, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.6962686840029355, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9959491596990073, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9963344372556318] max_q: 3.99633443726 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9959491596990073] max_q: 3.9959491597 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 3.494286019137812, -0.10372953377004532, -0.11299178035667974] max_q: 3.49428601914 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.996556785744156] max_q: 3.99655678574 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.996826480033793] max_q: 3.99682648003 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.8978830222510934, -0.255, 2.6962686840029355, -0.30498] max_q: 2.696268684 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.5701431162671398, -0.10372953377004532, -0.11299178035667974] max_q: 3.57014311627 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 3.099100181386998, -0.10372953377004532, -0.11299178035667974] max_q: 3.09910018139 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.16341857619410477] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 3.234235154178948, -0.10372953377004532, -0.11299178035667974] max_q: 3.23423515418 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.662684964471445, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 0.8978830222510934, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.234235154178948, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9973025080287234, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8918283814024948, "(['red', None, None, None, 'forward'], 'right')": -0.16341857619410477, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9971137220259774, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward random action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.8978830222510934, -0.255, 2.8918283814024948, -0.30498] max_q: 2.8918283814 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.22074226979096884] max_q: 0.220742269791 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.0221600956230272, -0.255, 2.6242798669817464, -0.30498] max_q: 2.62427986698 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 1.662684964471445, 0.0, -0.15] max_q: 1.66268496447 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.48965486198052033] max_q: 0.489654861981 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.0221600956230272, -0.255, 2.8306378869344844, -0.30498] max_q: 2.83063788693 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [1.0221600956230272, -0.255, 3.0060422038943115, -0.30498] max_q: 3.00604220389 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 5), deadline = 35 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.8373277044270895, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.234235154178948, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9973025080287234, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 3.0060422038943115, "(['red', None, None, None, 'forward'], 'right')": 0.6778936765132064, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9971137220259774, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9971137220259774] max_q: 3.99711372203 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.234235154178948, -0.10372953377004532, -0.11299178035667974] max_q: 3.23423515418 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.6778936765132064] max_q: 0.677893676513 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.0221600956230272, -0.255, 3.0060422038943115, -0.30498] max_q: 3.00604220389 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9975749816224924] max_q: 3.99757498162 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 2.965648659402244, -0.10372953377004532, -0.11299178035667974] max_q: 2.9656486594 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0688735684493282, 3.1208013604919076, -0.10372953377004532, -0.11299178035667974] max_q: 3.12080136049 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (6, 6), destination = (8, 1), deadline = 35 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.657, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.8373277044270895, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.1208013604919076, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9973025080287234, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 3.155135873310165, "(['red', None, None, None, 'forward'], 'right')": 0.42620962503622545, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9978978633400533, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.42620962503622545] max_q: 0.426209625036 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.657, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [1.0221600956230272, -0.255, 3.155135873310165, -0.30498] max_q: 3.15513587331 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.21227818128079162] max_q: 0.212278181281 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [1.0221600956230272, -0.255, 3.2818654923136403, -0.30498] max_q: 3.28186549231 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.7599, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left random action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (7, 5), destination = (7, 1), deadline = 20 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.8373277044270895, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 3.1208013604919076, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9973025080287234, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": 0.030436454088672876, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9978978633400533, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.8118443124281656, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9973025080287234] max_q: 3.99730250803 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, 0.030436454088672876] max_q: 0.0304364540887 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8118443124281656, 3.9978978633400533] max_q: 3.99789786334 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8680631996391941, 3.998481206263188] max_q: 3.99848120626 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.12412901402462805] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.12412901402462805] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.9977964351211144] max_q: 3.99779643512 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.8680631996391941, 3.9986063096523985] max_q: 3.99860630965 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.9569955673805792, 0.7352249840615298, 0.36329430078897523, 3.998126969852947] max_q: 3.99812696985 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9861587127989999, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.0688735684493282, 3.1208013604919076, -0.10372953377004532, -0.11299178035667974] max_q: 3.12080136049 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0688735684493282, 3.252681156418121, -0.10372953377004532, -0.11299178035667974] max_q: 3.25268115642 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (3, 5), destination = (1, 3), deadline = 20 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.0688735684493282, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.8373277044270895, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.8768768094926847, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9985111833777434, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": -0.23689030981723963, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9988153632045385, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.9074665442281167, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9903110989592998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.9988153632045385] max_q: 3.9988153632 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1797430193384324, 2.8768768094926847, -0.10372953377004532, -0.11299178035667974] max_q: 2.87687680949 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.998993058723858] max_q: 3.99899305872 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.613813766644879, -0.10372953377004532, -0.11299178035667974] max_q: 2.61381376664 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (7, 3), destination = (4, 2), deadline = 20 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.1797430193384324, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 1.8373277044270895, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.04495872044670231, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.613813766644879, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9985111833777434, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": -0.23689030981723963, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.999071818613362, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.9074665442281167, "(['green', None, None, None, 'right'], None)": 0.9569955673805792, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9903110989592998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.23689030981723963] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.8319300000000001, -0.7599, -0.04495872044670231] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.269673574673067, 0.7352249840615298, 0.36329430078897523, 3.9985111833777434] max_q: 3.99851118338 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.999071818613362] max_q: 3.99907181861 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1797430193384324, 2.613813766644879, -0.10372953377004532, -0.11299178035667974] max_q: 2.61381376664 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 1.8373277044270895, 0.0, -0.15] max_q: 1.83732770443 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.429669636651415, -0.10372953377004532, -0.11299178035667974] max_q: 2.42966963665 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.9992110458213572] max_q: 3.99921104582 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (4, 2), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.1797430193384324, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 2.250579838596675, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.2531247723802406, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.3007687456559904, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9987345058710817, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": -0.0603277817235557, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9992110458213572, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.9074665442281167, "(['green', None, None, None, 'right'], None)": 1.269673574673067, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9903110989592998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [1.269673574673067, 0.7352249840615298, 0.36329430078897523, 3.9987345058710817] max_q: 3.99873450587 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.269673574673067, 0.7352249840615298, 0.36329430078897523, 3.998924329990419] max_q: 3.99892432999 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.3007687456559904, -0.10372953377004532, -0.11299178035667974] max_q: 2.30076874566 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1797430193384324, 2.210538121959193, -0.10372953377004532, -0.11299178035667974] max_q: 2.21053812196 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [1.0221600956230272, -0.255, 2.8973058446195483, -0.30498] max_q: 2.89730584462 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (2, 4), destination = (7, 4), deadline = 25 RoutePlanner.route_to(): destination = (7, 4) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.1797430193384324, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 2.250579838596675, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.2531247723802406, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.478957403665314, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9990856804918558, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": -0.0603277817235557, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.9992110458213572, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.9074665442281167, "(['green', None, None, None, 'right'], None)": 1.269673574673067, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9903110989592998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.9992110458213572] max_q: 3.99921104582 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.478957403665314, -0.10372953377004532, -0.11299178035667974] max_q: 2.47895740367 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.707113793115517, -0.10372953377004532, -0.11299178035667974] max_q: 2.70711379312 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.9010467241481894, -0.10372953377004532, -0.11299178035667974] max_q: 2.90104672415 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1797430193384324, 2.6307327069037325, -0.10372953377004532, -0.11299178035667974] max_q: 2.6307327069 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (2, 3), destination = (6, 5), deadline = 30 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, None, 'forward'], 'right')": -0.11299178035667974, "(['green', None, 'left', None, 'forward'], 'forward')": 1.7033029009900802, "(['green', None, None, None, 'forward'], None)": 1.1797430193384324, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'left'], 'forward')": 0.16262182590374993, "(['red', None, None, None, 'left'], 'forward')": -0.8319300000000001, "(['red', 'left', None, None, 'left'], 'right')": -0.15, "(['green', None, None, 'forward', 'forward'], 'forward')": 2.250579838596675, "(['red', None, None, None, 'right'], None)": 0.870896611492497, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['red', None, None, 'forward', 'left'], 'right')": -0.3, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.2531247723802406, "(['green', None, None, None, 'right'], 'left')": 0.36329430078897523, "(['red', None, 'left', None, 'left'], 'left')": -0.3, "(['red', None, None, 'left', 'forward'], 'forward')": -0.3, "(['red', None, None, 'right', 'right'], 'forward')": -0.3, "(['red', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'left'], None)": 1.0221600956230272, "(['green', None, 'forward', None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 2.6307327069037325, "(['green', 'forward', None, None, 'right'], 'forward')": 0.43138230684594936, "(['red', None, 'forward', None, 'right'], 'right')": 1.1995670583038966, "(['green', None, None, None, 'right'], 'right')": 3.9990856804918558, "(['red', None, 'left', None, 'left'], 'right')": -0.15, "(['green', None, None, None, 'left'], 'forward')": -0.255, "(['green', None, None, None, 'left'], 'left')": 2.8973058446195483, "(['red', None, None, None, 'forward'], 'right')": -0.0603277817235557, "(['green', None, 'forward', None, 'right'], 'left')": 0.8907127955974584, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": -0.15, "(['red', None, None, 'right', 'forward'], 'forward')": -0.3, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'left'], 'left')": -0.7599, "(['red', None, None, 'left', 'left'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.10372953377004532, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.30498, "(['green', 'left', None, None, 'forward'], 'forward')": 1.8341426788272202, "(['red', None, None, None, 'right'], 'right')": 3.999310584148728, "(['red', None, None, 'forward', 'left'], 'left')": -0.3, "(['red', None, 'forward', None, 'right'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.9074665442281167, "(['green', None, None, None, 'right'], None)": 1.269673574673067, "(['red', None, 'right', None, 'forward'], 'right')": 0.2524070200034793, "(['green', 'left', None, None, 'left'], 'left')": 1.2667038631282388, "(['green', None, None, 'left', 'forward'], 'left')": -0.15, "(['green', None, None, 'left', 'forward'], 'forward')": 0.6, "(['green', None, 'forward', None, 'left'], 'forward')": -0.15, "(['red', None, None, None, 'forward'], 'left')": -0.9903110989592998, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'right', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], 'right')": 1.1201429963673544, "(['green', 'right', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, 'left', None, 'left'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": 0.7352249840615298, "(['red', None, None, None, 'forward'], 'forward')": -0.8107689626343242, "(['green', 'left', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'left', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], 'forward')": 0.6900560203345781, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": 0.21231690051938856, "(['red', 'right', None, None, 'forward'], 'left')": -0.3} next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, -0.0603277817235557] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.0221600956230272, -0.255, 2.8973058446195483, -0.30498] max_q: 2.89730584462 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8107689626343242, -0.9903110989592998, 0.20238045882907088] max_q: 0.202380458829 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.8319300000000001, -0.7599, 0.2531247723802406] max_q: 0.25312477238 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.269673574673067, 0.7352249840615298, 0.36329430078897523, 3.9990856804918558] max_q: 3.99908568049 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.870896611492497, 0.6900560203345781, 0.9074665442281167, 3.999310584148728] max_q: 3.99931058415 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.6307327069037325, -0.10372953377004532, -0.11299178035667974] max_q: 2.6307327069 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.8642347653433203, -0.9903110989592998, 0.022023390004710236] max_q: 0.0220233900047 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [1.0221600956230272, -0.255, 2.66608280709072, -0.30498] max_q: 2.66608280709 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1797430193384324, 2.444816403333319, -0.10372953377004532, -0.11299178035667974] max_q: 2.44481640333 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ ================================================ FILE: p4-smartcab/smartcab/trial-data/trial8.js ================================================ Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (1, 1), destination = (5, 1), deadline = 20 RoutePlanner.route_to(): destination = (5, 1) q: {} next_waypoint: forward random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.3, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.15] max_q: 0.0 count: 2 best: [0, 2] action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.3, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': 'right'}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = left, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, -0.3, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 0.6, 0.0, 0.0] max_q: 0.6 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0)] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 6), deadline = 40 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'forward'], 'forward')": 4.11, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'left')": 0.6, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.09, 4.11, 0.0, 0.0] max_q: 4.11 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.093500000000001, 0.0, 0.0] max_q: 4.0935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.6, 0.0] max_q: 0.6 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.09, 3.46545, 0.0, 0.0] max_q: 3.46545 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 3.5456325, 0.0, 0.0] max_q: 3.5456325 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 3.6137876249999996, 0.0, 0.0] max_q: 3.613787625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 3.6717194812499994, 0.0, 0.0] max_q: 3.67171948125 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (4, 5), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'forward'], 'forward')": 6.170203636874999, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'left'], 'left')": 1.1099999999999999, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.51, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, 0.0, 0.0, 0.6] max_q: 0.6 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 6.170203636874999, 0.0, 0.0] max_q: 6.17020363687 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.51, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.09, 4.919142545812498, 0.0, 0.0] max_q: 4.91914254581 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 1.1099999999999999] max_q: 1.11 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.781271163940623, 0.0, 0.0] max_q: 4.78127116394 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 4.664080489349529, 0.0, 0.0] max_q: 4.66408048935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 3.8648563425446705, 0.0, 0.0] max_q: 3.86485634254 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (1, 6), destination = (7, 1), deadline = 55 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'forward'], 'forward')": 6.885127891162969, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 1.4669999999999999, "(['green', None, None, None, 'left'], 'left')": 1.1099999999999999, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: left q: [0.0, 0.0, 1.1099999999999999, 0.0] max_q: 1.11 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 55, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 54, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 6.885127891162969, 0.0, 0.0] max_q: 6.88512789116 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.452358707488523, 0.0, 0.0] max_q: 6.45235870749 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 5.1166510952419655, 0.0, 0.0] max_q: 5.11665109524 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.181655766669375, 0.0, 0.0] max_q: 4.18165576667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 4.154407401668969, 0.0, 0.0] max_q: 4.15440740167 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 1.3769999999999998, 0.0] max_q: 1.377 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.131246291418623, 0.0, 0.0] max_q: 4.13124629142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 3.4918724039930362, 0.0, 0.0] max_q: 3.49187240399 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 3.044310682795125, 0.0, 0.0] max_q: 3.0443106828 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 2.7310174779565877, 0.0, 0.0] max_q: 2.73101747796 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0)] LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (7, 1), destination = (2, 4), deadline = 40 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'forward'], 'forward')": 5.921364856263099, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 1.4669999999999999, "(['green', None, None, None, 'left'], 'left')": 1.7704499999999999, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: left q: [0.0, 0.0, 1.7704499999999999, 0.0] max_q: 1.77045 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 5.921364856263099, 0.0, 0.0] max_q: 5.92136485626 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 5.633160127823634, 0.0, 0.0] max_q: 5.63316012782 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 5.388186108650088, 0.0, 0.0] max_q: 5.38818610865 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 5.179958192352575, 0.0, 0.0] max_q: 5.17995819235 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.09, 4.225970734646802, 0.0, 0.0] max_q: 4.22597073465 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 1.4669999999999999] max_q: 1.467 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 2.1699075] max_q: 2.1699075 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.192075124449782, 0.0, 0.47881126866746726] max_q: 4.19207512445 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (4, 3), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.12589724999999993, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'right')": 0.6, "(['green', None, None, None, 'forward'], 'forward')": 6.534452587114847, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.2089352499999997, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, -0.3, 0.0, 0.6] max_q: 0.6 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.09, 6.534452587114847, 0.0, 0.47881126866746726] max_q: 6.53445258711 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.15428469904762, 0.0, 0.47881126866746726] max_q: 6.15428469905 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 1.3513402874999998] max_q: 1.3513402875 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, -0.3, 0.0, 1.7486392443749996] max_q: 1.74863924437 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 2.0863433577187496] max_q: 2.08634335772 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (1, 1), destination = (5, 4), deadline = 35 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.12589724999999993, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 5.391780637903125, "(['green', None, None, None, 'forward'], 'forward')": 4.9079992893333335, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.2089352499999997, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, 0.0, 0.0, 2.2089352499999997] max_q: 2.20893525 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 5.391780637903125] max_q: 5.3917806379 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.09, 4.9079992893333335, 0.5861998934, 0.47881126866746726] max_q: 4.90799928933 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 4.771799395933334, 0.5861998934, 0.47881126866746726] max_q: 4.77179939593 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 3.9402595771533337, 0.5861998934, 0.47881126866746726] max_q: 3.94025957715 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.12589724999999993] max_q: 0.12589725 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.09, 3.3581817040073334, 0.5861998934, 0.47881126866746726] max_q: 3.35818170401 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 2.9507271928051333, 0.5861998934, 0.47881126866746726] max_q: 2.95072719281 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 3.1081181138843634, 0.5861998934, 0.47881126866746726] max_q: 3.10811811388 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (4, 6), destination = (5, 1), deadline = 30 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 0.21402532499999988, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.817499712135007, "(['green', None, None, None, 'forward'], 'forward')": 5.775682679719054, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.9550217706854687, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 5.775682679719054, 0.5861998934, 0.47881126866746726] max_q: 5.77568267972 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.21402532499999988] max_q: 0.214025325 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5)] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 9.5 Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (4, 1), destination = (8, 1), deadline = 20 RoutePlanner.route_to(): destination = (8, 1) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 3.03192152625, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.817499712135007, "(['green', None, None, None, 'forward'], 'forward')": 5.509330277761196, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.9550217706854687, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: forward q: [0.09, 5.509330277761196, 0.5861998934, 0.47881126866746726] max_q: 5.50933027776 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 5.282930736097017, 0.5861998934, 0.47881126866746726] max_q: 5.2829307361 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 5.090491125682464, 0.5861998934, 0.47881126866746726] max_q: 5.09049112568 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.163343787977724, 0.5861998934, 0.47881126866746726] max_q: 4.16334378798 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 3.03192152625, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.817499712135007, "(['green', None, None, None, 'forward'], 'forward')": 6.514340651584407, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.9550217706854687, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, 0.0, 0.0, 2.9550217706854687] max_q: 2.95502177069 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 4.817499712135007] max_q: 4.81749971214 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 6.514340651584407, 0.5861998934, 0.47881126866746726] max_q: 6.51434065158 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.137189553846746, 0.5861998934, 0.47881126866746726] max_q: 6.13718955385 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.896032687692721, 0.5861998934, 0.47881126866746726] max_q: 4.89603268769 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 4.761627784538812, 0.5861998934, 0.47881126866746726] max_q: 4.76162778454 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 3.03192152625] max_q: 3.03192152625 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.09, 3.9331394491771685, 0.5861998934, 0.47881126866746726] max_q: 3.93313944918 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (1, 5), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 2.248242318375, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.694874755314755, "(['green', None, None, None, 'forward'], 'forward')": 6.353197614424017, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.3911401963000793, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: left q: [0.0, 0.0, 0.0, 2.248242318375] max_q: 2.24824231837 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.09, 6.353197614424017, 0.5861998934, 0.47881126866746726] max_q: 6.35319761442 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.0002179722604145, 0.5861998934, 0.47881126866746726] max_q: 6.00021797226 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 5.700185276421352, 0.5861998934, 0.47881126866746726] max_q: 5.70018527642 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (3, 3), destination = (1, 1), deadline = 20 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": 1.6996668728625, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.694874755314755, "(['green', None, None, None, 'forward'], 'forward')": 7.590129693494946, "(['red', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.3911401963000793, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['red', None, None, None, 'right'], 'forward')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, 0.0, 0.0, 3.3911401963000793] max_q: 3.3911401963 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 7.590129693494946, 0.5861998934, 0.47881126866746726] max_q: 7.59012969349 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.678029350707268] max_q: 3.67802935071 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 12.0 Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (4, 2), destination = (2, 5), deadline = 25 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 7.051610239470703, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', None, None, None, 'left'], 'right')": 1.6996668728625, "(['green', None, None, None, 'right'], 'right')": 3.1746205454950878, "(['green', None, None, None, 'left'], 'left')": 1.8393149999999996, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.694874755314755, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, 0.0, 3.1746205454950878] max_q: 3.1746205455 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 4.694874755314755] max_q: 4.69487475531 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.09, 7.051610239470703, 0.5861998934, 0.47881126866746726] max_q: 7.05161023947 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 1.8393149999999996, 0.0] max_q: 1.839315 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 6.593868703550097, 0.5861998934, 0.47881126866746726] max_q: 6.59386870355 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (8, 2), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 8.215708092485066, "(['red', None, None, None, 'forward'], 'forward')": -0.51, "(['red', None, None, None, 'left'], 'right')": 1.6996668728625, "(['green', None, None, None, 'right'], 'right')": 3.5264655951437742, "(['green', None, None, None, 'left'], 'left')": 2.1424705309293746, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.415382167991895, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.657, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, 0.0, 3.5264655951437742] max_q: 3.52646559514 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.51, -0.657, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.09, 8.215708092485066, 0.5861998934, 0.47881126866746726] max_q: 8.21570809249 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 1.6996668728625] max_q: 1.69966687286 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.730833241799426] max_q: 3.7308332418 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.8738905944583824] max_q: 3.87389059446 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 4.415382167991895] max_q: 4.41538216799 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 2.1424705309293746, 0.0] max_q: 2.14247053093 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.09, 7.583351878612305, 0.5861998934, 0.47881126866746726] max_q: 7.58335187861 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (1, 2), destination = (2, 6), deadline = 25 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 10.045849096820458, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 1.361137390643156, "(['green', None, None, None, 'right'], 'right')": 3.974030741319652, "(['green', None, None, None, 'left'], 'left')": 2.4210999512899685, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 4.286872128792274, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right q: [0.0, 0.0, 0.0, 3.974030741319652] max_q: 3.97403074132 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 4.286872128792274] max_q: 4.28687212879 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = 9.5 Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (7, 3), destination = (1, 5), deadline = 40 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 10.045849096820458, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 1.361137390643156, "(['green', None, None, None, 'right'], 'right')": 4.024852338242598, "(['green', None, None, None, 'left'], 'left')": 2.4210999512899685, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 3.600810490154592, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right q: [0.0, -0.3, 0.0, 3.600810490154592] max_q: 3.60081049015 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 10.045849096820458, 0.5861998934, 0.47881126866746726] max_q: 10.0458490968 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 7.63209436777432, 0.5861998934, 0.47881126866746726] max_q: 7.63209436777 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 7.087280212608172, 0.5861998934, 0.47881126866746726] max_q: 7.08728021261 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.624188180716946, 0.5861998934, 0.47881126866746726] max_q: 6.62418818072 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.230559953609403, 0.5861998934, 0.47881126866746726] max_q: 6.23055995361 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.09, 5.895975960567992, 0.5861998934, 0.47881126866746726] max_q: 5.89597596057 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 3), deadline = 25 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 8.611579566482792, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 1.361137390643156, "(['green', None, None, None, 'right'], 'right')": 4.024852338242598, "(['green', None, None, None, 'left'], 'left')": 2.4989405744994513, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 3.660688916631403, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: left q: [0.0, 0.0, 0.0, 1.361137390643156] max_q: 1.36113739064 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.024852338242598] max_q: 4.02485233824 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.3, 0.0, 3.660688916631403] max_q: 3.66068891663 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 8.611579566482792, 0.5861998934, 0.47881126866746726] max_q: 8.61157956648 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 7.919842631510373, 0.5861998934, 0.47881126866746726] max_q: 7.91984263151 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 7.331866236783816, 0.5861998934, 0.47881126866746726] max_q: 7.33186623678 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 2.4989405744994513, 0.0] max_q: 2.4989405745 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.09, 6.832086301266243, 0.5861998934, 0.47881126866746726] max_q: 6.83208630127 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.09, 5.382460410886369, 0.5861998934, 0.47881126866746726] max_q: 5.38246041089 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (2, 1), destination = (6, 1), deadline = 20 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.09, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 8.175091349253414, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 1.1776372596251268, "(['green', None, None, None, 'right'], 'right')": 3.9664999742645284, "(['green', None, None, None, 'left'], 'left')": 2.5259039910933847, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 3.7115855791366927, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: left q: [0.0, 0.0, 0.0, 1.1776372596251268] max_q: 1.17763725963 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.9664999742645284] max_q: 3.96649997426 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.971524978124849] max_q: 3.97152497812 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.09, 8.175091349253414, 0.5861998934, 0.47881126866746726] max_q: 8.17509134925 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.09, 6.322563944477389, 0.5861998934, 0.47881126866746726] max_q: 6.32256394448 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9147078674827369, 5.678052449884913, 0.5861998934, 0.47881126866746726] max_q: 5.67805244988 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 1.0532316804015964] max_q: 1.0532316804 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5)] LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 9.5 Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (5, 1), destination = (4, 5), deadline = 25 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.9147078674827369, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 5.426344582402176, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 3.9661477749451253, "(['green', None, None, None, 'right'], 'right')": 3.9757962314061217, "(['green', None, None, None, 'left'], 'left')": 2.5259039910933847, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', None, None, None, 'right'], 'right')": 3.7115855791366927, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: left q: [0.0, 0.0, 2.5259039910933847, 0.0] max_q: 2.52590399109 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (8, 3), destination = (1, 3), deadline = 35 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 0.9147078674827369, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'forward'], 'forward')": 7.398441207681522, "(['red', None, None, None, 'forward'], 'forward')": -0.657, "(['red', None, None, None, 'left'], 'right')": 3.9661477749451253, "(['green', None, None, None, 'right'], 'right')": 3.9757962314061217, "(['green', None, None, None, 'left'], 'left')": 2.368132793765369, "(['red', None, None, None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.7115855791366927, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.9147078674827369, 7.398441207681522, 0.5861998934, 0.47881126866746726] max_q: 7.39844120768 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.8886750265292935, 0.5861998934, 0.47881126866746726] max_q: 6.88867502653 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.15] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, 0.20521991906480536, 2.368132793765369, 0.0] max_q: 2.36813279377 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, 0.7133060658824849] max_q: 0.713306065882 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 3.9661477749451253] max_q: 3.96614777495 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.9757962314061217] max_q: 3.97579623141 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, 0.3493142461177394] max_q: 0.349314246118 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.20521991906480536, 2.6129128747005637, 0.0] max_q: 2.6129128747 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.455373772549899, 0.5861998934, 0.47881126866746726] max_q: 6.45537377255 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, 0.1469171092000785] max_q: 0.1469171092 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 3.018240373666672] max_q: 3.01824037367 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.383057361984285] max_q: 3.38305736198 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.475598757686642] max_q: 3.47559875769 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.1407992071649415, 0.5861998934, 0.47881126866746726] max_q: 5.14079920716 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.657, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.198559445015459, 0.5861998934, 0.47881126866746726] max_q: 4.19855944502 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.554258944033646] max_q: 3.55425894403 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (8, 5), destination = (3, 6), deadline = 30 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 3.538991611510821, "(['red', None, None, None, 'forward'], 'forward')": -0.7599, "(['red', None, None, None, 'left'], 'right')": 2.415504317616671, "(['green', None, None, None, 'right'], 'right')": 3.6447190976940558, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 2.881775068340395, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.7115855791366927, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: left q: [0.0, 0.0, 0.0, 2.415504317616671] max_q: 2.41550431762 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.67359676121731, 3.538991611510821, 0.5861998934, 0.47881126866746726] max_q: 3.53899161151 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, -0.3, 0.0, 3.7115855791366927] max_q: 3.71158557914 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (2, 2), destination = (6, 5), deadline = 35 RoutePlanner.route_to(): destination = (6, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 3.125700008848938, "(['red', None, None, None, 'forward'], 'forward')": -0.7599, "(['red', None, None, None, 'left'], 'right')": 1.9731192825827288, "(['green', None, None, None, 'right'], 'right')": 3.6447190976940558, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 2.881775068340395, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.754847742266188, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: forward q: [1.67359676121731, 3.125700008848938, 0.5861998934, 0.47881126866746726] max_q: 3.12570000885 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.2568450075215973, 0.5861998934, 0.47881126866746726] max_q: 3.25684500752 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.879791505265118, 0.5861998934, 0.47881126866746726] max_q: 2.87979150527 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.04782277947535, 0.5861998934, 0.47881126866746726] max_q: 3.04782277948 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 3.6447190976940558] max_q: 3.64471909769 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.733475945632745, 0.5861998934, 0.47881126866746726] max_q: 2.73347594563 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.923454553787833, 0.5861998934, 0.47881126866746726] max_q: 2.92345455379 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (4, 5), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.6464181876514825, "(['red', None, None, None, 'forward'], 'forward')": -0.7599, "(['red', None, None, None, 'left'], 'right')": 1.9731192825827288, "(['green', None, None, None, 'right'], 'right')": 4.164530529725767, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 2.881775068340395, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.754847742266188, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": -0.3} next_waypoint: right random action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 6.754847742266188] max_q: 6.75484774227 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.164530529725767] max_q: 4.16453052973 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.6464181876514825, 0.5861998934, 0.47881126866746726] max_q: 5.64641818765 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.20521991906480536, 2.881775068340395, 0.0] max_q: 2.88177506834 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.552492731356037, 0.5861998934, 0.47881126866746726] max_q: 4.55249273136 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.469618821652631, 0.5861998934, 0.47881126866746726] max_q: 4.46961882165 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (6, 2), destination = (7, 5), deadline = 20 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.399175998404736, "(['red', None, None, None, 'forward'], 'forward')": -0.7599, "(['red', None, None, None, 'left'], 'right')": 1.9731192825827288, "(['green', None, None, None, 'right'], 'right')": 4.1398509502669025, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 2.913210440225686, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.9530729990451965, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.399175998404736, 0.5861998934, 0.47881126866746726] max_q: 7.3991759984 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 5.9530729990451965] max_q: 5.95307299905 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.779423198883315, 0.5861998934, 0.47881126866746726] max_q: 5.77942319888 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.64559623921832, 0.5861998934, 0.47881126866746726] max_q: 4.64559623922 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (3, 3), destination = (7, 1), deadline = 30 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.548756803335571, "(['red', None, None, None, 'forward'], 'forward')": -0.7599, "(['red', None, None, None, 'left'], 'right')": 1.9731192825827288, "(['green', None, None, None, 'right'], 'right')": 4.1398509502669025, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 2.913210440225686, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.3881287418716735, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.7599, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 1.9731192825827288] max_q: 1.97311928258 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.1398509502669025] max_q: 4.13985095027 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 5.3881287418716735] max_q: 5.38812874187 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.884129762334899, 0.5861998934, 0.47881126866746726] max_q: 5.88412976233 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.7599, -0.7599, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.361283753286964, 0.5861998934, 0.47881126866746726] max_q: 5.36128375329 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.20521991906480536, 2.913210440225686, 0.0] max_q: 2.91321044023 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (7, 6), destination = (5, 4), deadline = 20 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.157091190293919, "(['red', None, None, None, 'forward'], 'forward')": -0.8319300000000001, "(['red', None, None, None, 'left'], 'right')": 1.6681650638417629, "(['green', None, None, None, 'right'], 'right')": 4.306114976467582, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 6.076228874191832, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.017607365780308, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8319300000000001, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: right q: [0.0, 0.0, 0.0, 4.306114976467582] max_q: 4.30611497647 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.157091190293919, 0.5861998934, 0.47881126866746726] max_q: 5.15709119029 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.366921588394353] max_q: 4.36692158839 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.9835275117498306, 0.5861998934, 0.47881126866746726] max_q: 4.98352751175 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (4, 5), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.088469258224881, "(['red', None, None, None, 'forward'], 'forward')": -0.8319300000000001, "(['red', None, None, None, 'left'], 'right')": 1.6681650638417629, "(['green', None, None, None, 'right'], 'right')": 4.409486216743093, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 6.076228874191832, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.017607365780308, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8319300000000001, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 5.017607365780308] max_q: 5.01760736578 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.088469258224881, 0.5861998934, 0.47881126866746726] max_q: 7.08846925822 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.561928480757416, 0.5861998934, 0.47881126866746726] max_q: 5.56192848076 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.409486216743093] max_q: 4.40948621674 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.327639208643803, 0.5861998934, 0.47881126866746726] max_q: 5.32763920864 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.128493327347233, 0.5861998934, 0.47881126866746726] max_q: 5.12849332735 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8319300000000001, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8319300000000001, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.9592193282451476, 0.5861998934, 0.47881126866746726] max_q: 4.95921932825 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 4), deadline = 20 RoutePlanner.route_to(): destination = (6, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.815336429008375, "(['red', None, None, None, 'forward'], 'forward')": -0.8319300000000001, "(['red', None, None, None, 'left'], 'right')": 1.6681650638417629, "(['green', None, None, None, 'right'], 'right')": 4.402702565003817, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 6.076228874191832, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.77374808855768, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 4.77374808855768] max_q: 4.77374808856 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.815336429008375, 0.5861998934, 0.47881126866746726] max_q: 7.81533642901 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.2430359646571185, 0.5861998934, 0.47881126866746726] max_q: 7.24303596466 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.75658056995855, 0.5861998934, 0.47881126866746726] max_q: 6.75658056996 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (1, 4), destination = (5, 1), deadline = 35 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 8.329606398970984, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 1.6681650638417629, "(['green', None, None, None, 'right'], 'right')": 4.402702565003817, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 6.076228874191832, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.5861998934, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.657685875274027, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 4.657685875274027] max_q: 4.65768587527 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.402702565003817] max_q: 4.402702565 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 8.329606398970984, 0.5861998934, 0.47881126866746726] max_q: 8.32960639897 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.5032271613399282, 0.0, 4.520785497442391] max_q: 4.52078549744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.680165439125337, 0.26033992537999995, 0.47881126866746726] max_q: 7.68016543913 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.20521991906480536, 6.076228874191832, 0.0] max_q: 6.07622887419 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (8, 3), destination = (4, 2), deadline = 25 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.128140623256536, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 1.6681650638417629, "(['green', None, None, None, 'right'], 'right')": 4.36000962011903, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.442667672826032, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.5032271613399282} next_waypoint: right q: [0.0, 0.0, 0.0, 4.36000962011903] max_q: 4.36000962012 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.128140623256536, 0.26033992537999995, 0.47881126866746726] max_q: 7.12814062326 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 1.6681650638417629] max_q: 1.66816506384 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.318406885007226] max_q: 4.31840688501 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.442667672826032] max_q: 4.44266767283 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.658919529768055, 0.26033992537999995, 0.47881126866746726] max_q: 6.65891952977 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.261243670837638, 0.26033992537999995, 0.47881126866746726] max_q: 5.26124367084 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.270645852256142] max_q: 4.27064585226 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (2, 1), destination = (6, 1), deadline = 20 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 4.282870569586346, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 2.3324347261486924, "(['green', None, None, None, 'right'], 'right')": 7.242021733901796, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.350464248816643, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 4.657741535920605, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: forward q: [0.0, 4.657741535920605, 0.0, 0.0] max_q: 4.65774153592 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.282870569586346, 0.26033992537999995, 0.47881126866746726] max_q: 4.28287056959 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.5980093987104422, 0.26033992537999995, 0.47881126866746726] max_q: 3.59800939871 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.1186065790973094, 0.26033992537999995, 0.47881126866746726] max_q: 3.1186065791 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (6, 5), destination = (1, 3), deadline = 35 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.783024605368116, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 2.3324347261486924, "(['green', None, None, None, 'right'], 'right')": 7.242021733901796, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.025120457179933275, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.350464248816643, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.8823509999999999, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.350464248816643] max_q: 4.35046424882 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 7.242021733901796] max_q: 7.2420217339 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.783024605368116, 0.26033992537999995, 0.47881126866746726] max_q: 5.78302460537 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.648117223757681, 0.26033992537999995, 0.47881126866746726] max_q: 4.64811722376 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.550899640194029, 0.26033992537999995, 0.47881126866746726] max_q: 4.55089964019 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.78562974813582, 0.26033992537999995, 0.47881126866746726] max_q: 3.78562974814 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.731628234256919] max_q: 4.73162823426 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.8823509999999999, -0.025120457179933275] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.869013681310313] max_q: 4.86901368131 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 6.379159448869795] max_q: 6.37915944887 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.965183494247688] max_q: 4.96518349425 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.249940823695074, 0.26033992537999995, 0.47881126866746726] max_q: 3.2499408237 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, 0.3199068035283078] max_q: 0.319906803528 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.947156816725283] max_q: 4.94715681673 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.80508329421649] max_q: 4.80508329422 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 5.81018913834601] max_q: 5.81018913835 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.3624497001408127, 0.26033992537999995, 0.47881126866746726] max_q: 3.36244970014 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (3, 1), destination = (8, 5), deadline = 45 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.458082245119691, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 2.3324347261486924, "(['green', None, None, None, 'right'], 'right')": 5.392395398347722, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": 0.12192078299906162, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.835086676703444, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9176456999999998, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.0, 0.0, 0.0, 5.392395398347722] max_q: 5.39239539835 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, 0.12192078299906162] max_q: 0.121920782999 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 2.3324347261486924] max_q: 2.33243472615 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.835086676703444] max_q: 4.8350866767 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 5.0999397803489215] max_q: 5.09993978035 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.458082245119691, 0.26033992537999995, 0.47881126866746726] max_q: 6.45808224512 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9176456999999998, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.1206575715837825, 0.26033992537999995, 0.47881126866746726] max_q: 5.12065757158 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.9525589358462145, 0.26033992537999995, 0.47881126866746726] max_q: 4.95255893585 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.06679125509235, 0.26033992537999995, 0.47881126866746726] max_q: 4.06679125509 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.0, 4.749551640744749] max_q: 4.74955164074 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.446753878564645, 0.26033992537999995, 0.47881126866746726] max_q: 3.44675387856 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9423519899999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.67359676121731, 3.529740796779948, 0.26033992537999995, 0.47881126866746726] max_q: 3.52974079678 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.0708185577459637, 0.26033992537999995, 0.47881126866746726] max_q: 3.07081855775 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (7, 6), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.749572990422174, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', None, None, None, 'left'], 'right')": 1.8325695172263885, "(['green', None, None, None, 'right'], 'right')": 4.934948813296583, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.04636733445079762, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.664928470515812, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.749572990422174, 0.26033992537999995, 0.47881126866746726] max_q: 5.74957299042 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.6247010932955215, 0.26033992537999995, 0.47881126866746726] max_q: 4.6247010933 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9596463929999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.837290765306865, 0.26033992537999995, 0.47881126866746726] max_q: 3.83729076531 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.8616971505108344, 0.26033992537999995, 0.47881126866746726] max_q: 3.86169715051 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (5, 3), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.88244257793421, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.8325695172263885, "(['green', None, None, None, 'right'], 'right')": 4.934948813296583, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.04636733445079762, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.664928470515812, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9596463929999997, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.0, 0.0, 0.0, 4.934948813296583] max_q: 4.9349488133 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.88244257793421, 0.26033992537999995, 0.47881126866746726] max_q: 6.88244257793 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.4177098045539465, 0.26033992537999995, 0.47881126866746726] max_q: 5.41770980455 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.205053333870854, 0.26033992537999995, 0.47881126866746726] max_q: 5.20505333387 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = left, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.024295333790226, 0.26033992537999995, 0.47881126866746726] max_q: 5.02429533379 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 3), deadline = 20 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.870651033721692, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.8325695172263885, "(['green', None, None, None, 'right'], 'right')": 4.794706491302096, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 8.764794543063058, "(['red', None, None, None, 'forward'], 'right')": -0.04636733445079762, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.664928470515812, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9717524750999997, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: forward q: [1.67359676121731, 7.870651033721692, 0.26033992537999995, 0.47881126866746726] max_q: 7.87065103372 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.290053378663438, 0.26033992537999995, 0.47881126866746726] max_q: 7.29005337866 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.7030373650644055, 0.26033992537999995, 0.47881126866746726] max_q: 5.70303736506 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.20521991906480536, 8.764794543063058, 0.0] max_q: 8.76479454306 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (8, 6), destination = (6, 2), deadline = 30 RoutePlanner.route_to(): destination = (6, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.447581760304745, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.8325695172263885, "(['green', None, None, None, 'right'], 'right')": 4.794706491302096, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 10.010241607728098, "(['red', None, None, None, 'forward'], 'right')": -0.04636733445079762, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.664928470515812, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9717524750999997, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.447581760304745, 0.26033992537999995, 0.47881126866746726] max_q: 5.4475817603 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.230444496259032, 0.26033992537999995, 0.47881126866746726] max_q: 5.23044449626 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.351311147381322, 0.26033992537999995, 0.47881126866746726] max_q: 4.35131114738 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.6459178031669253, 0.26033992537999995, 0.47881126866746726] max_q: 3.64591780317 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (7, 2), destination = (1, 6), deadline = 50 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.18932109288432, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.8325695172263885, "(['green', None, None, None, 'right'], 'right')": 4.794706491302096, "(['green', None, None, None, 'left'], 'forward')": 0.20521991906480536, "(['green', None, None, None, 'left'], 'left')": 10.010241607728098, "(['red', None, None, None, 'forward'], 'right')": -0.04636733445079762, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.664928470515812, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9717524750999997, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right random action: left LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.664928470515812] max_q: 4.66492847052 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.794706491302096] max_q: 4.7947064913 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.18932109288432, 0.26033992537999995, 0.47881126866746726] max_q: 6.18932109288 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.932524765019023, 0.26033992537999995, 0.47881126866746726] max_q: 4.93252476502 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.052767335513316, 0.26033992537999995, 0.47881126866746726] max_q: 4.05276733551 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.044852235186318, 0.26033992537999995, 0.47881126866746726] max_q: 4.04485223519 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9717524750999997, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.04636733445079762] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = left, reward = -1.0 next_waypoint: left q: [0.0, 0.20521991906480536, 10.010241607728098, 0.0] max_q: 10.0102416077 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 1.8325695172263885] max_q: 1.83256951723 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.643992929369924] max_q: 4.64399292937 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.584655903056382] max_q: 4.58465590306 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.490033147542078] max_q: 4.49003314754 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.20521991906480536, 7.882054552993626, 0.0] max_q: 7.88205455299 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.18245713411555833] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.67359676121731, 4.03812439990837, 0.26033992537999995, 0.47881126866746726] max_q: 4.03812439991 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.426687079935859, 0.26033992537999995, 0.47881126866746726] max_q: 3.42668707994 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.51268401794548, 0.26033992537999995, 0.47881126866746726] max_q: 3.51268401795 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.058878812561836, 0.26033992537999995, 0.47881126866746726] max_q: 3.05887881256 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.741215168793285, 0.26033992537999995, 0.47881126866746726] max_q: 2.74121516879 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.5188506181552994, 0.26033992537999995, 0.47881126866746726] max_q: 2.51885061816 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.7410230254320043, 0.26033992537999995, 0.47881126866746726] max_q: 2.74102302543 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: forward q: [1.67359676121731, 2.9298695716172034, 0.26033992537999995, 0.47881126866746726] max_q: 2.92986957162 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.0903891358746227, 0.26033992537999995, 0.47881126866746726] max_q: 3.09038913587 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9802267325699998, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.67359676121731, 3.226830765493429, 0.26033992537999995, 0.47881126866746726] max_q: 3.22683076549 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.8587815358454005, 0.26033992537999995, 0.47881126866746726] max_q: 2.85878153585 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.0299643054685905, 0.26033992537999995, 0.47881126866746726] max_q: 3.02996430547 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (3, 1), destination = (2, 6), deadline = 30 RoutePlanner.route_to(): destination = (2, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 3.175469659648302, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.3151068450075156, "(['green', None, None, None, 'right'], 'right')": 4.538493436017404, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 6.464704213846665, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.423797218682065, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: left q: [0.0, 0.9633595754223635, 6.464704213846665, 0.0] max_q: 6.46470421385 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.2991492107010565, 0.26033992537999995, 0.47881126866746726] max_q: 3.2991492107 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.404276829095898, 0.26033992537999995, 0.47881126866746726] max_q: 3.4042768291 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 2.9829937803671287, 0.26033992537999995, 0.47881126866746726] max_q: 2.98299378037 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (8, 5), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.1355447133120595, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.3151068450075156, "(['green', None, None, None, 'right'], 'right')": 4.538493436017404, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.780748794504214, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.423797218682065, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.423797218682065] max_q: 4.42379721868 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.360227635879755] max_q: 4.36022763588 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.306193490497792] max_q: 4.3061934905 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.1355447133120595, 0.26033992537999995, 0.47881126866746726] max_q: 6.13554471331 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.894881299318441, 0.26033992537999995, 0.47881126866746726] max_q: 4.89488129932 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.026416909522909, 0.26033992537999995, 0.47881126866746726] max_q: 4.02641690952 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.022454373094472, 0.26033992537999995, 0.47881126866746726] max_q: 4.02245437309 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 4), deadline = 30 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.019086217130301, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.3151068450075156, "(['green', None, None, None, 'right'], 'right')": 4.538493436017404, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.780748794504214, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.26033992537999995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.2602644669231235, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: forward q: [0.0, 0.0, -0.15, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.019086217130301, 0.26033992537999995, 0.47881126866746726] max_q: 7.01908621713 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.2602644669231235] max_q: 4.26026446692 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 5.780748794504214, 0.0] max_q: 5.7807487945 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.51336035199121, 0.03223794776599995, 0.47881126866746726] max_q: 5.51336035199 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (7, 2), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.459352246393847, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.3151068450075156, "(['green', None, None, None, 'right'], 'right')": 4.538493436017404, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 4.993790182904077, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.262959142248797, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.262959142248797] max_q: 4.26295914225 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.459352246393847, 0.03223794776599995, 0.47881126866746726] max_q: 7.45935224639 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.94044940943477, 0.03223794776599995, 0.47881126866746726] max_q: 6.94044940943 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 2.3151068450075156] max_q: 2.31510684501 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.538493436017404] max_q: 4.53849343602 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.457719420614794] max_q: 4.45771942061 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.389061507522574] max_q: 4.38906150752 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 4.993790182904077, 0.0] max_q: 4.9937901829 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (4, 4), destination = (8, 4), deadline = 20 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.47881126866746726, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.458314586604338, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.817840818256388, "(['green', None, None, None, 'right'], 'right')": 4.330702281394188, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 7.368329250771312, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.223515270911477, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.223515270911477] max_q: 4.22351527091 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 7.368329250771312, 0.0] max_q: 7.36832925077 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.458314586604338, 0.03223794776599995, 1.0039150760578779] max_q: 5.4583145866 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.239567398613687, 0.03223794776599995, 1.0039150760578779] max_q: 5.23956739861 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.29596789238740934, 0.0, 0.0, 1.817840818256388] max_q: 1.81784081826 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.206066031847162] max_q: 4.20606603185 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.175156127070087] max_q: 4.17515612707 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.330702281394188] max_q: 4.33070228139 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left random action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (7, 5), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 1.0039150760578779, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.053632288821634, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.8823509999999999, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.39516469551793, "(['green', None, None, None, 'right'], 'right')": 4.257323791649659, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.404155904208931, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.172214631158189, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 0.7186591638618545, 0.39973927057737174, 4.172214631158189] max_q: 4.17221463116 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.053632288821634, 0.03223794776599995, 1.0039150760578779] max_q: 5.05363228882 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.895587445498388, 0.03223794776599995, 1.0039150760578779] max_q: 4.8955874455 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.257323791649659] max_q: 4.25732379165 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.8823509999999999, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.76124932867363, 0.03223794776599995, 1.0039150760578779] max_q: 4.76124932867 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (4, 1), destination = (8, 5), deadline = 40 RoutePlanner.route_to(): destination = (8, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.0039150760578779, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 7.647061929372585, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9176456999999998, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.39516469551793, "(['green', None, None, None, 'right'], 'right')": 4.203998975738489, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.404155904208931, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.159148810558181, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.7186591638618545} next_waypoint: left random action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.39516469551793] max_q: 1.39516469552 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 4.203998975738489] max_q: 4.20399897574 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.166671604600669] max_q: 4.1666716046 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.647061929372585, 0.03223794776599995, 1.0039150760578779] max_q: 7.64706192937 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.952943350560809, 0.03223794776599995, 1.0039150760578779] max_q: 5.95294335056 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.660001847976687, 0.03223794776599995, 1.0039150760578779] max_q: 5.66000184798 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.411001570780184, 0.03223794776599995, 1.0039150760578779] max_q: 5.41100157078 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 8.404155904208931, 0.0] max_q: 8.40415590421 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (4, 3), destination = (8, 2), deadline = 25 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.0039150760578779, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 5.199351335163156, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9176456999999998, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.0872386724938905, "(['green', None, None, None, 'right'], 'right')": 4.140542444804195, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 9.795994933820335, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.159148810558181, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.8269337362870253} next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 4.159148810558181] max_q: 4.15914881056 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.140542444804195] max_q: 4.1405424448 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.199351335163156, 0.03223794776599995, 1.0039150760578779] max_q: 5.19935133516 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.239545934614209, 0.03223794776599995, 1.0039150760578779] max_q: 4.23954593461 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.567682154229946, 0.03223794776599995, 1.0039150760578779] max_q: 3.56768215423 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (2, 1), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.0039150760578779, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.097377507960962, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9176456999999998, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.0872386724938905, "(['green', None, None, None, 'right'], 'right')": 4.119461078083566, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 9.795994933820335, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.132485534111355, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.8269337362870253} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': 'left', 'right': 'right', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.9633595754223635, 9.795994933820335, 0.0] max_q: 9.79599493382 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.119461078083566] max_q: 4.11946107808 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.097377507960962, 0.03223794776599995, 1.0039150760578779] max_q: 6.09737750796 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.782770881766817, 0.03223794776599995, 1.0039150760578779] max_q: 5.78277088177 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 4.132485534111355] max_q: 4.13248553411 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 3.4927398738779485] max_q: 3.49273987388 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.103495584775199] max_q: 4.10349558478 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9176456999999998, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 3.6604422494308437] max_q: 3.66044224943 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 4.087971247058919] max_q: 4.08797124706 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 3.1623095746015903] max_q: 3.1623095746 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0)] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 4.647939617236771, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.0872386724938905, "(['green', None, None, None, 'right'], 'right')": 3.935926309131481, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.926595693747284, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": 0.03223794776599995, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 2.9871273777516887, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.860419075144424, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.8269337362870253} next_waypoint: left random action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 3.935926309131481] max_q: 3.93592630913 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 2.9871273777516887] max_q: 2.98712737775 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 3.139058271088935] max_q: 3.13905827109 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 3.860419075144424, 0.0, 0.0] max_q: 3.86041907514 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 0.8269337362870253, 0.39973927057737174, 3.3058590257907325] max_q: 3.30585902579 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.647939617236771, -0.23920340559466, 0.5527405532405144] max_q: 4.64793961724 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.8535577320657395, -0.23920340559466, 0.5527405532405144] max_q: 3.85355773207 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 8.926595693747284, 0.0] max_q: 8.92659569375 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 3.875524072255878, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.650056424807816, "(['green', None, None, None, 'right'], 'right')": 3.8032175230547898, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.18760633968519, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.5574687488037045, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 0.8269337362870253} next_waypoint: forward q: [1.67359676121731, 3.875524072255878, -0.23920340559466, 0.5527405532405144] max_q: 3.87552407226 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.894195461417496, -0.23920340559466, 0.5527405532405144] max_q: 3.89419546142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.3259368229922472, -0.23920340559466, 0.5527405532405144] max_q: 3.32593682299 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 6.5574687488037045] max_q: 6.5574687488 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.42704629954341, -0.23920340559466, 0.5527405532405144] max_q: 3.42704629954 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (4, 2), destination = (7, 6), deadline = 35 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['green', None, None, None, 'forward'], 'forward')": 6.512989354611898, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.650056424807816, "(['green', None, None, None, 'right'], 'right')": 3.8032175230547898, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.18760633968519, "(['red', None, None, None, 'forward'], 'right')": -0.27771999388089086, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.7607107526208114, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right random action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 5.7607107526208114] max_q: 5.76071075262 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.8032175230547898] max_q: 3.80321752305 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.512989354611898, -0.23920340559466, 0.5527405532405144] max_q: 6.51298935461 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.136040951420113, -0.23920340559466, 0.5527405532405144] max_q: 6.13604095142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 5.202980155292787] max_q: 5.20298015529 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.670944366094966, -0.23920340559466, 0.5527405532405144] max_q: 4.67094436609 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.27771999388089086] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.869661056266476, -0.23920340559466, 0.5527405532405144] max_q: 3.86966105627 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.262252266138353] max_q: 3.26225226614 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 5.022533131998868] max_q: 5.022533132 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.636956556096677] max_q: 3.6369565561 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.308762739386533, -0.23920340559466, 0.5527405532405144] max_q: 3.30876273939 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.412448328478553, -0.23920340559466, 0.5527405532405144] max_q: 3.41244832848 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (1, 4), destination = (3, 6), deadline = 20 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.988713829934987, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.650056424807816, "(['green', None, None, None, 'right'], 'right')": 3.691413072682175, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.18760633968519, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.661316675813709, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 4.661316675813709] max_q: 4.66131667581 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 4.416633633971923] max_q: 4.41663363397 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.7920996809544905, -0.23920340559466, 0.5527405532405144] max_q: 4.79209968095 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (3, 3), destination = (8, 2), deadline = 30 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.954469776668143, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.650056424807816, "(['green', None, None, None, 'right'], 'right')": 3.691413072682175, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.18760633968519, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.2453555046826725, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.691413072682175] max_q: 3.69141307268 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 4.2453555046826725] max_q: 4.24535550468 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.954469776668143, -0.23920340559466, 0.5527405532405144] max_q: 6.95446977667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.511299310167921, -0.23920340559466, 0.5527405532405144] max_q: 6.51129931017 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.1579095171175435, -0.23920340559466, 0.5527405532405144] max_q: 5.15790951712 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.984223089549912, -0.23920340559466, 0.5527405532405144] max_q: 4.98422308955 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (1, 3), destination = (4, 1), deadline = 25 RoutePlanner.route_to(): destination = (4, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.836589626117425, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9423519899999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.650056424807816, "(['green', None, None, None, 'right'], 'right')": 3.820792476579923, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 8.18760633968519, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.208552178980272, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, None, None, 'right'], 'left')": 0.39973927057737174, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.820792476579923] max_q: 3.82079247658 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.650056424807816] max_q: 2.65005642481 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.39973927057737174, 4.208552178980272] max_q: 4.20855217898 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 4.0371697353270815] max_q: 4.03716973533 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.836589626117425, -0.23920340559466, 0.5527405532405144] max_q: 7.83658962612 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.261101182199811, -0.23920340559466, 0.5527405532405144] max_q: 7.2611011822 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.102547961086643] max_q: 2.10254796109 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.274554733605946] max_q: 3.27455473361 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 4.031594275028019] max_q: 4.03159427503 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.496927454778365] max_q: 3.49692745478 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 8.18760633968519, 0.0] max_q: 8.18760633969 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9423519899999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.9596463929999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 6.771936004869838, -0.23920340559466, 0.5527405532405144] max_q: 6.77193600487 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (6, 2), destination = (6, 6), deadline = 20 RoutePlanner.route_to(): destination = (6, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.340355203408887, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9596463929999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.549924523713429, "(['green', None, None, None, 'right'], 'right')": 3.6518774884109275, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 6.713813116336647, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.026855133773816, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 4.026855133773816] max_q: 4.02685513377 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.6518774884109275] max_q: 3.65187748841 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 3.96658021690331] max_q: 3.9665802169 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 6.713813116336647, 0.0] max_q: 6.71381311634 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9596463929999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 8.340355203408887, -0.23920340559466, 0.5527405532405144] max_q: 8.34035520341 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9596463929999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.689301922897553, -0.23920340559466, 0.5527405532405144] max_q: 7.6893019229 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (3, 5), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.982511346028286, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.549924523713429, "(['green', None, None, None, 'right'], 'right')": 3.7513012744231453, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.6821578599926665, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9393013429957886, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.0, 0.0, 0.7141066128931217, 3.7513012744231453] max_q: 3.75130127442 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 8.982511346028286, -0.23920340559466, 0.5527405532405144] max_q: 8.98251134603 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 3.9393013429957886] max_q: 3.939301343 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 8.235134644124043, -0.23920340559466, 0.5527405532405144] max_q: 8.23513464412 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 7.599864447505436, -0.23920340559466, 0.5527405532405144] max_q: 7.59986444751 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (6, 3), destination = (1, 4), deadline = 30 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 3.390121573523189, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 10.059884780379619, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.549924523713429, "(['green', None, None, None, 'right'], 'right')": 3.7886060832596735, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.6821578599926665, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9258018525860026, "(['green', None, 'forward', None, 'forward'], 'forward')": 4.297190942585516, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: forward q: [1.67359676121731, 10.059884780379619, -0.23920340559466, 0.5527405532405144] max_q: 10.0598847804 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.641919346265732, -0.23920340559466, 0.5527405532405144] max_q: 7.64191934627 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 7.095631444325871, -0.23920340559466, 0.5527405532405144] max_q: 7.09563144433 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 5.566942011028109, -0.23920340559466, 0.5527405532405144] max_q: 5.56694201103 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.331900709373892, -0.23920340559466, 0.5527405532405144] max_q: 5.33190070937 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 0.7141066128931217, 3.7886060832596735] max_q: 3.78860608326 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 0.7141066128931217, 3.8203151707707224] max_q: 3.82031517077 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 0.7141066128931217, 3.863090897427406] max_q: 3.86309089743 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.549924523713429] max_q: 2.54992452371 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 3.9258018525860026] max_q: 3.92580185259 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 3.936931574698102] max_q: 3.9369315747 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 3.390121573523189, 0.0] max_q: 3.39012157352 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 0.7141066128931217, 3.883627262813295] max_q: 3.88362726281 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 0.7141066128931217, 3.9010831733913007] max_q: 3.90108317339 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 4.297190942585516, 0.0, 0.0] max_q: 4.29719094259 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (3, 4), destination = (7, 5), deadline = 25 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.332330496561724, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.0174358451564145, "(['green', None, None, None, 'right'], 'right')": 3.5042688969044864, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.6821578599926665, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.8643703383171495, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: left q: [0.0, 0.9633595754223635, 5.6821578599926665, 0.7023236789988999] max_q: 5.68215785999 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 4.332330496561724, -0.23920340559466, 0.5527405532405144] max_q: 4.33233049656 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.6326313475932066, -0.23920340559466, 0.5527405532405144] max_q: 3.63263134759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.67359676121731, 3.1428419433152444, -0.23920340559466, 0.5527405532405144] max_q: 3.14284194332 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 3.8643703383171495] max_q: 3.86437033832 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (4, 4), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 2.799989360320671, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.0174358451564145, "(['green', None, None, None, 'right'], 'right')": 3.5042688969044864, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 4.880125878768329, "(['red', None, None, None, 'forward'], 'right')": -0.3444039957166236, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.830699571357677, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, -0.3444039957166236] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 4.880125878768329, 0.7023236789988999] max_q: 4.88012587877 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.028915607046464148] max_q: 0.0289156070465 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.0174358451564145] max_q: 2.01743584516 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5)] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 9.5 Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (7, 2), destination = (2, 4), deadline = 35 RoutePlanner.route_to(): destination = (2, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 0.5567378368705039, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 2.799989360320671, "(['green', None, None, None, 'right'], 'left')": 0.7141066128931217, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 4.851061264776195, "(['green', None, None, None, 'right'], 'right')": 3.5042688969044864, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.9257078211113665, "(['red', None, None, None, 'forward'], 'right')": 0.29023932898062554, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.830699571357677, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 6.830699571357677] max_q: 6.83069957136 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5567378368705039, 1.2624739277214734, 0.5853929497032224, 5.9071300344860465] max_q: 5.90713003449 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.5042688969044864] max_q: 3.5042688969 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.29023932898062554] max_q: 0.290239328981 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 4.851061264776195] max_q: 4.85106126478 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 5.260631358675905] max_q: 5.26063135868 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 5.071536654874519] max_q: 5.07153665487 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.799989360320671, -0.23920340559466, 0.5527405532405144] max_q: 2.79998936032 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.09670342963353169] max_q: 0.0967034296335 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.9257078211113665, 0.7023236789988999] max_q: 3.92570782111 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.30386711074389705] max_q: 0.303867110744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.9231853335544624, 0.7023236789988999] max_q: 3.92318533355 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.4488816875211528] max_q: 0.448881687521 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 3.8345990585100416] max_q: 3.83459905851 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.686869942767485] max_q: 4.68686994277 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.583839451352362] max_q: 4.58383945135 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.5744980666694994, -0.23920340559466, 0.5527405532405144] max_q: 2.57449806667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.23154943439297987] max_q: 0.231549434393 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.9214195922646296, 0.7023236789988999] max_q: 3.92141959226 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.933206653424935, 0.7023236789988999] max_q: 3.93320665342 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.43033310757544707] max_q: 0.430333107575 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.578628562368813] max_q: 3.57862856237 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.7568622787034656] max_q: 3.7568622787 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.345481900301975] max_q: 4.3454819003 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.7883233566690744, -0.23920340559466, 0.5527405532405144] max_q: 2.78832335667 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.569481678803174] max_q: 0.569481678803 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.8816258801377224] max_q: 3.88162588014 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.22408121223204] max_q: 4.22408121223 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.8993819981170637] max_q: 3.89938199812 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 2.637248601488828, -0.23920340559466, 0.5527405532405144] max_q: 2.63724860149 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0)] LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (1, 5), destination = (7, 6), deadline = 35 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.841661311265503, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 3.1094091997335354, "(['green', None, None, None, 'right'], 'right')": 3.914474698399504, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.8196560373574844, "(['red', None, None, None, 'forward'], 'right')": 0.644224465385546, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.141764148279988, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.141764148279988] max_q: 4.14176414828 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.914474698399504] max_q: 3.9144746984 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.644224465385546] max_q: 0.644224465386 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.8196560373574844, 0.7023236789988999] max_q: 3.81965603736 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 1.1772063224597076] max_q: 1.17720632246 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 3.1094091997335354] max_q: 3.10940919973 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.0864061085559165] max_q: 4.08640610856 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.073445192272529] max_q: 4.07344519227 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.841661311265503, -0.23920340559466, 0.5527405532405144] max_q: 5.84166131127 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.8506253740907515] max_q: 0.850625374091 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.4929978197735045] max_q: 2.49299781977 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.0624284134316495] max_q: 4.06242841343 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.9530932051630403] max_q: 3.95309320516 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.565412114575677, -0.23920340559466, 0.5527405532405144] max_q: 5.56541211458 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.330600297389325, -0.23920340559466, 0.5527405532405144] max_q: 5.33060029739 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.417374943369098, -0.23920340559466, 0.5527405532405144] max_q: 4.41737494337 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.960129224388584] max_q: 3.96012922439 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (5, 6), destination = (2, 5), deadline = 20 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.354768701863733, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.9690481468074787, "(['green', None, None, None, 'right'], 'right')": 6.9661098407302955, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.8467076317538615, "(['red', None, None, None, 'forward'], 'right')": 0.5730315679771386, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.053064151416902, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734} next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.053064151416902] max_q: 4.05306415142 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 6.9661098407302955] max_q: 6.96610984073 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.354768701863733, -0.23920340559466, 0.5527405532405144] max_q: 4.35476870186 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 4.301553396584173, -0.23920340559466, 0.5527405532405144] max_q: 4.30155339658 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.9690481468074787] max_q: 1.96904814681 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.5730315679771386] max_q: 0.573031567977 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 6.521193364620751] max_q: 6.52119336462 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 6.143014359927637] max_q: 6.14301435993 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.8467076317538615, 0.7023236789988999] max_q: 3.84670763175 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.6970421128054918, -0.23920340559466, 0.5527405532405144] max_q: 3.69704211281 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.821562205938491] max_q: 5.82156220594 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.5483278750477165] max_q: 5.54832787505 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.316078693790558] max_q: 5.31607869379 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.187929478963844, -0.23920340559466, 0.5527405532405144] max_q: 3.18792947896 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 3.309740057119267, -0.23920340559466, 0.5527405532405144] max_q: 3.30974005712 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0)] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (3, 3), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.5527405532405144, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.413279048551377, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.2283337027652352, "(['green', None, None, None, 'right'], 'right')": 4.321255085653391, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.8697014869907824, "(['red', None, None, None, 'forward'], 'right')": 0.8056784145048208, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.482061382101375, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.20521991906480536, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.2624739277214734, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 6.413279048551377, -0.23920340559466, 0.5527405532405144] max_q: 6.41327904855 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.8056784145048208] max_q: 0.805678414505 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.2283337027652352] max_q: 1.22833370277 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.482061382101375] max_q: 4.4820613821 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.273066822805382] max_q: 4.27306682281 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 0.5348266523290977] max_q: 0.534826652329 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.290288814984282] max_q: 1.29028881498 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.37840299089177] max_q: 4.37840299089 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.3216425422580045] max_q: 4.32164254226 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 1.0059007210546214] max_q: 1.00590072105 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.889246263942165, 0.7023236789988999] max_q: 3.88924626394 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 0.9467454927366397] max_q: 0.946745492737 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.2624739277214734, 0.5853929497032224, 4.273396160919304] max_q: 4.27339616092 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [1.6142625365289027, 1.217660749287711, 0.5853929497032224, 4.2261933325511984] max_q: 4.22619333255 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.2321067993845745] max_q: 4.23210679938 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, -0.3, 0.20521991906480536] max_q: 0.205219919065 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.217660749287711, 0.5853929497032224, 4.192264332668518] max_q: 4.19226433267 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (7, 6), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.67359676121731, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.210147096161687, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 0.6547336688261436, "(['green', None, None, None, 'right'], 'right')": 3.562474759569202, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.464484208670011, "(['red', None, None, None, 'forward'], 'right')": 1.3356525691624879, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.068956246803343, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.217660749287711, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.6142625365289027, 1.217660749287711, 0.5853929497032224, 4.068956246803343] max_q: 4.0689562468 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.67359676121731, 5.210147096161687, -0.23920340559466, 1.018440451692613] max_q: 5.21014709616 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.029148237824276876] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.029148237824276876] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.029148237824276876] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 5.028625031737434, -0.23920340559466, 1.018440451692613] max_q: 5.02862503174 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.320385407590576, -0.23920340559466, 1.018440451692613] max_q: 4.32038540759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 3.562474759569202] max_q: 3.56247475957 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (3, 5), destination = (6, 1), deadline = 35 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.0, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.27232759645199, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 0.6547336688261436, "(['green', None, None, None, 'right'], 'right')": 6.628103545633822, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.464484208670011, "(['red', None, None, None, 'forward'], 'right')": 1.3356525691624879, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.98264058669772, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.217660749287711, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: left random action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.9717524750999997, -0.9861587127989999, 1.3356525691624879] max_q: 1.33565256916 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 0.6547336688261436] max_q: 0.654733668826 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 6.628103545633822] max_q: 6.62810354563 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.217660749287711, 0.5853929497032224, 3.98264058669772] max_q: 3.9826405867 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.27232759645199, -0.23920340559466, 1.018440451692613] max_q: 4.27232759645 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 0.9853046837881146] max_q: 0.985304683788 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 0.7768159176372398] max_q: 0.776815917637 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.217660749287711, 0.5853929497032224, 4.322931612756716] max_q: 4.32293161276 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.2744918708432085] max_q: 4.27449187084 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.078307676279139] max_q: 1.07830767628 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.123348996392929, 0.7023236789988999] max_q: 3.12334899639 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 0.8622734918050072] max_q: 0.862273491805 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5)] LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 9.5 Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (6, 5), destination = (4, 2), deadline = 25 RoutePlanner.route_to(): destination = (4, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.1477957025682172, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 3.5906293175163926, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 3.582932468034256, "(['green', None, None, None, 'right'], 'right')": 6.233888013788748, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.915685321245801, "(['red', None, None, None, 'forward'], 'right')": 1.1434097710228561, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.527227511658558, "(['green', None, 'forward', None, 'forward'], 'forward')": 7.25788323429412, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.527227511658558] max_q: 4.52722751166 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.1434097710228561] max_q: 1.14340977102 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 3.582932468034256] max_q: 3.58293246803 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.448143384909774] max_q: 4.44814338491 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 6.233888013788748] max_q: 6.23388801379 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 7.25788323429412, 0.0, 0.0] max_q: 7.25788323429 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.648783571505154] max_q: 4.64878357151 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.5906293175163926, -0.23920340559466, 1.018440451692613] max_q: 3.59062931752 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 0.8218983053694277] max_q: 0.821898305369 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.738969221811673] max_q: 4.73896922181 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.8020991770262365] max_q: 4.80209917703 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.898804811720436] max_q: 5.89880481172 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 6.219112661633343, 0.0, 0.0] max_q: 6.21911266163 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (8, 2), destination = (3, 5), deadline = 40 RoutePlanner.route_to(): destination = (3, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.1477957025682172, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 3.6520349198889335, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 2.8954925978291173, "(['green', None, None, None, 'right'], 'right')": 5.456106890055769, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.915685321245801, "(['red', None, None, None, 'forward'], 'right')": 1.0252514580365912, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.846290145676431, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.456106890055769] max_q: 5.45610689006 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.0252514580365912] max_q: 1.02525145804 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 2.8954925978291173] max_q: 2.89549259783 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 5.146218344890502] max_q: 5.14621834489 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.846290145676431] max_q: 4.84629014568 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.6520349198889335, -0.23920340559466, 1.018440451692613] max_q: 3.65203491989 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.704229681905593, -0.23920340559466, 1.018440451692613] max_q: 3.70422968191 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.748595229619754, -0.23920340559466, 1.018440451692613] max_q: 3.74859522962 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 0.7214637393311025] max_q: 0.721463739331 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.915685321245801, 0.7023236789988999] max_q: 2.91568532125 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.9538438046772617] max_q: 1.95384380468 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.925811487612732, 3.3322362216334933, -0.23920340559466, 1.018440451692613] max_q: 3.33223622163 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 2), deadline = 35 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.1477957025682172, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.060794362759964, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.6138376220048922, "(['green', None, None, None, 'right'], 'right')": 4.9292963632748155, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.640979724872061, "(['red', None, None, None, 'forward'], 'right')": 0.8548600507767957, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.7023236789988999, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.731797556464723, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.5853929497032224, "(['green', None, None, None, 'right'], None)": 0.9660945512312167, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 3.999484295186612, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.731797556464723] max_q: 4.73179755646 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.622027922995015] max_q: 4.622027923 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 0.8548600507767957] max_q: 0.854860050777 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.640979724872061, 0.7023236789988999] max_q: 2.64097972487 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.3575211899577515] max_q: 1.35752118996 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.7093839873844205] max_q: 1.70938398738 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.9292963632748155] max_q: 4.92929636327 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.528723734545762] max_q: 4.52872373455 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 3.999484295186612, 0.0, 0.0] max_q: 3.99948429519 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 6.060794362759964, -0.23920340559466, 1.018440451692613] max_q: 6.06079436276 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.955687945583089] max_q: 1.95568794558 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29596789238740934, -0.0907252956723105, 0.0, 1.6138376220048922] max_q: 1.613837622 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.729816014474235] max_q: 4.72981601447 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.582808062584939] max_q: 4.58280806258 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.1359092457694375, -0.23920340559466, 1.018440451692613] max_q: 5.13590924577 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.495386853197198] max_q: 4.4953868532 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.9660945512312167, 0.0, 1.2359441341980921, 4.421078825217618] max_q: 4.42107882522 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.5853929497032224, 4.479579016353169] max_q: 4.47957901635 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.965522858904022, -0.23920340559466, 1.018440451692613] max_q: 4.9655228589 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.1477957025682172, -0.9717524750999997, -0.9861587127989999, 1.5123347537456255] max_q: 1.51233475375 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.357917001434975] max_q: 4.35791700143 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 4.389392861662464] max_q: 4.38939286166 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.3042294512197286] max_q: 4.30422945122 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.1354845406837817] max_q: 1.13548454068 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.2585950335367695] max_q: 4.25859503354 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.219805778506254] max_q: 4.21980577851 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.20159545808138] max_q: 4.20159545808 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.302716214294659, -0.23920340559466, 1.018440451692613] max_q: 4.30271621429 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0)] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (7, 3), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.25730878215046, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.383300553010101, "(['green', None, None, None, 'right'], 'right')": 4.171356139369173, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.690761450711176, "(['red', None, None, None, 'forward'], 'right')": 0.8151618595812145, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.29596789238740934, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.318209420846684, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.7681839940416253, "(['green', None, None, None, 'right'], None)": 1.3299537360770979, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: left q: [0.0, 0.9633595754223635, 2.690761450711176, 0.5837022185999637] max_q: 2.69076145071 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 0.8151618595812145] max_q: 0.815161859581 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.691028098449338, 0.5837022185999637] max_q: 2.69102809845 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 1.383300553010101] max_q: 1.38330055301 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.171356139369173] max_q: 4.17135613937 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 4.318209420846684] max_q: 4.31820942085 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.145652718463797] max_q: 4.14565271846 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.6912147518660516, 0.5837022185999637] max_q: 2.69121475187 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.509209619029419] max_q: 1.50920961903 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.3299537360770979, 0.0, 1.2359441341980921, 4.123804810694227] max_q: 4.12380481069 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 4.244594502362248] max_q: 4.24459450236 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, -0.3, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 7.25730878215046, -0.23920340559466, 1.018440451692613] max_q: 7.25730878215 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.979372605101796, -0.23920340559466, 1.018440451692613] max_q: 5.9793726051 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (8, 4), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.08481728116773, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0258054700585857, "(['green', None, None, None, 'right'], 'right')": 4.123352542840296, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.887532539086144, "(['red', None, None, None, 'forward'], 'right')": 1.9950430506431625, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.5712161516535734, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.7681839940416253, "(['green', None, None, None, 'right'], None)": 1.3299537360770979, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [1.925811487612732, 8.08481728116773, -0.23920340559466, 1.018440451692613] max_q: 8.08481728117 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.9950430506431625] max_q: 1.99504305064 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 1.0258054700585857] max_q: 1.02580547006 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.5712161516535734] max_q: 3.57121615165 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.6355337289055374] max_q: 3.63553372891 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 6.558628554413884, -0.23920340559466, 1.018440451692613] max_q: 6.55862855441 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.5457865930466879] max_q: 1.54578659305 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.887532539086144, 0.5837022185999637] max_q: 2.88753253909 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.054402658223222, 0.5837022185999637] max_q: 3.05440265822 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.7454868116896898] max_q: 1.74548681169 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.76337649165992] max_q: 3.76337649166 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.8528664255879885] max_q: 3.85286642559 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.46850288142604435, 1.2359441341980921, 4.123352542840296] max_q: 4.12335254284 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.3336637899362362] max_q: 1.33366378994 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.46850288142604435, 1.2359441341980921, 4.038897637722842] max_q: 4.03889763772 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.915509379337636] max_q: 3.91550937934 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.5970008495123735] max_q: 1.59700084951 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.9430397785323406] max_q: 3.94303977853 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.962311057968633] max_q: 3.96231105797 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (2, 1), destination = (5, 3), deadline = 25 RoutePlanner.route_to(): destination = (5, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.422907977046722, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 4.014554753306634, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.888260917241845, "(['red', None, None, None, 'forward'], 'right')": 1.2074507220855173, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.975800953574038, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.7681839940416253, "(['green', None, None, None, 'right'], None)": 1.3299537360770979, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: left q: [0.0, 0.9633595754223635, 2.888260917241845, 0.5837022185999637] max_q: 2.88826091724 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.422907977046722, -0.23920340559466, 1.018440451692613] max_q: 5.42290797705 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.2094717804897135, -0.23920340559466, 1.018440451692613] max_q: 5.20947178049 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.975800953574038] max_q: 3.97580095357 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.2074507220855173] max_q: 1.20745072209 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.979430810537932] max_q: 3.97943081054 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.9877847803725475] max_q: 3.98778478037 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.3299537360770979, 0.46850288142604435, 1.2359441341980921, 4.014554753306634] max_q: 4.01455475331 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.427747854655626, -0.23920340559466, 1.018440451692613] max_q: 4.42774785466 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (3, 3), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.363585676457282, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 4.012371540310639, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.055021779655568, "(['red', None, None, None, 'forward'], 'right')": 0.8763331137726896, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9936325592567785, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.7681839940416253, "(['green', None, None, None, 'right'], None)": 1.3299537360770979, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.012371540310639] max_q: 4.01237154031 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.010515809264042] max_q: 4.01051580926 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 0.8763331137726896] max_q: 0.876333113773 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.9936325592567785] max_q: 3.99363255926 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.7681839940416253, 3.9965036840357464] max_q: 3.99650368404 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = left, reward = -1.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.006405950373346] max_q: 4.00640595037 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.567971031109475] max_q: 1.56797103111 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.0040383849759] max_q: 4.00403838498 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.003432627229515] max_q: 4.00343262723 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.997028131430384] max_q: 3.99702813143 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 7.363585676457282, -0.23920340559466, 1.018440451692613] max_q: 7.36358567646 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 2.0521175732452246] max_q: 2.05211757325 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9983573519730315] max_q: 3.99835735197 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9992878063528847] max_q: 3.99928780635 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.002917733145087] max_q: 4.00291773315 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.9861587127989999, 1.594299937258441] max_q: 1.59429993726 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.002480073173324] max_q: 4.00248007317 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.001726919884144] max_q: 4.00172691988 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.06232760950688, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 3.4012088439189005, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.055021779655568, "(['red', None, None, None, 'forward'], 'right')": 1.8753590975069407, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9999391244187823, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.9861587127989999, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.4012088439189005] max_q: 3.40120884392 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 6.06232760950688, -0.23920340559466, 1.018440451692613] max_q: 6.06232760951 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.925811487612732, 5.1249331912808564, -0.23920340559466, 1.018440451692613] max_q: 5.12493319128 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.055021779655568, 0.5837022185999637] max_q: 3.05502177966 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.8753590975069407] max_q: 1.87535909751 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.491027517331065] max_q: 3.49102751733 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.5673733897314053] max_q: 3.56737338973 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9999391244187823] max_q: 3.99993912442 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.9061803501431676] max_q: 1.90618035014 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9999482557559647] max_q: 3.99994825576 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9999560173925697] max_q: 3.99995601739 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.697152241474801] max_q: 3.69715224147 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.956193212588728, -0.23920340559466, 1.018440451692613] max_q: 4.95619321259 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.812764230700418, -0.23920340559466, 1.018440451692613] max_q: 4.8127642307 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (3, 2), destination = (3, 6), deadline = 20 RoutePlanner.route_to(): destination = (3, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.018440451692613, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.968934961490293, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 3.7425794052535806, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.1967685127072327, "(['red', None, None, None, 'forward'], 'right')": 1.4702532976216922, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9545420483960187, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9545420483960187] max_q: 3.9545420484 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 6.968934961490293, -0.23920340559466, 1.018440451692613] max_q: 6.96893496149 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.029148237824276876] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.3, 0.0, -0.029148237824276876] max_q: 0.0 count: 2 best: [0, 2] action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 5.478254473043204, -0.23920340559466, 1.018440451692613] max_q: 5.47825447304 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.7425794052535806] max_q: 3.74257940525 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9295663446652496] max_q: 3.92956634467 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.4702532976216922] max_q: 1.47025329762 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.940131392965462] max_q: 3.94013139297 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.8574880837089243] max_q: 3.85748808371 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9367151876321618] max_q: 3.93671518763 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.256516302086723, -0.23920340559466, 1.3513857614978375] max_q: 5.25651630209 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0)] LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (4, 6), destination = (7, 5), deadline = 20 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.279561411460706, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 3.8788648711525857, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.1967685127072327, "(['red', None, None, None, 'forward'], 'right')": 1.0997153029784383, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9375303620154005, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.0997153029784383] max_q: 1.09971530298 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.1967685127072327, 0.5837022185999637] max_q: 3.19676851271 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 7.279561411460706, -0.23920340559466, 1.3513857614978375] max_q: 7.27956141146 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9375303620154005] max_q: 3.93753036202 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.7117349238040127] max_q: 1.7117349238 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9381009840836683] max_q: 3.93810098408 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.8788648711525857] max_q: 3.87886487115 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.905980472736528] max_q: 3.90598047274 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.8971522330534285] max_q: 1.89715223305 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.9249613938452876] max_q: 3.92496139385 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.9385004195314552] max_q: 3.93850041953 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.777361391504089] max_q: 3.7773613915 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.659585242604131, -0.23920340559466, 1.3513857614978375] max_q: 5.6595852426 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 5.410647456213511, -0.23920340559466, 1.3513857614978375] max_q: 5.41064745621 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.15] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.9382480386214196] max_q: 3.93824803862 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 3.8348901798460755] max_q: 3.83489017985 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0)] LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (7, 6), destination = (8, 3), deadline = 20 RoutePlanner.route_to(): destination = (8, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.69149487177866, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 1.0011937099039314, "(['green', None, None, None, 'right'], 'right')": 3.932007154011905, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.3172532358011475, "(['red', None, None, None, 'forward'], 'right')": 2.0269443495280193, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.859656652869164, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [1.925811487612732, 4.69149487177866, -0.23920340559466, 1.3513857614978375] max_q: 4.69149487178 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.3172532358011475, 0.5837022185999637] max_q: 3.3172532358 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 2.0269443495280193] max_q: 2.02694434953 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.925811487612732, 4.587770641011861, -0.23920340559466, 1.3513857614978375] max_q: 4.58777064101 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.9570266408213928] max_q: 1.95702664082 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 1.0011937099039314] max_q: 1.0011937099 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.859656652869164] max_q: 6.85965665287 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.932007154011905] max_q: 3.93200715401 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.499605044860082, -0.23920340559466, 1.3513857614978375] max_q: 4.49960504486 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.894859405303987] max_q: 1.8948594053 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 0.7010146534183417] max_q: 0.701014653418 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.9915607301102] max_q: 5.99156073011 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.251139117324863] max_q: 4.25113911732 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.033952442197655, -0.23920340559466, 1.3513857614978375] max_q: 4.0339524422 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 4.028859575868006, -0.23920340559466, 1.3513857614978375] max_q: 4.02885957587 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.460630494508389] max_q: 1.46063049451 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 0.4458624554055904] max_q: 0.445862455406 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.213468249726134] max_q: 4.21346824973 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.692826620593669] max_q: 5.69282662059 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.6392962772838624, -0.23920340559466, 1.3513857614978375] max_q: 3.63929627728 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.4183357877484517] max_q: 1.41833578775 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (8, 5), destination = (6, 1), deadline = 30 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 3.360257762260971, "(['green', None, None, None, 'right'], 'left')": 1.2359441341980921, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 0.6229421670158721, "(['green', None, None, None, 'right'], 'right')": 4.1814480122672135, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.072256321546393, "(['red', None, None, None, 'forward'], 'right')": 1.3468737157630617, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.41467260762270164, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.21219583625565, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.3468737157630617] max_q: 1.34687371576 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 0.6229421670158721] max_q: 0.622942167016 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.9948426583986023] max_q: 0.994842658399 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.072256321546393, 0.5837022185999637] max_q: 3.07225632155 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.360257762260971, -0.23920340559466, 1.3513857614978375] max_q: 3.36025776226 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 1.0504285252181673] max_q: 1.05042852522 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.41467260762270164, -0.0907252956723105, 0.0, 0.37950084196349126] max_q: 0.414672607623 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3524717164792963, -0.0907252956723105, 0.0, 0.37950084196349126] max_q: 0.379500841963 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.1814480122672135] max_q: 4.18144801227 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.109744712365405, -0.23920340559466, 1.3513857614978375] max_q: 3.10974471237 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.7428642464354422] max_q: 0.742864246435 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.81278031622588, 0.5837022185999637] max_q: 2.81278031623 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.8882509356210995, -0.23920340559466, 1.3513857614978375] max_q: 2.88825093562 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.9908632687919976, 0.5837022185999637] max_q: 2.99086326879 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.48143460947012595] max_q: 0.48143460947 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.5270136085870494] max_q: 3.52701360859 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.5979615672989915] max_q: 3.5979615673 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.21219583625565] max_q: 5.21219583626 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 3.0550132952779343, -0.23920340559466, 1.3513857614978375] max_q: 3.05501329528 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.6452562209207783] max_q: 0.645256220921 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.833597456261101] max_q: 4.83359745626 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.708557837821935] max_q: 4.70855783782 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 3.900402472547641] max_q: 3.90040247255 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.3984677877826615] max_q: 0.398467787783 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 1.2359441341980921, 4.002439359386973] max_q: 4.00243935939 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.4810508573575] max_q: 4.48105085736 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.0736090474388735] max_q: 4.07360904744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.347776957266081] max_q: 4.34777695727 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Environment.step(): Primary agent ran out of time! Trial aborted. Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (2, 5), destination = (8, 2), deadline = 45 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 3.196761300986244, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], 'right')": 0.5375676368083259, "(['green', None, None, None, 'right'], 'right')": 4.1036928767971235, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.6936042881543982, "(['red', None, None, None, 'forward'], 'right')": 0.6084416465957996, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.3524717164792963, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.295610413676169, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [1.925811487612732, 3.196761300986244, -0.23920340559466, 1.3513857614978375] max_q: 3.19676130099 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.6084416465957996] max_q: 0.608441646596 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3524717164792963, -0.0907252956723105, 0.0, 0.5375676368083259] max_q: 0.537567636808 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.295610413676169] max_q: 4.29561041368 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.1036928767971235] max_q: 4.1036928768 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.9289991576797405, -0.23920340559466, 1.3513857614978375] max_q: 2.92899915768 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.7053757203167823, -0.23920340559466, 1.3513857614978375] max_q: 2.70537572032 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.36717539960642964] max_q: 0.367175399606 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3524717164792963, -0.0907252956723105, 0.0, 0.30693249128707695] max_q: 0.352471716479 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.29960095900740186, -0.0907252956723105, 0.0, 0.30693249128707695] max_q: 0.306932491287 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.088138945277555] max_q: 4.08813894528 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.074918103485921] max_q: 4.07491810349 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.4893486768489075] max_q: 0.489348676849 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.6936042881543982, 0.5837022185999637] max_q: 2.69360428815 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.548839314162712, -0.23920340559466, 1.3513857614978375] max_q: 2.54883931416 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.4252544708489463, -0.23920340559466, 1.3513857614978375] max_q: 2.42525447085 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.251268851624744] max_q: 4.25126885162 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0)] LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (8, 4), destination = (1, 6), deadline = 45 RoutePlanner.route_to(): destination = (1, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.27377967290031924, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 2.33874508052931, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9717524750999997, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.46889338712411355, "(['green', None, None, None, 'right'], 'right')": 4.063680387963033, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.5558570097766955, "(['red', None, None, None, 'forward'], 'right')": 0.19254407379423524, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.29960095900740186, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 7.185440254331775, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.063680387963033] max_q: 4.06368038796 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27377967290031924, -0.9717524750999997, -0.7090072343332587, 0.19254407379423524] max_q: 0.2737796729 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.23271272196527135, -0.9717524750999997, -0.7090072343332587, 0.19254407379423524] max_q: 0.232712721965 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.19780581367048064, -0.9717524750999997, -0.7090072343332587, 0.19254407379423524] max_q: 0.19780581367 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 2.33874508052931, -0.23920340559466, 1.3513857614978375] max_q: 2.33874508053 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.2660031674396524, -0.23920340559466, 1.3513857614978375] max_q: 2.26600316744 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.16813494161990852, -0.9717524750999997, -0.7090072343332587, 0.19254407379423524] max_q: 0.192544073794 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29960095900740186, -0.0907252956723105, 0.0, 0.46889338712411355] max_q: 0.468893387124 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.522392309723889] max_q: 4.52239230972 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 7.185440254331775] max_q: 7.18544025433 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.215083828276892, -0.23920340559466, 1.3513857614978375] max_q: 2.21508382828 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.16813494161990852, -0.9717524750999997, -0.7090072343332587, 0.013662462725099939] max_q: 0.16813494162 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.925811487612732, 2.449412082881289, -0.23920340559466, 1.3513857614978375] max_q: 2.44941208288 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.14291470037692225, -0.9717524750999997, -0.7090072343332587, 0.013662462725099939] max_q: 0.142914700377 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 2.3360256630734404, -0.23920340559466, 1.3513857614978375] max_q: 2.33602566307 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.5558570097766955, 0.5837022185999637] max_q: 2.55585700978 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.1214774953203839, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.12147749532 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.1032558710223263, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.103255871022 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 2.253439588449466, -0.23920340559466, 1.3513857614978375] max_q: 2.25343958845 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 6), deadline = 45 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 1.925811487612732, "(['red', None, None, None, 'forward'], None)": 0.08776749036897735, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.177407711914626, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9620051082719422, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.5616039224533838, "(['green', None, None, None, 'right'], 'right')": 4.843490654956488, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.473340495211694, "(['red', None, None, None, 'forward'], 'right')": 0.013662462725099939, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.29960095900740186, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.707624216182008, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.843490654956488] max_q: 4.84349065496 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.08776749036897735, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.087767490369 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07460236681363075, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.0746023668136 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.06341201179158613, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.0634120117916 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.05390021002284821, -0.9620051082719422, -0.7090072343332587, 0.013662462725099939] max_q: 0.0539002100228 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.925811487612732, 5.177407711914626, -0.23920340559466, 1.3513857614978375] max_q: 5.17740771191 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.098187524598027, 5.000796555127431, -0.23920340559466, 1.3513857614978375] max_q: 5.00079655513 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.6, 0.0, 0.0] max_q: 0.6 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.29960095900740186, -0.0907252956723105, 0.0, 0.5616039224533838] max_q: 0.561603922453 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.473340495211694, 0.5837022185999637] max_q: 2.47334049521 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.100557588589202, -0.23920340559466, 1.3513857614978375] max_q: 4.10055758859 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.085473950300821, -0.23920340559466, 1.3513857614978375] max_q: 4.0854739503 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.707624216182008] max_q: 6.70762421618 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0)] LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (4, 1), destination = (7, 2), deadline = 20 RoutePlanner.route_to(): destination = (7, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.045815178519420977, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.072652857755697, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9620051082719422, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.2431227457173686, "(['green', None, None, None, 'right'], 'right')": 4.996587090896843, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.70233942092994, "(['red', None, None, None, 'forward'], 'right')": 0.47464736219595016, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.29960095900740186, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 9.301480583754707, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.996587090896843] max_q: 4.9965870909 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.47464736219595016] max_q: 0.474647362196 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.29960095900740186, -0.0907252956723105, -0.2550598561488897, 0.2431227457173686] max_q: 0.299600959007 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.2546608151562916, -0.0907252956723105, -0.2550598561488897, 0.2431227457173686] max_q: 0.254660815156 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.70233942092994, 0.5837022185999637] max_q: 2.70233942093 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.2534502578665576] max_q: 0.253450257867 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 2.8969885077904487, 0.5837022185999637] max_q: 2.89698850779 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.6643603673109193, 0.5837022185999637] max_q: 2.66436036731 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (7, 3), destination = (2, 5), deadline = 35 RoutePlanner.route_to(): destination = (2, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.045815178519420977, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 4.072652857755697, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9620051082719422, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.2431227457173686, "(['green', None, None, None, 'right'], 'right')": 5.4928330511909955, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.864706312214281, "(['red', None, None, None, 'forward'], 'right')": 0.6383131091699449, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 9.301480583754707, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right random action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.6383131091699449] max_q: 0.63831310917 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 5.864706312214281, 0.5837022185999637] max_q: 5.86470631221 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.907717105082316] max_q: 0.907717105082 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.2431227457173686] max_q: 0.243122745717 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.4928330511909955] max_q: 5.49283305119 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.840205223396903] max_q: 5.8402052234 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.072652857755697, -0.23920340559466, 1.3513857614978375] max_q: 4.07265285776 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.6215595393199685] max_q: 0.62155953932 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.7314503465632982] max_q: 0.731450346563 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.564174439887367] max_q: 5.56417443989 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.329548273904262] max_q: 5.3295482739 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.061754929092342, -0.23920340559466, 1.3513857614978375] max_q: 4.06175492909 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 0.8943549168878293] max_q: 0.894354916888 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 4.741762830407602, 0.5837022185999637] max_q: 4.74176283041 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [2.098187524598027, 3.5773816878978137, -0.23920340559466, 1.3513857614978375] max_q: 3.5773816879 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (1, 3), destination = (6, 1), deadline = 35 RoutePlanner.route_to(): destination = (6, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.045815178519420977, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.256065535779392, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.9620051082719422, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.8747877170821317, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 5.725905879296189, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 4.6304984058464616, "(['red', None, None, None, 'forward'], 'right')": 1.0126556950061525, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 1.1290520412880574, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 9.301480583754707, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 9.301480583754707] max_q: 9.30148058375 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.256065535779392, -0.23920340559466, 1.3513857614978375] max_q: 6.25606553578 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.917655705412482, -0.23920340559466, 1.3513857614978375] max_q: 5.91765570541 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 1.0126556950061525] max_q: 1.01265569501 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.8747877170821317] max_q: 0.874787717082 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 1.1290520412880574] max_q: 1.12905204129 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.725905879296189] max_q: 5.7259058793 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.742358993788737, -0.23920340559466, 1.3513857614978375] max_q: 4.74235899379 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.631005144720426, -0.23920340559466, 1.3513857614978375] max_q: 4.63100514472 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.46235140195749214] max_q: 0.462351401957 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 7.969922290522723] max_q: 7.96992229052 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 7.374433946944314] max_q: 7.37443394694 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.582156762471284] max_q: 6.58215676247 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 4.6304984058464616, 0.5837022185999637] max_q: 4.63049840585 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.045815178519420977, -0.9620051082719422, -0.7090072343332587, 1.2702128355726172] max_q: 1.27021283557 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.0275627333401625] max_q: 6.02756273334 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.639346912948377] max_q: 5.63934691295 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.46701999740176] max_q: 5.4670199974 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 5.246966997791496] max_q: 5.24696699779 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.272876898454047] max_q: 4.27287689845 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.032235526640191, -0.23920340559466, 1.3513857614978375] max_q: 4.03223552664 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (2, 1), destination = (8, 2), deadline = 35 RoutePlanner.route_to(): destination = (8, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.045815178519420977, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.0274001976441625, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.8682207422472137, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.23194536368594, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.971581995429605, "(['red', None, None, None, 'forward'], 'right')": 0.9923866668123315, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.5837022185999637, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.195464412814548, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: left q: [0.0, 0.9633595754223635, 3.971581995429605, 0.5837022185999637] max_q: 3.97158199543 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.0274001976441625, -0.23920340559466, 1.3513857614978375] max_q: 7.02740019764 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.098187524598027, 5.668038138372763, -0.23920340559466, 1.3513857614978375] max_q: 5.66803813837 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 0.9923866668123315] max_q: 0.992386666812 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.975844696115164, 0.5837022185999637] max_q: 3.97584469612 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 0.6935286667904818] max_q: 0.69352866679 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.195464412814548] max_q: 5.19546441281 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.5328233463005643, 0.46850288142604435, 0.7151608939386644, 4.23194536368594] max_q: 4.23194536369 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.716484696882784, -0.23920340559466, 1.3513857614978375] max_q: 4.71648469688 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.609011992350366, -0.23920340559466, 1.3513857614978375] max_q: 4.60901199235 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 1), deadline = 25 RoutePlanner.route_to(): destination = (7, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.517660193497811, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.2540406432231597, "(['red', None, None, None, 'left'], 'right')": 0.8682207422472137, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.197153559133048, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.9794679916978892, "(['red', None, None, None, 'forward'], 'right')": 1.0429427712857549, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.871616893523075, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.5328233463005643, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 1.0429427712857549] max_q: 1.04294277129 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.9794679916978892, 0.38882466435705665] max_q: 3.9794679917 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.517660193497811, -0.23920340559466, 1.3513857614978375] max_q: 7.5176601935 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.990011164473138, -0.23920340559466, 1.3513857614978375] max_q: 6.99001116447 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.541509489802166, -0.23920340559466, 1.3513857614978375] max_q: 6.5415094898 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.3, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, -0.15, -0.15] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.15, -0.15] max_q: 0.0 count: 2 best: [0, 1] action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.8682207422472137] max_q: 0.868220742247 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.197153559133048] max_q: 4.19715355913 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.167580525263091] max_q: 4.16758052526 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.871616893523075] max_q: 4.87161689352 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.2540406432231597, 0.0, 0.0] max_q: 0.254040643223 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.6314983424371965] max_q: 4.63149834244 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.142443446473627] max_q: 4.14244344647 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.536773591071617] max_q: 4.53677359107 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.435212988200221, -0.23920340559466, 1.3513857614978375] max_q: 5.4352129882 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (6, 6), destination = (1, 3), deadline = 40 RoutePlanner.route_to(): destination = (1, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.219931039970188, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 1.0551366885145304, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.499710412531539, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.9825477929432056, "(['red', None, None, None, 'forward'], 'right')": 1.7077089689246998, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.300698075629862, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 0.856156345338705, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 1.7077089689246998] max_q: 1.70770896892 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.9825477929432056, 0.38882466435705665] max_q: 3.98254779294 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 1.0551366885145304] max_q: 1.05513668851 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.300698075629862] max_q: 4.30069807563 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.2555933642853825] max_q: 4.25559336429 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 8.219931039970188, -0.23920340559466, 1.3513857614978375] max_q: 8.21993103997 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.58694138397466, -0.23920340559466, 1.3513857614978375] max_q: 7.58694138397 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.1788531753982205, -0.23920340559466, 1.3513857614978375] max_q: 6.1788531754 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 1.786628044106395] max_q: 1.78662804411 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.5460539583374233, 0.38882466435705665] max_q: 3.54605395834 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.103871916879498] max_q: 4.10387191688 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (5, 3), destination = (2, 1), deadline = 25 RoutePlanner.route_to(): destination = (2, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 5.193191429394713, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.7468661852373508, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.499710412531539, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.1942676986217986, "(['red', None, None, None, 'forward'], 'right')": 1.3686338374904357, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.997666903695379, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 0.856156345338705, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right random action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.997666903695379] max_q: 6.9976669037 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 3.499710412531539] max_q: 3.49971041253 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.193191429394713, -0.23920340559466, 1.3513857614978375] max_q: 5.19319142939 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.7090072343332587, 1.3686338374904357] max_q: 1.36863383749 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.1942676986217986, 0.38882466435705665] max_q: 3.19426769862 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.235234000576299, -0.23920340559466, 1.3513857614978375] max_q: 4.23523400058 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 3.574753850651808] max_q: 3.57475385065 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.199948900489854, -0.23920340559466, 1.3513857614978375] max_q: 4.19994890049 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (3, 3), destination = (4, 6), deadline = 20 RoutePlanner.route_to(): destination = (4, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.169956565416376, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.7468661852373508, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.6385407730540367, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.3151275438285284, "(['red', None, None, None, 'forward'], 'right')": 1.44332878632975, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.023323394466496, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.7090072343332587, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 0.856156345338705, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 3.6385407730540367] max_q: 3.63854077305 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 6.023323394466496] max_q: 6.02332339447 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.0504770503078] max_q: 4.05047705031 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [2.098187524598027, 7.169956565416376, -0.23920340559466, 1.3513857614978375] max_q: 7.16995656542 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.856156345338705, -0.15, -0.15] max_q: 0.856156345339 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.44332878632975] max_q: 1.44332878633 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.423897933672717] max_q: 5.42389793367 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 5.034066347360857] max_q: 5.03406634736 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.248918625266367] max_q: 4.24891862527 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.7473930475922685, -0.23920340559466, 1.3513857614978375] max_q: 5.74739304759 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 4), deadline = 35 RoutePlanner.route_to(): destination = (1, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.784699553571631, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.7468661852373508, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.211580831476412, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.3151275438285284, "(['red', None, None, None, 'forward'], 'right')": 1.0768294683802873, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.7611842369425545, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.211580831476412] max_q: 4.21158083148 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.784699553571631, -0.23920340559466, 1.3513857614978375] max_q: 7.78469955357 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.216994620535886, -0.23920340559466, 1.3513857614978375] max_q: 7.21699462054 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.0768294683802873] max_q: 1.07682946838 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.3151275438285284, 0.38882466435705665] max_q: 3.31512754383 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.17984370675495] max_q: 4.17984370675 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.4757937260610254] max_q: 1.47579372606 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.240068230269848] max_q: 4.24006823027 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.7611842369425545] max_q: 4.76118423694 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.647006601401171] max_q: 4.6470066014 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.813420654632163, -0.23920340559466, 1.3513857614978375] max_q: 5.81342065463 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (2, 1), destination = (7, 6), deadline = 50 RoutePlanner.route_to(): destination = (7, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.8027406522138048, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.6142625365289027, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.541407556437338, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.7468661852373508, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.282225396730277, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.417858412254249, "(['red', None, None, None, 'forward'], 'right')": 1.7550687064375423, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.49523843049036, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876} next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.7550687064375423] max_q: 1.75506870644 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.417858412254249, 0.38882466435705665] max_q: 3.41785841225 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 8.541407556437338, -0.23920340559466, 1.3513857614978375] max_q: 8.54140755644 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.860196422971737, -0.23920340559466, 1.3513857614978375] max_q: 7.86019642297 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 47, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.281166959525976, -0.23920340559466, 1.3513857614978375] max_q: 7.28116695953 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.788991915597078, -0.23920340559466, 1.3513857614978375] max_q: 6.7889919156 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.6142625365289027, 1.193536305127879, 0.8372830155436952, 4.49523843049036] max_q: 4.49523843049 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 2.35975922797188] max_q: 2.35975922797 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.7931266754577526, 1.193536305127879, 0.8372830155436952, 4.420952665916806] max_q: 4.42095266592 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.193536305127879, 0.8372830155436952, 4.357809766029285] max_q: 4.35780976603 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.282225396730277] max_q: 4.28222539673 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.855795343776098] max_q: 1.85579534378 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: right q: [0.4204110978320707, 0.0, 2.8027406522138048, 0.0] max_q: 2.80274065221 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.5051796504161112, 0.38882466435705665] max_q: 3.50517965042 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.239891587220734] max_q: 4.23989158722 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.7953704647999618] max_q: 1.7953704648 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.193536305127879, 0.8372830155436952, 4.292800645730041] max_q: 4.29280064573 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.2118442079140195] max_q: 4.21184420791 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.193536305127879, 0.8372830155436952, 4.236737083198131] max_q: 4.2367370832 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.9626980591270335] max_q: 1.96269805913 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.180067576726916] max_q: 4.18006757673 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.193536305127879, 0.8372830155436952, 4.192726094747728] max_q: 4.19272609475 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.154956217921001] max_q: 4.15495621792 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.706258225113737, -0.23920340559466, 1.3513857614978375] max_q: 5.70625822511 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (7, 1), destination = (1, 2), deadline = 35 RoutePlanner.route_to(): destination = (1, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.455838553409169, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.450319491346676, "(['green', None, None, None, 'right'], 'left')": 0.7151608939386644, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.7468661852373508, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.131712785232851, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.1656556830768805, "(['red', None, None, None, 'forward'], 'right')": 2.079827375155984, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.23920340559466, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.163817180535569, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.193536305127879, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right random action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.163817180535569] max_q: 4.16381718054 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': 'left'}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 8.450319491346676, -0.23920340559466, 1.3513857614978375] max_q: 8.45031949135 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 2.079827375155984] max_q: 2.07982737516 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.1656556830768805, 0.38882466435705665] max_q: 3.16565568308 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.6178532688825862] max_q: 1.61785326888 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.2908073306153485, 0.38882466435705665] max_q: 3.29080733062 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 2.0065769507502207] max_q: 2.00657695075 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.7468661852373508] max_q: 0.746866185237 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.514672026374898] max_q: 3.51467202637 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.587471222418663] max_q: 3.58747122242 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.827197750216071, -0.23920340559466, 1.3513857614978375] max_q: 6.82719775022 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.4031180876836595, -0.23920340559466, 1.3513857614978375] max_q: 6.40311808768 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.7151608939386644, 4.131712785232851] max_q: 4.13171278523 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.5555904081376877] max_q: 1.55559040814 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.649350539055863] max_q: 3.64935053906 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.7604856069173103] max_q: 3.76048560692 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.7964127658797135] max_q: 3.79641276588 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 3.8269508509977563] max_q: 3.826950851 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (8, 1), destination = (3, 4), deadline = 40 RoutePlanner.route_to(): destination = (3, 4) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3513857614978375, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.455838553409169, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.04265037453111, "(['green', None, None, None, 'right'], 'left')": 0.9146854667946616, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.2185028814260443, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.48483625745174824, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.039601530521375, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.397186231023046, "(['red', None, None, None, 'forward'], 'right')": 1.8453108418760478, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.21646169288284783, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 6.8848058252766355, "(['green', None, 'forward', None, 'forward'], 'forward')": 8.501184101126679, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.702549376280352, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 0.9146854667946616, 4.039601530521375] max_q: 4.03960153052 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.04265037453111, -0.04064575763485481, 1.3513857614978375] max_q: 6.04265037453 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.736252818351443, -0.04064575763485481, 1.3513857614978375] max_q: 5.73625281835 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.475814895598726, -0.04064575763485481, 1.3513857614978375] max_q: 5.4758148956 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.8453108418760478] max_q: 1.84531084188 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.9633595754223635, 3.397186231023046, 0.38882466435705665] max_q: 3.39718623102 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 6.8848058252766355] max_q: 6.88480582528 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.8481976472933106] max_q: 1.84819764729 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.3, 0.0, 1.2185028814260443] max_q: 1.21850288143 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right random action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.21646169288284783, -0.0907252956723105, -0.2550598561488897, 0.48483625745174824] max_q: 0.484836257452 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.420968000199314] max_q: 1.4209680002 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 6.45208495148514] max_q: 6.45208495149 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.702549376280352, 0.46850288142604435, 1.4029206580706184, 4.391375653382989] max_q: 4.39137565338 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.4029206580706184, 4.33266930537554] max_q: 4.33266930538 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.9633595754223635, 3.0507558003338944, 0.38882466435705665] max_q: 3.05075580033 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 6.084272208762369] max_q: 6.08427220876 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.0578228001694168] max_q: 1.05782280017 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 5.7716313774480135] max_q: 5.77163137745 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 5.505886670830812] max_q: 5.50588667083 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.4029206580706184, 4.282768909569208] max_q: 4.28276890957 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.709867053200515, -0.04064575763485481, 0.9546434530738986] max_q: 4.7098670532 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (4, 6), destination = (5, 1), deadline = 30 RoutePlanner.route_to(): destination = (5, 1) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.18092862498544438, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.455838553409169, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.603386995220438, "(['green', None, None, None, 'right'], 'left')": 1.4029206580706184, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.262110818833986, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.240353573133827, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.7748456830588237, "(['red', None, None, None, 'forward'], 'right')": 1.296956018098669, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.19083980784309137, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 5.096536006016949, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8416849592025772, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.4029206580706184, 4.240353573133827] max_q: 4.24035357313 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.7748456830588237, 0.38882466435705665] max_q: 2.77484568306 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.18092862498544438, -0.7718059287058304, -0.5798057460838186, 1.296956018098669] max_q: 1.2969560181 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.4029206580706184, 4.204300537163753] max_q: 4.20430053716 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 5.096536006016949] max_q: 5.09653600602 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.4204110978320707, 0.0, 2.455838553409169, 0.0] max_q: 2.45583855341 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.53595098722324] max_q: 4.53595098722 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.307490776917169] max_q: 4.30749077692 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.098187524598027, 7.603386995220438, -0.04064575763485481, 0.9546434530738986] max_q: 7.60338699522 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.062878945937372, -0.04064575763485481, 0.9546434530738986] max_q: 7.06287894594 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 3.6152435438420185] max_q: 3.61524354384 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (5, 2), destination = (8, 6), deadline = 35 RoutePlanner.route_to(): destination = (8, 6) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.603447104046766, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.262110818833986, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 6.672957012265716, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.5817086009662744, "(['red', None, None, None, 'forward'], 'right')": 0.9524126153838687, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.19083980784309137, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.4555583391397535, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8416849592025772, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: forward q: [2.098187524598027, 6.603447104046766, -0.04064575763485481, 0.9546434530738986] max_q: 6.60344710405 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.9524126153838687] max_q: 0.952412615384 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.19083980784309137, -0.0907252956723105, -0.2550598561488897, 0.262110818833986] max_q: 0.262110818834 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 6.672957012265716] max_q: 6.67295701227 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.4555583391397535] max_q: 4.45555833914 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.365274865140316, -0.04064575763485481, 0.9546434530738986] max_q: 5.36527486514 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.6595507230762883] max_q: 0.659550723076 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.19083980784309137, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.190839807843 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.9633595754223635, 2.5817086009662744, 0.38882466435705665] max_q: 2.58170860097 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 5.939403659456963] max_q: 5.93940365946 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.410618114614845] max_q: 0.410618114615 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 5.648493110538419] max_q: 5.64849311054 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.609801386316372] max_q: 4.60980138632 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.518331178368916] max_q: 4.51833117837 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.8056264323393412] max_q: 0.805626432339 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.440581501613578] max_q: 4.44058150161 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 5.401219143957656] max_q: 5.40121914396 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 5.191036272364007] max_q: 5.19103627236 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.454625014059665, -0.04064575763485481, 0.9546434530738986] max_q: 4.45462501406 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 3.718237509841765, -0.04064575763485481, 0.9546434530738986] max_q: 3.71823750984 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (3, 2), destination = (7, 5), deadline = 35 RoutePlanner.route_to(): destination = (7, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.7605018833654995, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.07279419600888812, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 5.012380831509406, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.431528096176386, "(['red', None, None, None, 'forward'], 'right')": 0.5347824674884399, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.16221383666662767, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.374494276371541, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8416849592025772, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 5.012380831509406] max_q: 5.01238083151 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.5347824674884399] max_q: 0.534782467488 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.16221383666662767, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.162213836667 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.1378817611666335, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.137881761167 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.11719949699163847, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.117199496992 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 2.431528096176386, 0.38882466435705665] max_q: 2.43152809618 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.412568688479116, -0.04064575763485481, 0.9546434530738986] max_q: 5.41256868848 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.374494276371541] max_q: 4.37449427637 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.0362330305137752] max_q: 1.03623303051 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.31832013491581] max_q: 4.31832013492 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.8605237067829945] max_q: 4.86052370678 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.731445150765545] max_q: 4.73144515077 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.544233036512447, -0.04064575763485481, 0.9546434530738986] max_q: 4.54423303651 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (8, 3), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.46259808103558, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": 0.07279419600888812, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 4.621728378150713, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.666798881749928, "(['red', None, None, None, 'forward'], 'right')": 0.730798075936709, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.09961957244289268, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.351902650458516, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8416849592025772, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 2.666798881749928, 0.38882466435705665] max_q: 2.66679888175 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.46259808103558, -0.04064575763485481, 0.9546434530738986] max_q: 7.46259808104 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.730798075936709] max_q: 0.730798075937 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.09961957244289268, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.0996195724429 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.08467663657645877, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.0846766365765 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.07197514108998995, -0.0907252956723105, -0.2550598561488897, 0.07279419600888812] max_q: 0.0727941960089 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.621728378150713] max_q: 4.62172837815 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.528469121428105] max_q: 4.52846912143 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.933438368115412, -0.04064575763485481, 0.9546434530738986] max_q: 5.93343836812 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 2.866779049487439, 0.38882466435705665] max_q: 2.86677904949 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.251574408373008] max_q: 1.25157440837 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.351902650458516] max_q: 4.35190265046 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.3137116683030445] max_q: 4.3137116683 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.266654918057588] max_q: 4.26665491806 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.9138382471170569] max_q: 0.913838247117 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8416849592025772, 0.46850288142604435, 1.5965248615519751, 4.4491987532138895] max_q: 4.44919875321 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.7144391272497224] max_q: 3.71443912725 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.8372830155436952, 4.22665668034895] max_q: 4.22665668035 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.94114301893674, -0.04064575763485481, 0.9546434530738986] max_q: 4.94114301894 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0)] LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 3), deadline = 30 RoutePlanner.route_to(): destination = (7, 3) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 7.243428847129085, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": -0.06100193015277685, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.7572732581622637, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.036762192064323, "(['red', None, None, None, 'forward'], 'right')": 1.2308582258224505, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.07197514108998995, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.122250664968604, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8463453405292622, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: left q: [0.07197514108998995, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.07197514109 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.06117886992649145, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0611788699265 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.05200203943751773, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0520020394375 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.044201733521890066, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0442017335219 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.036762192064323, 0.38882466435705665] max_q: 3.03676219206 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.2308582258224505] max_q: 1.23085822582 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.1812478632546743, 0.38882466435705665] max_q: 3.18124786325 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 7.243428847129085, -0.04064575763485481, 0.9546434530738986] max_q: 7.24342884713 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.798115085145078] max_q: 1.79811508515 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.304060683766473, 0.38882466435705665] max_q: 3.30406068377 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.756914520059722, -0.04064575763485481, 0.9546434530738986] max_q: 6.75691452006 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.343377342050763, -0.04064575763485481, 0.9546434530738986] max_q: 6.34337734205 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.03757147349360655, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0375714734936 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.031935752469565565, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0319357524696 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.02714538959913073, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0271453895991 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.408451581201502, 0.38882466435705665] max_q: 3.4084515812 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.991870740743148, -0.04064575763485481, 0.9546434530738986] max_q: 5.99187074074 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (5, 3), destination = (2, 2), deadline = 20 RoutePlanner.route_to(): destination = (2, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.0907252956723105, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 8.001069191876201, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": -0.06100193015277685, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.7572732581622637, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 2.98937714401494, "(['red', None, None, None, 'forward'], 'right')": 1.3783978223733162, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.023073581159261117, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.122250664968604, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8463453405292622, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 0.8420756433007338, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: forward q: [2.098187524598027, 8.001069191876201, -0.04064575763485481, 0.9546434530738986] max_q: 8.00106919188 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.3783978223733162] max_q: 1.37839782237 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 2.98937714401494, 0.38882466435705665] max_q: 2.98937714401 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.7760046918117218] max_q: 1.77600469181 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.8420756433007338, 0.0] max_q: 0.842075643301 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.023073581159261117, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0230735811593 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.019612543985371947, -0.0907252956723105, -0.2550598561488897, -0.06100193015277685] max_q: 0.0196125439854 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.016670662387566156, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.0166706623876 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.014170063029431232, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.0141700630294 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 2.696025037984347, 0.38882466435705665] max_q: 2.69602503798 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (1, 4), destination = (5, 2), deadline = 30 RoutePlanner.route_to(): destination = (5, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 0.9546434530738986, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.36100710761248245, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.407508107669337, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": -0.06100193015277685, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.7572732581622637, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 5.4890242096252955, "(['red', None, None, None, 'forward'], 'right')": 1.4024160440995954, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.012044553575016546, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 4.122250664968604, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.8372830155436952, "(['green', None, None, None, 'right'], None)": 1.8463453405292622, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 1.5938567060081654, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 4.122250664968604] max_q: 4.12225066497 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.4024160440995954] max_q: 1.4024160441 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.012044553575016546, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.012044553575 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 5.4890242096252955, 0.38882466435705665] max_q: 5.48902420963 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.407508107669337, -0.04064575763485481, 0.9546434530738986] max_q: 6.40750810767 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 5.265670578181501, 0.38882466435705665] max_q: 5.26567057818 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 4.287505085307865, 0.38882466435705665] max_q: 4.28750508531 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.042053637484656] max_q: 1.04205363748 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.7572732581622637] max_q: 3.75727325816 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 4.103913065223313] max_q: 4.10391306522 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 4.049590881730881] max_q: 4.04959088173 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 5.241563720991234, -0.04064575763485481, 1.3044849753004142] max_q: 5.24156372099 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.3656721043879443] max_q: 1.36567210439 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.8456782404970813] max_q: 3.8456782405 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 4.011565353286179] max_q: 4.01156535329 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.893709571340884] max_q: 3.89370957134 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.473945420352055, -0.04064575763485481, 1.3044849753004142] max_q: 4.47394542035 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 4.402853607299247, -0.04064575763485481, 1.3044849753004142] max_q: 4.4028536073 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0), (10, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (6, 3), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3044849753004142, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.36100710761248245, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 6.833620718418935, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": -0.06100193015277685, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.909653135639751, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.6027892402963198, "(['red', None, None, None, 'forward'], 'right')": 1.0108212887297525, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.010237870538764064, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9921521830014575, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.9044357106258771, "(['green', None, None, None, 'right'], None)": 1.8463453405292622, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 1.5938567060081654, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.9921521830014575] max_q: 3.992152183 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.0108212887297525] max_q: 1.01082128873 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.010237870538764064, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.0102378705388 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.008702189957949455, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.00870218995795 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.007396861464257037, -0.36100710761248245, -0.2550598561488897, -0.06100193015277685] max_q: 0.00739686146426 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.6623708542518716, 0.38882466435705665] max_q: 3.66237085425 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.7091980954202897] max_q: 0.70919809542 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.9933293555512384] max_q: 3.99332935555 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.909653135639751] max_q: 3.90965313564 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.9817785192318293] max_q: 3.98177851923 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.833620718418935, -0.04064575763485481, 1.3044849753004142] max_q: 6.83362071842 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.4528183811072462] max_q: 0.452818381107 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.9340239728326] max_q: 3.93402397283 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.9773485593871705] max_q: 3.97734855939 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.8463453405292622, 0.46850288142604435, 1.5965248615519751, 3.9504190648908954] max_q: 3.95041906489 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 6.408577610656094, -0.04064575763485481, 1.3044849753004142] max_q: 6.40857761066 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0), (10, 12.0), (11, 12.0), (4, 12.0)] LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (6, 3), destination = (3, 2), deadline = 20 RoutePlanner.route_to(): destination = (3, 2) q: {"(['green', None, None, None, 'forward'], 'right')": 1.3044849753004142, "(['green', 'left', None, None, 'forward'], 'forward')": 1.63508363828838, "(['red', None, None, 'right', 'left'], 'left')": -0.3, "(['green', None, None, None, 'forward'], None)": 2.098187524598027, "(['red', None, None, None, 'forward'], None)": 0.26951192979739136, "(['green', None, 'right', None, 'left'], 'forward')": 0.2536142176066764, "(['red', None, None, 'left', 'right'], 'left')": -0.3, "(['green', None, None, 'right', 'right'], 'forward')": 0.8996500355543068, "(['green', None, None, 'left', 'right'], 'left')": 2.2494796354699043, "(['red', None, None, None, 'left'], 'forward')": -0.36100710761248245, "(['red', None, None, None, 'right'], None)": 1.7931266754577526, "(['red', 'forward', 'forward', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], 'forward')": 0.4550491951414751, "(['green', None, 'left', 'left', 'right'], 'right')": 1.1272008039562347, "(['red', 'right', None, None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, None, 'forward'], 'forward')": 9.04729096905768, "(['green', None, None, None, 'right'], 'left')": 1.5965248615519751, "(['green', None, None, None, 'right'], 'forward')": 0.46850288142604435, "(['red', None, 'right', None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'right'], None)": 0.0, "(['green', None, 'right', None, 'forward'], 'forward')": 0.6, "(['red', 'left', None, None, 'right'], 'right')": 1.452952016998231, "(['red', None, None, None, 'forward'], 'forward')": -0.7718059287058304, "(['green', None, None, None, 'left'], None)": 0.3647292144264579, "(['red', 'left', None, None, 'forward'], 'left')": -0.3, "(['green', None, None, 'forward', 'left'], 'forward')": 0.18609895353339134, "(['red', None, None, None, 'left'], 'right')": -0.06100193015277685, "(['red', None, 'forward', None, 'right'], 'right')": 1.9952220875632058, "(['green', None, None, None, 'right'], 'right')": 3.961799373119325, "(['red', 'left', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, None, 'left'], 'forward')": 0.9633595754223635, "(['green', None, None, None, 'left'], 'left')": 3.164602697813003, "(['red', None, None, None, 'forward'], 'right')": 1.1282595083734863, "(['green', None, 'forward', None, 'right'], 'left')": 0.8561436324273012, "(['green', 'left', 'right', None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'left'], None)": 0.0062873322446184805, "(['green', 'forward', None, None, 'left'], None)": 0.0, "(['red', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2550598561488897, "(['red', None, 'forward', None, 'forward'], 'right')": -0.15, "(['green', None, None, None, 'forward'], 'left')": -0.04064575763485481, "(['red', 'forward', None, None, 'left'], 'left')": -0.3, "(['green', None, 'left', None, 'right'], 'right')": 2.2492223107960685, "(['green', None, None, None, 'left'], 'right')": 0.38882466435705665, "(['red', None, None, 'right', 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'right')": 3.9767068513046535, "(['green', None, 'forward', None, 'forward'], 'forward')": 6.763974070818572, "(['red', None, 'left', None, 'right'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'left')": 0.9044357106258771, "(['green', None, None, None, 'right'], None)": 1.8463453405292622, "(['red', None, 'right', None, 'right'], 'left')": -0.3, "(['red', 'forward', None, None, 'right'], 'forward')": -0.3, "(['red', 'right', None, None, 'right'], 'forward')": -0.3, "(['green', None, None, 'left', 'forward'], 'forward')": 4.308758161044622, "(['red', 'forward', None, None, 'left'], 'right')": 0.5133265746458654, "(['red', None, None, None, 'forward'], 'left')": -0.5798057460838186, "(['red', None, 'left', None, 'forward'], 'forward')": -0.3, "(['green', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, None, 'right', 'forward'], None)": 0.0, "(['red', 'right', None, None, 'forward'], 'forward')": -0.3, "(['green', None, None, 'forward', 'forward'], None)": 0.0, "(['green', None, 'left', None, 'forward'], 'left')": -0.15, "(['green', None, 'right', None, 'forward'], None)": 0.0, "(['green', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'right'], 'right')": 1.156737836870504, "(['green', None, None, 'left', 'forward'], None)": 0.0, "(['red', None, 'right', 'right', 'forward'], 'forward')": -0.3, "(['green', None, None, 'right', 'left'], 'left')": 0.8748854275839583, "(['green', None, 'right', None, 'forward'], 'left')": -0.15, "(['green', None, 'left', None, 'forward'], 'forward')": 2.061418398875934, "(['green', None, 'left', None, 'forward'], 'right')": -0.15, "(['green', 'left', None, None, 'right'], 'right')": 1.3192059736953143, "(['green', 'forward', None, None, 'forward'], 'right')": -0.15, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', 'right', None, None, 'forward'], 'left')": -0.3, "(['red', None, None, None, 'right'], 'forward')": 1.1600479906698504, "(['green', None, 'left', None, 'left'], 'left')": 1.5938567060081654, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'right')": -0.029148237824276876, "(['green', None, None, 'left', 'right'], None)": 0.4204110978320707} next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 1.1282595083734863] max_q: 1.12825950837 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, -0.3, 0.5133265746458654] max_q: 0.513326574646 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.9767068513046535] max_q: 3.9767068513 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.7931266754577526, 1.1600479906698504, 0.9044357106258771, 3.980200823608955] max_q: 3.98020082361 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.26951192979739136, -0.7718059287058304, -0.5798057460838186, 0.6397816558614403] max_q: 0.639781655861 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.3647292144264579, 0.9633595754223635, 3.164602697813003, 0.38882466435705665] max_q: 3.16460269781 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 9.04729096905768, -0.04064575763485481, 1.3044849753004142] max_q: 9.04729096906 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.098187524598027, 8.290197323699028, -0.04064575763485481, 1.3044849753004142] max_q: 8.2901973237 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0), (10, 12.0), (11, 12.0), (4, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 epsilon: 0.1 gamma: 0.5 alpha: 0.3 defaultq: 0.0 Results: [(4, 12.0), (26, 12.0), (20, 12.0), (30, 12.0), (24, 12.0), (19, 12.0), (24, 12.0), (26, 9.5), (16, 12.0), (13, 12.0), (14, 12.0), (12, 12.0), (20, 12.0), (9, 12.0), (23, 9.5), (27, 12.0), (15, 12.0), (12, 9.5), (19, 12.0), (27, 12.0), (19, 12.0), (19, 12.0), (12, 12.0), (18, 12.0), (12, 12.0), (20, 12.0), (14, 12.0), (26, 12.0), (9, 12.0), (10, 12.0), (11, 12.0), (25, 12.0), (12, 12.0), (22, 12.0), (16, 12.0), (24, 12.0), (22, 12.0), (16, 12.0), (22, 12.0), (11, 12.0), (8, 12.0), (17, 12.0), (29, 12.0), (15, 12.0), (6, 12.0), (14, 12.0), (13, 12.0), (16, 12.0), (17, 12.0), (17, 12.0), (5, 12.0), (11, 12.0), (19, 12.0), (8, 12.0), (14, 12.0), (18, 9.5), (3, 12.0), (19, 12.0), (4, 12.0), (15, 12.0), (21, 9.5), (13, 12.0), (27, 12.0), (2, 12.0), (5, 12.0), (16, 12.0), (16, 12.0), (7, 12.0), (2, 12.0), (28, 12.0), (25, 12.0), (30, 12.0), (12, 12.0), (19, 12.0), (12, 12.0), (24, 12.0), (8, 12.0), (29, 12.0), (16, 12.0), (10, 12.0), (25, 12.0), (25, 12.0), (14, 12.0), (13, 12.0), (18, 12.0), (16, 12.0), (21, 12.0), (6, 12.0), (14, 12.0), (10, 12.0), (11, 12.0), (4, 12.0), (13, 12.0)] ================================================ FILE: p4-smartcab/smartcab/trial-data/trial9.js ================================================ ((python2.7)) jessica@Bourbaki:~/Dropbox/data-science/ml-nd/smartcab$ python smartcab/agent.py Simulator.run(): Trial 0 Environment.reset(): Trial set up with start = (8, 5), destination = (2, 5), deadline = 30 RoutePlanner.route_to(): destination = (2, 5) q: {} next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 1 Environment.reset(): Trial set up with start = (8, 2), destination = (5, 5), deadline = 30 RoutePlanner.route_to(): destination = (5, 5) q: {"(['green', None, None, None, 'left'], 'right')": -0.5, "(['green', None, None, None, 'forward'], 'forward')": 12.0} next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, -1.0, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, -1.0, -1.0, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.25, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.5] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 12.0, 0.0, 0.0] max_q: 12.0 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 10.767857142857144, 0.0, 0.0] max_q: 10.7678571429 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.3333333333333333, -0.5] max_q: 0.333333333333 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.0, 0.0, -0.09090909090909091, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.5625] max_q: 2.5625 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.005494505494505495, 0.0, -0.09090909090909091, 0.15384615384615385] max_q: 0.153846153846 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.11764705882352941] max_q: 0.117647058824 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 10.344866071428573, 0.0, 0.0] max_q: 10.3448660714 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.005494505494505495, 0.0, -0.09090909090909091, 0.24455936220642102] max_q: 0.244559362206 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.673549107142857] max_q: 2.67354910714 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 0.32279770882712056] max_q: 0.322797708827 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 0.39089404755254425] max_q: 0.390894047553 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.20588235294117646] max_q: 0.205882352941 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 10.040166440217394, 0.0, 0.0] max_q: 10.0401664402 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Simulator.run(): Trial 2 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 1), deadline = 30 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', None, None, None, 'right'], None)": 0.005494505494505495, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['red', None, None, None, 'right'], 'left')": -0.09090909090909091, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['red', None, None, None, 'right'], 'right')": 0.45203858787104584, "(['green', None, None, None, 'forward'], 'forward')": 9.815495527626814, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -1.0, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 0.2712981744421907, "(['green', None, None, None, 'left'], 'left')": 0.5185185185185185, "(['red', None, None, None, 'forward'], 'right')": 2.600078125, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065, "(['red', None, None, None, 'left'], None)": 0.0} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, -0.03333333333333333, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, -1.0, -0.03333333333333333, 0.0] max_q: 0.0 count: 2 best: [0, 3] action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 0.45203858787104584] max_q: 0.452038587871 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.5185185185185185, -0.5] max_q: 0.518518518519 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.0132420876543957] max_q: 1.01324208765 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.2712981744421907] max_q: 0.271298174442 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.1152790876150047] max_q: 1.11527908762 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.600078125] max_q: 2.600078125 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.2262298919375045] max_q: 1.22622989194 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -0.03333333333333333, 1.1130096469677615] max_q: 1.11300964697 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.41535665990534143] max_q: 0.415356659905 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 9.815495527626814, 0.0, 0.08889322916666666] max_q: 9.81549552763 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 9.653953985192736, 0.0, 0.08889322916666666] max_q: 9.65395398519 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.7291973849152433] max_q: 2.72919738492 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.3186888955395877] max_q: 1.31868889554 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.3635319801895767] max_q: 1.36353198019 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = forward, reward = 12.0 Simulator.run(): Trial 3 Environment.reset(): Trial set up with start = (5, 1), destination = (2, 5), deadline = 35 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.08889322916666666, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, None, None, 'right'], None)": 0.005494505494505495, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 9.505165722424508, "(['green', None, None, None, 'right'], 'right')": 0.5207873463787137, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 0.736111111111111, "(['red', None, None, None, 'forward'], 'right')": 2.635967450292362, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 1.4009012173979007, "(['red', None, None, None, 'right'], 'left')": -0.09090909090909091, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -1.0, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.736111111111111, -0.5] max_q: 0.736111111111 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.635967450292362] max_q: 2.63596745029 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 1.0625, -0.5] max_q: 1.0625 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.905403352112344] max_q: 2.90540335211 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 1.1964285714285716, -0.5] max_q: 1.19642857143 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 4 Environment.reset(): Trial set up with start = (6, 6), destination = (7, 3), deadline = 20 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.08889322916666666, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, None, None, 'right'], None)": 0.005494505494505495, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 9.505165722424508, "(['green', None, None, None, 'right'], 'right')": 0.5207873463787137, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 2.396825396825397, "(['red', None, None, None, 'forward'], 'right')": 2.6613156426053224, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 1.4009012173979007, "(['red', None, None, None, 'right'], 'left')": -0.09090909090909091, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -1.0, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.4009012173979007] max_q: 1.4009012174 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 0.8905905097840353] max_q: 0.890590509784 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.2015314588056318] max_q: 1.20153145881 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 2.396825396825397, -0.5] max_q: 2.39682539683 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 9.505165722424508, 0.0, 0.08889322916666666] max_q: 9.50516572242 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 5 Environment.reset(): Trial set up with start = (7, 6), destination = (1, 3), deadline = 45 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.08889322916666666, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, None, None, 'right'], None)": 0.005494505494505495, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 10.310434293400922, "(['green', None, None, None, 'right'], 'right')": 1.4871635027791623, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 2.4970238095238098, "(['red', None, None, None, 'forward'], 'right')": 2.6613156426053224, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 1.8306474452936288, "(['red', None, None, None, 'right'], 'left')": -0.09090909090909091, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -1.0, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.4871635027791623] max_q: 1.48716350278 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 10.310434293400922, 0.0, 0.08889322916666666] max_q: 10.3104342934 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 44, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 7.155217146700461, 0.0, 0.08889322916666666] max_q: 7.1552171467 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 2.4970238095238098, -0.5] max_q: 2.49702380952 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.6613156426053224] max_q: 2.66131564261 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': 'right', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 2.5909598214285716, -0.5] max_q: 2.59095982143 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 2.541713169642857, -0.5] max_q: 2.54171316964 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0)] LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 6 Environment.reset(): Trial set up with start = (7, 4), destination = (1, 1), deadline = 45 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.005494505494505495, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 6.366412860025346, "(['green', None, None, None, 'right'], 'right')": 1.6267655304025421, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 3.3080805564413267, "(['red', None, None, None, 'forward'], 'right')": 2.475239772785102, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 1.8306474452936288, "(['red', None, None, None, 'right'], 'left')": -0.09090909090909091, "(['green', None, None, None, 'right'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -1.0, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.09090909090909091, 1.8306474452936288] max_q: 1.83064744529 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.475239772785102] max_q: 2.47523977279 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 3.3080805564413267, -0.5] max_q: 3.30808055644 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.683206430012673] max_q: 2.68320643001 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 2.6540402782206636, -0.5] max_q: 2.65404027822 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 6.366412860025346, 0.0, 0.9536642961153353] max_q: 6.36641286003 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -1.0, -1.0, 2.0693386916772276] max_q: 2.06933869168 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 2.8222852434430807, -0.5] max_q: 2.82228524344 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.8135604673707921] max_q: 1.81356046737 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 2.887713841029576, -0.5] max_q: 2.88771384103 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.6267655304025421] max_q: 1.6267655304 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.858266434972726] max_q: 1.85826643497 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.005494505494505495, -0.032253890214863065, -0.08524044569487181, 1.9081243222474278] max_q: 1.90812432225 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.71525197245062] max_q: 1.71525197245 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.7786451733271584] max_q: 1.77864517333 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 5.700064157187999, 0.0, 0.9536642961153353] max_q: 5.70006415719 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 5.661426335433727, 0.0, 0.9536642961153353] max_q: 5.66142633543 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.7689456088798283] max_q: 1.76894560888 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 1.9662319799627768] max_q: 1.96623197996 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 1.967482647371563] max_q: 1.96748264737 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 2.0037776000970706] max_q: 2.0037776001 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.7156966548629087] max_q: 1.71569665486 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.831534573962226] max_q: 1.83153457396 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.8697951606140002] max_q: 1.86979516061 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.9030796112294064] max_q: 1.90307961123 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 5.540689225390517, 0.0, 0.9536642961153353] max_q: 5.54068922539 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 7 Environment.reset(): Trial set up with start = (1, 6), destination = (3, 3), deadline = 25 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 5.8121496779583035, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 1.934851132271385, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 2.8194281609503777, "(['red', None, None, None, 'forward'], 'right')": 1.734184920123987, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 2.0352255203344516, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: forward q: [0.0, 5.8121496779583035, 0.0, 0.9536642961153353] max_q: 5.81214967796 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 5.785500417988328, 0.0, 0.9536642961153353] max_q: 5.78550041799 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 2.8194281609503777, -0.5] max_q: 2.81942816095 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.734184920123987] max_q: 1.73418492012 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 2.0352255203344516] max_q: 2.03522552033 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 1.934851132271385] max_q: 1.93485113227 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 2.2808223302926454] max_q: 2.28082233029 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 4.892750208994164, 0.0, 0.9536642961153353] max_q: 4.89275020899 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 4.608422677822261, 0.0, 0.9536642961153353] max_q: 4.60842267782 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 8 Environment.reset(): Trial set up with start = (7, 2), destination = (4, 5), deadline = 30 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 5.645177029443333, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.175963138846373, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 3.1145711207127835, "(['red', None, None, None, 'forward'], 'right')": 1.8049149815816854, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 2.4153488701477355, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 3.1145711207127835, -0.5] max_q: 3.11457112071 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.8049149815816854] max_q: 1.80491498158 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 2.8359283405345876, -0.5] max_q: 2.83592834053 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 5.645177029443333, 0.0, 0.9536642961153353] max_q: 5.64517702944 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 2.9329343121567053, -0.5] max_q: 2.93293431216 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 5.527664384483096, 0.0, 0.9536642961153353] max_q: 5.52766438448 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 5.442794140900701, 0.0, 0.9536642961153353] max_q: 5.4427941409 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 5.377212589041577, 0.0, 0.9536642961153353] max_q: 5.37721258904 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 9 Environment.reset(): Trial set up with start = (3, 5), destination = (7, 1), deadline = 40 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 6.153162064498178, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.175963138846373, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 2.9996259176469113, "(['red', None, None, None, 'forward'], 'right')": 1.9084496882096817, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 2.4153488701477355, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 2.4153488701477355] max_q: 2.41534887015 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 2.4813760005582464] max_q: 2.48137600056 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.9084496882096817] max_q: 1.90844968821 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 2.9996259176469113, -0.5] max_q: 2.99962591765 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 6.153162064498178, 0.0, 0.9536642961153353] max_q: 6.1531620645 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 2.2425153602293855] max_q: 2.24251536023 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 2.6664172784312745, -0.5] max_q: 2.66641727843 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = forward, reward = -0.5 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.240688000279123] max_q: 3.24068800028 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.2698923079606956] max_q: 3.26989230796 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 10 Environment.reset(): Trial set up with start = (2, 3), destination = (8, 4), deadline = 35 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 5.8840168064359055, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.175963138846373, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'left')": 2.5997755505881472, "(['red', None, None, None, 'forward'], 'right')": 1.9182638242064471, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.9356652302368715, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.175963138846373] max_q: 2.17596313885 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 5.8840168064359055, 0.0, 0.9536642961153353] max_q: 5.88401680644 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.942008403217953, 0.0, 0.9536642961153353] max_q: 4.94200840322 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.706506302413464, 0.0, 0.9536642961153353] max_q: 4.70650630241 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.9182638242064471] max_q: 1.91826382421 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, 0.15997755505881472, 2.5997755505881472, -0.5] max_q: 2.59977555059 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.124048172310051, 0.0, 0.9536642961153353] max_q: 4.12404817231 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.5534808461806413] max_q: 1.55348084618 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.716460921372468, -0.5] max_q: 2.71646092137 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6448148292352216, -0.5] max_q: 2.64481482924 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.115187588573619, 0.0, 0.9536642961153353] max_q: 4.11518758857 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.5539378404146598] max_q: 1.55393784041 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6899876682607142, -0.5] max_q: 2.68998766826 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.031548921800725, 0.0, 0.9536642961153353] max_q: 4.0315489218 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.0307186870164955, 0.0, 0.9536642961153353] max_q: 4.03071868702 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.5516929357373481] max_q: 1.55169293574 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.7263768996979163, -0.5] max_q: 2.7263768997 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.2411073124590026] max_q: 2.24110731246 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 11 Environment.reset(): Trial set up with start = (7, 5), destination = (4, 2), deadline = 30 RoutePlanner.route_to(): destination = (4, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.9679750760591044, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.7509649343137608, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.7553228792502367, "(['red', None, None, None, 'forward'], 'right')": 1.548468869179834, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.9356652302368715, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.9356652302368715] max_q: 3.93566523024 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.9679750760591044, 0.0, 0.9536642961153353] max_q: 3.96797507606 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.548468869179834] max_q: 1.54846886918 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.7553228792502367, -0.5] max_q: 2.75532287925 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.911309457929046] max_q: 3.91130945793 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.9113516518848755] max_q: 0.911351651885 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.6019964797399293] max_q: 3.60199647974 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.7509649343137608] max_q: 2.75096493431 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.720216486696388] max_q: 0.720216486696 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.6570943175245407] max_q: 2.65709431752 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.7242396016483137] max_q: 2.72423960165 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.569637335085208] max_q: 3.56963733509 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 2.774234434589917, 0.0, 0.9536642961153353] max_q: 2.77423443459 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 12 Environment.reset(): Trial set up with start = (5, 6), destination = (4, 1), deadline = 30 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.9536642961153353, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.11537891217759658, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.056948267835920385, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.504397914583225, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 2.8206558803659765, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.5035485861668247, "(['red', None, None, None, 'forward'], 'right')": 0.6246489041021442, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.5563615521766896, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.0, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.8206558803659765] max_q: 2.82065588037 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.5563615521766896] max_q: 3.55636155218 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.6246489041021442] max_q: 0.624648904102 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.0, -0.041666666666666664, 0.0, 2.89431164157539] max_q: 2.89431164158 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.7781807760883446] max_q: 3.77818077609 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.0785930346461585] max_q: 3.07859303465 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.504397914583225, 0.0, 0.9536642961153353] max_q: 3.50439791458 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.9384239306968785] max_q: 0.938423930697 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.8059081790773015] max_q: 3.80590817908 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.816691058017451] max_q: 3.81669105802 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.1553769484256455] max_q: 3.15537694843 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.3565142075496848, 0.0, 0.9536642961153353] max_q: 3.35651420755 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.11537891217759658, 0.0, 0.0] max_q: 0.115378912178 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.968403077331624] max_q: 0.968403077332 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.056948267835920385, -0.032253890214863065, -0.08524044569487181, 3.792790799636988] max_q: 3.79279079964 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.1937689053153893] max_q: 3.19376890532 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.2174815845708187] max_q: 3.21748158457 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.5035485861668247, -0.5] max_q: 2.50354858617 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.2392182072216293] max_q: 3.23921820722 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8981029674269232] max_q: 0.898102967427 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.673271412994522] max_q: 3.67327141299 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.6190284437308997] max_q: 3.61902844373 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 Simulator.run(): Trial 13 Environment.reset(): Trial set up with start = (2, 6), destination = (5, 2), deadline = 35 RoutePlanner.route_to(): destination = (5, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.383326115568448, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.2533067589397473, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.4834066427201518, "(['red', None, None, None, 'forward'], 'right')": 0.8642082715800138, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.625377969668718, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8642082715800138] max_q: 0.86420827158 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.4834066427201518, -0.5] max_q: 2.48340664272 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.383326115568448, 0.0, 0.8771556489513704] max_q: 3.38332611557 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8331381337203468] max_q: 0.83313813372 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.3867253141761213, -0.5] max_q: 2.38672531418 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 14 Environment.reset(): Trial set up with start = (3, 6), destination = (8, 3), deadline = 40 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.2221999407837356, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.2533067589397473, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.2872784260854493, "(['red', None, None, None, 'forward'], 'right')": 0.8728469675305641, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.625377969668718, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.2533067589397473] max_q: 3.25330675894 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8728469675305641] max_q: 0.872846967531 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 3.2872784260854493, -0.5] max_q: 3.28727842609 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 1.1110999703918678] max_q: 1.11109997039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6436392130427246, -0.5] max_q: 2.64363921304 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.2221999407837356, 0.0, 0.8771556489513704] max_q: 3.22219994078 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.7592499753265566] max_q: 0.759249975327 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.813184311412384, -0.5] max_q: 2.81318431141 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0)] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 15 Environment.reset(): Trial set up with start = (5, 2), destination = (7, 6), deadline = 30 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.0536849501596444, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.299921944430965, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.3265282891686425, "(['red', None, None, None, 'forward'], 'right')": 0.8038487252854342, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.625377969668718, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.625377969668718] max_q: 3.62537796967 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.652136686120953] max_q: 3.65213668612 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8038487252854342] max_q: 0.803848725285 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.3265282891686425, -0.5] max_q: 4.32652828917 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.299921944430965] max_q: 3.29992194443 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.1128296407746663, 0.0, 0.8771556489513704] max_q: 3.11282964077 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.9153456001826281] max_q: 0.915345600183 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.8260683430604763] max_q: 3.82606834306 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.0, 3.349927519828753] max_q: 3.34992751983 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.3770138731692216] max_q: 3.37701387317 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.8123315627744674] max_q: 3.81233156277 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.414810438041937] max_q: 3.41481043804 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.299317598404589, -0.5] max_q: 4.2993175984 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.0400344362542935, 0.0, 0.8771556489513704] max_q: 3.04003443625 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0)] LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 16 Environment.reset(): Trial set up with start = (6, 6), destination = (8, 4), deadline = 20 RoutePlanner.route_to(): destination = (8, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.4862132326272675, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.4453015504515316, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.291834658444475, "(['red', None, None, None, 'forward'], 'right')": 0.8195783201734967, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.8053364731909007, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.291834658444475, -0.5] max_q: 4.29183465844 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.4862132326272675, 0.0, 0.8771556489513704] max_q: 3.48621323263 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8195783201734967] max_q: 0.819578320173 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.8053364731909007] max_q: 3.80533647319 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.188970586101814, 0.0, 0.8771556489513704] max_q: 3.1889705861 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.134542033229655, 0.0, 0.8771556489513704] max_q: 3.13454203323 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.1633906321220002, 0.0, 0.8771556489513704] max_q: 3.16339063212 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.853941691783173] max_q: 0.853941691783 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 4.255355326138915, -0.5] max_q: 4.25535532614 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.1173643954825994, 0.0, 0.8771556489513704] max_q: 3.11736439548 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.140591648233057, 0.0, 0.8771556489513704] max_q: 3.14059164823 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 Simulator.run(): Trial 17 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 4), deadline = 30 RoutePlanner.route_to(): destination = (5, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.025, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.0251789927461209, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.1052116970953336, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.4453015504515316, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.248262122635055, "(['red', None, None, None, 'forward'], 'right')": 0.8659852509571805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.7989760348858903, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.7989760348858903] max_q: 3.79897603489 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.8659852509571805] max_q: 0.865985250957 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.248262122635055, -0.5] max_q: 4.24826212264 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.1052116970953336, -0.025, 0.8771556489513704] max_q: 3.1052116971 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.025] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.39948893821788534] max_q: 0.399488938218 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.4453015504515316] max_q: 3.44530155045 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.473036472928955] max_q: 3.47303647293 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.29954572286034253] max_q: 0.29954572286 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.899488017442945] max_q: 3.89948801744 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.3435912474713607] max_q: 3.34359124747 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.903077731105697] max_q: 3.90307773111 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0251789927461209] max_q: 0.0251789927461 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.3841210886767934] max_q: 3.38412108868 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.786222676835096] max_q: 3.78622267684 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.412398324773502] max_q: 3.41239832477 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.24956319505802171] max_q: 0.249563195058 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.7918483958657516] max_q: 3.79184839587 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.4365746184314703] max_q: 3.43657461843 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.4488229962916557] max_q: 3.44882299629 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 2.9241182514980553, -0.025, 0.8771556489513704] max_q: 2.9241182515 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.2198116904137831] max_q: 0.219811690414 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.7885047101089326] max_q: 3.78850471011 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.4603058505355797] max_q: 3.46030585054 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.4699432460617303] max_q: 3.46994324606 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 2.891549755246409, -0.025, 0.8771556489513704] max_q: 2.89154975525 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0)] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 18 Environment.reset(): Trial set up with start = (2, 5), destination = (7, 4), deadline = 30 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.07118055555555555, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.2433572593256352, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.419255547921671, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.217229357305674, "(['red', None, None, None, 'forward'], 'right')": 0.2477333514602993, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.025, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.7924212895513603, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: right q: [0.12539778470751042, -0.032253890214863065, -0.08524044569487181, 3.7924212895513603] max_q: 3.79242128955 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, 0.2477333514602993] max_q: 0.24773335146 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.217229357305674, -0.5] max_q: 4.21722935731 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.07118055555555555, -0.9093219766314604, -1.0, -0.37613332426985036] max_q: 0.0711805555556 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.06524884259259259, -0.9093219766314604, -1.0, -0.37613332426985036] max_q: 0.0652488425926 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.06058821097883598, -0.9093219766314604, -1.0, -0.37613332426985036] max_q: 0.0605882109788 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.05680144779265873, -0.9093219766314604, -1.0, -0.37613332426985036] max_q: 0.0568014477927 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.2433572593256352, -0.025, 0.8771556489513704] max_q: 3.24335725933 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.053645811804177684, -0.9093219766314604, -1.0, -0.37613332426985036] max_q: 0.0536458118042 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.121703823983281, -0.025, 0.8771556489513704] max_q: 3.12170382398 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.1582994979839776, -0.025, 0.8771556489513704] max_q: 3.15829949798 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.773783485844539, -0.5] max_q: 3.77378348584 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.1906725942153633, -0.025, 0.8771556489513704] max_q: 3.19067259422 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 19 Environment.reset(): Trial set up with start = (4, 6), destination = (3, 3), deadline = 20 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.04950045361930941, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.7428024462525062, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.419255547921671, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.647084665427072, "(['red', None, None, None, 'forward'], 'right')": -0.37613332426985036, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.025, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.7958809347255045, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": -0.032253890214863065} next_waypoint: forward random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.647084665427072, -0.5] max_q: 3.64708466543 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.419255547921671] max_q: 3.41925554792 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.04950045361930941, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0495004536193 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.7428024462525062, -0.025, 0.8771556489513704] max_q: 3.74280244625 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 20 Environment.reset(): Trial set up with start = (8, 4), destination = (3, 5), deadline = 30 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.04596470693221588, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 5.008877293361724, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.499036367828518, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.235313499070304, "(['red', None, None, None, 'forward'], 'right')": -0.3823281023273813, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.025, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.7958809347255045, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.499036367828518] max_q: 3.49903636783 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.7958809347255045] max_q: 3.79588093473 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.04596470693221588, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0459647069322 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.03447353019916191, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0344735301992 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 5.008877293361724, -0.025, 0.8771556489513704] max_q: 5.00887729336 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.260248962750373, -0.025, 0.8771556489513704] max_q: 4.26024896275 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02872794183263493, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0287279418326 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.02633394667991535, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0263339466799 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.8110719643835615, -0.025, 0.8771556489513704] max_q: 3.81107196438 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.822879966609589, -0.025, 0.8771556489513704] max_q: 3.82287996661 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 21 Environment.reset(): Trial set up with start = (7, 3), destination = (1, 3), deadline = 30 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.024452950488492827, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.732807356457884, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.5488993802702975, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.235313499070304, "(['red', None, None, None, 'forward'], 'right')": -0.3823281023273813, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.025, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.8979404673627522, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: forward q: [0.27213970704503504, 4.732807356457884, -0.025, 0.8771556489513704] max_q: 4.73280735646 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.6920958366546675, -0.025, 0.8771556489513704] max_q: 4.69209583665 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.346047918327334, -0.025, 0.8771556489513704] max_q: 4.34604791833 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.024452950488492827, -0.9093219766314604, -1.0, -0.3823281023273813] max_q: 0.0244529504885 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.8979404673627522] max_q: 3.89794046736 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.5488993802702975] max_q: 3.54889938027 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.020377458740410692, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.0203774587404 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.019245377699276763, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.0192453776993 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.018283108814312925, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.0182831088143 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 4.2595359387455005, -0.025, 0.8771556489513704] max_q: 4.25953593875 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.248721941297771, -0.025, 0.8771556489513704] max_q: 4.2487219413 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.239155712786318, -0.025, 0.8771556489513704] max_q: 4.23915571279 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 22 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 4), deadline = 35 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.01745205841366234, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.794125021102069, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.5811208531081333, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.235313499070304, "(['red', None, None, None, 'forward'], 'right')": -0.411746076745536, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.025, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.877358671158152, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.877358671158152] max_q: 3.87735867116 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.01745205841366234, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.0174520584137 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00872602920683117, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00872602920683 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0065445219051233775, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00654452190512 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.005453768254269482, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00545376825427 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.8817387186167895] max_q: 3.88173871862 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.794125021102069, -0.11952279527775143, 0.8771556489513704] max_q: 4.7941250211 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.737401805309064, -0.11952279527775143, 0.8771556489513704] max_q: 4.73740180531 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.395524832596837, -0.11952279527775143, 0.8771556489513704] max_q: 4.3955248326 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.235313499070304, -0.5] max_q: 3.23531349907 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 4.129620520487326, -0.11952279527775143, 0.8771556489513704] max_q: 4.12962052049 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.936235566225864, -0.11952279527775143, 0.8771556489513704] max_q: 3.93623556623 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 23 Environment.reset(): Trial set up with start = (8, 6), destination = (3, 3), deadline = 40 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.27213970704503504, "(['red', None, None, None, 'forward'], None)": 0.004772047222485797, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.608414771007978, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.5811208531081333, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.273547824116789, "(['red', None, None, None, 'forward'], 'right')": -0.411746076745536, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.8665423366063356, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.8665423366063356] max_q: 3.86654233661 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.933271168303168] max_q: 3.9332711683 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.004772047222485797, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00477204722249 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 4.608414771007978, -0.11952279527775143, 0.8771556489513704] max_q: 4.60841477101 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.003976706018738165, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00397670601874 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0035790354168643485, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00357903541686 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.003280782465458986, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00328078246546 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.956808166508326, -0.11952279527775143, 0.8771556489513704] max_q: 3.95680816651 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.27213970704503504, 3.9595076561015556, -0.11952279527775143, 0.8771556489513704] max_q: 3.9595076561 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0030464408607833444, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00304644086078 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0028941188177441773, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00289411881774 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.27213970704503504, 3.7419538299158708, -0.11952279527775143, 0.8771556489513704] max_q: 3.74195382992 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.273547824116789, -0.5] max_q: 3.27354782412 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0027625679623921695, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00276256796239 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0026762377135674145, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00267623771357 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.002597524839638961, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00259752483964 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.002525371371871212, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00252537137187 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.596906117754648, -0.11952279527775143, 0.8771556489513704] max_q: 3.59690611775 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 24 Environment.reset(): Trial set up with start = (3, 4), destination = (7, 4), deadline = 20 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.3484553746366495, "(['red', None, None, None, 'forward'], None)": 0.00245891423050618, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.9971119910575337, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.5811208531081333, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.188644635842336, "(['red', None, None, None, 'forward'], 'right')": -0.411746076745536, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.949953376227376, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9093219766314604, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.949953376227376] max_q: 3.94995337623 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.00245891423050618, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00245891423051 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00122945711525309, -0.9093219766314604, -1.0, -0.411746076745536] max_q: 0.00122945711525 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0009220928364398176, -0.9393943022815671, -1.0, -0.411746076745536] max_q: 0.00092209283644 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.9971119910575337, -0.11952279527775143, 0.8771556489513704] max_q: 3.99711199106 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.3484553746366495, 3.5977702759692156, -0.11952279527775143, 0.8771556489513704] max_q: 3.59777027597 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0008068312318848404, -0.9393943022815671, -1.0, -0.411746076745536] max_q: 0.000806831231885 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0007492004296073519, -0.9393943022815671, -1.0, -0.411746076745536] max_q: 0.000749200429607 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0007023754027568924, -0.9393943022815671, -1.0, -0.411746076745536] max_q: 0.000702375402757 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.3315424659103368, -0.11952279527775143, 0.8771556489513704] max_q: 3.33154246591 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 25 Environment.reset(): Trial set up with start = (1, 2), destination = (6, 3), deadline = 30 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.3484553746366495, "(['red', None, None, None, 'forward'], None)": 0.0006633545470481761, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.198388219319304, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.5811208531081333, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 3.188644635842336, "(['red', None, None, None, 'forward'], 'right')": -0.411746076745536, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.9511449625076764, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998} next_waypoint: right q: [0.3078593034646159, -0.041666666666666664, 0.09142361050650853, 3.5811208531081333] max_q: 3.58112085311 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.0, -0.5, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 3.188644635842336, -0.5] max_q: 3.18864463584 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0006633545470481761, -0.9393943022815671, -1.0, -0.411746076745536] max_q: 0.000663354547048 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 3.290064056362044, -0.5] max_q: 3.29006405636 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.3484553746366495, 4.198388219319304, -0.11952279527775143, 0.8771556489513704] max_q: 4.19838821932 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.3484553746366495, 3.923627005597662, -0.11952279527775143, 0.8771556489513704] max_q: 3.9236270056 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.340773766621898, -0.5] max_q: 3.34077376662 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 26 Environment.reset(): Trial set up with start = (3, 6), destination = (7, 4), deadline = 30 RoutePlanner.route_to(): destination = (7, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.3484553746366495, "(['red', None, None, None, 'forward'], None)": 0.0005970190923433585, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.7099238393697185, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.42300876779732, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.373735078290803, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.9511449625076764, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.0005970190923433585, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000597019092343 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'right'}, action = left, reward = -1.0 next_waypoint: forward q: [0.0005671681377261906, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000567168137726 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.000425376103294643, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000425376103295 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0003544800860788692, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000354480086079 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.7099238393697185, -0.11952279527775143, 0.8771556489513704] max_q: 3.70992383937 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.3484553746366495, 3.7389314554327466, -0.11952279527775143, 0.8771556489513704] max_q: 3.73893145543 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00031017007531901054, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000310170075319 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.4491353937002325, -0.11952279527775143, 0.8771556489513704] max_q: 3.4491353937 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.3484553746366495, 3.483564431593968, -0.11952279527775143, 0.8771556489513704] max_q: 3.48356443159 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 4.373735078290803, -0.5] max_q: 4.37373507829 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0002880150699390812, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000288015069939 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 3.512255296505414, -0.11952279527775143, 0.8771556489513704] max_q: 3.51225529651 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 27 Environment.reset(): Trial set up with start = (6, 6), destination = (5, 1), deadline = 30 RoutePlanner.route_to(): destination = (5, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.3484553746366495, "(['red', None, None, None, 'forward'], None)": 0.00027492347585094117, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.21957881027479, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.42300876779732, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.136361570461723, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 3.9511449625076764, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.9511449625076764] max_q: 3.95114496251 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, -0.08524044569487181, 3.9531805890698566] max_q: 3.95318058907 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 28 Environment.reset(): Trial set up with start = (8, 3), destination = (2, 5), deadline = 40 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.3484553746366495, "(['red', None, None, None, 'forward'], None)": 0.00027492347585094117, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.21957881027479, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.42300876779732, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 4.136361570461723, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 13.976590294534928, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -1.0, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, 0.07748036067646288, 4.136361570461723, -0.5] max_q: 4.13636157046 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00013746173792547058, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000137461737925 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.3484553746366495, 4.21957881027479, -0.11952279527775143, 0.8771556489513704] max_q: 4.21957881027 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.182982341895658, -0.11952279527775143, 0.8771556489513704] max_q: 4.1829823419 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00010309630344410294, -0.9393943022815671, -1.0, -0.07658937901133805] max_q: 0.000103096303444 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [9.450494482376103e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 9.45049448238e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.859838577227598e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 8.85983857723e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.7463961831468713, -0.11952279527775143, 0.8771556489513704] max_q: 3.74639618315 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.7590763739895277, -0.11952279527775143, 0.8771556489513704] max_q: 3.75907637399 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.7700274478990945, -0.11952279527775143, 0.8771556489513704] max_q: 3.7700274479 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.0, -0.5] max_q: 2.0 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.7796096375699655, -0.11952279527775143, 0.8771556489513704] max_q: 3.77960963757 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 29 Environment.reset(): Trial set up with start = (7, 3), destination = (3, 2), deadline = 25 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 8.367625322937175e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.366780377743539, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.42300876779732, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.076923076923077, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 13.976590294534928, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": -0.08524044569487181, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999932496467984, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [8.367625322937175e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 8.36762532294e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.068781561403705e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 8.0687815614e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.0343907807018526e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 4.0343907807e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.366780377743539, -0.11952279527775143, 0.8771556489513704] max_q: 4.36678037774 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.305650314786282, -0.11952279527775143, 0.8771556489513704] max_q: 4.30565031479 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.0257930855263894e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 3.02579308553e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.7232137769737505e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 2.72321377697e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.4962792955592714e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 2.49627929556e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.317973631590752e-05, -0.9393943022815671, -0.9999932496467984, -0.07658937901133805] max_q: 2.31797363159e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.7842143237144444, 4.267444025437997, -0.11952279527775143, 0.8771556489513704] max_q: 4.26744402544 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.254071824166097, -0.11952279527775143, 0.8771556489513704] max_q: 4.25407182417 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right random action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, 0.38195459991761554, 13.976590294534928] max_q: 13.9765902945 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, 0.38195459991761554, 13.243369872346625] max_q: 13.2433698723 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 30 Environment.reset(): Trial set up with start = (8, 6), destination = (3, 1), deadline = 50 RoutePlanner.route_to(): destination = (3, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 2.17310027961633e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.242523104885819, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.42300876779732, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.076923076923077, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.11952279527775143, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 13.274578839783427, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, 0.38195459991761554, 13.274578839783427] max_q: 13.2745788398 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.12539778470751042, 0.15378498130065998, 0.38195459991761554, 12.965426211790646] max_q: 12.9654262118 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.17310027961633e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 2.17310027962e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6298252097122476e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 1.62982520971e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.242523104885819, -0.11952279527775143, 0.8771556489513704] max_q: 4.24252310489 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.3581876747602064e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 1.35818767476e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2223689072841858e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 1.22236890728e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1205048316771704e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 1.12050483168e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.681894026398958, -0.1670824458680325, 0.8771556489513704] max_q: 3.6818940264 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0404687722716583e-05, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 1.04046877227e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.513705143993448, -0.1670824458680325, 0.8771556489513704] max_q: 3.51370514399 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.42300876779732] max_q: 3.4230087678 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0)] LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 31 Environment.reset(): Trial set up with start = (4, 5), destination = (8, 1), deadline = 40 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 9.93174737168401e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.533967429660388, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.214431507497424, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.076923076923077, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.482713105895323, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9393943022815671, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.214431507497424] max_q: 4.2144315075 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [9.93174737168401e-06, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 9.93174737168e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.965873685842005e-06, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 4.96587368584e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.724405264381504e-06, -0.9393943022815671, -0.9999927924081098, -0.07658937901133805] max_q: 3.72440526438e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.533967429660388, -0.1670824458680325, 0.8771556489513704] max_q: 3.53396742966 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [3.1036710536512535e-06, -0.9494949932620514, -0.9999927924081098, -0.07658937901133805] max_q: 3.10367105365e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 2.9203810785304434, -0.1670824458680325, 0.8771556489513704] max_q: 2.92038107853 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.076923076923077, -0.5] max_q: 2.07692307692 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.8819802641047357e-06, -0.9494949932620514, -0.9999927924081098, -0.07658937901133805] max_q: 2.8819802641e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 2.805333443714138, -0.1670824458680325, 0.8771556489513704] max_q: 2.80533344371 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 2.8551112168927153, -0.1670824458680325, 0.8771556489513704] max_q: 2.85511121689 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 2.8991454008583806, -0.1670824458680325, 0.8771556489513704] max_q: 2.89914540086 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0)] LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 32 Environment.reset(): Trial set up with start = (1, 3), destination = (7, 6), deadline = 45 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 2.750981161190884e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.5492065419035375, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.370348818685904, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.0692307692307694, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.482713105895323, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9494949932620514, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.15378498130065998, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.7842143237144444, 3.5492065419035375, -0.1670824458680325, 0.8771556489513704] max_q: 3.5492065419 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 45, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.750981161190884e-06, -0.9494949932620514, -0.9999927924081098, -0.07658937901133805] max_q: 2.75098116119e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.375490580595442e-06, -0.9494949932620514, -0.9999927924081098, -0.07658937901133805] max_q: 1.3754905806e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.7842143237144444, 3.438549030016898, -0.1670824458680325, 0.8771556489513704] max_q: 3.43854903002 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.0789119014649153, -0.1670824458680325, 0.8771556489513704] max_q: 3.07891190146 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 2.8631296243337263, -0.1670824458680325, 0.8771556489513704] max_q: 2.86312962433 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 2.9578688223059157, -0.1670824458680325, 0.8771556489513704] max_q: 2.95786882231 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.12539778470751042, 0.4968484892614379, 0.38195459991761554, 8.482713105895323] max_q: 8.4827131059 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0316179354465815e-06, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.03161793545e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.032306763569779, -0.1670824458680325, 0.8771556489513704] max_q: 3.03230676357 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [9.847262111081004e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 9.84726211108e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.468521260654812e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 9.46852126065e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.130359787059998e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 9.13035978706e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 2.9462812409692227, -0.1670824458680325, 0.8771556489513704] max_q: 2.94628124097 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 33 Environment.reset(): Trial set up with start = (8, 1), destination = (4, 5), deadline = 40 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 8.826014460824665e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.604209952188935, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.370348818685904, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.0692307692307694, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.258577450600557, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.370348818685904] max_q: 4.37034881869 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [8.826014460824665e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 8.82601446082e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.4130072304123324e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 4.41300723041e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.3097554228092493e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 3.30975542281e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.604209952188935, -0.1670824458680325, 0.8771556489513704] max_q: 3.60420995219 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.7581295190077077e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 2.75812951901e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.482316567106937e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 2.48231656711e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.275456853181359e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 2.27545685318e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 3.20315749861832, -0.1670824458680325, 0.8771556489513704] max_q: 3.20315749862 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.2529601549546747, -0.1670824458680325, 0.8771556489513704] max_q: 3.25296015495 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.0692307692307694, -0.5] max_q: 2.06923076923 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.2944623685683037, -0.1670824458680325, 0.8771556489513704] max_q: 3.29446236857 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.1767839810299314, -0.1670824458680325, 0.8771556489513704] max_q: 3.17678398103 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 3.2110846484870175, -0.1670824458680325, 0.8771556489513704] max_q: 3.21108464849 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 34 Environment.reset(): Trial set up with start = (8, 3), destination = (2, 3), deadline = 30 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 2.112924220811262e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.0106583158529014, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.480282562849303, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.165769230769231, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.258577450600557, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.12539778470751042, 0.4968484892614379, 0.38195459991761554, 8.258577450600557] max_q: 8.2585774506 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, -0.5, -0.16655610757549197] max_q: 0.0 count: 2 best: [0, 1] action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, -0.5, -0.16655610757549197] max_q: 0.0 count: 2 best: [0, 1] action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.7842143237144444, 4.0106583158529014, -0.1670824458680325, 0.8771556489513704] max_q: 4.01065831585 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.008881929877418, -0.1670824458680325, 0.8771556489513704] max_q: 4.00888192988 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.112924220811262e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 2.11292422081e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.9016317987301359e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.90163179873e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7431624821692912e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.74316248217e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6186508763000563e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.6186508763e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5174851965313026e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.51748519653e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.007771688642741, -0.1670824458680325, 0.8771556489513704] max_q: 4.00777168864 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.0073831042106045, -0.1670824458680325, 0.8771556489513704] max_q: 4.00738310421 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.007047508564668, -0.1670824458680325, 0.8771556489513704] max_q: 4.00704750856 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 35 Environment.reset(): Trial set up with start = (7, 6), destination = (2, 6), deadline = 25 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8771556489513704, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 1.4331804633906747e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.25, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.67312688882253, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.480282562849303, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.165769230769231, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.094786010192843, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999927924081098, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.480282562849303] max_q: 4.48028256285 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4331804633906747e-07, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 1.43318046339e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.165902316953373e-08, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 7.16590231695e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.37442673771503e-08, -0.9663298235717118, -0.9999927924081098, -0.07658937901133805] max_q: 5.37442673772e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.7842143237144444, 4.67312688882253, -0.1670824458680325, 0.8771556489513704] max_q: 4.67312688882 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.605814199940277, -0.1670824458680325, 0.8771556489513704] max_q: 4.60581419994 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.555329683278588, -0.1670824458680325, 0.8771556489513704] max_q: 4.55532968328 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.165769230769231, -0.5] max_q: 2.16576923077 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.25, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.26767094017094, -0.5] max_q: 2.26767094017 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 36 Environment.reset(): Trial set up with start = (2, 2), destination = (8, 3), deadline = 35 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 4.478688948095858e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 0.12539778470751042, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.515663277330118, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.610875099703229, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.9164928774928773, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 8.094786010192843, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = None, reward = 0.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 8.094786010192843] max_q: 8.09478601019 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 next_waypoint: left random action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 6.200111780022229] max_q: 6.20011178002 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.478688948095858e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 4.4786889481e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.15878259466044e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 4.15878259466e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.898858682494162e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 3.89885868249e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.515663277330118, -0.1670824458680325, 0.7050111956316297] max_q: 4.51566327733 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.489880113463612, -0.1670824458680325, 0.7050111956316297] max_q: 4.48988011346 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.263527377549764, -0.1670824458680325, 0.7050111956316297] max_q: 4.26352737755 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.5859438795550196] max_q: 0.585943879555 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.2, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.9164928774928773, -0.5] max_q: 2.91649287749 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [3.682255422355597e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 3.68225542236e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.5671849404069846e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 3.56718494041e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.099314424402076, -0.1670824458680325, 0.7050111956316297] max_q: 4.0993144244 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0)] LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 37 Environment.reset(): Trial set up with start = (2, 3), destination = (5, 5), deadline = 25 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 3.4622677362773674e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.652111245946463, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.660827327585033, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.8553933523266855, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5024097363901163, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 5.821176933988107, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.821176933988107] max_q: 5.82117693399 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.652111245946463, -0.1670824458680325, 0.7050111956316297] max_q: 4.65211124595 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.326055622973231, -0.1670824458680325, 0.7050111956316297] max_q: 4.32605562297 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.660827327585033] max_q: 4.66082732759 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, -0.5, -0.5, -0.16655610757549197] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, -0.5, -0.5, -0.16655610757549197] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.7842143237144444, 4.244541717229923, -0.1670824458680325, 0.7050111956316297] max_q: 4.24454171723 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 38 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 6), deadline = 35 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 0.7842143237144444, "(['red', None, None, None, 'forward'], None)": 3.4622677362773674e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 5.5371181005768255, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.773884885056689, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.8553933523266855, "(['red', None, None, None, 'forward'], 'right')": -0.07658937901133805, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5024097363901163, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 5.738356752310574, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.7842143237144444, 5.5371181005768255, -0.1670824458680325, 0.7050111956316297] max_q: 5.53711810058 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.4622677362773674e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 3.46226773628e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7311338681386837e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 1.73113386814e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2983504011040128e-08, -0.9663298235717118, -0.9999945887077212, -0.07658937901133805] max_q: 1.2983504011e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.8553933523266855, -0.5] max_q: 2.85539335233 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.7842143237144444, 4.947598420032578, -0.1670824458680325, 0.7050111956316297] max_q: 4.94759842003 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.4360077682455687] max_q: 0.436007768246 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.969854017094017, -0.5] max_q: 2.96985401709 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 4.868631885029863, -0.1670824458680325, 0.7050111956316297] max_q: 4.86863188503 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.07748036067646288, 3.0213613162393163, -0.5] max_q: 3.02136131624 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.6024864542754979] max_q: 0.602486454275 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.773884885056689] max_q: 3.77388488506 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.738356752310574] max_q: 5.73835675231 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.680411527233556] max_q: 5.68041152723 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 4.829148617528506, -0.1670824458680325, 0.7050111956316297] max_q: 4.82914861753 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.7034162892361714] max_q: 0.703416289236 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.568572070058837] max_q: 5.56857207006 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.480277761763006] max_q: 5.48027776176 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.781960424876093] max_q: 3.78196042488 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 4.804761893483549, -0.1670824458680325, 0.7050111956316297] max_q: 4.80476189348 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.6560991700907222] max_q: 0.656099170091 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.400812884296757] max_q: 5.4008128843 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.7871518433314244] max_q: 3.78715184333 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.791408806464796] max_q: 3.79140880646 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.5024097363901163] max_q: 0.50240973639 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.7954201755712424] max_q: 3.79542017557 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.33801134418713] max_q: 5.33801134419 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.8266196575898968] max_q: 3.82661965759 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.6200970142191847] max_q: 0.620097014219 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.314942183080456] max_q: 5.31494218308 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.2715739071308825] max_q: 5.27157390713 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.252307635810718] max_q: 5.25230763581 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 4.6921840612818135, -0.1670824458680325, 0.7050111956316297] max_q: 4.69218406128 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0)] LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 39 Environment.reset(): Trial set up with start = (3, 5), destination = (7, 2), deadline = 35 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 1.0819586675866775e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.08028958880511541, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 4.909464036919699, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.854314705388241, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.936247873219373, "(['red', None, None, None, 'forward'], 'right')": 0.5939664172156496, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 5.233891347048796, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.1967397284145662, 4.909464036919699, -0.1670824458680325, 0.7050111956316297] max_q: 4.90946403692 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 4.896471693535132, -0.1670824458680325, 0.7050111956316297] max_q: 4.89647169354 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.08028958880511541] max_q: 0.0802895888051 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.936247873219373, -0.5] max_q: 2.93624787322 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.5939664172156496] max_q: 0.593966417216 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6241652488129157, -0.5] max_q: 2.62416524881 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 3.854314705388241] max_q: 3.85431470539 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 40 Environment.reset(): Trial set up with start = (2, 2), destination = (2, 6), deadline = 20 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 1.0819586675866775e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 2.0401447944025577, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.533121813272555, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.7617487239316243, "(['red', None, None, None, 'forward'], 'right')": 0.5754929122120569, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 5.233891347048796, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, 0.07748036067646288, 2.7617487239316243, -0.5] max_q: 2.76174872393 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.5754929122120569] max_q: 0.575492912212 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 5.533121813272555] max_q: 5.53312181327 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 5.0750337433984765] max_q: 5.0750337434 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 2.0401447944025577, -0.1670824458680325, 0.7050111956316297] max_q: 2.0401447944 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 2.084123075242174, -0.1670824458680325, 0.7050111956316297] max_q: 2.08412307524 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 2.24377948563866, -0.1670824458680325, 0.7050111956316297] max_q: 2.24377948564 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 41 Environment.reset(): Trial set up with start = (5, 1), destination = (1, 2), deadline = 25 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 1.0819586675866775e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'forward'], 'forward')": 3.6746733017760858, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.783878771228056, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.634790603276354, "(['red', None, None, None, 'forward'], 'right')": 0.5200723972012788, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.2, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 5.233891347048796, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3078593034646159, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.233891347048796] max_q: 5.23389134705 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 5.145756250831026] max_q: 5.14575625083 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.5200723972012788] max_q: 0.520072397201 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.634790603276354, -0.5] max_q: 2.63479060328 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.6746733017760858, -0.1670824458680325, 0.7050111956316297] max_q: 3.67467330178 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.9287045240446609] max_q: 0.928704524045 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.7485580530033245, -0.5] max_q: 2.748558053 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.572878125415513] max_q: 4.57287812542 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.8081604912918696] max_q: 0.808160491292 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.783878771228056] max_q: 4.78387877123 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [0.0, 0.0, -0.0625, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': 'right', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.550844351361071] max_q: 4.55084435136 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.501770296096978, -0.1670824458680325, 0.7050111956316297] max_q: 3.5017702961 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.7435833308885885] max_q: 0.743583330889 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3078593034646159, 0.5024968178278442, 0.09142361050650853, 4.757749478853788] max_q: 4.75774947885 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.626428075098845] max_q: 4.6264280751 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.612810073466262] max_q: 4.61281007347 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.0819586675866775e-08, -0.9663298235717118, -0.9999945887077212, 0.6999937476163738] max_q: 0.699993747616 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Simulator.run(): Trial 42 Environment.reset(): Trial set up with start = (2, 6), destination = (8, 6), deadline = 30 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 1.0819586675866775e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.4422977365889422, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.598553205489155, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.6861782152530473, "(['red', None, None, None, 'forward'], 'right')": 0.6659938726640463, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.541290484031394, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.598553205489155] max_q: 4.59855320549 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.541290484031394] max_q: 4.54129048403 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.4422977365889422, -0.1670824458680325, 0.7050111956316297] max_q: 3.44229773659 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.5817233024417066, -0.1670824458680325, 0.7050111956316297] max_q: 3.58172330244 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.6659938726640463] max_q: 0.665993872664 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6861782152530473, -0.5] max_q: 2.68617821525 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.4993944853976417] max_q: 0.499394485398 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.07748036067646288, 2.6004059383464164, -0.5] max_q: 2.60040593835 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.651436085368089, -0.1670824458680325, 0.7050111956316297] max_q: 3.65143608537 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.292718443475108] max_q: 4.29271844348 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.41609479176443936] max_q: 0.416094791764 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.585436886950217] max_q: 4.58543688695 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.5671419842330225] max_q: 4.56714198423 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.282264213350997] max_q: 4.28226421335 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.5404061861768685, -0.1670824458680325, 0.7050111956316297] max_q: 3.54040618618 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.36889163203895803] max_q: 0.368891632039 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.550461337637933] max_q: 4.55046133764 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.53735511531322] max_q: 4.53735511531 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.525142499056102] max_q: 4.52514249906 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.552500760224846, -0.1670824458680325, 0.7050111956316297] max_q: 3.55250076022 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.3346693412379841] max_q: 0.334669341238 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.508437900420554] max_q: 4.50843790042 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.281873460876995] max_q: 4.28187346088 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.415814339033205] max_q: 4.41581433903 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.4947855064912687, -0.1670824458680325, 0.7050111956316297] max_q: 3.49478550649 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.37117827771829004] max_q: 0.371178277718 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 Simulator.run(): Trial 43 Environment.reset(): Trial set up with start = (6, 3), destination = (1, 1), deadline = 35 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7050111956316297, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 0.08324924219769579, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.5034961012069368, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.408389082979041, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.07748036067646288, "(['green', None, None, None, 'left'], 'left')": 2.6587223575819823, "(['red', None, None, None, 'forward'], 'right')": 0.4005306034811293, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.1670824458680325, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.276653581971866, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.38195459991761554, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.38195459991761554, 4.276653581971866] max_q: 4.27665358197 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.408389082979041] max_q: 4.40838908298 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 2.6587223575819823, -0.5] max_q: 2.65872235758 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.5034961012069368, -0.1670824458680325, 0.978379623117549] max_q: 3.50349610121 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.204194541489521] max_q: 4.20419454149 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.4005306034811293] max_q: 0.400530603481 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 2.742552210233108, -0.5] max_q: 2.74255221023 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.274238280622455] max_q: 4.27423828062 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 44 Environment.reset(): Trial set up with start = (4, 2), destination = (8, 2), deadline = 20 RoutePlanner.route_to(): destination = (8, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 0.08324924219769579, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.29759603729207473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.3364409788506104, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.194912971421815, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 2.693048729550901, "(['red', None, None, None, 'forward'], 'right')": 0.34217516166941553, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.854407742957088, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.0, 0.29759603729207473, 0.0, 0.0] max_q: 0.297596037292 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, 0.34217516166941553] max_q: 0.342175161669 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 2.693048729550901, -0.5] max_q: 2.69304872955 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.3364409788506104, -0.033552152338698724, 0.978379623117549] max_q: 3.33644097885 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.391737563946393, -0.033552152338698724, 0.978379623117549] max_q: 3.39173756395 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.3281073000479723, 2.554438983640721, -0.5] max_q: 2.55443898364 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 45 Environment.reset(): Trial set up with start = (2, 6), destination = (5, 5), deadline = 20 RoutePlanner.route_to(): destination = (5, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.1967397284145662, "(['red', None, None, None, 'forward'], None)": 0.08324924219769579, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.198864286396744, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.194912971421815, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 3.735134110685631, "(['red', None, None, None, 'forward'], 'right')": -0.32891241916529224, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.854407742957088, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.194912971421815] max_q: 4.19491297142 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.1967397284145662, 3.198864286396744, -0.033552152338698724, 0.978379623117549] max_q: 3.1988642864 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4982279000068761, 3.599432143198372, -0.033552152338698724, 0.978379623117549] max_q: 3.5994321432 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 3.735134110685631, -0.5] max_q: 3.73513411069 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 46 Environment.reset(): Trial set up with start = (5, 2), destination = (3, 5), deadline = 25 RoutePlanner.route_to(): destination = (3, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.08324924219769579, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.6661934526653104, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.182730910707952, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 5.001688228767779, "(['red', None, None, None, 'forward'], 'right')": -0.32891241916529224, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.854407742957088, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.16666666666666666, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, 0.0, 0.16666666666666666, 0.0] max_q: 0.166666666667 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.6661934526653104, -0.033552152338698724, 0.978379623117549] max_q: 3.66619345267 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 5.001688228767779, -0.5] max_q: 5.00168822877 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 2.041624621098848, -0.033552152338698724, 0.978379623117549] max_q: 2.0416246211 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 2.2048225693406107, -0.033552152338698724, 0.978379623117549] max_q: 2.20482256934 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 47 Environment.reset(): Trial set up with start = (4, 2), destination = (5, 6), deadline = 25 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.08324924219769579, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 3.761620957244853, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.182730910707952, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 4.901519405891001, "(['red', None, None, None, 'forward'], 'right')": -0.32891241916529224, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.854407742957088, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.3990117913775616, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9663298235717118, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: right q: [0.0, -0.14285714285714285, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.854407742957088] max_q: 4.85440774296 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.3990117913775616, 0.5024968178278442, 0.09142361050650853, 4.182730910707952] max_q: 4.18273091071 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.08324924219769579, -0.9663298235717118, -0.9999945887077212, -0.32891241916529224] max_q: 0.0832492421977 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.07492431797792622, -0.9663298235717118, -0.9999945887077212, -0.32891241916529224] max_q: 0.0749243179779 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.06868062481309903, -0.9663298235717118, -0.9999945887077212, -0.32891241916529224] max_q: 0.0686806248131 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.06377486589787768, -0.9663298235717118, -0.9999945887077212, -0.32891241916529224] max_q: 0.0637748658979 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.472886599155532] max_q: 4.47288659916 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.4356296912565405] max_q: 4.43562969126 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.417478454120851] max_q: 4.41747845412 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.761620957244853, -0.033552152338698724, 0.978379623117549] max_q: 3.76162095724 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.059788936779260324, -0.9663298235717118, -0.9999945887077212, -0.34460054277030083] max_q: 0.0597889367793 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.05779597221995165, -0.9663298235717118, -0.9999945887077212, -0.34460054277030083] max_q: 0.05779597222 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [1.4982279000068761, 3.770134494486108, -0.033552152338698724, 0.978379623117549] max_q: 3.77013449449 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.05598984808807816, -0.9666636619472558, -0.9999945887077212, -0.34460054277030083] max_q: 0.0559898480881 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4982279000068761, 3.6733489627948823, -0.033552152338698724, 0.978379623117549] max_q: 3.67334896279 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 48 Environment.reset(): Trial set up with start = (8, 1), destination = (7, 6), deadline = 30 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.05451643103312873, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 4.091044425430966, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.200635040331224, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 4.901519405891001, "(['red', None, None, None, 'forward'], 'right')": -0.34460054277030083, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.393081459201218, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9666636619472558, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.4982279000068761, 4.091044425430966, -0.033552152338698724, 0.978379623117549] max_q: 4.09104442543 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': 'forward', 'right': None, 'left': None}, action = right, reward = 9.5 Simulator.run(): Trial 49 Environment.reset(): Trial set up with start = (5, 6), destination = (7, 2), deadline = 30 RoutePlanner.route_to(): destination = (7, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.05451643103312873, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 4.088768314795192, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.200635040331224, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 4.901519405891001, "(['red', None, None, None, 'forward'], 'right')": -0.34460054277030083, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.393081459201218, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9666636619472558, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.200635040331224] max_q: 4.20063504033 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.100317520165612] max_q: 4.10031752017 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.05451643103312873, -0.9666636619472558, -0.9999945887077212, -0.34460054277030083] max_q: 0.0545164310331 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.04088732327484655, -0.9666636619472558, -0.9999945887077212, -0.34460054277030083] max_q: 0.0408873232748 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4982279000068761, 4.088768314795192, -0.033552152338698724, 0.978379623117549] max_q: 4.0887683148 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.3281073000479723, 4.901519405891001, -0.5] max_q: 4.90151940589 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.673996019158278, -0.033552152338698724, 0.978379623117549] max_q: 3.67399601916 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.692107351427262, -0.033552152338698724, 0.978379623117549] max_q: 3.69210735143 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 50 Environment.reset(): Trial set up with start = (4, 2), destination = (7, 1), deadline = 20 RoutePlanner.route_to(): destination = (7, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 4.707501983855899, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.196540729600609, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 4.845174443022813, "(['red', None, None, None, 'forward'], 'right')": -0.34460054277030083, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.393081459201218, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9666636619472558, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.393081459201218] max_q: 4.3930814592 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.3281073000479723, 4.845174443022813, -0.5] max_q: 4.84517444302 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.707501983855899, -0.033552152338698724, 0.978379623117549] max_q: 4.70750198386 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, 0.3281073000479723, 3.4225872215114066, -0.5] max_q: 3.42258722151 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.9666636619472558, -0.9999945887077212, 1.8537509919279493] max_q: 1.85375099193 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.373427386241157] max_q: 4.37342738624 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.196540729600609] max_q: 4.1965407296 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.327567882667681] max_q: 4.32756788267 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.5895849865465825, -0.033552152338698724, 0.978379623117549] max_q: 4.58958498655 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0)] LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 51 Environment.reset(): Trial set up with start = (8, 1), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 5.500096426526692, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.191861188419642, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 3.066940416133555, "(['red', None, None, None, 'forward'], 'right')": 1.5683758927351543, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.298613221610449, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.4291523836922163, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.9666636619472558, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.191861188419642] max_q: 4.19186118842 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.298613221610449] max_q: 4.29861322161 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.02981367322124228, -0.5912378577898394, -0.9999945887077212, 1.5683758927351543] max_q: 1.56837589274 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.3281073000479723, 3.066940416133555, -0.5] max_q: 3.06694041613 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.500096426526692, -0.033552152338698724, 0.978379623117549] max_q: 5.50009642653 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 0.3281073000479723, 3.1835728641168606, -0.5] max_q: 3.18357286412 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.350086783874024, -0.033552152338698724, 0.978379623117549] max_q: 5.35008678387 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.2657063598818965, -0.033552152338698724, 0.978379623117549] max_q: 5.26570635988 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5912378577898394, -0.9999945887077212, 1.140313243945962] max_q: 1.14031324395 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.4291523836922163, 4.149306610805224] max_q: 4.14930661081 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.1340346963929795] max_q: 4.13403469639 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.9626311045410767] max_q: 3.96263110454 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5912378577898394, -0.9999945887077212, 1.033297581748664] max_q: 1.03329758175 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.963965707950324] max_q: 3.96396570795 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.9650917795768765] max_q: 3.96509177958 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.122287069922023] max_q: 4.12228706992 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.966200833447573, -0.033552152338698724, 0.978379623117549] max_q: 4.96620083345 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.0966177707470055] max_q: 1.09661777075 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.970741882834767] max_q: 3.97074188283 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.971406840043068] max_q: 3.97140684004 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.114680618338432] max_q: 4.11468061834 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.940774495725268, -0.033552152338698724, 0.978379623117549] max_q: 4.94077449573 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 52 Environment.reset(): Trial set up with start = (3, 1), destination = (1, 4), deadline = 25 RoutePlanner.route_to(): destination = (1, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 5.245908032717974, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 3.9720284304769145, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 3.0144910263858806, "(['red', None, None, None, 'forward'], 'right')": 1.138225841085845, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.5, "(['red', None, None, None, 'right'], 'right')": 4.109319518209266, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left random action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 3.9720284304769145] max_q: 3.97202843048 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.109319518209266] max_q: 4.10931951821 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.245908032717974, -0.033552152338698724, 0.978379623117549] max_q: 5.24590803272 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.038256693931645, -0.033552152338698724, 0.978379623117549] max_q: 5.03825669393 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.26529773867640505, 0.3281073000479723, 3.0144910263858806, -0.43971017947228236] max_q: 3.01449102639 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.90847460719019, -0.033552152338698724, 0.978379623117549] max_q: 4.90847460719 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 53 Environment.reset(): Trial set up with start = (8, 4), destination = (4, 1), deadline = 35 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 6.4994350565910075, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.0546597591046325, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 0.3281073000479723, "(['green', None, None, None, 'left'], 'left')": 3.113041923747293, "(['red', None, None, None, 'forward'], 'right')": 1.138225841085845, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.068324698880791, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.138225841085845] max_q: 1.13822584109 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.113041923747293, -0.43971017947228236] max_q: 3.11304192375 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 6.4994350565910075, -0.033552152338698724, 0.978379623117549] max_q: 6.49943505659 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.4068077889541215] max_q: 1.40680778895 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.3347814428104696, -0.43971017947228236] max_q: 3.33478144281 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.234091335886359, -0.033552152338698724, 0.978379623117549] max_q: 5.23409133589 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0)] LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 54 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 5), deadline = 20 RoutePlanner.route_to(): destination = (4, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 6.797917057895829, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.0546597591046325, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.401303298529423, "(['red', None, None, None, 'forward'], 'right')": 1.584367258701386, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.068324698880791, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 0.41238937598874, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.068324698880791] max_q: 4.06832469888 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 6.797917057895829, -0.033552152338698724, 0.978379623117549] max_q: 6.7979170579 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 6.098437793421871, -0.033552152338698724, 0.978379623117549] max_q: 6.09843779342 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.584367258701386] max_q: 1.5843672587 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.401303298529423, -0.43971017947228236] max_q: 3.40130329853 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 55 Environment.reset(): Trial set up with start = (8, 6), destination = (6, 2), deadline = 30 RoutePlanner.route_to(): destination = (6, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 4.0473930050964215, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 5.748698161184893, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.0546597591046325, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 4.476140386213245, "(['red', None, None, None, 'forward'], 'right')": 1.2613213513637127, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.027329879552316, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 0.7084388476313195, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, 0.0, 0.7084388476313195, 0.0] max_q: 0.708438847631 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.2613213513637127] max_q: 1.26132135136 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 4.476140386213245, -0.43971017947228236] max_q: 4.47614038621 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [4.0473930050964215, 0.4968484892614379, 0.48230779740090574, 4.027329879552316] max_q: 4.0473930051 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [3.7582935047323915, 0.4968484892614379, 0.48230779740090574, 4.027329879552316] max_q: 4.02732987955 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.748698161184893, -0.033552152338698724, 0.978379623117549] max_q: 5.74869816118 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.6515482633412875, -0.033552152338698724, 0.978379623117549] max_q: 5.65154826334 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 56 Environment.reset(): Trial set up with start = (4, 4), destination = (1, 6), deadline = 25 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.7582935047323915, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, None, 'forward'], 'forward')": 6.568970850174223, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.0546597591046325, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 4.063450321844371, "(['red', None, None, None, 'forward'], 'right')": 1.4839268972094595, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.4666666666666667, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.027329879552316, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.4839268972094595] max_q: 1.48392689721 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 4.063450321844371, -0.43971017947228236] max_q: 4.06345032184 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 6.568970850174223, -0.033552152338698724, 0.978379623117549] max_q: 6.56897085017 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.926728137630667, -0.033552152338698724, 0.978379623117549] max_q: 5.92672813763 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 4.031725160922186, -0.43971017947228236] max_q: 4.03172516092 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.6139827499972246] max_q: 1.61398275 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [1.4982279000068761, 4.886815883419983, -0.033552152338698724, 0.978379623117549] max_q: 4.88681588342 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.4666666666666667, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 4.0285526448299676, -0.43971017947228236] max_q: 4.02855264483 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.699243073273212] max_q: 1.69924307327 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.8595065910941364, -0.43971017947228236] max_q: 3.85950659109 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.823471891747127, -0.033552152338698724, 0.978379623117549] max_q: 4.82347189175 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.692426721592581, -0.033552152338698724, 0.978379623117549] max_q: 4.69242672159 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.670788386542812, -0.033552152338698724, 0.978379623117549] max_q: 4.67078838654 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.651059316350376, -0.033552152338698724, 0.978379623117549] max_q: 4.65105931635 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.8645242128407746, -0.43971017947228236] max_q: 3.86452421284 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.632974335340644, -0.033552152338698724, 0.978379623117549] max_q: 4.63297433534 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.5013256185736115, -0.033552152338698724, 0.978379623117549] max_q: 4.50132561857 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.7155886788578545] max_q: 1.71558867886 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.653870754338358] max_q: 1.65387075434 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Simulator.run(): Trial 57 Environment.reset(): Trial set up with start = (1, 2), destination = (1, 6), deadline = 20 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.7582935047323915, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.423062224328627, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.0546597591046325, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.7663913595333653, "(['red', None, None, None, 'forward'], 'right')": 1.6563777264177473, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.48888888888888893, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.027329879552316, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [3.6885083621341423, 0.4968484892614379, 0.48230779740090574, 4.027329879552316] max_q: 4.02732987955 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.0546597591046325] max_q: 4.0546597591 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.6885083621341423, 0.4968484892614379, 0.48230779740090574, 4.027329879552316] max_q: 4.02732987955 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.7663913595333653, -0.43971017947228236] max_q: 3.76639135953 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.423062224328627, -0.033552152338698724, 0.978379623117549] max_q: 4.42306222433 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.6563777264177473] max_q: 1.65637772642 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.435012915882935] max_q: 1.43501291588 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.7955924395916947, -0.43971017947228236] max_q: 3.79559243959 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.2610834218912967] max_q: 1.26108342189 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.5960821685259505, -0.43971017947228236] max_q: 3.59608216853 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.148029250796732] max_q: 1.1480292508 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.463075321148788, -0.43971017947228236] max_q: 3.46307532115 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.1040875521046765, -0.033552152338698724, 0.978379623117549] max_q: 4.1040875521 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.003118625004398, -0.033552152338698724, 0.978379623117549] max_q: 4.003118625 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 4, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.1791072912010097] max_q: 1.1791072912 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.48888888888888893, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 Simulator.run(): Trial 58 Environment.reset(): Trial set up with start = (2, 3), destination = (7, 3), deadline = 25 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.6885083621341423, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.914770813791655, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.034162349440395, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.4822512025363315, "(['red', None, None, None, 'forward'], 'right')": 1.195476592124234, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.48888888888888893, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.023913644608276, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.034162349440395] max_q: 4.03416234944 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.195476592124234] max_q: 1.19547659212 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.4822512025363315, -0.43971017947228236] max_q: 3.48225120254 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.914770813791655, -0.033552152338698724, 0.978379623117549] max_q: 3.91477081379 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.4573854068958274] max_q: 1.4573854069 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.6116884019022484, -0.43971017947228236] max_q: 3.6116884019 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.5194114436770745, -0.033552152338698724, 0.978379623117549] max_q: 3.51941144368 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.650519561712024, -0.43971017947228236] max_q: 3.65051956171 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.4079654856315047] max_q: 1.40796548563 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right random action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.023913644608276] max_q: 4.02391364461 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.022717962377863] max_q: 4.02271796238 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.0330520730835815] max_q: 4.03305207308 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 3.559460490037319, -0.033552152338698724, 0.978379623117549] max_q: 3.55946049004 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0)] LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 59 Environment.reset(): Trial set up with start = (8, 5), destination = (4, 6), deadline = 25 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.345635086574346, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.031674903371766, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.6754824501611654, "(['red', None, None, None, 'forward'], 'right')": 1.391936080554899, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.48888888888888893, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": -0.033552152338698724, "(['green', None, None, None, 'left'], 'right')": -0.43971017947228236, "(['red', None, None, None, 'right'], 'right')": 4.021685327724324, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.021685327724324] max_q: 4.02168532772 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.031674903371766] max_q: 4.03167490337 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.345635086574346, 1.6728175432871728, 0.978379623117549] max_q: 4.34563508657 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.391936080554899] max_q: 1.39193608055 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.023756177528824] max_q: 4.02375617753 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.021235491105982] max_q: 4.02123549111 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 4.288029238811955, 1.6728175432871728, 0.978379623117549] max_q: 4.28802923881 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 60 Environment.reset(): Trial set up with start = (3, 3), destination = (7, 6), deadline = 35 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4982279000068761, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 5.184027909775048, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.022436389888334, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.6754824501611654, "(['red', None, None, None, 'forward'], 'right')": 1.0929440704855367, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.020233761489801, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.020233761489801] max_q: 4.02023376149 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.019314045058446] max_q: 4.01931404506 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4982279000068761, 5.184027909775048, 1.6728175432871728, 0.978379623117549] max_q: 5.18402790978 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.0929440704855367] max_q: 1.09294407049 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.6754824501611654, -0.21752875390317425] max_q: 3.67548245016 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 0.5619627136570245] max_q: 0.561962713657 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.507934205145049, -0.21752875390317425] max_q: 3.50793420515 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.022436389888334] max_q: 4.02243638989 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5292562633102744, 3.865249972508908, 1.6728175432871728, 0.978379623117549] max_q: 3.86524997251 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 61 Environment.reset(): Trial set up with start = (8, 6), destination = (1, 2), deadline = 55 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.5292562633102744, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.3001809930031971, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.536408306758611, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.021573451815706, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.5284369465973384, "(['red', None, None, None, 'forward'], 'right')": 0.6411138293476999, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.011218194944167, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5024968178278442, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.011218194944167] max_q: 4.01121819494 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 55, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.021573451815706] max_q: 4.02157345182 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 54, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 0.6411138293476999] max_q: 0.641113829348 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 53, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 52, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 51, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.5284369465973384, -0.21752875390317425] max_q: 3.5284369466 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 4.536408306758611, 1.6728175432871728, 0.978379623117549] max_q: 4.53640830676 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 48, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.2046589913635026] max_q: 1.20465899136 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 46, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.567733867714227, -0.21752875390317425] max_q: 3.56773386771 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 43, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.0668678044032838] max_q: 1.0668678044 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.437089378738041, -0.21752875390317425] max_q: 3.43708937874 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 4.498093427704425, 1.6728175432871728, 0.978379623117549] max_q: 4.4980934277 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 4.481490313447611, 1.6728175432871728, 0.978379623117549] max_q: 4.48149031345 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.011189430341746] max_q: 4.01118943034 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.1193431051301244] max_q: 1.11934310513 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.010860329449342] max_q: 4.01086032945 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5024968178278442, 0.09142361050650853, 4.005594715170873] max_q: 4.00559471517 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 4.010435962509137] max_q: 4.01043596251 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.3001809930031971] max_q: 0.300180993003 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: right random action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.005454847291601] max_q: 4.00545484729 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.005341204639692] max_q: 4.00534120464 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.0604724633209544] max_q: 1.06047246332 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.457193329497397, -0.21752875390317425] max_q: 3.4571933295 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.003453381323589] max_q: 4.00345338132 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0)] LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 62 Environment.reset(): Trial set up with start = (3, 2), destination = (8, 3), deadline = 30 RoutePlanner.route_to(): destination = (8, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.5292562633102744, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.361376640892452, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.360534570942811, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.467245304877075, "(['red', None, None, None, 'forward'], 'right')": 1.0089065834379005, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 3.916291243474229, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.48230779740090574, 3.916291243474229] max_q: 3.91629124347 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 4.361376640892452, 1.6728175432871728, 0.978379623117549] max_q: 4.36137664089 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 1.0089065834379005] max_q: 1.00890658344 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.041666666666666664, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.041666666666666664, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 0.3924972285410237] max_q: 0.392497228541 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.084375] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, -0.1] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': 'forward', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.467245304877075, -0.21752875390317425] max_q: 3.46724530488 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 0.25324750568692134] max_q: 0.253247505687 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.26529773867640505, 1.0565209618736464, 3.3205207743893674, -0.21752875390317425] max_q: 3.32052077439 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 2.50445329171895, 1.6728175432871728, 0.978379623117549] max_q: 2.50445329172 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0)] LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 63 Environment.reset(): Trial set up with start = (2, 2), destination = (6, 4), deadline = 30 RoutePlanner.route_to(): destination = (6, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.5292562633102744, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.26529773867640505, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.272151388443273, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.360534570942811, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.3738773161440485, "(['red', None, None, None, 'forward'], 'right')": 0.19628170997387945, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 3.9257189592598425, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.5292562633102744, 3.272151388443273, 1.6728175432871728, 0.978379623117549] max_q: 3.27215138844 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 3.2981459817131564, 1.6728175432871728, 0.978379623117549] max_q: 3.29814598171 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, 0.19628170997387945] max_q: 0.196281709974 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.3738773161440485, -0.21752875390317425] max_q: 3.37387731614 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 2.09814085498694, 1.6728175432871728, 0.978379623117549] max_q: 2.09814085499 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.360534570942811] max_q: 4.36053457094 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 64 Environment.reset(): Trial set up with start = (1, 2), destination = (5, 6), deadline = 40 RoutePlanner.route_to(): destination = (5, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.5292562633102744, "(['red', None, None, None, 'forward'], None)": 0.02981367322124228, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.078512683989552, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.960922055723996, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.0304079871080365, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 3.9257189592598425, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.48230779740090574, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999945887077212, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right random action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 3.9257189592598425] max_q: 3.92571895926 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 3.9628594796299215] max_q: 3.96285947963 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 2.078512683989552, 1.6728175432871728, 0.978379623117549] max_q: 2.07851268399 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5292562633102744, 2.3987605699912935, 1.6728175432871728, 0.978379623117549] max_q: 2.39876056999 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.02981367322124228, -0.5842605206316723, -0.9999945887077212, -0.10278871751959043] max_q: 0.0298136732212 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.3027971366461255, 1.6728175432871728, 0.978379623117549] max_q: 2.30279713665 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 5.960922055723996] max_q: 5.96092205572 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.4240259125999737, 1.6728175432871728, 0.978379623117549] max_q: 2.4240259126 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.026832305899118055, -0.5842605206316723, -0.9999945887077212, -0.10278871751959043] max_q: 0.0268323058991 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.025490690604162154, -0.5842605206316723, -0.9999945887077212, -0.10278871751959043] max_q: 0.0254906906042 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.024332022849427513, -0.5842605206316723, -0.9999945887077212, -0.10278871751959043] max_q: 0.0243320228494 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.023318188564034698, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.023318188564 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.511580028566642, 1.6728175432871728, 0.978379623117549] max_q: 2.51158002857 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.022485396115319172, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0224853961153 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.021782727486715447, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0217827274867 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.47822420653271, 1.6728175432871728, 0.978379623117549] max_q: 2.47822420653 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.5204957563512456, 1.6728175432871728, 0.978379623117549] max_q: 2.52049575635 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 65 Environment.reset(): Trial set up with start = (7, 2), destination = (3, 4), deadline = 30 RoutePlanner.route_to(): destination = (3, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.021142059031223816, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.019973402307265, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.838364427241246, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.0304079871080365, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.6728175432871728, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.471660253745959, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9990981515546644, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.471660253745959] max_q: 4.47166025375 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.4592481418052765] max_q: 4.45924814181 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.019973402307265, 1.6728175432871728, 0.978379623117549] max_q: 3.01997340231 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.021142059031223816, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0211420590312 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.017618382526019848, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.017618382526 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 5.838364427241246] max_q: 5.83836442724 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.015416084710267366, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0154160847103 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.014314935802391127, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0143149358024 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.5152722159114385, 1.239795643100765, 0.978379623117549] max_q: 2.51527221591 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 66 Environment.reset(): Trial set up with start = (4, 5), destination = (8, 1), deadline = 40 RoutePlanner.route_to(): destination = (8, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.012674682741700477, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.084375, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.5895086051158662, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.220102094953131, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.0304079871080365, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.239795643100765, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.919182213620623, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9990981515546644, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.0304079871080365, -0.21752875390317425] max_q: 3.03040798711 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.012674682741700477, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0126746827417 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.006337341370850238, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00633734137085 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0047530060281376785, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00475300602814 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.5895086051158662, 1.239795643100765, 0.978379623117549] max_q: 3.58950860512 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.1926265586314972, 1.239795643100765, 0.978379623117549] max_q: 3.19262655863 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.003960838356781399, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00396083835678 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0036307684937162826, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00363076849372 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.954497330740876, 1.239795643100765, 0.978379623117549] max_q: 2.95449733074 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.919182213620623] max_q: 4.91918221362 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 5.220102094953131] max_q: 5.22010209495 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 5.149559590730402] max_q: 5.14955959073 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 2.927367188397233, -0.21752875390317425] max_q: 2.9273671884 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0033714278870222627, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00337142788702 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.8882690970062175] max_q: 4.88826909701 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.860510687724774] max_q: 4.86051068772 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 2.8560312508282153, -0.21752875390317425] max_q: 2.85603125083 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0032510197482000388, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.0032510197482 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.8353958786412057, 1.2183224628487543, 0.978379623117549] max_q: 2.83539587864 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 67 Environment.reset(): Trial set up with start = (4, 6), destination = (6, 3), deadline = 25 RoutePlanner.route_to(): destination = (6, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.003165466596931617, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.13055555555555554, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.364510981675175, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.1016612744499685, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 2.8084739591155365, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.06855527829110591, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.842294214165962, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9990981515546644, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.4662799808124058, 3.364510981675175, 1.2183224628487543, 0.978379623117549] max_q: 3.36451098168 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.003165466596931617, -0.5842605206316723, -0.9990981515546644, -0.10278871751959043] max_q: 0.00316546659693 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0015827332984658085, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.00158273329847 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.2963645692563395, 1.2183224628487543, 0.978379623117549] max_q: 3.29636456926 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 2.8084739591155365, -0.21752875390317425] max_q: 2.80847395912 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.384318998099297, 1.2183224628487543, 0.978379623117549] max_q: 3.3843189981 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.842294214165962] max_q: 4.84229421417 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 5.1016612744499685] max_q: 5.10166127445 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.06855527829110591, 0.0] max_q: 0.0685552782911 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.909949797243443] max_q: 4.90994979724 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.81421774036043] max_q: 4.81421774036 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.882014190184375] max_q: 4.88201419018 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 3, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: None LearningAgent.update(): deadline = 2, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 2.86805026115976, -0.21752875390317425] max_q: 2.86805026116 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 0, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 Simulator.run(): Trial 68 Environment.reset(): Trial set up with start = (8, 2), destination = (3, 2), deadline = 25 RoutePlanner.route_to(): destination = (3, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0013189444153881738, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.13055555555555554, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.4123044981856925, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.8577332546181395, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 2.8333282507133695, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.792790957719366, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 0.0667937255521643, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.792790957719366] max_q: 4.79279095772 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, 0.0, 0.0667937255521643, 0.0] max_q: 0.0667937255522 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = left, reward = -0.5 next_waypoint: forward q: [0.0013189444153881738, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.00131894441539 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0009892083115411302, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.000989208311541 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0008243402596176086, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.000824340259618 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.4123044981856925, 1.2183224628487543, 0.978379623117549] max_q: 3.41230449819 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.4710740483671234, 1.2183224628487543, 0.978379623117549] max_q: 3.47107404837 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 2.8333282507133695, -0.21752875390317425] max_q: 2.83332825071 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 69 Environment.reset(): Trial set up with start = (6, 3), destination = (1, 3), deadline = 25 RoutePlanner.route_to(): destination = (1, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0007212977271654075, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.13055555555555554, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.2259551484498665, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.8577332546181395, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.8916618381777015, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.682415193921635, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.4662799808124058, 3.2259551484498665, 1.2183224628487543, 0.978379623117549] max_q: 3.22595514845 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.2646573910273737, 1.2183224628487543, 0.978379623117549] max_q: 3.26465739103 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.632328695513687, 1.2183224628487543, 0.978379623117549] max_q: 3.63232869551 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.8161643477568434, 1.2183224628487543, 0.978379623117549] max_q: 2.81616434776 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.13055555555555554] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.8577332546181395] max_q: 4.85773325462 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 0.5623997444390749, 4.682415193921635] max_q: 4.68241519392 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.793167547410974] max_q: 4.79316754741 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.8916618381777015, -0.21752875390317425] max_q: 3.89166183818 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 70 Environment.reset(): Trial set up with start = (5, 5), destination = (6, 1), deadline = 25 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.978379623117549, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0007212977271654075, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.9345479129811594, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.7535091700404255, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 4.805677209169624, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.644503238703766, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 0.5623997444390749, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.7535091700404255] max_q: 4.75350917004 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.644503238703766] max_q: 4.6445032387 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 4.805677209169624, -0.21752875390317425] max_q: 4.80567720917 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0007212977271654075, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.000721297727165 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0006311355112697316, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.00063113551127 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.9345479129811594, 1.2183224628487543, 0.978379623117549] max_q: 2.93454791298 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.714303938159649] max_q: 4.71430393816 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.500827603891795] max_q: 4.50082760389 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.669659942024671] max_q: 4.66965994202 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0005680219601427584, -0.5842605206316723, -0.9991533924527158, -0.10278871751959043] max_q: 0.000568021960143 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.023335586899396, 1.2183224628487543, 0.7672231070979094] max_q: 3.0233355869 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 71 Environment.reset(): Trial set up with start = (7, 1), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.7672231070979094, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0005422027801362694, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.897363270778588, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.6268131189452415, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.8704514727797497, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.482383422460744, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.5842605206316723, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.6268131189452415] max_q: 4.62681311895 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.600695905655856] max_q: 4.60069590566 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [1.4662799808124058, 3.897363270778588, 1.2183224628487543, 0.7672231070979094] max_q: 3.89736327078 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.8704514727797497, -0.21752875390317425] max_q: 3.87045147278 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.876928899140762, -0.21752875390317425] max_q: 3.87692889914 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.264999214315748, 1.2183224628487543, 0.8585422321129005] max_q: 3.26499921432 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 72 Environment.reset(): Trial set up with start = (6, 4), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0005422027801362694, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.128957580385925, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.241191711230372, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.7062989992188746, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.482383422460744, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.7919947096208021, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.4662799808124058, 4.128957580385925, 1.2183224628487543, 0.8585422321129005] max_q: 4.12895758039 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 4.123584347869844, 1.2183224628487543, 0.8585422321129005] max_q: 4.12358434787 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0005422027801362694, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000542202780136 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00045183565011355786, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000451835650114 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.000271101390068, 1.2183224628487543, 0.8585422321129005] max_q: 2.00027110139 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.200243991251061, 1.2183224628487543, 0.8585422321129005] max_q: 2.20024399125 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00039535619384936313, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000395356193849 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00036711646571726576, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000367116465717 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.1669029390587053, 1.2183224628487543, 0.8585422321129005] max_q: 2.16690293906 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.7062989992188746, -0.21752875390317425] max_q: 3.70629899922 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 73 Environment.reset(): Trial set up with start = (1, 2), destination = (4, 6), deadline = 35 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.00034417168660993665, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 0.9702026196556066, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.1483772887014387, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.241191711230372, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 4.397440749283968, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.482383422460744, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.895861804115367, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 4.397440749283968, -0.21752875390317425] max_q: 4.39744074928 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.00034417168660993665, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.00034417168661 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.1483772887014387, 1.2183224628487543, 0.8585422321129005] max_q: 2.1483772887 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.9702026196556066, 0.0, 0.0] max_q: 0.970202619656 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'right', 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.482383422460744] max_q: 4.48238342246 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.333539559831295, 1.2183224628487543, 0.8585422321129005] max_q: 2.33353955983 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00030115022578369456, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000301150225784 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.2918659367414946, 1.2183224628487543, 0.8585422321129005] max_q: 2.29186593674 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.37727263990442, 1.2183224628487543, 0.8585422321129005] max_q: 2.3772726399 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0)] LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 74 Environment.reset(): Trial set up with start = (6, 6), destination = (2, 3), deadline = 35 RoutePlanner.route_to(): destination = (2, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.0002844196576846004, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.3601238835451284, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.241191711230372, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.598293832855979, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.2183224628487543, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.43069948433995, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.895861804115367, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.241191711230372] max_q: 4.24119171123 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.3601238835451284, 1.2183224628487543, 0.8585422321129005] max_q: 3.36012388355 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0002844196576846004, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000284419657685 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0002133147432634503, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000213314743263 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00017776228605287527, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000177762286053 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.000142209828842, 1.2183224628487543, 0.8585422321129005] max_q: 2.00014220983 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.200127988845958, 1.2183224628487543, 0.8585422321129005] max_q: 2.20012798885 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.00015554200029626586, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000155542000296 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.00014582062527774924, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000145820625278 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.350117323108795, 1.2183224628487543, 0.8585422321129005] max_q: 2.35011732311 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.43069948433995] max_q: 4.43069948434 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.2281029217062756] max_q: 4.22810292171 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 75 Environment.reset(): Trial set up with start = (2, 6), destination = (7, 3), deadline = 40 RoutePlanner.route_to(): destination = (7, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 0.00013771947942898538, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.432611456953355, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.995337779615385, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.598293832855979, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 1.1726845779058384, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.404312149049382, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3026940579594739, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.895861804115367, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.995337779615385] max_q: 4.99533777962 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.9570555573224855] max_q: 4.95705555732 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.00013771947942898538, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000137719479429 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.432611456953355, 1.1726845779058384, 0.8585422321129005] max_q: 2.43261145695 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.00010328960957173904, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 0.000103289609572 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.037840837527166e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 9.03784083753e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.13405675377445e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 8.13405675377e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.456218690959913e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 7.45621869096e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.404312149049382] max_q: 4.40431214905 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.3026940579594739] max_q: 0.302694057959 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.598293832855979, -0.21752875390317425] max_q: 3.59829383286 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.3488961923137017, 0.9636033329373845, 0.8585422321129005] max_q: 2.34889619231 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.615031589820313, -0.21752875390317425] max_q: 3.61503158982 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0)] LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 76 Environment.reset(): Trial set up with start = (8, 3), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 6.923631641605633e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.0699793641654964, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.202156074524691, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.628780461612445, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9636033329373845, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.14713975128337, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.895861804115367, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right random action: right LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.14713975128337] max_q: 4.14713975128 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [6.923631641605633e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 6.92363164161e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.192723731204225e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 5.1927237312e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.0699793641654964, 0.9636033329373845, 0.8585422321129005] max_q: 3.06997936417 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.8024899322113423, 0.9636033329373845, 0.8585422321129005] max_q: 2.80248993221 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.64199627303885, 0.9636033329373845, 0.8585422321129005] max_q: 2.64199627304 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.0735698756416845] max_q: 4.07356987564 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 77 Environment.reset(): Trial set up with start = (8, 4), destination = (2, 1), deadline = 45 RoutePlanner.route_to(): destination = (2, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 4.327269776003522e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.5350005002571887, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.193583661265824, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.628780461612445, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9636033329373845, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.505458726354717, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.895861804115367, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.628780461612445, -0.21752875390317425] max_q: 3.62878046161 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [4.327269776003522e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 4.327269776e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.786361054003082e-05, -0.895861804115367, -0.9991533924527158, -0.10278871751959043] max_q: 3.786361054e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [3.4077249486027736e-05, -0.9132153303253487, -0.9991533924527158, -0.10278871751959043] max_q: 3.4077249486e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.193583661265824] max_q: 4.19358366127 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.5350005002571887, 0.9390904475862858, 0.8585422321129005] max_q: 2.53500050026 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.608250475244329, 0.9390904475862858, 0.8585422321129005] max_q: 2.60825047524 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [3.164316023702576e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 3.1643160237e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.0426115612524772e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 3.04261156125e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.9339468626363173e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 2.93394686264e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.671511817278678, 0.9390904475862858, 0.8585422321129005] max_q: 2.67151181728 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.8361486338817734e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 2.83614863388e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.6295423286987605, 0.9390904475862858, 0.8585422321129005] max_q: 2.6295423287 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.255710961478217] max_q: 4.25571096148 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 5.505458726354717] max_q: 5.50545872635 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.248981725649843] max_q: 4.24898172565 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.6906503846770375, -0.21752875390317425] max_q: 3.69065038468 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.667610597346017, 0.933826190140622, 0.8585422321129005] max_q: 2.66761059735 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 78 Environment.reset(): Trial set up with start = (7, 4), destination = (2, 4), deadline = 25 RoutePlanner.route_to(): destination = (2, 4) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 2.752732497591133e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.05646072927587, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.243323050066892, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.6973753763144934, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.439698351900916, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9204460676665598, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.6973753763144934, -0.21752875390317425] max_q: 3.69737537631 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.47745924783202e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 2.47745924783e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.271004310512685e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 2.27100431051e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.1087897169046364e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 2.1087897169e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.9769903595980964e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 1.9769903596e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.05646072927587, 0.933826190140622, 0.8585422321129005] max_q: 3.05646072928 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.8671575618426464e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 1.86715756184e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.950815589927064, 0.933826190140622, 0.8585422321129005] max_q: 2.95081558993 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.7822867635770717e-05, -0.9204460676665598, -0.9991533924527158, -0.10278871751959043] max_q: 1.78228676358e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [1.4662799808124058, 2.871581700052627, 0.933826190140622, 0.8585422321129005] max_q: 2.87158170005 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.7137372726702613e-05, -0.9261278793556368, -0.9991533924527158, -0.10278871751959043] max_q: 1.71373727267e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6601829828993158e-05, -0.9261278793556368, -0.9991533924527158, -0.10278871751959043] max_q: 1.6601829829e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 8, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.611354071637571e-05, -0.9261278793556368, -0.9991533924527158, -0.10278871751959043] max_q: 1.61135407164e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.5665942363143052e-05, -0.9261278793556368, -0.9991533924527158, -0.10278871751959043] max_q: 1.56659423631e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.9091956433842063, 0.933826190140622, 0.8585422321129005] max_q: 2.90919564338 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 79 Environment.reset(): Trial set up with start = (1, 1), destination = (2, 5), deadline = 25 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 1.525368072200771e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.363736242557014, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.243323050066892, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 3.7352034542751817, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.439698351900916, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9261278793556368, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.243323050066892] max_q: 4.24332305007 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.5536759485401116, 0.5459851050373206, 0.09142361050650853, 4.237239973815219] max_q: 4.23723997382 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 3.7352034542751817, -0.21752875390317425] max_q: 3.73520345428 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 80 Environment.reset(): Trial set up with start = (1, 6), destination = (5, 3), deadline = 35 RoutePlanner.route_to(): destination = (5, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 1.525368072200771e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.363736242557014, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.719849175950458, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 6.268303022490784, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.439698351900916, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 0.5536759485401116, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9991533924527158, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9261278793556368, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.719849175950458] max_q: 4.71984917595 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 5.439698351900916] max_q: 5.4396983519 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.525368072200771e-05, -0.9261278793556368, -0.9991533924527158, -0.10278871751959043] max_q: 1.5253680722e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.4662799808124058, 3.363736242557014, 0.933826190140622, 0.8585422321129005] max_q: 3.36373624256 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.2711400601673091e-05, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 1.27114006017e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.1652117218200334e-05, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 1.16521172182e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0819823131186026e-05, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 1.08198231312e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.4273626183013124, 0.933826190140622, 0.8585422321129005] max_q: 3.4273626183 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.4591758061734614, 0.933826190140622, 0.8585422321129005] max_q: 3.45917580617 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.0565209618736464, 6.268303022490784, -0.21752875390317425] max_q: 6.26830302249 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.4862170158647885, 0.933826190140622, 0.8585422321129005] max_q: 3.48621701586 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0)] LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 81 Environment.reset(): Trial set up with start = (7, 2), destination = (1, 6), deadline = 50 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 1.01435841854869e-05, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.4078014222063473, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.19569935385873, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.719849175950458, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.0565209618736464, "(['green', None, None, None, 'left'], 'left')": 5.880275474991621, "(['red', None, None, None, 'forward'], 'right')": -0.10278871751959043, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.079773763925687, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993634554144617, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9261278793556368, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.719849175950458] max_q: 4.71984917595 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 4.19569935385873, 0.933826190140622, 0.8585422321129005] max_q: 4.19569935386 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 49, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.01435841854869e-05, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 1.01435841855e-05 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.607688139115176e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 7.60768813912e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.0000050717920925, 0.933826190140622, 0.8585422321129005] max_q: 2.00000507179 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.339740115929313e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 6.33974011593e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.7057661043363826e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 5.70576610434e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.230285595641684e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 5.23028559564e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.03566718055659328] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.856693767381564e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 4.85669376738e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.613859079012486e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 4.61385907901e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.404138211784646e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 4.40413821178e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.220632452960286e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 4.22063245296e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.058300435538736e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 4.05830043554e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.000004021772636, 0.933826190140622, 0.8585422321129005] max_q: 2.00000402177 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.066670554380215, 0.933826190140622, 0.8585422321129005] max_q: 2.06667055438 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -0.5 next_waypoint: forward q: [1.4662799808124058, 2.127087099555833, 0.933826190140622, 0.8585422321129005] max_q: 2.12708709956 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.913361134269496e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 3.91336113427e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.1200268138405405, 0.933826190140622, 0.8585422321129005] max_q: 2.12002681384 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.8103779465255617e-06, -0.9261278793556368, -0.9993634554144617, -0.10278871751959043] max_q: 3.81037794653e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [3.7196546620844765e-06, -0.9294856184836837, -0.9993634554144617, -0.10278871751959043] max_q: 3.71965466208e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.167026143494527, 0.933826190140622, 0.8585422321129005] max_q: 2.16702614349 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.6387926042130746e-06, -0.9294856184836837, -0.9993634554144617, -0.10278871751959043] max_q: 3.63879260421e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.566016752128813e-06, -0.9294856184836837, -0.9993634554144617, -0.10278871751959043] max_q: 3.56601675213e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [0.0, 0.4078014222063473, 0.0, 0.0] max_q: 0.407801422206 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, -0.05555555555555555] max_q: 0.0 count: 3 best: [0, 1, 2] action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 5.880275474991621, -0.21752875390317425] max_q: 5.88027547499 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.160066796657101, 0.933826190140622, 0.8585422321129005] max_q: 2.16006679666 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [3.4974395068955668e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.4974395069e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.448863958188684e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.44886395819e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.4022576884834316e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.40225768848e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.357491139950755e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.35749113995e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.158629951372765, 0.933826190140622, 0.8585422321129005] max_q: 2.15862995137 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 5.851786452643264, -0.21752875390317425] max_q: 5.85178645264 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.1816470769806053, 0.933826190140622, 0.8585422321129005] max_q: 2.18164707698 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.203294135587979, 0.933826190140622, 0.8585422321129005] max_q: 2.20329413559 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 7, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.224186064243933, 0.933826190140622, 0.8585422321129005] max_q: 2.22418606424 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 6, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.2190909640843706, 0.933826190140622, 0.8585422321129005] max_q: 2.21909096408 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0)] LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 82 Environment.reset(): Trial set up with start = (4, 2), destination = (1, 1), deadline = 20 RoutePlanner.route_to(): destination = (1, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 3.314446381746258e-06, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.461101064483433, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.689855460285854, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.757840441603184, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.079773763925687, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [3.314446381746258e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.31444638175e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.277619199726855e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.27761919973e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6388095998634276e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.63880959986e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.2291071998975707e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.2291071999e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.461101064483433, 0.933826190140622, 0.8585422321129005] max_q: 2.46110106448 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.0242559999146423e-06, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.02425599991e-06 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.218303999231781e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 9.21830399923e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.450111999295799e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 8.4501119993e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.846532570774671e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.84653257077e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.356124285101255e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.3561242851e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.653463431423004, 0.933826190140622, 0.8585422321129005] max_q: 2.65346343142 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.720790259851854, 0.933826190140622, 0.8585422321129005] max_q: 2.72079025985 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 9, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.689855460285854] max_q: 4.68985546029 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0)] LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 83 Environment.reset(): Trial set up with start = (7, 5), destination = (1, 6), deadline = 35 RoutePlanner.route_to(): destination = (1, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 6.94745071370674e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 2.6552639041719157, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.510691412092269, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.757840441603184, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.933826190140622, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.079773763925687, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 5.510691412092269] max_q: 5.51069141209 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 5.447745936588425] max_q: 5.44774593659 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.6552639041719157, 0.933826190140622, 0.8585422321129005] max_q: 2.65526390417 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 2.991447928128937, 0.933826190140622, 0.8585422321129005] max_q: 2.99144792813 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.1595399401074475, 0.933826190140622, 0.8585422321129005] max_q: 3.15953994011 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.94745071370674e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 6.94745071371e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.252705642336066e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 6.25270564234e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.731646838808061e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 5.73164683881e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.322243493178914e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 5.32224349318e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.989603274855233e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.98960327486e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.723872968294213] max_q: 4.72387296829 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.712403092918831e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.71240309292e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.516052964047213e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.51605296405e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.342358619276166e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.34235861928e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.2645974475940167, 0.9536734435062606, 0.8585422321129005] max_q: 3.26459744759 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.18029096504533, 0.9536734435062606, 0.8585422321129005] max_q: 3.18029096505 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.2044000543087026, 0.9536734435062606, 0.8585422321129005] max_q: 3.20440005431 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [4.1872743828734456e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.18727438287e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.0770829517451976e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.07708295175e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.137488951811759, 0.9536734435062606, 0.8585422321129005] max_q: 3.13748895181 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.1580249291495743, 0.9536734435062606, 0.8585422321129005] max_q: 3.15802492915 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0)] LearningAgent.update(): deadline = 13, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 84 Environment.reset(): Trial set up with start = (8, 2), destination = (2, 6), deadline = 50 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 3.9751558779515674e-07, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.3076923076923077, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.559932895949948, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.707146960445907, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.702907927803085, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.079773763925687, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2224281139793473, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0313291357234897, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [3.9751558779515674e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.97515587795e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 50, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.884811426179941e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.88481142618e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.9424057130899704e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.94240571309e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4568042848174777e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.45680428482e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.559932895949948, 0.9536734435062606, 0.8585422321129005] max_q: 3.55993289595 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.2140035706812314e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.21400357068e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0926032136131084e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.09260321361e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.001552945812016e-07, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.00155294581e-07 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.1699496871375055, 0.9536734435062606, 0.8585422321129005] max_q: 3.16994968714 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [9.300134496825864e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 9.30013449683e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.783460358113317e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 8.78346035811e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [8.344287340207651e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 8.34428734021e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 3.221827831691411, 0.9536734435062606, 0.8585422321129005] max_q: 3.22182783169 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.965001552016394e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.96500155202e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.658655338477303e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.65865533848e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.385131933531686e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.38513193353e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, -0.03566718055659328] max_q: 0.0 count: 3 best: [0, 1, 2] action: left LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 5.079773763925687] max_q: 5.07977376393 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.120008849035877, 0.9536734435062606, 0.8585422321129005] max_q: 3.12000884904 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 32, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.2224281139793473] max_q: 0.222428113979 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left random action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 5.702907927803085, -0.21752875390317425] max_q: 5.7029079278 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.3076923076923077, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: forward LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, -0.3333333333333333, 0.0] max_q: 0.0 count: 3 best: [0, 1, 3] action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': 'left', 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.0, 0.0, 1.0313291357234897, 0.0] max_q: 1.03132913572 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': 'left', 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [7.138960869080631e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.13896086908e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4662799808124058, 3.0307157983346014, 0.9536734435062606, 0.8585422321129005] max_q: 3.03071579833 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [7.023816338934169e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 7.02381633893e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4662799808124058, 2.9994819873280703, 0.9536734435062606, 0.8585422321129005] max_q: 2.99948198733 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 85 Environment.reset(): Trial set up with start = (4, 3), destination = (7, 6), deadline = 30 RoutePlanner.route_to(): destination = (7, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.4662799808124058, "(['red', None, None, None, 'forward'], None)": 6.920524922185137e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.256639645821629, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.707146960445907, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.554791610690962, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.048015712045519, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.707146960445907] max_q: 4.70714696045 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 3.256639645821629, 0.9536734435062606, 0.8585422321129005] max_q: 3.25663964582 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 2.628319840212127, 0.9536734435062606, 0.8585422321129005] max_q: 2.62831984021 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.697044861010965] max_q: 4.69704486101 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 2.8569332001767727, 0.9536734435062606, 0.8585422321129005] max_q: 2.85693320018 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.920524922185137e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 6.92052492219e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.343814512003043e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 6.343814512e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 2.685546567061943, 0.9536734435062606, 0.8585422321129005] max_q: 2.68554656706 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0)] LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 86 Environment.reset(): Trial set up with start = (2, 5), destination = (6, 1), deadline = 40 RoutePlanner.route_to(): destination = (6, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 5.890684904002826e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.017699906620572, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.609914253384594, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.554791610690962, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.048015712045519, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.609914253384594] max_q: 4.60991425338 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.571794612548057] max_q: 4.57179461255 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [5.890684904002826e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 5.890684904e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.41801367800212e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 4.418013678e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.017699906620572, 0.9536734435062606, 0.8585422321129005] max_q: 4.01769990662 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [3.681678065001767e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.681678065e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.31351025850159e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.3135102585e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.037384403626458e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 3.03738440363e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.8204283747959967e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.8204283748e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.6441516013712468e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.64415160137e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.0154874182930005, 0.9536734435062606, 0.8585422321129005] max_q: 4.01548741829 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.4972542901839553e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.49725429018e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 3.813938677712328, 0.9536734435062606, 0.8585422321129005] max_q: 3.81393867771 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 5.554791610690962, -0.21752875390317425] max_q: 5.55479161069 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.38374273153923e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.38374273154e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.309250771178629e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.30925077118e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 3.6627771222295267, 0.9536734435062606, 0.8585422321129005] max_q: 3.66277712223 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.6721444243898174, 0.9536734435062606, 0.8585422321129005] max_q: 3.67214442439 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0)] LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 87 Environment.reset(): Trial set up with start = (6, 5), destination = (4, 3), deadline = 20 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 2.2413316308498457e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.1104526131696515, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.5240078560227595, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.317805503311565, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.048015712045519, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 5.317805503311565, -0.21752875390317425] max_q: 5.31780550331 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.2413316308498457e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.24133163085e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.0545539949456922e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 2.05455399495e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.1104526131696515, 0.9536734435062606, 0.8585422321129005] max_q: 4.11045261317 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.5240078560227595] max_q: 4.52400785602 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.103549324846548, 0.9536734435062606, 0.8585422321129005] max_q: 4.10354932485 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 88 Environment.reset(): Trial set up with start = (5, 1), destination = (3, 3), deadline = 20 RoutePlanner.route_to(): destination = (3, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 1.9078001381638573e-08, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.8931943933157935, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.5240078560227595, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.654244402649252, "(['red', None, None, None, 'forward'], 'right')": -0.0792431273179304, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 5.048015712045519, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.9078001381638573e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.90780013816e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.8124101312556646e-08, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 1.81241013126e-08 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [9.062050656278323e-09, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 9.06205065628e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [6.796537992208742e-09, -0.9294856184836837, -0.9993815924391984, -0.0792431273179304] max_q: 6.79653799221e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 14, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.654244402649252, -0.21752875390317425] max_q: 4.65424440265 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 12, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.8931943933157935, 0.9536734435062606, 0.8585422321129005] max_q: 4.89319439332 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 11, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 5.048015712045519] max_q: 5.04801571205 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 10, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [5.663781660173953e-09, -0.9294856184836837, -0.9993815924391984, -0.1844323447804751] max_q: 5.66378166017e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 9, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.843572482576027, 0.9536734435062606, 0.8585422321129005] max_q: 4.84357248258 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 8, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.406337039256955e-09, -0.9294856184836837, -0.9993815924391984, -0.1844323447804751] max_q: 5.40633703926e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 7, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 6, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.5240078560227595] max_q: 4.52400785602 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 5, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right random action: right LearningAgent.update(): deadline = 4, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.506540927488667] max_q: 4.50654092749 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 3, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.606608109253289, 0.9536734435062606, 0.8585422321129005] max_q: 4.60660810925 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0)] LearningAgent.update(): deadline = 2, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 89 Environment.reset(): Trial set up with start = (7, 5), destination = (1, 5), deadline = 30 RoutePlanner.route_to(): destination = (1, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.8585422321129005, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 5.198400999285534e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 5.145313439551808, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.491642664915471, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.613354127483674, "(['red', None, None, None, 'forward'], 'right')": -0.20697289139621255, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.5911111111111111, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.949218397524561, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9993815924391984, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [5.198400999285534e-09, -0.9294856184836837, -0.9993815924391984, -0.20697289139621255] max_q: 5.19840099929e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.054000971527603e-09, -0.9294856184836837, -0.9993815924391984, -0.20697289139621255] max_q: 5.05400097153e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.5270004857638017e-09, -0.9294856184836837, -0.9993815924391984, -0.20697289139621255] max_q: 2.52700048576e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.6283198229108145, 5.145313439551808, 0.9536734435062606, 0.8585422321129005] max_q: 5.14531343955 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.5911111111111111, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.613354127483674, -0.21752875390317425] max_q: 4.61335412748 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.358985079900762, 0.9536734435062606, 0.5868337858798454] max_q: 4.3589850799 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.3426675762689095, 0.9536734435062606, 0.5868337858798454] max_q: 4.34266757627 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.328389760591038, 0.9536734435062606, 0.5868337858798454] max_q: 4.32838976059 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.31575938518369, 0.9536734435062606, 0.5868337858798454] max_q: 4.31575938518 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.58268642110949, -0.21752875390317425] max_q: 4.58268642111 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 90 Environment.reset(): Trial set up with start = (1, 1), destination = (4, 3), deadline = 25 RoutePlanner.route_to(): destination = (4, 3) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 1.8952503643228513e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.46466571958182606, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.1503480005954, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.491642664915471, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 5.077173993035524, "(['red', None, None, None, 'forward'], 'right')": -0.20697289139621255, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.949218397524561, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.999587727976924, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.491642664915471] max_q: 4.49164266492 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.4752545760849545] max_q: 4.47525457608 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.8952503643228513e-09, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 1.89525036432e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4214377732421383e-09, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 1.42143777324e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.1503480005954, 0.9536734435062606, 0.5868337858798454] max_q: 4.1503480006 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.6127610005946167, 0.9536734435062606, 0.5868337858798454] max_q: 3.61276100059 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left random action: left LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [0.0, -0.037037037037037035, 0.0, 0.0] max_q: 0.0 count: 3 best: [0, 2, 3] action: left LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [0.0, 0.46466571958182606, 0.0, 0.0] max_q: 0.464665719582 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 17, inputs = {'light': 'green', 'oncoming': 'left', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1845314777017819e-09, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 1.1845314777e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 3.6514849005351553, 0.9536734435062606, 0.5868337858798454] max_q: 3.65148490054 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0)] LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 91 Environment.reset(): Trial set up with start = (6, 2), destination = (4, 6), deadline = 30 RoutePlanner.route_to(): destination = (4, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 1.1187241733850162e-09, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.4863364104816394, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.4746091987622805, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.564311660862937, "(['red', None, None, None, 'forward'], 'right')": -0.20697289139621255, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.949218397524561, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.999587727976924, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.6283198229108145, 4.4863364104816394, 0.9536734435062606, 0.5868337858798454] max_q: 4.48633641048 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.1187241733850162e-09, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 1.11872417339e-09 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.593620866925081e-10, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 5.59362086693e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.195215650193811e-10, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 4.19521565019e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.564311660862937, -0.21752875390317425] max_q: 4.56431166086 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.6782770771607587, 0.9536734435062606, 0.5868337858798454] max_q: 3.67827707716 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.491801846384541, 0.9536734435062606, 0.5868337858798454] max_q: 3.49180184638 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.517211754065314, 0.9536734435062606, 0.5868337858798454] max_q: 3.51721175407 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0)] LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 92 Environment.reset(): Trial set up with start = (5, 1), destination = (8, 5), deadline = 35 RoutePlanner.route_to(): destination = (8, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 3.496013041828176e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.448247583425982, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.4746091987622805, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.24377270325507, "(['red', None, None, None, 'forward'], 'right')": -0.20697289139621255, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.949218397524561, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.999587727976924, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.949218397524561] max_q: 4.94921839752 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.906072106727989] max_q: 4.90607210673 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 34, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [3.496013041828176e-10, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 3.49601304183e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 33, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.622009781371132e-10, -0.9294856184836837, -0.999587727976924, -0.20697289139621255] max_q: 2.62200978137e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.24377270325507, -0.21752875390317425] max_q: 4.24377270326 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 27, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.448247583425982, 0.9536734435062606, 0.5868337858798454] max_q: 4.44824758343 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.4746091987622805] max_q: 4.47460919876 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [2.1850081511426102e-10, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 2.18500815114e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'right'}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.423344939902316, 0.9536734435062606, 0.5868337858798454] max_q: 4.4233449399 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.407062442213766, 0.9536734435062606, 0.5868337858798454] max_q: 4.40706244221 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 4.235129410634517, 0.9536734435062606, 0.5868337858798454] max_q: 4.23512941063 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 93 Environment.reset(): Trial set up with start = (8, 1), destination = (3, 6), deadline = 50 RoutePlanner.route_to(): destination = (3, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6283198229108145, "(['red', None, None, None, 'forward'], None)": 2.0856895988179463e-10, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.752787449932502, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.449800081554252, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.228536909301629, "(['red', None, None, None, 'forward'], 'right')": -0.2802296685198468, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5521757472882938, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.453036053363995, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.999587727976924, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.6283198229108145, 4.752787449932502, 0.9536734435062606, 0.5868337858798454] max_q: 4.75278744993 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 50, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.0856895988179463e-10, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 2.08568959882e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 49, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.0428447994089731e-10, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 1.04284479941e-10 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 48, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.821335995567299e-11, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 7.82133599557e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 47, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6283198229108145, 4.569268286610621, 0.9536734435062606, 0.5868337858798454] max_q: 4.56926828661 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 46, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [6.517779996306083e-11, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 6.51777999631e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.866001996675475e-11, -0.9294856184836837, -0.999587727976924, -0.2802296685198468] max_q: 5.86600199668e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.0, 0.0, 0.0, 0.0] max_q: 0.0 count: 4 best: [0, 1, 2, 3] action: right LearningAgent.update(): deadline = 42, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'left'}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.453036053363995] max_q: 4.45303605336 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.449800081554252] max_q: 4.44980008155 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.9269512149661128, 0.9536734435062606, 0.5868337858798454] max_q: 3.92695121497 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.930271614285835, 0.9536734435062606, 0.5868337858798454] max_q: 3.93027161429 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6283198229108145, 3.9331769636905918, 0.9536734435062606, 0.5868337858798454] max_q: 3.93317696369 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 37, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 36, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.228536909301629, -0.21752875390317425] max_q: 4.2285369093 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.7844710434087685, 0.9536734435062606, 0.5868337858798454] max_q: 3.78447104341 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.377168496952519e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 5.37716849695e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.227802705370505e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 5.22780270537e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.6795021585039516, 0.9536734435062606, 0.5868337858798454] max_q: 3.6795021585 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [5.0902289499660184e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 5.09022894997e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.969033022585875e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 4.96903302259e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.8561004538907416e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 4.85610045389e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.595527050580026, 0.9536734435062606, 0.5868337858798454] max_q: 3.59552705058 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 26, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.5521757472882938] max_q: 0.552175747288 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': 'forward'}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.427687607521009] max_q: 4.42768760752 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.427310077476539] max_q: 4.42731007748 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.419251608789222] max_q: 4.41925160879 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [4.750533052719204e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 4.75053305272e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.540550418207698, 0.9536734435062606, 0.5868337858798454] max_q: 3.54055041821 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0)] LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 94 Environment.reset(): Trial set up with start = (7, 2), destination = (2, 5), deadline = 40 RoutePlanner.route_to(): destination = (2, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6448145540854127, "(['red', None, None, None, 'forward'], None)": 4.6686273104309423e-11, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.822532070934886, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.411768745008141, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.220919012324908, "(['red', None, None, None, 'forward'], 'right')": -0.285701764012098, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.9536734435062606, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.419462845837914, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.2650362315047027, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.999587727976924, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [4.6686273104309423e-11, -0.9294856184836837, -0.999587727976924, -0.285701764012098] max_q: 4.66862731043e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 40, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 39, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.4431126414428196e-11, -0.9294856184836837, -0.9999999999770459, -0.285701764012098] max_q: 3.44311264144e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.822532070934886, 0.9536734435062606, 0.5868337858798454] max_q: 3.82253207093 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.869260534535683e-11, -0.9294856184836837, -0.9999999999770459, -0.285701764012098] max_q: 2.86926053454e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.419462845837914] max_q: 4.41946284584 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 31, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [2.582334481082115e-11, -0.9294856184836837, -0.9999999999781617, -0.285701764012098] max_q: 2.58233448108e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 30, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.4532177570280094e-11, -0.9294856184836837, -0.9999999999781617, -0.285701764012098] max_q: 2.45321775703e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.4196574654376883, 0.7460058087214966, 0.5868337858798454] max_q: 3.41965746544 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.3417078589812817e-11, -0.9294856184836837, -0.9999999999781617, -0.285701764012098] max_q: 2.34170785898e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.2516421720973865e-11, -0.9294856184836837, -0.9999999999781617, -0.285701764012098] max_q: 2.2516421721e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.0, 0.0, 0.2650362315047027] max_q: 0.265036231505 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = -0.5 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.220919012324908, -0.21752875390317425] max_q: 4.22091901232 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.0, -0.33333333333333337, -0.6422222222222222, -0.18333333333333332] max_q: 0.0 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.082111574054601, -0.21752875390317425] max_q: 4.08211157405 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [1.6448145540854127, 3.30135267665219, 0.7460058087214966, 0.5868337858798454] max_q: 3.30135267665 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 19, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 95 Environment.reset(): Trial set up with start = (2, 5), destination = (4, 1), deadline = 30 RoutePlanner.route_to(): destination = (4, 1) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6448145540854127, "(['red', None, None, None, 'forward'], None)": 2.1712263802367656e-11, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.1814264396543184, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.649700600343526, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.411768745008141, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 4.080058784703235, "(['red', None, None, None, 'forward'], 'right')": -0.285701764012098, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.7460058087214966, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.392765536671184, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3240789052927955, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999999999781617, "(['green', 'right', None, None, 'forward'], 'forward')": 0.4395191727231112, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.6448145540854127, 3.649700600343526, 0.7460058087214966, 0.5868337858798454] max_q: 3.64970060034 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6448145540854127, 3.657661950335719, 0.7460058087214966, 0.5868337858798454] max_q: 3.65766195034 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 4.080058784703235, -0.21752875390317425] max_q: 4.0800587847 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 28, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: forward q: [2.1712263802367656e-11, -0.9294856184836837, -0.9999999999781617, -0.285701764012098] max_q: 2.17122638024e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: right LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = -0.5 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.392765536671184] max_q: 4.39276553667 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 25, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [1.005238108398891, 0.5459851050373206, 0.09142361050650853, 4.411768745008141] max_q: 4.41176874501 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [0.0, -1.0, -0.03333333333333333, 1.1814264396543184] max_q: 1.18142643965 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': 'left', 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.6448145540854127, 3.8288309751678593, 0.7460058087214966, 0.5868337858798454] max_q: 3.82883097517 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.8093553168639714e-11, -0.9294856184836837, -0.9999999999781617, -0.3392763230068118] max_q: 1.80935531686e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 21, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.7088355770381952e-11, -0.9294856184836837, -0.9999999999781617, -0.3392763230068118] max_q: 1.70883557704e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6233937981862854e-11, -0.9294856184836837, -0.9999999999781617, -0.3392763230068118] max_q: 1.62339379819e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [0.0, 0.4395191727231112, 0.0, 0.0] max_q: 0.439519172723 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': 'right', 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.5496031709959996e-11, -0.9294856184836837, -0.9999999999781617, -0.3392763230068118] max_q: 1.549603171e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: left LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0 next_waypoint: forward q: [1.490003049034615e-11, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 1.49000304903e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.839529039219868, 0.7460058087214966, 0.5868337858798454] max_q: 3.83952903922 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 96 Environment.reset(): Trial set up with start = (2, 4), destination = (6, 5), deadline = 25 RoutePlanner.route_to(): destination = (6, 5) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6448145540854127, "(['red', None, None, None, 'forward'], None)": 1.4403362807334611e-11, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.5918126261902237, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.3495584742690765, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 4.108259490811311, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 3.0400293923516175, "(['red', None, None, None, 'forward'], 'right')": -0.3392763230068118, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.7460058087214966, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.355389303837761, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3240789052927955, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.005238108398891, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999999999791894, "(['green', 'right', None, None, 'forward'], 'forward')": 0.5695592416634976, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: forward q: [1.6448145540854127, 4.3495584742690765, 0.7460058087214966, 0.5868337858798454] max_q: 4.34955847427 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.4403362807334611e-11, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 1.44033628073e-11 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 24, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [7.201681403667306e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 7.20168140367e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [5.4012610527504795e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 5.40126105275e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 22, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 4.20271106962771, 0.7460058087214966, 0.5868337858798454] max_q: 4.20271106963 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6448145540854127, 3.6520333022213447, 0.7460058087214966, 0.5868337858798454] max_q: 3.65203330222 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [4.501050877292066e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 4.50105087729e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.125963304184395e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 4.12596330418e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.831251639599795e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 3.8312516396e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6448145540854127, 3.6868299719992104, 0.7460058087214966, 0.5868337858798454] max_q: 3.686829972 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 16, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: right random action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: right q: [1.1101272720995676, 0.5459851050373206, 0.09142361050650853, 4.108259490811311] max_q: 4.10825949081 count: 1 action index: 3 action: right Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0), (14, 12.0)] LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 12.0 Simulator.run(): Trial 97 Environment.reset(): Trial set up with start = (1, 3), destination = (2, 6), deadline = 20 RoutePlanner.route_to(): destination = (2, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6448145540854127, "(['red', None, None, None, 'forward'], None)": 3.5917984121248078e-12, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.5918126261902237, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.499404419555053, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.023662687275635, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 3.0400293923516175, "(['red', None, None, None, 'forward'], 'right')": -0.3392763230068118, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.7460058087214966, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.355389303837761, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3240789052927955, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.1101272720995676, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999999999791894, "(['green', 'right', None, None, 'forward'], 'forward')": 0.5695592416634976, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 3.0400293923516175, -0.21752875390317425] max_q: 3.04002939235 count: 1 action index: 2 action: left LearningAgent.update(): deadline = 20, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.355389303837761] max_q: 4.35538930384 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.5917984121248078e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 3.59179841212e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 17, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.9931653434373397e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 2.99316534344e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 16, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.619019675507672e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 2.61901967551e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 15, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6972583819314697, 3.499404419555053, 0.7460058087214966, 0.5868337858798454] max_q: 3.49940441956 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 14, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.357117707956905e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 2.35711770796e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 13, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.188752157388555e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 2.18875215739e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 12, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.0519551475517705e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 2.05195514755e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 11, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6972583819314697, 3.249503682962741, 0.7460058087214966, 0.5868337858798454] max_q: 3.24950368296 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0), (14, 12.0), (10, 12.0)] LearningAgent.update(): deadline = 10, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 Simulator.run(): Trial 98 Environment.reset(): Trial set up with start = (6, 6), destination = (1, 2), deadline = 45 RoutePlanner.route_to(): destination = (1, 2) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6972583819314697, "(['red', None, None, None, 'forward'], None)": 1.93795763935445e-12, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.5918126261902237, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 4.124553314666564, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.023662687275635, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 2.9454812657741973, "(['red', None, None, None, 'forward'], 'right')": -0.3392763230068118, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.7460058087214966, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.511831343637818, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3240789052927955, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.1101272720995676, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999999999791894, "(['green', 'right', None, None, 'forward'], 'forward')": 0.5695592416634976, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9294856184836837, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.511831343637818] max_q: 4.51183134364 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 45, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: right q: [3.502224857708586, 0.4968484892614379, 1.3222516193518832, 4.4862397764559265] max_q: 4.48623977646 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 44, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [1.93795763935445e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 1.93795763935e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 43, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.4534682295158375e-12, -0.9294856184836837, -0.9999999999791894, -0.3392763230068118] max_q: 1.45346822952e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 42, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 41, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 40, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6972583819314697, 3.699642651733357, 0.7460058087214966, 0.5868337858798454] max_q: 3.69964265173 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 39, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: forward LearningAgent.update(): deadline = 38, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0 next_waypoint: forward q: [1.0598205840219648e-12, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 1.05982058402e-12 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 37, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6972583819314697, 3.416368876444553, 0.7460058087214966, 0.5868337858798454] max_q: 3.41636887644 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 36, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward random action: None LearningAgent.update(): deadline = 35, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6904822715803056, 3.2589945568396574, 0.7460058087214966, 0.5868337858798454] max_q: 3.25899455684 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 34, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: left q: [0.7391780451416115, 1.1379101839690677, 2.9454812657741973, -0.21752875390317425] max_q: 2.94548126577 count: 1 action index: 2 action: left Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0), (14, 12.0), (10, 12.0), (33, 12.0)] LearningAgent.update(): deadline = 33, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = 12.0 Simulator.run(): Trial 99 Environment.reset(): Trial set up with start = (2, 6), destination = (8, 6), deadline = 30 RoutePlanner.route_to(): destination = (8, 6) q: {"(['red', 'left', None, None, 'right'], 'left')": -0.03333333333333333, "(['green', None, None, None, 'forward'], 'right')": 0.5868337858798454, "(['green', None, None, None, 'forward'], None)": 1.6904822715803056, "(['red', None, None, None, 'forward'], None)": 9.935817975205919e-13, "(['green', None, None, 'forward', 'right'], 'forward')": 0.20045060869895037, "(['green', 'left', None, None, 'forward'], 'forward')": 0.6565825047081311, "(['green', 'left', None, None, 'right'], None)": 0.0, "(['red', None, None, None, 'left'], 'forward')": -0.33333333333333337, "(['red', 'left', None, None, 'forward'], 'forward')": -0.037037037037037035, "(['green', None, None, 'right', 'forward'], 'forward')": 0.5327193490058473, "(['red', None, 'right', None, 'left'], None)": 0.0, "(['red', None, None, None, 'right'], None)": 3.502224857708586, "(['red', 'forward', None, None, 'right'], 'right')": 4.427203871478544, "(['red', None, 'forward', None, 'left'], 'right')": -0.05555555555555555, "(['red', 'right', None, None, 'right'], 'left')": -0.0625, "(['green', None, 'left', None, 'right'], None)": 0.0, "(['green', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'forward', None, None, 'forward'], 'forward')": -0.5, "(['red', None, None, None, 'left'], 'right')": -0.18333333333333332, "(['red', None, 'left', None, 'right'], 'forward')": -0.1, "(['red', None, 'left', None, 'left'], 'left')": -0.3333333333333333, "(['green', None, None, 'forward', 'left'], 'left')": 0.5, "(['green', None, None, 'left', 'forward'], 'right')": 0.36293132606878936, "(['green', None, 'right', None, 'forward'], 'forward')": 1.141860612231821, "(['red', 'left', None, None, 'right'], 'right')": 1.5918126261902237, "(['green', None, None, None, 'left'], None)": 0.7391780451416115, "(['red', 'right', None, None, 'right'], 'right')": 0.25758086702511146, "(['green', None, None, 'left', 'left'], 'right')": 0.2017835568313518, "(['red', None, None, 'left', 'left'], 'forward')": -0.1111111111111111, "(['green', None, None, None, 'forward'], 'forward')": 3.1445405062179153, "(['red', 'left', None, None, 'forward'], None)": 0.0, "(['green', None, None, None, 'right'], 'right')": 5.023662687275635, "(['red', None, 'forward', None, 'left'], None)": 0.0, "(['red', 'left', None, None, 'right'], 'forward')": -1.0, "(['green', None, None, None, 'left'], 'forward')": 1.1379101839690677, "(['green', None, None, None, 'left'], 'left')": 3.822752879700272, "(['red', None, None, None, 'forward'], 'right')": -0.3392763230068118, "(['green', None, 'forward', None, 'right'], 'left')": 0.17952113831055388, "(['green', None, None, 'forward', 'left'], 'forward')": -0.041666666666666664, "(['red', None, None, None, 'left'], None)": 0.0, "(['red', None, 'left', None, 'left'], 'forward')": -0.034482758620689655, "(['green', None, None, 'forward', 'forward'], 'right')": 0.5100887173977121, "(['green', None, 'right', None, 'left'], 'right')": 0.23280423280423285, "(['red', None, None, None, 'left'], 'left')": -0.6422222222222222, "(['green', None, None, None, 'right'], 'left')": 0.09142361050650853, "(['green', None, None, None, 'forward'], 'left')": 0.7460058087214966, "(['red', 'forward', None, None, 'left'], 'left')": -0.1111111111111111, "(['green', None, None, 'forward', 'left'], None)": 0.0, "(['green', None, None, None, 'left'], 'right')": -0.21752875390317425, "(['red', None, None, None, 'right'], 'right')": 4.243119888227963, "(['red', 'forward', None, None, 'forward'], None)": 0.0, "(['green', None, 'forward', None, 'forward'], 'right')": 0.3240789052927955, "(['red', None, None, None, 'right'], 'left')": 1.3222516193518832, "(['green', None, None, None, 'right'], None)": 1.1101272720995676, "(['green', 'left', None, None, 'right'], 'forward')": 0.17466439646082368, "(['green', None, 'forward', None, 'left'], 'left')": 0.5, "(['green', None, 'left', None, 'left'], 'left')": 1.0636181645327067, "(['red', None, 'left', None, 'forward'], None)": 0.0, "(['green', None, None, 'forward', 'right'], None)": 0.0, "(['red', 'forward', None, None, 'left'], 'right')": -0.1, "(['red', None, None, None, 'forward'], 'left')": -0.9999999999791894, "(['green', 'right', None, None, 'forward'], 'forward')": 0.5695592416634976, "(['red', 'left', None, None, 'left'], 'forward')": -0.07142857142857142, "(['green', None, None, 'right', 'forward'], None)": 0.022196639541910302, "(['green', None, None, 'left', 'right'], 'left')": 1.8412075969608175, "(['green', None, 'right', None, 'right'], 'right')": 1.0160182048973492, "(['green', None, 'left', None, 'forward'], 'left')": -0.03124999776907473, "(['red', 'forward', None, None, 'forward'], 'left')": -0.5, "(['green', 'forward', None, None, 'left'], 'right')": 9.5, "(['red', None, None, 'left', 'right'], None)": 0.0, "(['green', None, 'left', None, 'forward'], None)": 0.0, "(['red', None, None, 'right', 'forward'], 'left')": -1.0, "(['green', None, None, None, 'right'], 'forward')": 0.5459851050373206, "(['red', None, None, None, 'forward'], 'forward')": -0.9395591015573675, "(['green', None, 'left', None, 'forward'], 'right')": -0.03566718055659328, "(['green', None, 'left', None, 'right'], 'right')": 0.0982779857908416, "(['red', 'forward', None, None, 'right'], 'forward')": -0.14285714285714285, "(['red', 'left', None, None, 'forward'], 'left')": -0.14285714285714285, "(['red', None, None, None, 'right'], 'forward')": 0.4968484892614379, "(['red', 'forward', None, None, 'forward'], 'right')": -0.16655610757549197} next_waypoint: right q: [1.1101272720995676, 0.5459851050373206, 0.09142361050650853, 5.023662687275635] max_q: 5.02366268728 count: 1 action index: 3 action: right LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0 next_waypoint: forward q: [9.935817975205919e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 9.93581797521e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 29, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [4.967908987602959e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 4.9679089876e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 28, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.72593174070222e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 3.7259317407e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 27, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [3.10494311725185e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 3.10494311725e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6904822715803056, 3.1445405062179153, 0.7460058087214966, 0.5868337858798454] max_q: 3.14454050622 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 25, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6904822715803056, 3.230086455596124, 0.7460058087214966, 0.5868337858798454] max_q: 3.2300864556 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 24, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.716825227595369e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 2.7168252276e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 23, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6904822715803056, 3.025072046330126, 0.7460058087214966, 0.5868337858798454] max_q: 3.02507204633 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 22, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [1.6904822715803056, 3.086005043434493, 0.7460058087214966, 0.5868337858798454] max_q: 3.08600504343 count: 1 action index: 1 action: forward LearningAgent.update(): deadline = 21, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 2.0 next_waypoint: forward q: [2.5227662827671285e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 2.52276628277e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 20, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [2.396627968628772e-13, -0.9395591015573675, -0.9999999999791894, -0.3392763230068118] max_q: 2.39662796863e-13 count: 1 action index: 0 action: None LearningAgent.update(): deadline = 19, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0 next_waypoint: forward q: [1.6904822715803056, 2.9653378163862296, 0.7460058087214966, 0.5868337858798454] max_q: 2.96533781639 count: 1 action index: 1 action: forward Environment.act(): Primary agent has reached destination! Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0), (14, 12.0), (10, 12.0), (33, 12.0), (18, 12.0)] LearningAgent.update(): deadline = 18, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = 12.0 epsilon: 0.1 gamma: 0.5 alpha: 0.0833333333333 defaultq: 0.0 Results: [(29, 12.0), (5, 12.0), (26, 12.0), (11, 12.0), (31, 12.0), (11, 12.0), (17, 12.0), (18, 12.0), (26, 12.0), (12, 12.0), (17, 12.0), (23, 12.0), (33, 12.0), (9, 12.0), (0, 12.0), (14, 12.0), (12, 12.0), (21, 12.0), (16, 12.0), (23, 12.0), (19, 12.0), (10, 12.0), (20, 12.0), (18, 12.0), (29, 12.0), (26, 12.0), (10, 12.0), (37, 12.0), (26, 12.0), (29, 12.0), (27, 12.0), (18, 12.0), (10, 12.0), (17, 12.0), (19, 12.0), (0, 12.0), (29, 12.0), (13, 12.0), (18, 12.0), (12, 12.0), (12, 12.0), (18, 12.0), (5, 12.0), (29, 9.5), (20, 12.0), (11, 12.0), (15, 12.0), (19, 12.0), (29, 12.0), (12, 12.0), (20, 12.0), (12, 12.0), (14, 12.0), (20, 12.0), (27, 12.0), (16, 12.0), (24, 12.0), (21, 12.0), (20, 12.0), (20, 12.0), (15, 12.0), (14, 12.0), (13, 12.0), (13, 12.0), (18, 12.0), (24, 12.0), (22, 12.0), (25, 12.0), (13, 12.0), (21, 12.0), (5, 12.0), (21, 12.0), (23, 12.0), (5, 12.0), (8, 12.0), (13, 12.0), (15, 12.0), (22, 12.0), (21, 12.0), (10, 12.0), (2, 12.0), (15, 12.0), (15, 12.0), (19, 12.0), (20, 12.0), (20, 12.0), (18, 12.0), (14, 12.0), (14, 12.0), (10, 12.0), (33, 12.0), (18, 12.0)] Number of Successful Outcomes: 92 ================================================ FILE: p4-smartcab/smartcab-report.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# P4 Smartcab " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Implement a Basic Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **Process**\n", "\n", "**Understanding the game** The first thing I did was run the simulation to get an understanding of the game. I did not alter any code before I did this, so `enforce_deadline` was set to `True`." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nW1W3qqu7f/dN9Tn3nOece+73Fr7T/dS9JcKGAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAA\nAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggg\ngAACCCCAAAIIIIAAAggggAACCCCAAAIIIIAAAggggAACCCCAAAIItK9AR/sujZUhMKIC/Lcxovwc\nHAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBMaAQHEMnAOngECuAiQhc+VksjoFeB/WCccwBBBA\nAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBmgT40EBNXATnLUBiNG/R8Tsf76Xxe+05cwQQQAAB\nBBBAAAEEEEAAAQQQQAABBBBAAAEEEEBgPAiQ3B8PV7nJ50hStcnAY2R63idj5EJyGggggAACCCCA\nAAIIIIAAAggggAACCCCAAAIIIIAAAk0VIInfVN7RPzmJ19F/DfM4A94HeSgyBwIIIIAAAggggAAC\nCCCAAAIIIIAAAggggAACCCCAAAKVBUjgV/YZ870kZsf8JR5yglzvIRzsIIAAAggggAACCCCAAAII\nIIAAAggggAACCCCAAAIIINAWAiTu2+IyNH8RJGybbzxSR+DajpQ8x0UAAQQQQAABBBBAAAEEEEAA\nAQQQQAABBBBAAAEEEECgcQGS9o0btt0MJHHb7pLUtSCuY11sDEIAAQQQQAABBBBAAAEEEEAAAQQQ\n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\nxJjJsvAEd/br9OzXyf2P75BjVs+2EYPlvifkf8r5+cFj+3brvvmg7HjZckkYLZvuv6N03sOvS54+\ngwumhgACCCCAAAIIIIAAAgi0TCDKfpWOpnX9TVVL3axuv71av/ZZ3Y/Vdn+zGG1Lq4d9WfaTYrRN\nN/84ccvgz0p9g1GjqDaaEvSK36qt1mP58XnUq81R7k/8A0iNSgMXv1Y2feRvZPmUSeK++Nz9J+Cm\nd39Eif5b8JP04bzRKkpL0TG6HTwkm/btE50zniNubuTnwPLLZePP75OjpxyWjonuu97Lx3VrdP8X\nHbp0+GHH0XYNKPUXDx2WjdsKUjjt8tzWN3/+fHn88cej74zXpLpuel2yJOktOa+lvg4dOiTbtm2T\nY489NvmPW9Hs/EAAAQQQQAABBBBAoA0E9HeGcvJ1rVx703Hyx68/Nfp+eVvdwU0/ky/d+GAp2dsr\nZ69ZNPTfuR1z5XkXr5bb//tB2XDrZ+SfbOCZZ8nSyZqQtQZXdi+QM16xWO69TW8Ff1D++V++Lu95\n16vlqGml+6L7d8tPb/6U3LjOG6Tr00m6J8pCV0a53nXuTvmBoizwc92FbfKDr35p8Hg2rnR4ncJ+\n99JS9/1taP9grMXEY+JB5djJvXLWGe574jUxvu6b8u27V8kbXrDUhsRl37Nyw/uvkrXR3tnyF1e9\nQeb56x4aPWRPP9DwInewtS5FffutcVfv+atklmuLVzJZjl3tvt/9wXvlQQuQXjl+6YzyudqE5TW7\nhiHnH3fE8+m8uh9uKTG9JzxPit+MPzVx+2dulJM+/BZZNdM/ud3yo+v/XTZ4U5aP7dvJrXLjHSfI\nW166wns6g34m43659iuD772XBO+9PH3CU2YfAQQQQAABBBBAAAEEEGihgGbA9DcnK/XQVi9lx1L7\n02L99kp17au22VqqxTXa759ro3M1ffxoStBnwTD8pNi0vrR2f44wxt/36/4Yv+7HVKsn9ae1+e3+\n8WqrL1kixTf+luy98QaZPt897rDbvS00qR39ccWV0VG8v4pEs3uH1ljdjhyRvTt3RXOJmzO3bdpR\nUlz5Ntnz3Kdk5gJ3l39XV2lNetzSutKWp2uzpQ4MyJ4de91cvyfi5sxr06R8b29v9Fj6uXPnyoQJ\ngw9O9I9hf6yypLz2WV3L/v7+aA6dyxL9/njqCCCAAAIIIIAAAgi0s8DGOz4v7994vvz+q08V93Xf\n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\nK3/HJcxLSfwsc1qMnr9Lzg/8i7vjXz9Uced9kZcccvNr4j76agIXI66uxX7npHfT73siev8UH3Lv\nH/fBhoG7fhJ7/eEfRk9mqHg3v/vgSOFvPubW7+A3ueS8Pt7ef8S9Hmebu3t/xz4pfvW/3d30M6Wg\nSX33vui87NI4Sa/rt+ur7/vRfH31XNgQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEQoEwR2j7+ldk\nrWtZbfPHhLFpfVnn9uerZ0ye4/25KtUbXWeluYf0tTJBP+TANe7Ym6DGYeXwpPFJbeUBGSv+HH7d\nH67t1fosxkp/fFi3mLQ5w3j2ERjfAppwfs4ltjXBqncR73LJTd30MfIzXZJb71TX75jX/0wL7m5k\njd/hEvJ6N/tBd8e6tul3yeud2trX7f5nU++kj+5s73UJa3ens94hHd4VrvO6x9JHd3drMl2/t909\nRl52urn1Lmy961m/O13nnT8nLrvc3df6/2dqwlXn0zu3LUGr+8+6dejd9QNuTbZpIrfW9ejd3Xr3\nu3vMerSezW49e9zd9FNcm95tPmVqfKe2zq1Jav0ggx5fP6hw0N057yijtev56J3eem56HiOx6XEX\nLXTrcWvVu+X3u+S5mW10d7jr9TrgPpChRv5XA1Rbq563PvFAz1mv/zPupPW66R3xdt3muKS/Hn+C\nM9DtiLtu+h7Z6d5janbQxR5yx17vxhbd+va4ufS9pk9jSNv07nt9fL6+f/Q9pu9LvSu+oOtxH+jQ\n66Dno/Pvdi/32QDZ5NY3wcVrn2764QE12OTO/1l31/9ovr7xGfETAQQQQAABBBBAAAEEEEAAAQQQ\nQAABBBBAYLiA+wNylIPU0v0ROXXT/qQtaYzFpvVZe7VjJh0vbEuaI6ktHFdpv9HxlebOrW80JOgV\nshVbpeP4fX5d1+Xv+/VwzdZnZdjv72tM2iuM8/epI4BAKKB3rN90c/w4cFcvb+7O484/+T33XeiL\npOOkk1yitVuK21wC3yWtC1f9c5zM3+ESpTr+G+5O5eVLRX7jgigZ3HnWC10y1CXJzzkneuz5wDve\n7ZLWLhnqb+67wbs+5+68XrbEJWRdctg9nn7gbz4SPyZdE7+adJ3hErUL5knnn/5RdCd6h/t+dk3w\nFn/5q2i+wsf/Lb6zXec95JK/9/2ilCR2ddvco9xrWo873+hDB+5DCwN//pfxuve683Rr7Ljo5SKL\n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\nyo1PiI+yhx9RtIDjIfsDjcOiuBc9pKQFCZUXPF/bBezLFycke+n5fJ0dkeANb4x7wV/XhLYrGLrz\njnzbguse9PhGcxb5aI4rL7015/mpz0mAlvjcSerXedCijcqzn6OICXtCtlrvS0WLWzKJ83onsvf/\nid6bnSFzZIqdO+RJvyuPzHD3PZonvT/ven99IYy+zfVrQ3j5S7Rn/Z5Q8XfobRVIEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQgMFsCFhUQ42dLb4HqIdD3BrRf9iYqWm8aKNif73Z61mEMQWBpENAn\ns1LCt49xi+j130tXJSZKbI73mxSW3XuqH5Nn76lT8gJW6PlGyd7BPiyGJ89pC9Hez35cgqwXAbju\n6OncM9ie8g4BfkFCtgT6KM4fk6juOi63emUU2MP6EQmV8qRvJMb7i7eXsY9MddKvVXvOS+yM+e6L\nvdy9H3qnyXUsoI6rLxZJ477y9X6dUaj/qho+dFQh+9XOsPrpdFALC46r/6c0vrOKNGAW7vNqte3F\nCBJjoze5bS9U8jwe1by5b+XkZwuRVoqPw7RLlA5X9Y753uHbi/PVrB/9Og9+H7U9Q3AEiE2KxOBF\nLVrcEd+JM+f0feg/Lw5pThxZIC6Q0dn3fmeP6xtz2RWyEfROu6wXpzR6/5txIx8CEIAABCAAAQhA\nAAIQgAAEIAABCEAAAhCAAAQSASsJVg/SOeX3+mz7TkmpyO/42TUB/VWc1EMCfjHTy9lDs5iCAARm\nTcDC/FOfKDFRIvo/f01CtIRTpwsXQvbOP5RIOBSmUwj3SYnpFnUnLeT7Uy78jrHH+hmF7paYXdki\nQV+ez9WXvlSh3k+E6c9/QeK7xOwHHsnrHpYAeexMqP2nX8uF/Kr+qXX47jF5Gdu++7BKIu4zb5bn\n/N5Q+bZvzYVtC7vFZPHWwuVmiaBjOs5JBE2LB0br9jfLc/sHvlceyLtD9VU/WKzd+lph/avPe772\nTD8Vpr9wbx454Iv3a/GA+nZBiw0uHQ+13/ztvP/DEuCdpvTMovy5uhDrsOX2eH7OLXEc1ZerH9u3\n5WL1aYn8yylpgUX11a+O78H0Z/9Jr44WNpijRfpWqV/nQQJ9ZdOmOLLKD3xPHjngLz4aPejDqN7z\ns5dC7Vd/49r773fFIe39/jvywrDE+Rv25O/tD79KERt26RvVIg8SBCAAAQhAAAIQgAAEIAABCEAA\n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\n7o+ezfRHTXhxQHZRXd01FcavXAknDp4Mo2dOhat2y5+nxP/+mCewmJ0XAvz+mBesGB0QAnwfAzKR\nDGNeCPB9zAtWjEIAAgNCAIF+QCaSYUBg0Ags1MrKMrfULp4sZTLcLyUC6T2db8+V8phTu3wfZTLc\nLyUC6T3l+1hKs0JflgoBvo+lMhP92Y/JicnwpS99KVw4PhYe/v++GbKzWXj8xOPCumxteG7l+WFl\ntjKsnJbHe6ag9FeleDtJzI9CeD3qvMVx7yF/7MpJ6eXj4ejQwTCRTYQztXPSzGth5YrhUK1Uw5rq\nuniWxTzUvWw6Wau3uF7T/2X/P3t3HiNXth6G/dTaG9fZOOTwie/pjZ5sS97iJV5kRbJhW4oTBAgE\nh5IBOwhgB4liQECCxE6c/BEEAWIgjmJkgSMjQTaLiJ0/nCCwAys28iw7lgRLlmwt1tvEN5zhkDPc\nu9ndteb7bnVxenq4dDe72Leqf6enum7dusu5v1Nnupvf/c6JTPqtOEq30ynft/G9ZWVzpZz62ci8\nb06Gz88Y/CiHzs+FfuwbVWmuZiQ+q5RB/1yMlflfDNQ1+HBY7n4lsub7H5Yvbr9bVjur5Zv967Fr\nv7opII4ykzLtl36/mgmvgx6RwPRz6verIwJ1mIUS0D8WqjldzBEL6B9HDOpwBAgslIAA/UI1p4sh\nMP8Cr/rOyr1ieX6Z9HtVvK6LgP5Rl5ZQjzoK6B91bBV1qouA/lGXlpjveuSw9g9j3veHt2NY+puj\n0rzbLJ1xp3QbS+VM51RZai5FOH05pnSPIebjMYpM915kyGdZLqtVcH07x7+PMmz0I3N+uwxaw8hS\nH5ZePzLz46vKno99B4NeHCdnso9h8eNRRq38Hsn38RzB+lZpV0Hz7fFk0vpm3hQwinPGXPOZNT/O\naHycf5iB+XhvNdLqm/EVE80/CczHVlHHOHoE7DvbecRRWemtlNXhajkfX5vNx3EDwftlGPXLPjSr\nksf298esdB33ZQX8/HhZQfsvsoD+scit69peVkD/eFlB+xMgcBIEBOhPQiu7RgJzJHBcd1buJZrW\nQybLXhmvj1Ng+rl81Zkre695Wg/9Y6+M18cpMP1c6h/H2QrOXVcB/aOuLTNf9eo97pdf/omvltEH\no/Iv9f+FcqZ7OoLz3Srw3R63I4AewfQMgEcZR1B7a/y4/OTm369ef/fK76u2+/n+L5S77bvl773z\n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\nCBAgQIAAAQIECBAgQIAAAQIECBDYLdDe/cIyAQIECBAgQIAAAQIECBAgQIDA8wWGw2G5efNmyefn\nlVarVS5evFjyWSFAgAABAgQIECBAgAABAikgQO9zQIAAAQIECBAgQIAAAQIECBA4gEAG569evVpu\n3Ljx3L0uX75crl27VvJZIUCAAAECBAgQIECAAAECKSBA73NAgAABAgQIECBAgAABAgQIEDiAQGbO\nZ3D++vXrL9zrRVn2LzyADQgQIECAAAECBAgQIEBgoQTMQb9QzeliCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBhRIQ\noF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0MAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoqIEBf\n15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBAv1DN\n6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6uLaNe\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFgo\nAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrTxRAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgrgIC\n9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0IECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFACAvQL\n1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo69oy\n6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACB\nhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6BeqOV0M\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBOoq\nIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAnUVEKCva8uoFwECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgslIAA/UI1p4shQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgboKCNDXtWXUiwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWSkCAfqGa08UQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAQF0FBOjr2jLqRYAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQILJSBA\nv1DN6WIIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoK4CAvR1bRn1IkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIGFEhCgX6jmdDEECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgUFcBAfq6tox6ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBCCQjQL1RzuhgCBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQqKuAAH1dW0a9CBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQGChBAToF6o5XQwBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI1FVAgL6u\nLaNeBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBQAgL0C9WcLoYAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIE6iogQF/XllEvAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFgoAQH6hWpOF0OAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECdRUQoK9ry6gXAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCyUgAD9QjWniyFAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgACBugoI0Ne1ZdSLAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBZKQIB+oZrT\nxRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAXQUE6OvaMupFgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgslIEC/UM3pYggQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nrgIC9HVtGfUiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYUSEKBfqOZ0MQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBQVwEB+rq2jHoRIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwEIJCNAvVHO6GAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBCoq4AAfV1bRr0I\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYKEEBOgXqjldDAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAjUVUCAvq4to14ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFAC\nAvQL1ZwuhgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTqKiBAX9eWUS8CBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQWCgBAfqFak4XQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJ1FRCgr2vLqBcBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILJSAAP1CNaeLIUCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG6CgjQ17Vl1IsAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEFkpAgH6hmtPFECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEBdBQTo\n69oy6kWAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECCyUgQL9QzeliCBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQKCuAgL0dW0Z9SJAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngACBhRIQoF+o5nQxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFBXAQH6uraMehEgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAQgkI0C9Uc7oYAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEKirgAB9XVtGvQgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgoQQE6Beq\nOV0MAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECNRVQIC+ri2jXgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECCwUAIC9AvVnC6GAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBOoqIEBf15ZRLwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYKAEB+oVqThdDgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAnUVaNe1YupFgACBAwm0Sulc7pT8el7JbUpsqxAgQIAA\n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\nDFN/9sw4q35z60mAPg5px5QZ8zczQB/Z8y++OH7n/O1bpVy6VMq5WNfOnRQCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAIE6CAjQ16EV1IEAAQLTAplJ//JnIuj+Uum88kq8hz7eMd+Nd8wP4p3z+b75\nLDmsfQbyM0M+5/nu+RwiP99Rn4F5wfmxk/8SIECAAAECBAgQIECAAAECBAgQIECAAAECBGoiIEBf\nk4ZQDQIECHyNwNqToekzi36y9CJQnyWD8VkyOK8QIECAAAECBAgQIECAAAECBAgQIECAAAECBAjU\nXkCAvvZNpIIECBCYEshh7RUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCXg5ceOaTIUJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/E\nVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\ngcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSY\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkC\nAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3j\nmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNn\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJ\nCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRN\nbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3rslUmAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyF\nCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJoo\nIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1JkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGicgAB945pMhQkQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJCNA3\nrslUmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSaKCBA38RWU2cCBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQaJyAAH3jmkyFCRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQKCJAgL0TWw1dSZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxgkI0DeuyVSYAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBJooIEDfxFZTZwIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBonIAAfeOaTIUJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoIkCAvRNbDV1\nJkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHGCQjQN67JVJgAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIEmiggQN/EVlNnAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEGic\ngAB945pMhQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgiQIC9E1sNXUmQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgcYJrDSuxipMgACBnQQ6pazeXi35v71K7lNiX4XAUgnoH0vV\n3G6WAAECBAgQIECAAAECBGoq4PfzmjaMahEgQIAAgcUKCNAv1tvVCBA4JoGV51fLCz/7cim9vQP0\nL6zcKrmvQmCZBPSPZWpt90qAAAECBAgQIECAAAECdRXw+3ldW0a9CBAgQIDAYgUE6Bfr7WoECByT\nQCv+NFt5Yf8M+pXIsG95uccxtYLT1lVA/6hry6gXAQIECBAgQIAAAQIECCyTgN/Pl6m13SsBAgQI\nENhdQJhqdxtbCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA3AQE6OdG6UQECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGB3AQH63W1sIUCAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECcxMQoJ8bpRMRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHdBQTod7ex\nhQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIzE1AgH5ulE5EgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgR2FxCg393GFgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nMDcBAfq5UToRAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBDYXUCAfncbWwgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwNwEVuZ2JiciQIDAAgX6/X65d+9eyXmW+537pX8jljt7\nVyL3v/vm3TKI/928ebN0OvscsPfpbCVQSwH9o5bNolI1EZjuH3fv3n36s2SvKo5+fsS++XPDz4+9\npGxrsoD+0eTWU/fjFtA/jlvY+ZssoH80ufXU/bgFpvuHf786bnHnb5LAdP/w+3mTWk9dCRA4qkDr\n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\n+vNu66om3Wn/atvkfNb9Jo95uiyD/imFBQIEmiQw/cTlalktncE4m36v+6iOywC9QuC0ClTf8+r+\n9I9KwpzA12bUp0n2mf1K1a8ms/H3O8Z2Ak0TqL7nk/XWPyY1LC+zgP6xzK3v3vcT0D/2E7J9mQWm\n+4ffz5f52+DepwWm+0duz3X7leo4v5/vJ2U7AQJ1FsiMbIUAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBA4ZgEB+mMGdnoCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIJACAvS+\nBwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYAECAvQLQHYJAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECAgQO87QIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFiAg\nQL8AZJcgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIC9L4DBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIEBgAQIC9AtAdgkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nICBA7ztAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQWICBAvwBklyBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgL0vgMECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQGABAisLuIZLECBA4NgFhr1Seve6pdvr7nmt3kq3DG/GLv7029PJxtMloH+crvZ0NwQIECBAgAAB\nAgQIECDQTAG/nzez3dSaAAECBAjMW0CIat6izkeAwIkI9N7qljd+4E65c/fO3te/3S291yKIf3vv\n3WxtPEQeAABAAElEQVQlcJoE9I/T1JruhQABAgQIECBAgAABAgSaKuD386a2nHoTIECAAIH5CgjQ\nz9fT2QgQOCmBfindu5FBf2fvDPrYo5TYVyGwVAL6x1I1t5slQIAAAQIECBAgQIAAgZoK+P28pg2j\nWgQIECBAYLEC3kG/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI\n0C/W29UIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECSyogQL+kDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nD\nu20CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nYgUE6Bfr7WoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgACBJRUQoF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTo\nl7Th3TYBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgsQIC9Iv1djUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDAkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1d\njQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCk\nAgL0S9rwbpsAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECCwWAEB+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+\nsd6uRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nEFhSAQH6JW14t02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+st6sRIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAwJIKCNAvacO7bQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBBYrIAA/WK9XY0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEllRAgH5JG95t\nEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBiBQToF+vtagQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECCwpAIC9Eva8G6bAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBBYr\nIEC/WG9XI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIElFRCgX9KGd9sECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgsFgBAfrFersaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECCypgAD9kja82yZAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBxQoI0C/W29UIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYEkFBOiXtOHdNgECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgsVkCAfrHerkaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECSyogQL+k\nDe+2CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCxAgL0i/V2NQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBBYUgEB+iVteLdNgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAosVEKBfrLerESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMCSCgjQL2nDu20CBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQWKyAAP1ivV2NAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBJZUQIB+SRvebRMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAYgUE6Bfr7WoE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgsKQCAvRL2vBumwABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQWKyBAv1hvVyNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBJRUQ\noF/ShnfbBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILBYAQH6xXq7GgECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgsqYAA/ZI2vNsmQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgcUKCNAv1tvVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGBJBQTol7Th3TYBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILFZAgH6x3q5GgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAksqIEC/pA3vtgkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgsQIC9Iv1\ndjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQWFIBAfolbXi3TYAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQKLFRCgX6y3qxEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nkgoI0C9pw7ttAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFisgAD9Yr1djQABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSWVECAfkkb3m0TIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAwGIFBOgX6+1qBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQILCkAgL0S9rwbpsA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEFisgQL9Yb1cjQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgSUVEKBf0oZ32wQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECCwWAEB\n+sV6uxoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQILKmAAP2SNrzbJkCAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAIHFCgjQL9bb1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIEBgSQUE6Je04d02AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECCxWQIB+sd6uRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJLKiBAv6QN77YJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAYLECAvSL9XY1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEFhSAQH6JW14\nt02AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECixUQoF+s9//P3psHW7bdd32/M9+x5763\np/daT3oSsmwkyzYGbGRkHMBAAU5BkWcFEqxQqZQSCqgKxBUIcSX84UDKZYoqOSQgOwRbLwkVgiu4\nwHbMIBxALlsSYMmS3nt6/V7P853vmfP9rn1297mnz5267z13OJ/Vve/aw9pr+Oyz9tlnf9fvtygN\n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\n37YXMIWSrOHtvr6jm0dyU69BBB4o0FY9LeZ3PKjAwcK8BPnOadVfcfH06Sh40IDOzYPvN76XTep+\naQv6iydP5oeIjwCBY/N8dQRYU0UIQODoEtjpO8mj20JqDgEIQAACEIAABCAw9gRuS0j/xOrDJ/bz\nVyTO//TUmXC8k+Dz/0Odf70nyPsVlPcRIAABCEAAAhCAgNT56M5qUJ4nbS88lnCVPSNYLP9NpyVW\nSUz/lu59HS7IZXwxuYh/tNpOonZNupXktri/2ozbEswetiYkqxdjXd5/2vIpvyqX1A6Tk1NRkuhl\nq3fnWCk4VTem5c2nIiVrTpbutnh/ebYYJzQg8PM3b8kSthaLNYlaEuVmZK1qkb5sAUziff3RLQlf\n6/GxK/U4VW4rr+yZ6NIJzTUvBf76Y6VRMx7JUNeC322p8YrSvseNQvzKQjnur0TcU70bEuDs/p4A\nAQjsDwG7rW9LpF96+80oLz6OU4XvifLMZNS+87fo9lOO9Tffis7jxVj4+lvJxX2xKg8dEt2LJ2SV\nLoHb03I1dV/46sxJ3QPKcUEW+CXdR9pTE9Gxi3kJ5h2ds3JOwrkEesnsUdZggNrP/3yUJNBXFhaj\nqH5esat9u52Xlb1d6Jd6Fvd37t5LDZ/z1F3Kr65jTd1z7n33d0VH4nzl49+jUT+tWNY+D+aZ/b7f\nFQVZznvaMovyXYnzHmDwJChNWfeUc+1SXNBO14cAAQhAAAIQOG4EEOiP2xWlPRA44gTyEfEjm8tr\nE16uh93n2Xp+JCOiN6kHuyHQT4D+0U+DdQhsJLBd//Br8lxc95m2KXtHL89ziX3Qot7HN1jMK+3b\nWm70Xrg7j2GB749hVNh30AS26x+jqh/9Y1SkKWc3BOgfu6FF2k0JJDfOsgytTEnyWtBi0T0zTpX3\naYVuTOipIwncOiidTMJWK4nak1LXLW4/lNt471+UINWQmLYid/gtHVhatwwvV8+aX7okIasqa3fv\nqUqvsh3+ugYbVmWpb929rFi5SUSX3N6pR1XHZ7uyhpW8Na06JotZ5R2ynC9112OiW9c5cn+t89qd\nTAAr6bCF/mpvDGNL9Xf97Mna4w/q2ljTypLU+2XNPe86+vh+Br4/9pMueT8vgVF/f1jYbss9fUHi\nentpWeL7quall3QtYd1zz7uTFtyBfT+oyRpd4ndx0lbp7sz2uSEX9nKPb9fyzfpquk+1J6pJoG9Y\n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\nxM5CQmGRVZRNEikyQrDKCiHn7VixQEJYQiC2sAJZRqRJ484bDE6CJ1amX7/m/O971a5Xvh/ndt3b\n95xbv/N0p75OVZ36nfpP9+1/nXtzIvj7Odn78VW6/eY/nyV9b+P726Pk7z2fJZ675HxOas0+Uv7x\nn519R/vBn/m5nJ3LSf+TnCRPOUE8puRk9MHZn8vH+2z+zvuL3K78IEGcL0ok52Nk+Wd/6ocj4vNI\n94P3fiJn3j6Vbg//88t6/fonb7483uw76PPH4A9LXOPn8/5v5G2X4ZDPFyV/TP7tf/qXLx3i4/Oj\n3OYkeSTgYzR7tKU7z2xbTopHkjw+ReDH3s/bI2U5omTLgy//fH5IIPfH//iPKeVP1095xPEsQf+9\nfJ4/+MP04l//6qx9L8+SjW5z/80eEnjlNeL0diWwjkDc7e/lkfEHOUH/c++/P0u+/5v//X/Sxznx\n/kf5wZfvf/I8/ebF/5yNUI9keJT4iPscTenj5zk5n9d98cfeTF/M31P/t97/XDrNx4rR9JsocZRI\nrryVj/1WTsx//0+uX6XnU/pefjjpV3O73slfqfHzn31/dv6/mUfwv919dcQmGuAYBAgQINC0gAR9\n092n8QQIECBAgAABAgQIECBAgAABAgRqEMjJsRhtfpM/Sv7ts5zQzW16K39s/Sc5ufs8f898jI7/\n40iyR8L3VaJ3lmzO++XvmE4H+c+UkYj/VH69k/d/+4t5hPm7+Zh5xPvCD5Je47pjNPib7+SPcs/f\nIz8ciR5Js/hI+xjZH69I9EXbZt8V3424784V7X1V/yRvmz08kNcNSxwzPtY/HkJ48zI75OPFx+TH\n9f8gsuJ5n5N8zhix/nZ8nHxevsmvGMkeVp1RfJpAJPfjQYdYPzZBP7uu/HH+YRvGecRxyknO2acD\nzNqXz///cr9F++I6o32fyQ9JRHmeryHa1y/xaQmb6J/+Mc0T6Ankuy7FyPdIrr/IcfF+nkbi/Qc5\nSZ8jIn138DUSMao+372zRHx8RP5ZjqF4vZeT5e9seBR7nOu9/CkZf5zj6Pr6ZjZyPkbPR5R8Nz9A\n8Cc3L9If5bh9O7+6kM6bFAIECBAgYAS9e4AAAQIECBAgQIAAAQIECBAgQIAAgU0I5FRa/tj2w5/9\nBznpm0eKf+nfvxxRf/EfZiPH0x989DJhnT+aelbezMnw+Aj4/L3nkTA++Mm/Ohsxf/Cln32ZHP9U\n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\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQ\nN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI\n0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312da\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0K\nSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dn\nWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIN\nCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfX\nZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC3\n12daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQ\nt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpM\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI\n0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32Gma\nTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0J\nSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCUjQt9dnWkyAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQINCkjQN9hp\nmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLt\nCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfYaZpMgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC7QlI0LfXZ1pMgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQLtCUjQt9dnWkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECDQpI0DfY\naZpMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAu0JSNC312daTIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQINCkjQN9hpmkyAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\n7QlI0LfXZ1pMgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg0KSNA32GmaTIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQLtCRy312QtJkCAwByBo5ROzk9S/FtWok7KdRUCBAgQIECA\nAAECBAgQIEBgCwLen28B1SH3RkB87E1XuhACBAgQIDBGQIJ+jJ59CRCoRuD4iyfpg995nNLz5Qn6\nD44fpairECBAgAABAgQIECBAgAABApsX8P5886aOuD8C4mN/+tKVECBAgACBMQIS9GP07EuAQDUC\nB/n/ZscfrB5Bf5xH2B/4co9q+k1DCBAgQIAAAQIECBAgQGC/BLw/36/+dDWbFRAfm/V0NAIECBAg\n0KqANFWrPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9U92lsQQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECDQqoAEfas9p90ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAg0JSABH1T3aWxBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCqgAR9qz2n3QQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECDQlIAEfVPdpbEECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg0KqABH2rPafdBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQINCUgAR9\n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\nNoJ+zB1r3yYE1n3SclNP6HuysonbY/KNXDc+NgUmPjYl6TjbFBAf29R17NYFxEfrPaj92xQQH9vU\ndezWBdaND+/PW+9x7V9HQHyso6Xu1ATWjY9N+fj71aYkHad2ASPoXxsF3x/N3p+PbhwuL1rXdfm8\n+t22/rS0Xn+fu3kj6O8ozBAgUJPAQz9pGeczcr6mO0BblgmIj2U6tk1dQHxM/Q5w/csExMcyHdum\nLiA+pn4HuP5lAuJjmY5tUxcQH1O/A1z/MgHxsUzHNgIEpi7QjQgf41B6jGX15m0brusvr5rvtq8z\n7deN+XnLi9Z19Uum3Sj4Yd1564frumUj6MfcsfZtSqD0ScuxT+h7srKp20JjXwmUxsdYMPExVtD+\nuxAQH7tQd85WBMRHKz2lnbsQEB+7UHfOVgRK48P781Z6VDs3KSA+NqnpWPsmUBofY6/b36/GCtq/\nNQEj6F8bGd8fzd6fj24dLi9a190C8+p32/rT0nr9fe7mjaC/ozBDgECNAsMnLWM5SveLXUzvU+I4\nMWK+O178Auc75+8jaZ9dCoiPXeo7d+0C4qP2HtK+XQqIj13qO3ftAuKj9h7Svl0KiI9d6jt37QLi\no/Ye0r5dCoiPXeo7NwECtQp0I8LHtK/0GMvqzds2XNdfXjXfbV9n2q8b8/OWF63r6pdMu1Hww7rz\n1g/XdctG0I+5Y+3bpMAwIX95eZmePHmSYhpl3Sf0T29O09OnT1Mk5qPEL4r9hP1spf8QaERgVXys\nexndE8fiY1059WsUEB819oo21SIgPmrpCe2oUUB81Ngr2lSLwKr48P68lp7Sjl0IiI9dqDtnKwKr\n4mPd6/D3q3XF1N83ASPoXxsZ3x/N3p+Pbh8uL1rX3SLz6nfb+tPSev197uaNoL+jMEOAQM0C/Sct\no52xHCPeYxrl8Pzwbn62YsF/uuM8So+MmF9gZHV7At193bV8GB/DN0BdveE09osHVSK2fKLEUMdy\nqwLio9We0+6HEBAfD6HsHK0KiI9We067H0JgVXx4f/4QveActQqIj1p7RrtqEFgVH/5+VUMvaQMB\nAg8l0I0IH3O+0mMsqzdv23Bdf3nVfLd9nWm/bszPW160rqtfMu1GwQ/rzls/XNctG0E/5o61714I\nDH9he3b0LP3y6a+kmC4rMXL+15/9Wk7PPzJifhmUbU0LDONj+IkTiy6ue/I4kvM+UWKRkvWtC4iP\n1ntQ+7cpID62qevYrQuIj9Z7UPu3KTCMD+/Pt6nt2K0JiI/Wekx7H1JgGB/+fvWQ+s61DwJG0L82\nMr4/mr0/H109XF60rrst5tXvtvWnpfX6+9zNG0F/R2GGAIGWBIZPXJ6kk3T04uVo+mXX0e0XCXqF\nwL4KdPd5//pi3arS7dd9tP2q+rYTaFGgu8/7bRcffQ3zUxYQH1Pufde+SkB8rBKyfcoCw/jw/nzK\nd4NrHwqIj6GIZQI/FBjGR2yJdatKt5+/X62Ssp0AgZoFYkS2QoAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECGxZQIJ+y8AOT4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEQkCC\n3n1AgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQeQECC/gGQnYIAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECEjQuwcIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAD\nCEjQPwCyUxAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQl69wABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIEHgAAQn6B0B2CgIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgIEHvHiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAg8gIEH/AMhOQYAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEJOjdAwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4AEEjh/gHE5BgACBrQvcPk/p+dV1un5+vfRcz4+v0+1ZruL/fkudbCRAgAABAgQIECBAgAAB\nAvcR8P78Pmr2mYqA+JhKT7tOAgQIECCwXECKarmPrQQINCLw/Pev0//6xYt0cXmxvMXn1+n505zE\nP19ezVYCBAgQIECAAAECBAgQIEBgfQHvz9c3s8d0BMTHdPralRIgQIAAgWUCEvTLdGwjQKAdgZuU\nri/zCPqL5SPoc42Ucl2FAAECBAgQIECAAAECBAgQ2IKA9+dbQHXIvREQH3vTlS6EAAECBAiMEfAd\n9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUa\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBG\nQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6Auh\nVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nxghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9\nIZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQ\noC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQGCMgQT9Gz74ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAQKGABH0hlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37\nEiBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKF\nAhL0hVCqESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQJjBCTox+jZlwABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAoFJCgL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+j\nZ18CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\noFBAgr4QSjUCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAYIyABP0YPfsSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAoUCEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0\nY/TsS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgUCkjQF0KpRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAiMEZCgH6NnXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECgUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZA\ngn6Mnn0JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAgUIBCfpCKNUIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAEC\nBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAgTECEvRj9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FU\nI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTG\nCEjQj9GzLwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBQKCBBXwilGgECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGCMgQT9Gz74ECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQKBQQIK+EEo1AgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECAwRkCCfoyefQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAQKGABH0h\nlGoECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGCMgAT9GD37EiBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgACBQgEJ+kIo1QgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECA\nwBgBCfoxevYlQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQKFAhL0hVCqESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBMQIS9GP07EuAAAECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAAAECBAoFJOgLoVQjQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJjBCTox+jZlwAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIFApI0BdCqUaAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAECBMYISNCP0bMvAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAoFJCg\nL4RSjQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIjBGQoB+jZ18CBAgQIECAAAECBAgQ\nIECAAAECBAgQIECAAAECBAgQIFAoIEFfCKUaAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAYIyBBP0bPvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAoFBAgr4QSjUCBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQIDBGQIJ+jJ59CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIBAoYAEfSGUagQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIyABP0YPfsS\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFCAQn6QijVCBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIDAGAEJ+jF69iVAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAoUC\nEvSFUKoRIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIExAhL0Y/TsS4AAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECgUk6AuhVCNAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAmMEJOjH6NmXAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgUCkjQF0KpRoAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIExghI0I/Rsy8BAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECgUkKAvhFKNAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMEZCgH6Nn\nXwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgUCggQV8IpRoBAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIEBgjIEE/Rs++BAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECg\nUECCvhBKNQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMEZAgn6Mnn0JECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgEChgAR9IZRqBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIEBgjIAE/Rg9+xIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgUIBCfpCKNUIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAYAQn6MXr2JUCAAAECBAgQIECAAAECBAgQIECA\nAAECBAgQIECAAAEChQIS9IVQqhEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgTECEvRj\n9OxLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQKBSToC6FUI0CAAAECBAgQIECAAAEC\nBAgQIECAAAECBAgQIECAAAECYwQk6Mfo2ZcAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBQKSNAXQqlGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgTGCEjQj9GzLwECBAgQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQKBSQoC+EUo0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECIwRkKAfo2dfAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBQKHBcWE81AgQI\nECBAoFWBo5ROzk9S/FtWok7KdRUCBAgQIECAAAECBAjcW8D7j3vT2ZEAAQIECBAgQGAaAhL00+hn\nV0mAAAECExY4/uJJ+uB3Hqf0fHmC/oPjRynqKgQIECBAgAABAgQIELivgPcf95WzHwECBAgQIECA\n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\nAgQIECBAgIAEvXuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAg8gIAE/QMgOwUBAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJCgdw8QIECAAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIEHEJCgfwBkpyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhL07gECBAgQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPAAAscPcA6nIECAAAECBHYocJSO02n6wsoWRJ2o\nqxAgQIAAAQIECBAgQOC+At5/3FfOfgQIECBAgAABAlMR8Ff4qfS06yRA4P+zd3dLlitbmlCrOAXG\nzyWY8S48Ihe8Ld0NTdPsmXE+cm4vl+TS0ooMRQxhme4+5/QfDa28wLz2aQIEfqzA//Iv//O//B//\nzf/+L//lr/9v7/nHX9fzVeshQIAAAQIECBAgQIDAVQH//x9X5cwjQIAAAQIECBD4KQIu6H/Kl/ae\nBAgQIPBjBeri/X/96//zECBAgAABAgQIECBA4N0C/v8/3i1sfQIECBAgQIAAgacL+H+D/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJ\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BEC\nLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC\n/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf\n8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBA\ngAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAAB\nAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf\n0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQI\nECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA\n4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQI\nECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8Zkc\nkgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/ulf0PkJECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSe\nLuCC/ulf0PkJECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BECLugf8ZkckgABAgQIECBA\ngAABAgQIECBAgAABAgQIECBAgAABAgSeLuCC/plf8L8+89hOTYAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIDATQLuDG+C/MxlXNB/pra9CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODH\nCrig/7Gf3osTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGcKuKD/TG17ESBAgAABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgMCPFXBB/2M/vRcnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAgc8UcEH/mdr2IkCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEfK+CC/sd+ei9O\ngAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAp8p4IL+M7XtRYAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQI/VsAF/Y/99F6cAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBD5T\nwAX9Z2rfv9d/vX9JKxIgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg8IUF3BF+4Y9zdDQX9EdC\nXyvvH9vX+h5OQ4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOBPC7hD/NNf4MT+LuhPYP2B0vrH\n5B/UH4C3JQECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEHCrhf/OIfzQX91/lA/rF8nW/hJAQI\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+i4B7yC/0JV3Qf6GP4SgECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAg8H0F/u37vtqXfbPxf7L+X7/sSR2MAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIHvJpD/oj7td3u/L/0+/gv6L/15HI4AAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIEvouAC/rv8iW9BwECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAh8aQEX9O/5PJ/xPwcx\n/k/lv+dNrEqAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwFcTePdd4Wfcd3410085jwv6e5n9\nUO/1tBoBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn9OwP3nzfYu6O8B/YwfZu1RT9qPkb8J\nECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEPipArk7TPsuh1r/3Xu86+xfal0X9F/qc2wexo99\nk0aCAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIG/BNwpPuBn8G8POONPO2L/h/OvGy/fazZK\nhAkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+MYCe3eGlcufb0zwvFfzX9Cf+2Z7P/JzK6km\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA8wXcoZ74hi7o17He9cPyf7my/g1UEiBAgAAB\nAgQIECBAgAABAgQIECBAgAABAgQIECBwTeCd95Lvuku99qZfeJYL+rWP81V/UF/1XGuqqggQIECA\nAAECBAgQIECAAAECBAgQIECAAAECBAgQOCvwVe8Iv+q5zvq+td4F/TbvO35Ar6756vztt5UhQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOCJAq/eIb46f2b2jjVn+zwu5oJ+/snu/MHUWvkz320/\neudZ9neSJUCAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgyQJX7xZzn3l1/szszrVm6z8y5oL+\nvZ/t1R/dq/Pf+3ZWJ0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwm8esf46vyv5vGlzuOC\n/vfn+NM/tNr/zBnO1P5+Sz0CBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBJ4ucOau8Ow95Dts\nzpz3Hft/mTVd0H+ZT7F8ED/eZSqFBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBL61gLvDh33e\nn35Bf8cP9uoaNe/M3DO1D/sZOi4BAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAi8InLlLPHtP\n2Y91Zp8+r/fvWKOv96j+T72gv+ujX1mn5pydN9aP40f96ByWAAECBAgQIECAAAECBAgQIECAAAEC\nBAgQIECAAIGXBcY7w3F8tEHVn51Ta16ZMzvLXevM1v6ysZ96QX/HB3nnD6bWXll/peaOd7UGAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJfQ2DljnD1vvHqG62c4era33reT7ugv+OH4sf8rf9J\neDkCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAEC30bgjvvRLYy77k3fecats/+x+E+5oP/KH/XM\nD/crv8cf+xHbmAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAPFli9QzxzL/knOFff40+c7bY9\nf8oF/W1giwvd9ePeW+dH/EAXvZURIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+EkCW3eFe/eL\nZ3zuWufMnj+i9rtf0G/9MM983DNr+KGekVVLgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMBX\nFjh7/3nmbnXrve9YY2vtPx7/7hf0rwKf+fgrtUc1R/l6n5WaV9/bfAIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEvr7Ayt3hUc1RvhRWaqJ1pjZzfkz7XS/oP/ujH+1X+ZWarR/eOP9ora11xAkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQ+B4C/c5wvE8c37DXjrkaH81PzWzuu2JHZ37Xvm9d\n97te0L+CdueHPvoh7+21l8v7rdSkVkuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwPMFVu4I\n92qOcnv5s3p3rnV27y9Z/90u6F/9wK/OX/3Itc/WXke51T3UESBAgAABAgQIECBAgAABAgQIECBA\ngAABAgQIECDw/QWu3jtuzbtb7NV9Xp1/9/u8tN53u6C/irH6UVfr9s5xxxq1/l3r7J1VjgABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBrydw113hHeusrrFa9/W0bzyRC/r1i+53/WBq3a21Z7mt\n2ht/FpYiQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOABAuPd4ex+Ma+xl0vN1XY8x9Y6q3Vb\n8x8f/w4X9J/xET9jj6MfUz9D+mmP5soTIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIPA9BHJH\nmLbeqvf/1Ft+xhk+Y4+3+n2HC/qrQHd8vFrjjnXqHfbWmu1Rsf9SEz0ECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECPwYgboj3Lo/nCHs3UPO6vdid601O//evt8m9xMv6Fc/9lHdXr5ys/wstvVj\nmtX22P/718T/vDVZnAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBbylQd4R1V5in3yHuxZIb\n2635s3jm7uWq5ii/uk7qvk371Av6+qCrH/XKxzpaey8/y1VsKz6eb6u211VN/aP7v3pQnwABAgQI\nECBAgAABAgQIECBAgAABAgQIECBAgACBby9Qd4R1Vzi7f+wvv3XvOJt3pjZ7zNZJrtqjfK892986\n79l1Pr3+qRf0V6Du+gFsrTP7Ecxidfat+Phes7qK1VP/0xX/8VfPXwQIECBAgAABAgQIECBAgAAB\nAgQIECBAgAABAgQI/BSBuiPM/1PYuTvMu8/uF5Pr7VbdLD6LZa3K3fHctc4dZ3nrGj/pgv6dkGd+\nMGNtjcfYeNaxpsb1fxXzH8ZCYwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvrVA3RGO/wX9\neJ84A5jVVGz1OVO7uuaPq/sJF/SrP5TVunf+SI7O0PP1j+4/vfMw1iZAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIECBA4MsJ1B1h3RXm6XeIifX2KN9r39VfPcNq3bvO+fZ1n3RBXx/jT3yQz9qz77Py\nrlXzn9/+C7EBAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQJfSaDuCPvd4uxs433jUf1sjSux\nz9qnn2181577cv0nXdCfxbvj49+xRj/3ynq9pvp9XGv1WP+/jOn76BMgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAg8D0FckfY7w3zpmNsvGtMXW9Xanr9Uf+O9e5Y4+icfyT/nS/oV0DPfthZ/SxW\ne4/x2XiMbZ256sbaWWxrvjgBAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAt9DYHZPOIttve2s\ntmL9GcfJzeKzWOpn7dn62RqPjf3UC/q9j76Vm8W3Yj1e/TPjvR9TX2evTo4AAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAgZ8hsHqHePbecqyP5my/Wazqt+JHuez17dp/+3Zv9PGR//Xm96ofzrjm\nSmxWs3W0/Dizz9bcv9X967/+6//2z7PV/7HFP/7689/+9ed/+OvP//TXn//xrz///V9//ru//lSu\namr9/if/RxqJjePEZ+1fS/1traqpp9f28ayf2KydxbJHz1W/ntXcR/Xf6xPbavvaWzVb8Vfmbq0p\nToAAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4h0Duoq6sfWburHaM9XHv19n6OP2x7XVjro/3+mOu\nxlux5HpbZ6j/SfrExnHiVfNf/vrzf//15z/99ec//PXn//zrz3/860/9vzlfuazzV/fXk7kZ97Zy\nefbqUtPbPrfi4/hMrK97pT/b+8o6X2bOV76gD/adl5u15t56R/l8uFndLJb6M22tU0+ds/d/Bdtf\nPVf9+lP/MNPWP9b6vrm4r/VmF/QVv/Lnr2n/bt4Yyzht9sl4pd2rqVw9tW6e3q/YON6KZX7a2bzk\nerta1+foEyBAgAABAgQIECBAgAABAgQIECBAgAABAgSeLJB7qqN3WKmb1YyxPu792j/jsd3LjbU1\nzp9x3hjPuNrU9tjVfi7fcxH///y1ePUzzrp9z+qPz2rdOO9oXOuOzyw21tT4qO4oP1tzL3b3ent7\nnc595Qv6My9TyK9clJ6ZP6udxVbOvzqv6uqZvWPWSE21+Ydabc2Z/Zld1v9V+rdL/BrX3K3/qj75\nvv4Y6+NZP7He9n6tPRv/M/w3k9T2+tRtxZLvcxPr7VG+1479V+aOaxkTIECAAAECBAgQIECAAAEC\nBAgQIECAAAECBN4pkDunK3sczd3Lz3I9ttWvcya31R7V9Hljfzbei+WiPXtWbcXqqX7/k9oeS3+W\nyxrVjk/mjfHZuGqvPLN5s9jW2mdqZ2u8On+25qfHvssFfcHVB9m6CN3LbaFfmbO1VsXzg6kz9n5y\nW2evfJ6cKW3ivU2u2vqz9dQ/6tpz/DPGa35i1a8ne/Qzj7E+Tr/mZr/er3zGaTNnlvuo/lgrdRVL\nbdZIXcY9n1hqxlziafu7JrbavjJ3dQ91BAgQIECAAAECBAgQIECAAAECBAgQIECAAIE7BI7uTPb2\nODN3VjvGxnHtnVja1dhYn3G1vZ/1emysyXhW03Ov9nOWamdP33+WH2Opr3jONvbHOVfHfa/VNfbm\n7OVW1/8Sdd/pgv4qaH3M8QJ1Fju7fl9jq19rJldtPXWWsd/Pt1W/V/Nr4eGvXp9U1q5xzpBcbzO3\n14yxGieffq9JLOtmPLaVH2M1rifrf4w+/h5z47jX7vUzLzWzvSo31qW+t1tze40+AQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQOApAqt3H3t1Z3K9tvfLK+Ox3csd1fZ8+lmvxlux5NLWnHp6/Ufk4+/U\nzdrZvKyT+jM1fe54hoxTM1s3NWfavl7mzWLJ/YjWBf3xZ64fyd4l7JjPj6rm9P7xTh8Vfb3099YZ\na2qVvfPmHFkz48xLfGuN5FNf7RjLOGvUePToseTS1pp5EkubeNoe7/3kZ23V1ZNzVj+x6tfTcx+R\n33/32r263zP0CBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQLfU+DMXcms9kqsz5n1E0tb8unP2jGW\n+h6vfsY932MV70+fk35ve+1Wf6yv8exJXeV6Te/P5o2xcZ1x/jiezR9jxk3g6Rf09QPol6Xt1X51\n9/J7uXGdjMc5R+PM22rH+Vt1iac+beJjW/n+lFFi6c/c+rqp7+tUv89LTWJb46yRvTPOepmXeOrS\nJj7Wz/KprVw9WTvjHvtVsPjXK/P73MXtlBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE/ohA7lau\nbH4092y+1/d+na2P00/b84mlTS7j3vZ+1dVTscRn4x5LbdrK1dPnf0Q+/k6816eftteP/T5/zO2N\nM2+vpufG+qNxn7vVH9fodXu5qjvK97W+XP/pF/RXQOuDzS5MZ/FZLHuOuXGcut72mvSrrafOlFiN\ne7/GeRLPvMTH+YlXmzm9P86vXNZIv9r+zOb0fJ8/xmucc/Q2dZk7tpWfxTIv+WqzbvrV7j21bp7x\n3XquasZ85mkJECBAgAABAgQIECBAgAABAgQIECBAgAABAt9J4M47kb21ZrlZrGx7PP20sc84bZ+X\n2FGbOb1u7Nd4Fss5ertVO8YzJ+tmnDbxzEtb+eRSm7bH09+al3zmztqxZhz3ObPcLFZztuJ9vW/V\n/yoX9IEfL0WvYtd6d62VM/Q1e7/y4zhzepuaausZzzfLp/Zjxr+fk3i14/yK1R6J1zj9tBXLU7F6\nMudj9Pe/+5nHNWbzU59cVsseW23qqk3NGKtxzjCuv1Wb+Na5kj/TZq29OXvn25snR4AAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBD4igKrdx8rdbOaMbY3Ti5teaWfdhZLrtrer9p6xnhqPrK/5/Rx5vR2\nXCv1ife292dr9Lljv9dXv57E0v8VbH8d5Vvpr27WTbyPez/5V9s717xzrZfe66tc0L/0EouTC331\nMnWs63N7f2/r1FVbz7jmR/Tc31mrz6p1s1ePVz/xzOu1iWVOzpc5iWc8q++x2fyer/Wyf9a+Eput\nkfXG3DhO3ayt2v6MZ+85fQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDATxa4eo8ymzeLle0Y7+Pe\n77WJp53lEktNb3u/6upJLP0aJ5Z+2tRUmye1NU5d2sTSpjZtxfuTeOb3ttdd7We9mp+9jtbqdb2f\nebNYcr1dretzHtn/SRf0n/mB6geUy+Hx4refY68uuV4/66eu2jx97+Qrl/7YJpf5ve1rJZ69kkt8\nq+116afNnHFc8cTSpjbtVrzP7bXp5/wZr7S11+y5stZsHTECBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwNMFju5NzuZ7fe+XUx/P+oml7XMS6+1qf1aX7zbmatz/zOr6uXp/tlbPZ62tNvN7PrG0Pdf7\nyaftOf0XBZ54QV8/hK3L0rMc41p93Pt76/a66tezdb7U9rox9rHC78vpjNPmUnprj6rra6a+4umP\nbXLV9ifn7LHqZ+/sU7HUZu1ZXWoqV0+v/Yj8ju3lUpu2n6dis7mp7W3mVWw8W697td/3eXUt8wkQ\nIECAAAECBAgQIECAAAECBAgQIECAAAEC7xR45c7kzNxZ7UosNWljkXHaiqc/tsmN8Yxn+TFXNfVU\nfPbnV3L4K3UVznq97f1eMyzz/w97ffX7n8yfxXou/WpnT+YnV+OVp9f1fs0dxyvrbdXcudbWHrfG\nn3hBvwdQH2C8DF2N7a27letr9/6sPvm0s5qVWOZXu/Xkgnpsq36MZTxbq3L9OdqzanO+9Pv89Mc9\nM06bumq3YpWbnWerflZba2w9tU5/zs7vc/UJECBAgAABAgQIECBAgAABAgQIECBAgAABAk8RuPNO\nZG+trdws3mO9X6YZp12Npb7a3u/zZ/2xvo+rPk/iY1v5itXT296f5cZ1xvpfC174a3Wd1PWzXdju\nb1P6mkmsxlL/uPa7XdBf/QD1ofuFbB+f7ecMmVdtPX39j8j+331+Lp1X19ibu5qbnS7793dKf1Y/\nxvIePf5KrNaZzT9av+df7cdkb50zRnvryBEgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEvoLA6t3H\nXt2Z3Fjbx7P+Siw1ve39cq5xj83G+R7JjW3W6XU9lvVnsZ7L/K02tWO7VT+L19y9+cnV3LP9cU6N\nf+Tjgn7/s9cPKxewW/3ZCqlNu1UziyeWi+exTX6vHedkvDencqmrtp46/+xJXeV6f6xNLm2v77Ee\n72uMNVt1mTOrT663VVfP1vt9ZP1NgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwE1i9Y1mpm9Uc\nxcZ8xmnrzOmnncWSq7b3UzvGe83YT23aWqOeo7rU97qz867O/XXAyV/jepOSX6HU1WCrvzX3x8a/\nwwV9fexcuPYPOYuvxvo6Z/uzPbJGcmkTv7vN+mO7t0/Vjs/o2mv6ZXjqsl+tk9rUpR33GMezulms\n5m3Fk6s256j+0VPr5TkzL3O0BAgQIECAAAECBAgQIECAAAECBAgQIECAAIGfIHDlHmVrzla8HHuu\n9/dyqUvbaxNbaVPT56efXLX5U7n+JN7bnp/1q7aesf2I3v/3yj6puWv32XqrsTrDrPaus33KOk+4\noC/kfnH6Lpi9fXqu9+ssfdz74zmTSzvm+7hqtp5cSqed1SU3+2D4igAAQABJREFUtrPaxKq2P7Mz\nZL1e1/s93/u9pvrJpR3zf2L8lc7yJ97fngQIECBAgAABAgQIECBAgAABAgQIECBAgACBVYHZPdLK\n3Nm8WSxr9VzvV76PZ/0zsdTO2h6rfv7kDFv5xKsuT+ZutVWXeb2d1Y+1s5qskf1nbWrS7tX0PVPX\n5/V+8mn3cqm5o/2sfS6f9QkX9PVyBVkXqFef2fxZ7Oz6fY3e7+tUvJ7Z+ZP7qPj996w22eyTNvHe\nJje2qRnjNR6frQvrHu/9cf5svFU/i6/Gap+qrWf2Hh+Z33/P1v2d1SNAgAABAgQIECBAgAABAgQI\nECBAgAABAgQIEDgSWLmTma2xNe9MPLVps0/GaSueftpZLLlqez+1PTbWzHKzmsR6fdavNs9RPnXV\njrU91/t9797vNeknn3Fvs1/Fer/XnOnP1pjFXl3zzPxPqf3MC/oCzUXqO1/u1X2uzJ/NqVg9s3fe\ny33M+v131u5zxtjv6rVeLqnHdpzdz579qybx1XNkn3H9cTyrm8XGeSvjfuaV+q2arJN8d0lMS4AA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBD4SQKr9yVHdWN+HJdpYmnj3Mfpp53NS27W9thWv+9bNamb\nxXs+db1N/kw7vlNfL2fYa7PXrGYrlz1mc7ZiV+b0tV6d39fa63/WPv/ymRf0ey/8mbnCHS9Zs3/P\n9f5qflbXY+kf7d9/AFXbz5J+2qy50vZ1x/p+plldzjHOq3HPbfUzr+cTO9vWGvXMzvmRuf/vP7Hn\n/W9hRQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA+wSO7m7O5mf1YyzjtPV26aedxcZcxr1d7Y91\nNc6f2jtPYrM2NattrVFP2t7v6/d49cdnrO35vnaPV7/nej91Pdb7yafdy6XmW7WffUHfgXPheQU0\n6xytUXV7NVv5Hk8/bZ2398fzz3KzWNbp8+use7V5l9RUe+bJ/MzZWid14/o5X+b3tud6PzWzWOVm\n8Vks62gJECBAgAABAgQIECBAgAABAgQIECBAgAABAgS+psB4tzSe8mx+Vj/GMk5be876Y2wcZ17i\nvR3747jPrVzyW/Ger5p6Mm+1zZxfk/85P/3eZq9x3V6TfmozrnYWS77n0k+7N7fXZK3eHuX31u7r\nHPVX9jla43T+sy/oTx/wxgkFXBe/s2crN4uPsT7u/eyzFav81nkqV/P60y+t09+bn7nZf1yv8n2d\nvXzW6nPG/my8FduLV+7VJ+/16jrmEyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIrAvM7pv67Cv5\ncc7WuMdn/b1Ycr3t/XqHGudPH/f+LJ9YtalN23Nj/qN6++9eP/az7vbsv79Lr8taW7ExP45r3iy2\nFz/KVf7bPN/lgj4feeXC+srHq/Vna/f42M8+fd7WOTM3+Zrb52WttLP65Ma21un1GR/VJZ9zjGfL\n+Gi9rHPUbq2TeUf51L2r7e/7rj2sS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBB4okDuUY7OflQ3\ny4+xvXFyaes8s35iK22v2esnlz1rnFhvE0+b+rFNfqvt9dWfPX1u5Ws8Pqnp8cR6/VZ/nNfHd/b7\n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\nECBAgAABAgQIEPizAv1e6cxJjuZt5cf43rjnjvrJp613SX/WHsV6fuzPxmMslhUf/4y5jKvdq+11\nvTbxnCG5xMdx6tL2uvST22pTd2ebve5c861rfeUL+mDmgvkOiFoz6/X+6tqZk3Y2b8z18Va/1qlc\nnn4pnvNWrtfUOLnEM57VVixP6jIv8a226ldrt9Z4V7zOlfepPXLOHuvx6o+5Mb9VU/HxyX5jvI9n\n+/W8PgECBAgQIECAAAECBAgQIECAAAECBAgQIEDgqwis3H2snnVlrb2aWe4o1vNH/eTT1nulP2vP\nxHpt9cdxDJMb8xmPdeM48xOvtsfSn62XOT3X+1krdWOb2rRjfm/c5/T+3pzV3N3rre67VPeVL+iX\nXmChqD7AnRekfb300/bjVKye7N1rxn6vq/4s32uydsXqqT1mscolPqupfJ6j/Nm61Ffb36fHV/t9\nfu+vzr9Sd+c+tZaHAAECBAgQIECAAAECBAgQIECAAAECBAgQIPCTBFbvR/bqZrkx1se9X9Z9POsn\nNrZ9bs/1/ljTc9Ufx6mf5Wa1Y/1Y09cZa2tcT+Z8jD7GPbbX77k+f1x3Vpf6K+3d6105w1vn/OOG\n1XMBfWWplbmzmpVYr9nq15mTG9u9XK/t/XFO5cZ8anq81yVfbT1jbi/2a8LOX+Na47hPrdyrz8o/\noF6z1T86R5+X2orN4pXfy2V+r9tap9fqEyBAgAABAgQIECBAgAABAgQIECBAgAABAgR+ukDuYFbu\nVlI7M9vKzdbtsav9zBvbOluP9f5ertdVv49rXj093se9NjWz2K9F2jqp6WuN/T6n9zM3bc9ljcTS\nHtWO+b7OLJd1ezvWjeNee7Z/51qn9v7T/wV9Xvyuy+CVdWrPvbqj/Aic+rSr+V5f/Xpyrr1c1c3q\n+/y9msptPbV/1t6q+VPxFZP4rZ6xv+vR3F7b1z+a12v1CRAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQLfQWDr3uTo3VbnzerG2Jlxr531Exvbep8e6/29XK/b689yWTe5GtdT4x4bx1s1Fa9nrO9rJd/b\n6vcn9Wl7bq9/VH+Uz9qrdanfau9aZ2v9w/ifvqA/POBGQcGduRhdqZ/VJLbV5njJ1zj9auupcyb2\nK9DGvaZyfdz7PVf9vPtRTfI1pz85U2J93PvJv6Ots+U9ttZfqelzZ/UxONqrr3Omn/X35rxr7709\n5QgQIECAAAECBAgQIECAAAECBAgQIECAAAECVwRW7j6urFtzjtbeys/iY6yPe3/cN7m0PZ9Y2jGX\n+Kztsd7PGj1W/aNxn5faHqt+PVlrqyb5j+rf9ZmbeB/3OeO6W/Xj/F7Xc2O8j/tePb7VP1u/tc6n\nxp96QV9IBb538bmX77neD/4sllxvx7px3GurX/l66ty9tscrf5Srmnqyzsfo3//d872/MnesGef/\n+91+R/r5f0fXentzx9w43tuhavPUu4xPz1duVjPOMSZAgAABAgQIECBAgAABAgQIECBAgAABAgQI\nfDeB8c7klfdbWetKzThnb7yV6/H0t9oyqNxWvsev9PfmVO4oX+erp9dm/CuxkxvnpL632T+xcZz4\n2M7qeqz3V+b2mr25ve7L9Z98QX8Wsz7S0aXrXk1yY5tzJF7jWX8rVvU5V9XUU+Per9jeeMyN9T2f\nftV8lafOFIPxTHu5qh3zeb+t9cb1t8ZZJ/lX1hvXyppaAgQIECBAgAABAgQIECBAgAABAgQIECBA\ngMB3ErhyJ7I3Z5Y7io35Pj7qJz+29Y0qNsZn4x67o5/fR601W6/yPTeOj3JVX09f+yPyO9bzY242\nLzVpU5PxrF2pmc17XOwJF/T1MVYvR8/Urn6sozXHfMbV1lNnT6zG6adNrNq851au4nmybo37vOR7\nO9ZmnZV4X+ez+v39xz33cr22v2OPV38vN9ZmnDkZp419xloCBAgQIECAAAECBAgQIECAAAECBAgQ\nIECAwHcX2Lo3OfPee2ucyY21fdz7dbY+nvUTG9vMHeOz8VGs5/f6s9zsHFW3V1tz6ul1Gfe293tt\n1q58PeP4I/r776P878r13pk1z9Sun+DGyidc0NfrFuSVi9C9eT3X++GdxbZyqU2bump7LP20s3zF\nxovzvbrkqu1PX6PHx/5q3Tjv6ri/e19jK141Y242rrrZb6Rq69nLbeV/TTz4K+vvlc323quXI0CA\nAAECBAgQIECAAAECBAgQIECAAAECBAj8KYGVu4+rZztaey8/y42xvfFWrsfTH9t634qN8dn4TKzX\n7vV7LvYVS7xiYz/jo7rZ3Ir1p681i/dY+pmTcbU91vu9Zqwbc3vjvTX35n1q7ikX9FsohXzm8nOl\nvtekP7Y5T+IZp53Fj2I9P/Zr3XrPitfT+x+Rj79jMavrc3q/z3+13889rjXLzWKZN+aOxjVvrMla\nK23N7U8se+xqf1z76jrmESBAgAABAgQIECBAgAABAgQIECBAgAABAgSeJHD2jmSrfhYfY2fGvTb9\ntOWb/pV2Nuco1vOzfs40y1VsFs+cautJzdj/lRzye7HZ/Kw9trParN3bzOuxvf7Z+r21Pj33j5t2\nfPUyc2X+Vs0sPsb6uPfr9ft41k8sbZ+T2FY7qx1j49yen/W36hOfzanY+PT65FZjqb/abv2j2Ypv\n7TOrr9hefJabrZ910s5qxAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBH4L5F4l7e/Mdi+11Y5P\ncrP4Uayv1/s1L+O0Pdb7yV9pZ3O2YlvxnCX5cbwXT67a3q816umx3k9uFktu1lZsfLJGxbf6e3PG\neWPtnxj397i0/13/BX0dZHa5e+lQb5509ayvzuvz06+2nrJLrMazfmornyfmW7nE+/qJZY1qkz+K\n9fxd/TpP3mNcc8yN46qfxfbiyVW7tW/lxqf2mT1n1pjNFyNAgAABAgQIECBAgAABAgQIECBAgAAB\nAgQIPE1g697kzHscrbGVn8XH2N645476yb/Szub2WO+XX417bBzHeIz3Ob1m7I/zZvnEzrTZ/8yc\nqr067+w+d9Tfcta7Lug73tMuLAsyZ+79fKS9WHJbbdbo7VhbuR6rcZ2nYvWkPztjaj4q//4efW7y\nW7Ez+V670s+7rdRWzVh/NJ7NyV7j3MTTVj5PfDNebfsaW3Ourr21njgBAgQIECBAgAABAgQIECBA\ngAABAgQIECBA4F0CK3cfV/deXXurbhYfY2fGvTb9tPWO6d/R9jV6P/vsxbZqEq+2nr7GVv+j8u+1\niY1tX6NyW+M+LzVbsVm+137F/q1nfufF4ZW1V+bMalZiY00fn+mndmzrxzLGajyLjbW9pvdT12Nn\n+7M1zsZSf6Xtc1b7e3WVqycOH6OPv2ex5Pdyqent2fo+V58AAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQOD3he6qxd5F6Cx3FBvzfXymn9pX2tncK7E+Z6Vf9lW3VZv82Pb6nuv9lZpev9cfc7PxmVjV\n9idn7bGj/pU5R2v+y53/Bf3hZt+koD5EXd6O7dbrrdSlptZIv7cVz557/cqNT5+XXI+lnzY1vU1u\nbHvNO/ux6HusxjKn6vPUexw9vb5qV+YcrSlPgAABAgQIECBAgAABAgQIECBAgAABAgQIEPjOAuP9\nysq7rsyZ1azExpo+PtNP7djW+42xGs9iY22v6f3U9VjvH+VntTWnnuQ+Rn//O7m0f8/+HiU/tr8r\n9HYF/rGbfS155UJzZc6s5mqszzvTT23akkr/qN2q3ZvXc72fL7QXm+2Xee9oZ/8YE9vbb6w5Gtda\nY01is3jfu/JHNb2+r5u5acc6YwIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAdxfIPcnYnnnvzN2b\ns1VT8fEZY2fGqU1ba6efdjVW9Zmz167mZnVjrJ+t9/fqeq739+anrmrGp+fO9mutPmdc+1uNv8t/\nQZ8PlovqfMQ+PvpwtUbqe382L/m0ezV7ucyvtp7av8cy7rnq55nlZ7HU97bX9fhn9vOu2fPsuOaN\nc/pa1a/33Hpqbp69utTM2r7GLF+xq2tvrSdOgAABAgQIECBAgAABAgQIECBAgAABAgQIEHiXwMrd\nx9W9V9feq5vlxtjVcZ+Xftp65/TTzmKVS36l3auZ5Xqs93OWWewoV/nxyTpjvMbJpZ3V9Lqxv1Xf\n4+Pa47jXPqr/xAv6wr964TnOHcezj7dSU/NSlzZrZXzUztbInFlujGW/asun5vYnsbQ9N/ZTk3bM\nvzLu73Rlndn8vGudd3z2cr02dYnN1krubDuufXa+egIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDA\nEwXO3pHs1W/lZvExtjfuuVn/bCz1ve39+o5741luFsvvYcztrb+Xm60zq8++W23W2cr3NVOzMie1\nY/vK3HGtTxk/8X/ivmC2Lk9n8TE2jsf1en7WPxtL/VHbzzHWVi5PchlXm1jaWa7H0k/92Cb/Ge34\nj+ZoXGcaa3LOrXjmVH6vJuuM9atz+nx9AgQIECBAgAABAgQIECBAgAABAgQIECBAgMBPE8hdTNqV\n90/t3n3MVm4WH2Nnxr02/bT1LumnncWSW2n3as7m9upzzpWa1M7aK7E+Z+zXePbknLPc42Nf7b+g\nL+xcFl/BXZm/UrO392z+SmysGce1Z2Jb7VZNxcttNq/nql9Paj9G7/s75xl32IqPdRnP6mexqq94\nPXu/o5Waj1V+/505vyO/e3t7/a7SI0CAAAECBAgQIECAAAECBAgQIECAAAECBAg8X2DvzuTM262s\ns1czy63Eek3v19kzTttjvT/LJ3alzZzskfGsncVqXj1bucQ/qj7+HmNH477+3jo9t9If953NWamZ\n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\nK7lec9Sf5fdiV3P1nTM3bY+N/RrXs1X7kf39d6/7HdWbCnzmheyre63M36vZys3iY2xvvJLrNUf9\nWf5sbFZfP4DE0x7Fen61P9atjGc1Faunn/Uj8vvvvVyqVmpSu9fetc7eHnIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAgScL3HVRu7LOXs1WbhYfY2fGvfZMf1Y7i9VvIfGxneWuxPqc3s9+PVb9elZz\nY+2vycP8xLZqk+97Jja2KzXjnD5+dX5fa7P/3f4L+nrRvYvUrdwYH8ezdXvN3f2j9Wb5HssH77H0\n087eaYxt1fZ49tpqz9RurfFKvP4h3fGPKeuM7StnM5cAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\n8ESB8b4k41ff5cw6Vbv1bOVm8aPYmN8b99ysP4vVOySe9q7Y0To9P/ZrPHtmZ0xdzyU2tls1W/Ga\nv5cb1//y4ydd0Afz6MJ3L7+Vm8XH2Jlxr+39eoeM0/bYVn9WO4v1+Vv5qqnnKP9Rdf7vvu752edm\nfIV/jHWGrT/n3kY1AQIECBAgQIAAAQIECBAgQIAAAQIECBAgQODrCGzdf7zzfmZ17aO6rfwsvhLr\nNb1fX6uPr/aP5l3JH83pZ++1Pb7Xr9zRM657VH81/1n7XD3f3+Z9xwv6esG9S+Kt3Cw+xs6Me+1W\nv591q2YWn8XOrlX19RyttVcz5mp89PT9jmrvzNc/zPy5c929tT57v72zyBEgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIEVgQ++34j+1W7+hzVbuVX42PdmXGvPeof5csjNWl7rPeP8lu1Fe/PyjpV3+tW\nxrOaitUzrvUR/fh7L9frHtP/zMvSu/ZaXWevbis3i4+xM+Ne+87+1bVX5tWPeavuKDfmZ+OK1dP3\n+Ih8/L0VT81RPnW9vTKnz9cnQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBC4R+DKBezRnK38anxW\n12O9Xwp93Pt7udSlXantNVfn9TWu9Mc5K+NZTcXq6e/xEfn9917ud9X+Gr3uqL+639E6u/kn/hf0\n9UIrF6x7NWdys9oxtjdezaUubT5cH6efdrQ4E++12WvW9rreH/c+mjvLJzaum/hKe+UfSs25Mm/l\nPGoIECBAgAABAgQIECBAgAABAgQIECBAgAABAgSOBa7e16zc8ezVzHIrsbFmb9xzW/0SSi5tj53t\n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\nBAgQIECAAAECBAgQIECAwHUFhPHX3e3TyQS2TxzLfnAPll29gxMgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECAwUEMQPxM7YSjCbcSv5ZnJP8u3ERAQIECBAgAABAgQIECBAgAABAgQIECBAgAABAvkE\nBPD5dpJqIsFrqnWUHsZdKr0+wxMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECOwICN93gDzeFxCq\n7ht5I17APYw31oEAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQOB2E7K7BVMFBKNT+TVPLOD/RuLl\nGI0AAQIECBAgQIAAAQIECBAgQIAAAQIECBAoISAML7EmQxIgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIE\nCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECLqHpyAAAABsSURBVBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAg\nQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAA\nAQIECBAgQIAAAQIECBD4EvgDp1pjNUxbwpQAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(filename='img/grid.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Changing Code** I then (1) modified `action` within the `LearningAgent`'s `update` function in `agent.py` to make the car choose actions randomly instead of not at all:\n", "\n", "
\n",
    "action = random.choice([None, 'forward', 'left', 'right'])\n",
    "
\n", "\n", "and (2) set `enforce_deadline=False`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "\n", "1. Observe what you see with the agent's behavior as it takes random actions.\n", " - The agent can be blocked at one intersection for multiple turns because it wants to e.g. turn right at a green light, which is not allowed. (Reward = -0.5 for that turn) \n", " - The agent often goes around in loops.\n", "2. Does the smartcab eventually make it to the destination?\n", " - It did in Trial 1. It did not in Trial 2: it hit the hard time limit (-100) and the trial aborted. (See console output below)\n", "3. Are there any other interesting observations to note?\n", " - The agent can move through the rightmost side of the grid to end up on the left side of the grid. Similarly, it can move through the topmost side of the grid and reappear at the bottom and vice versa." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Console output for Trial 2 - Did not make it to destination\n", "\n", "Simulator.run(): Trial 2\n", "Environment.reset(): Trial set up with start = (7, 1), destination = (6, 6), deadline = 30\n", "RoutePlanner.route_to(): destination = (6, 6)\n", "LearningAgent.update(): deadline = 30, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = 29, inputs = {'light': 'green', 'oncoming': None, 'right': 'forward', 'left': None}, action = right, reward = 2.0\n", "...\n", "LearningAgent.update(): deadline = 1, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = right, reward = 2.0\n", "LearningAgent.update(): deadline = 0, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -1.0\n", "LearningAgent.update(): deadline = -1, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': None}, action = forward, reward = -1.0\n", "...\n", "LearningAgent.update(): deadline = -99, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = None, reward = 0.0\n", "LearningAgent.update(): deadline = -100, inputs = {'light': 'green', 'oncoming': None, 'right': None, 'left': None}, action = left, reward = -0.5\n", "Environment.step(): Primary agent hit hard time limit (-100)! Trial aborted." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Inform the Driving Agent\n", "\n", "### QUESTIONS:\n", "- What states have you identified that are appropriate for modeling the smartcab and environment? \n", "- Why do you believe each of these states to be appropriate for this problem?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States:\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
AttributeWhy it's appropriateInfo sourcePossible valuesNumber of possible values
Where we want to go next to get to our destinationIf there were no traffic lights or other cars, next_waypoint would give us the optimal next action we should take to reach our destination. That somewhat models our ideal action.self.next_waypointNone, 'forward', 'left', 'right' (Though if it's `None` we'll have reached our destination and won't care)4 (3 without `None`)
Traffic lightTraffic lights will give part of the constraints that determine whether or not taking certain actions will be effective and what rewards they will receive.inputs['light']green, red2
Oncoming (cars)Similar to traffic lights, oncoming cars (straight ahead) are a constraint on our actions. We don't want to crash into another car. We want the algorithm to learn that crashing is bad.inputs['oncoming']None, 'forward', 'left', 'right'4
What the car immediately to the left wants to doIf the car to the left is going to turn right, you don't want to turn left and crash into it.inputs['left']None, 'forward', 'left', 'right'4
What the cars immediately to the right wants to doSimilar to inputs['left'].inputs['right']None, 'forward', 'left', 'right'4
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "**OPTIONAL**: \n", "- How many states in total exist for the smartcab in this environment? \n", "- Does this number seem reasonable given that the goal of Q-Learning is to learn and make informed decisions about each state? Why or why not?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Total number of states**: 4^4 * 2 = 512 states.\n", "\n", "The minimum 'deadline' is `minimum distance` x 5 = 4 x \n", "5 = 20 and the maximum is 12 x 5 = 60. \n", "\n", "If we suppose that the car takes an average of at least 20 turns per trial and that each state has the same likelihood of being visited, that means **each state will be visited an average of** 20 turns x 100 trials / 512 states i.e. about **4 times**. This is **reasonable but is still quite low**.\n", "\n", "This low number is **why I did not include further state attributes** I considered (see boloew) because that would only reduce the number of visits to each state even further.\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "States that I considered:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "
AttributeInfo sourcePossible valuesNumber of possible values
Deadlinedeadline
    \n", "
  • Impossible: if compute_dist < deadline.
  • Possible: if compute_dist >= deadline
2
Location relative to destinationPrimary agent coordinates, destination coordinates8\\*6-10=38 coordinate pairs, discounting rotational and reflective symmetries.38
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Glossary**:\n", "- Coordinate grid: (1,1) is top left and increases to the right and down. Bottom right is (8,6).\n", "- Headings: Directions car is facing. [(1,0),(0,-1),(-1,0),(0,1)] # ENWS\n", "- inputs['right'] means that there is a car to the primary agent's immediate right. (See image below) The attribute value indicates what that car wants to do." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Image(filename=\"img/input_right.png\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Implement a Q-Learning Driving Agent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Q-learning algorithm** The crux of the Q-learning algorithm is \n", "
\n",
    "new_q = old_q*(1 - self.alpha) + self.alpha*(reward + self.gamma * max_state2_q)\n",
    "
\n", "\n", "in the `learn_q` function in `agent.py`.\n", "\n", "**Choosing actions** The agent chooses the best action to take by choosing the action with the maximum Q-value for the corresponding state. It chooses a random action if there are multiple actions where the resulting Q-value = maxQ.\n", "\n", "**Exploration** The agent also chooses a random action with probability epsilon. This allows it to escape if it 'gets stuck' in some suboptimal local optima.\n", "\n", "**Decaying learning rate (1/t)** The initial learning rate is high at Alpha=1 so the agent learns quickly. As time goes on, the agent becomes more confident with what it's learned and is less persuaded by new information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### **QUESTION**: \n", "- What changes do you notice in the agent's behavior when compared to the basic driving agent when random actions were always taken? Why is this behavior occurring?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The agent is **more likely to take actions corresponding to `next_waypoint`** when those are viable because it receives a reward of 2.0 if it can execute that action without penalty and is learning to behave in ways that **maximise total expected reward**.\n", "\n", "The agent is **less likely to take actions tha result in penalties** (crashing into cars, making illegal moves or making moves that are legal but are not equal to `next_waypoint` so they are further from the destination) because those usually do not maximise reward. It does learn to make legal but 'incorrect' moves rather than crash into a car.\n", "\n", "The agent **reaches the destination more frequently**: after implementing Q-learning, it reaches the destination in time over 80% of the time, whereas while it was moving randomly it reached the destination in time less than 10% of the time. The agent does not just move randomly in loops any more. \n", "\n", "As the agent **gains experience**, it is less likely to go around in loops or get penalised for going against traffic rules or crashing into other cars." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Notes: Debugging 'Implementing a Q-Learning Driving Agent'\n", "1. I realised the agent wasn't acting because the `count` variable was defined wrongly: \n", " - `count` was used to see there were multiple actions with `q-value = maxQ` for that state. \n", " - If `count` > 1, we would randomly choose one action out of the set of actions where `q-value = maxQ`.\n", " - `count` was wrongly defined as `len([maxq])`, which is always equal to one since it is an array with a float in it.\n", " - It should've been `len([i in q if q[i] == max_q])` instead.\n", " - Because it was defined wrongly, the agent kept choosing the first of all the actions that had the same q-value.\n", " - This meant the agent often chose `None`.\n", "2. I'd forgotten to incorporate `next_waypoint` into my state. Pretty silly.\n", "3. I wanted to print results after every turn for debugging purposes and put `self.results` in TrafficLight instead of Environment." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Improve the Q-Learning Driving Agent\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.1 Planning\n", "\n", "**Procedure**:\n", "1. Run each configuration 50 times (50 sets of 100 trials)\n", "2. Write metrics into separate file\n", "3. Convert to summary statistics over 50 sets\n", "4. Observe statistics\n", "4. Alter list of configurations as appropriate and repeat until satisfied\n", "\n", "The **metrics considered** were\n", "- **Total number of successful outcomes** (out of 100) because unsuccessful outcomes (Trial aborted because car did not make it in time) indicates **inefficiency**.\n", " - **Average buffer** (Time left / Initial deadline) -> Indicates how efficient the driving agent was.\n", "\n", "- **Average number of incorrect actions per trial** (penalties of -1.0) because this indicates an action was **unsafe**.\n", "\n", "The parameters considered were\n", "- Exploration rate Epsilon (epsilon)\n", "- Discount rate Gamma (gamma)\n", "- Learning rate Alpha (alpha) \n", "- Default Q value (if one did not exist before (default_q)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2 Optimising\n", "\n", "#### 4.2.1 Optimising for Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.200.50'1.0/t'0.087.780.51791.0810
0.100.50'1.0/t'0.094.200.57090.5732
0.050.50'1.0/t'0.096.500.57090.3664
0.010.50'1.0/t'0.098.360.58290.1926
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** It seems like the smaller Epsilon is, the greater the proportion of successes, the greater the average buffer and the smaller the average number of penalties.\n", "\n", "**Interpretation** This makes sense: the learning does not 'get stuck' often in ways that we need random actions to get it back on track, so random actions only decrease performance. It seems intuitive enough that we don't have to try a variety of epsilon values over some other combination of gamma and alpha.\n", "\n", "**Next actions** For the rest of the trials we will experiment with epsilon values of 0.01 and 0.05 for robustness. We want an algorithm that will drive safely even if it goes haywire sometimes.\n", "\n", "Once we have chosen our gamma and alpha, we will optimise for epsilon." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.2 Optimising for Gamma (and Alpha)\n", "\n", "Gamma takes values between zero and one, so I first tested gamma values from four quartiles to get an idea of how our metrics changed with Gamma." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
0.050.75'1.0/t'0.094.020.55730.3822
0.050.99'1.0/t'0.075.300.53990.6030
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations** \n", "* It seems that the number of successes are higher if Gamma is lower. and buffer are higher if gamma is lower. \n", "* The average penalty decreases slightly as Gamma increases from 0.01 to 0.25 before increasing again at Gamma=0.5. \n", "* Likewise, the average buffer increases slightly as Gamma increases from 0.01 to 0.25 before decreasing again at Gamma=0.5.\n", "\n", "**Next actions** This motivates us to try more Gamma values in the range (0,0.5)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.3 Pre-emptive checking for robustness\n", "\n", "We need to test if our observations for Gamma hold for different values of Alpha. I tested gamma values from the four quartiles with Alpha=1/t^2 instead of Alpha=1/t and obtained similar results:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
0.050.75'1.0/(t^0.5)'0.093.760.55390.3888
0.050.99'1.0/(t^0.5)'0.069.600.53120.7028
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observation** The **trend differences** were that average penalties continued to decrease as Gamma was increased up to 0.50. \n", "\n", "**Decision-making and next actions** The decrease in average penalty from Gamma=0.25 to Gamma=0.50 was smaller than 0.01 but came at the cost of a decrease in average successes of over 1 as well as a decrease in the average buffer, so I decided it was **not worthwhile to experiment with increasing Gamma beyond 0.25**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.4 Continue optimising for Gamma" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alpha = '1.0/t'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/t'0.098.000.57050.3694
0.050.25'1.0/t'0.097.180.57260.3538
0.050.50'1.0/t'0.096.500.57090.3664
\n", "\n", "Alpha = '1.0/(t^0.5)'\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.25'1.0/(t^0.5)'0.097.680.57220.3636
0.050.50'1.0/(t^0.5)'0.096.620.56960.3616
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Observations**: For Alpha = 1/t, we have Gamma=1.0 having a higher average number of successes, the highest average buffer and a lower average penalty than Gamma=0.01 but higher than Gamma=0.2. There is thus an argument for **setting Gammma to be around 0.1**.\n", "\n", "For Alpha = 1/(t^0.5), we still have Gamma=0.01 with the marginally highest average successes. There is still a tradeoff between (1) average successes and (2) average buffer (up to Gamma=0.2) and decreasing average penalties (up to Gamma=0.25). It is less clear where we'd want to set Gamma to be in this case if we do not make value judgements about which metrics matter more. If we do make value judgements, I would argue that **setting Gamma to be around 0.01** would be appropriate because an increase in successes of 0.3 trials (per 100) is more important than decreasing average penalty by 0.008 per trial.\n", "\n", "**Next Actions**: It seems that we have a general idea of where the optimal Gamma is going to be and that the precise optimal gamma may depend on our choice of Alpha. Thus we should begin to optimise Alpha before we further narrow down our choice of Gamma.\n", "\n", "We will try various Alpha = 11/(t^exp) where exp=0.01, 0.25, 0.5, 0.75 and 1, with Gamma=0.01, 0.10 and 0.20." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.5 Optimising for Alpha" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.01'1.0/(t^0.01)'0.097.720.57610.3618
0.050.01'1.0/(t^0.25)'0.098.060.57220.3608
0.050.01'1.0/(t^0.5)'0.098.060.57090.3710
0.050.01'1.0/(t^0.75)'0.097.840.57130.3718
0.050.01'1.0/t' 0.098.000.57050.3694
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.10'1.0/(t^0.001)'0.097.720.57330.3616
0.050.10'1.0/(t^0.01)'0.098.340.57370.3634
0.050.10'1.0/(t^0.25)'0.098.060.57230.3608
0.050.10'1.0/(t^0.5)'0.097.980.56820.3638
0.050.10'1.0/(t^0.75)'0.097.800.57070.3788
0.050.10'1.0/t' 0.098.100.57470.3604
\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.050.20'1.0/(t^0.01)'0.097.800.56530.3730
0.050.20'1.0/(t^0.25)'0.097.600.57240.3606
0.050.20'1.0/(t^0.5)'0.097.760.57670.3568
0.050.20'1.0/(t^0.75)'0.097.880.56940.3632
0.050.20'1.0/t' 0.097.120.56850.3834
" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAFDCAYAAADS5rEFAAAgAElEQVR4Xu2dB5gUxfa3D0jOOUqQ\nLBhQQVS4iIKAgOSgEhXJyUAUjKggoCTJiAgoICAZBQQVkSiIcEEkCYKI5CRI3O/51f16/7PLzu6c\n6p7d2Z1fPc99vOz2qa56q3f6nVNV3ckiIiKGCwsJkAAJkAAJkAAJhBGBZBERERFh1F92lQRIgARI\ngARIgASEAsSLgARIgARIgARIIOwIUIDCbsjZYRIgARIgARIgAQoQrwESIAESIAESIIGwI0ABCrsh\nZ4dJgARIgARIgAQoQLwGSIAESIAESIAEwo4ABSjshpwdJgESIAESIAESoADxGiABEiABEiABEgg7\nAhSgsBtydpgESIAESIAESIACxGuABEiABEiABEgg7AhQgMJuyNlhEiABEiABEiABChCvARIgARIg\nARIggbAjQAEKuyFnh0mABEiABEiABChAvAZIgARIgARIgATCjgAFKOyGnB0mARIgARIgARKgAPEa\nIAESIAESIAESCDsCFKCwG3J2mARIgARIgARIgALEa4AESIAESIAESCDsCFCAwm7I2WESIAESIAES\nIAEKEK8BEiABEiABEiCBsCNAAQq7IWeHSYAESIAESIAEKEC8BkiABEiABEiABMKOAAUo7IacHSYB\nEiABEiABEqAA8RogARIgARIgARIIOwIUoLAbcnaYBEiABEiABEiAAsRrgARIgARIgARIIOwIUIDC\nbsjZYRIgARIgARIgAQoQrwESIAESIAESIIGwI0ABCrshZ4dJgARIgARIgAQoQLwGSIAESIAESIAE\nwo4ABSjshpwdJgESIAESIAESoADxGiABEiABEiABEgg7AhSgsBtydpgESIAESIAESIACxGuABEiA\nBEiABEgg7AhQgMJuyNlhEiABEiABEiABChCvARIgARIgARIggbAjQAEKuyFnh0mABEiABEiABChA\nvAYSFYHvvvtOvvrqK9m3b59cunRJMmfOLPfcc480bdpUihUr5mlfLl++LG3btpUuXbpIxYoVXddt\nU9/s2bPlhx9+kI8++sj1+bUV3Lx5U1q0aCElSpSQN99885bwzZs3y6uvvipoY7Zs2VTVT548Wdat\nWydTpkxRxYXawQcPHpR27drJmDFjDKfYyj///CNLly414/nXX38J/p0lSxYpUKCAVK5cWerUqRNq\n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\n6jAuMT0HKBABQjzOh2OR+cE2eggImIGfPwFC1gVZPqyvgdhhGgzZK2TD8MwmrQCBAdb7QOKwlR47\ntiCu2NmFnXXgHNerMLBTD0IOLhB3jAseiggxx9Z/7LjDv922PT4EyHZcgvvpwNpJQEeAAqTjxaMT\nEQEIEF7n4Kw7SURNd91UTO9hPQ0yW3gAINbs4Hk1WJiNaShMDcW2oNymAY4A+Xtat02djCEBEiCB\nYBGgAAWLLOtNcAJJ5YWbNiCx5gZrYJDtiF6QacA0IjIXXpa4Fnl7eS7WRQIkQAJuCVCA3BJkfMgS\nCGcBwm45TLlg+zamjbAQGVMreL4Oprqws0r7zrS4BpoCFBch/p4ESCCUCFCAQmk02BZPCYSzAGG9\nDBaqYu0MXmWB9SZ4jg1eu4H1Us4TsL0ETgHykibrIgESCDYBClCwCbN+EiABEiABEiCBkCNAAQq5\nIWGDSIAESIAESIAEgk2AAhRswqyfBEiABEiABEgg5AhQgEJuSNggEiABEiABEiCBYBOgAAWbMOsn\nARIgARIgARIIOQIUoJAbEjaIBEiABEiABEgg2AQoQMEmzPpJgARIgARIgARCjgAFKOSGhA0iARIg\nARIgARIINgEKULAJs34SIAESIAESIIGQI0ABCrkhYYNIgARIgARIgASCTYACFGzCrJ8ESIAESIAE\nSCDkCFCAQm5I2CASIAESIAESIIFgE6AABZsw6ycBEiABEiABEgg5AhSgkBsSNogESIAESIAESCDY\nBChAwSbM+kmABEiABEiABEKOAAUo5IaEDSIBEiABEiABEgg2AQpQsAmzfhIgARIgARIggZAjQAEK\nuSFhg0iABEiABEiABIJNgAIUbMKsnwRIgARIgARIIOQIUIBCbkjYIBIgARIgARIggWAToAAFmzDr\nJwESIAESIAESCDkCFKCQGxI2iARIgARIgARIINgEKEDBJsz6SYAESIAESIAEQo4ABSjkhoQNIgES\nIAESIAESCDYBClCwCbN+EiABEiABEiCBkCNAAQq5IWGDSIAESIAESIAEgk2AAhRswqyfBEiABEiA\nBEgg5AhQgEJuSNggEiABEiABEiCBYBOgAAWbMOsnARIgARIgARIIOQIUoJAbEjaIBEiABEiABEgg\n2AQoQMEmzPpJgARIgARIgARCjgAFKOSGhA0iARIgARIgARIINgEKULAJs34SIAESIAESIIGQI0AB\n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\nJB0C/w89EjM+/RL7LQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='img/heatmap-alpha-gamma.png') " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Alpha=0.01 was doing so well I decided to try Alpha=0.001. The heat map is not continuous which seems strange.)\n", "\n", "For Gamma=0.01, the difference between different alphas seems insignificant with the exception of exponent=0.75.\n", "* Pick exp=0.25\n", "\n", "For Gamma=0.1, it seems like performance plotted against the exponent of (1/t) is shaped like x^2, where exponent = 0.25 and 1 perform best.\n", "* Pick exp=0.01\n", "\n", "For Gamma=0.2, \n", "* Pick exp=0.75\n", "\n", "**Overall**: pick Gamma=0.1, Alpha=1/(t^0.01)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.6 Optimising Epsilon" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.000 0.10'1.0/(t^0.01)'0.098.700.58610.1706
0.0000010.10'1.0/(t^0.01)'0.098.900.58850.1728
0.0000050.10'1.0/(t^0.01)'0.098.960.58690.1686
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.001 0.10'1.0/(t^0.01)'0.098.980.59630.1692
0.01 0.10'1.0/(t^0.01)'0.098.660.58840.2058
0.05 0.10'1.0/(t^0.01)'0.098.340.57370.3634
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Choose epsilon = 0.00001." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 4.2.7 Optimising default Q-value\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
epsilongammaalphadefault_qsuccessesavg_bufavg_penalties
0.00001 0.10'1.0/(t^0.01)'0.099.120.59260.1640
0.00001 0.10'1.0/(t^0.01)'0.598.660.58890.1760
0.00001 0.10'1.0/(t^0.01)'1.098.880.58860.1844
0.00001 0.10'1.0/(t^0.01)'2.099.120.59120.1848
0.00001 0.10'1.0/(t^0.01)'2.598.480.58270.1974
\n", "\n", "successes 98.480000\n", " avg_buffer 0.582687\n", " avg_penalties 0.197400\n", "\n", "A default Q-value of 0.0 has the best performance, though a default Q-value of 2.0 interestingly comes very close. For more robust results, I would try smaller increments of Q with larger 100-trial sets.\n", "\n", "It seems that *moderate optimism in the face of uncertainty* is a less optimal assumption here. \n", "\n", "(Note: I only tested different Q-values on this particular set of epsilon, gamma and alpha values. It is possible higher Q-values will work better for other epsilon, gamma and alpha.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### QUESTIONS:\n", "Parameters chosen:\n", "\n", "\n", "\n", "
Exploration rate EpsilonDiscount rate GammaLearning rate AlphaDefaultQ
0.000010.11/(t^0.01)0.0
\n", "\n", "\n", "### Discussion: How well does the final driving agent perform?\n", "\n", "- An optimal policy would be successful in almost all trials (the exceptions being where it is impossible for some reason). That is' it would attain close to 100 successes per 100 trials.\n", "- It would be efficient and thus approach the theoretical maximum buffer of 0.8 (since deadline = compute_dist * 5)\n", "- It would maxmise net reward and thus likely incur close to zero -1.0 penalties.\n", "\n", "#### Comparing our driving agent to the optimal policy\n", "\n", "\n", "\n", "\n", "
PolicyAvg successes per 100 trialsAverage buffer (proportion) per trialNumber of -1.0 penalties
Our agent99.120.59260.1640
Optimal policy100Close to 0.8 (approaching from below)Likely 0
\n", "\n", "* Judging by the the Average Successes per 100 trials, our policy is close to the optimal policy.\n", "\n", "* As noted before, it's hard to know what the optimal policy's average buffer would be so although there is a gap, we don't know how great the gap between our policy and the optimal one is.\n", "\n", "* There are still a significant number of penalties occurring (violations of traffic rules or crashing). This is suboptimal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Penalties that occurred in the last 10 trials in a set:**\n", "\n", "Trial 94:\n", "\n", "* next_waypoint: forward\n", "* q: [0.0, 0.0, 0.0, 0.0]\n", "* max_q: 0.0\n", "* action: forward\n", "* LearningAgent.update(): deadline = 32, inputs = {'light': 'red', 'oncoming': None, 'right': None, 'left': 'left'}, action = forward, reward = -1.0\n", "\n", "Trial 99:\n", "* next_waypoint: forward\n", "* q: [0.0, 0.0, 0.0, -0.48971014879346336]\n", "* max_q: 0.0\n", "* action: forward\n", "* LearningAgent.update(): deadline = 26, inputs = {'light': 'red', 'oncoming': None, 'right': 'forward', 'left': None}, action = forward, reward = -1.0\n", "\n", "The penalties occur because the agent has had little (99) or no (94) previous experience in this state. These are usually states where `oncoming`, `right`, or `left` are not blank.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then conclude that **our policy is efficient but not nearly as safe as it could be**.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p4-smartcab/smartcab_parameter_search.csv ================================================ epsilon, gamma, alpha, defaultq, successes, avg_buffer, avg_penalties 0.2, 0.5, '1.0/t', 0.0, 88,0.52269751082251081, 1.06 0.2, 0.5, '1.0/t', 0.0, 86,0.49981358434846801, 1.04 0.2, 0.5, '1.0/t', 0.0, 87,0.49572523262178447, 0.99 0.2, 0.5, '1.0/t', 0.0, 91,0.51184894470608766, 1.25 0.2, 0.5, '1.0/t', 0.0, 86,0.56855599181180583, 1.21 0.2, 0.5, '1.0/t', 0.0, 92,0.54491098876968447, 0.97 0.2, 0.5, '1.0/t', 0.0, 82,0.52509045155386613, 1.07 0.2, 0.5, '1.0/t', 0.0, 84,0.49827853363567653, 1.27 0.2, 0.5, '1.0/t', 0.0, 88,0.47624475272202543, 1.11 0.2, 0.5, '1.0/t', 0.0, 89,0.54870429819868027, 0.86 0.2, 0.5, '1.0/t', 0.0, 85,0.52116348357524833, 1.07 0.2, 0.5, '1.0/t', 0.0, 83,0.48744119334480779, 1.41 0.2, 0.5, '1.0/t', 0.0, 82,0.54053619821912502, 1.01 0.2, 0.5, '1.0/t', 0.0, 88,0.48919823232323234, 1.18 0.2, 0.5, '1.0/t', 0.0, 87,0.47430395913154533, 1.05 0.2, 0.5, '1.0/t', 0.0, 86,0.51147311990335242, 1.17 0.2, 0.5, '1.0/t', 0.0, 88,0.54518094910140358, 1.03 0.2, 0.5, '1.0/t', 0.0, 90,0.52661760461760465, 1.16 0.2, 0.5, '1.0/t', 0.0, 85,0.51092343604108315, 1.1 0.2, 0.5, '1.0/t', 0.0, 87,0.54545811149259416, 0.99 0.2, 0.5, '1.0/t', 0.0, 85,0.54773151684916388, 1.02 0.2, 0.5, '1.0/t', 0.0, 90,0.51322767356100685, 1.06 0.2, 0.5, '1.0/t', 0.0, 86,0.50493816906607603, 1.18 0.2, 0.5, '1.0/t', 0.0, 88,0.51880321067821067, 1.1 0.2, 0.5, '1.0/t', 0.0, 86,0.50440157387831808, 1.16 0.2, 0.5, '1.0/t', 0.0, 89,0.53380798352708458, 1.01 0.2, 0.5, '1.0/t', 0.0, 87,0.53285258164568505, 0.98 0.2, 0.5, '1.0/t', 0.0, 89,0.47982489420691671, 1.15 0.2, 0.5, '1.0/t', 0.0, 94,0.52965567529397317, 1.14 0.2, 0.5, '1.0/t', 0.0, 88,0.51946387577069397, 1.08 0.2, 0.5, '1.0/t', 0.0, 84,0.55331924689067546, 1.05 0.2, 0.5, '1.0/t', 0.0, 86,0.51928386858619424, 1.01 0.2, 0.5, '1.0/t', 0.0, 89,0.55139111824505083, 0.97 0.2, 0.5, '1.0/t', 0.0, 86,0.50580539615423337, 1.1 0.2, 0.5, '1.0/t', 0.0, 89,0.50515694667380062, 1.05 0.2, 0.5, '1.0/t', 0.0, 90,0.53396985730319069, 0.94 0.2, 0.5, '1.0/t', 0.0, 91,0.50900417043274182, 0.92 0.2, 0.5, '1.0/t', 0.0, 90,0.49950793650793651, 1.02 0.2, 0.5, '1.0/t', 0.0, 94,0.51921394799054366, 1.16 0.2, 0.5, '1.0/t', 0.0, 92,0.52168995859213252, 1.02 0.2, 0.5, '1.0/t', 0.0, 93,0.53262331455879841, 0.93 0.2, 0.5, '1.0/t', 0.0, 84,0.56007086167800446, 1.1 0.2, 0.5, '1.0/t', 0.0, 88,0.51641233766233763, 0.94 0.2, 0.5, '1.0/t', 0.0, 84,0.50833616780045365, 1.07 0.2, 0.5, '1.0/t', 0.0, 89,0.51914595392123475, 1.1 0.2, 0.5, '1.0/t', 0.0, 83,0.50548740416210292, 1.12 0.2, 0.5, '1.0/t', 0.0, 92,0.49400221155655943, 1.23 0.2, 0.5, '1.0/t', 0.0, 93,0.47504530714208132, 1.06 0.2, 0.5, '1.0/t', 0.0, 87,0.52492428388980117, 1.31 0.2, 0.5, '1.0/t', 0.0, 89,0.51134174813950084, 1.07 0.1, 0.5, '1.0/t', 0.0, 96,0.55835745851370844, 0.61 0.1, 0.5, '1.0/t', 0.0, 97,0.5512788414334806, 0.47 0.1, 0.5, '1.0/t', 0.0, 89,0.5568637417513822, 0.76 0.1, 0.5, '1.0/t', 0.0, 94,0.54013271007951857, 0.67 0.1, 0.5, '1.0/t', 0.0, 94,0.56613866629824083, 0.47 0.1, 0.5, '1.0/t', 0.0, 91,0.55552328623757197, 0.66 0.1, 0.5, '1.0/t', 0.0, 94,0.56300988609499258, 0.56 0.1, 0.5, '1.0/t', 0.0, 96,0.60168981481481476, 0.53 0.1, 0.5, '1.0/t', 0.0, 95,0.53068990658464343, 0.45 0.1, 0.5, '1.0/t', 0.0, 95,0.56385630743525472, 0.52 0.1, 0.5, '1.0/t', 0.0, 93,0.5170894040248879, 0.59 0.1, 0.5, '1.0/t', 0.0, 95,0.57817961570593157, 0.51 0.1, 0.5, '1.0/t', 0.0, 96,0.56596974206349204, 0.5 0.1, 0.5, '1.0/t', 0.0, 93,0.59288809756551686, 0.46 0.1, 0.5, '1.0/t', 0.0, 90,0.55539089305755962, 0.64 0.1, 0.5, '1.0/t', 0.0, 91,0.55054342482913909, 0.6 0.1, 0.5, '1.0/t', 0.0, 93,0.52167008021846739, 0.53 0.1, 0.5, '1.0/t', 0.0, 97,0.52454076850984066, 0.56 0.1, 0.5, '1.0/t', 0.0, 95,0.55862033872560179, 0.62 0.1, 0.5, '1.0/t', 0.0, 90,0.48554922238255571, 0.78 0.1, 0.5, '1.0/t', 0.0, 93,0.55461341525857655, 0.58 0.1, 0.5, '1.0/t', 0.0, 95,0.55075856307435245, 0.63 0.1, 0.5, '1.0/t', 0.0, 96,0.56108307780182776, 0.55 0.1, 0.5, '1.0/t', 0.0, 93,0.54570963087092117, 0.69 0.1, 0.5, '1.0/t', 0.0, 95,0.58305475810738983, 0.67 0.1, 0.5, '1.0/t', 0.0, 94,0.54197568389057749, 0.62 0.1, 0.5, '1.0/t', 0.0, 94,0.54368287740628174, 0.56 0.1, 0.5, '1.0/t', 0.0, 91,0.5581510552939124, 0.7 0.1, 0.5, '1.0/t', 0.0, 96,0.51805720899470897, 0.59 0.1, 0.5, '1.0/t', 0.0, 95,0.55540517961570601, 0.58 0.1, 0.5, '1.0/t', 0.0, 97,0.51443730381874708, 0.64 0.1, 0.5, '1.0/t', 0.0, 94,0.58539682539682536, 0.58 0.1, 0.5, '1.0/t', 0.0, 85,0.57172676343264572, 0.56 0.1, 0.5, '1.0/t', 0.0, 95,0.53736173767752726, 0.48 0.1, 0.5, '1.0/t', 0.0, 91,0.57425114567971702, 0.49 0.1, 0.5, '1.0/t', 0.0, 95,0.5468585099111416, 0.65 0.1, 0.5, '1.0/t', 0.0, 91,0.53390228818800245, 0.38 0.1, 0.5, '1.0/t', 0.0, 96,0.54686124639249634, 0.64 0.1, 0.5, '1.0/t', 0.0, 97,0.55633618958361231, 0.46 0.1, 0.5, '1.0/t', 0.0, 98,0.51083487940630801, 0.53 0.1, 0.5, '1.0/t', 0.0, 98,0.57149497894395851, 0.45 0.1, 0.5, '1.0/t', 0.0, 94,0.523806146572104, 0.62 0.1, 0.5, '1.0/t', 0.0, 98,0.55898040168448337, 0.61 0.1, 0.5, '1.0/t', 0.0, 97,0.51837997054491902, 0.6 0.1, 0.5, '1.0/t', 0.0, 95,0.55760233918128643, 0.44 0.1, 0.5, '1.0/t', 0.0, 95,0.55679577732209318, 0.58 0.1, 0.5, '1.0/t', 0.0, 92,0.54627242926155961, 0.53 0.1, 0.5, '1.0/t', 0.0, 98,0.56312557057455015, 0.66 0.1, 0.5, '1.0/t', 0.0, 96,0.55958077801827799, 0.46 0.1, 0.5, '1.0/t', 0.0, 92,0.53874145178493005, 0.64 0.05, 0.5, '1.0/t', 0.0, 96,0.53677496693121696, 0.43 0.05, 0.5, '1.0/t', 0.0, 93,0.56138838461419116, 0.45 0.05, 0.5, '1.0/t', 0.0, 98,0.58965824425008095, 0.35 0.05, 0.5, '1.0/t', 0.0, 98,0.59676009364784877, 0.36 0.05, 0.5, '1.0/t', 0.0, 99,0.57925029515938598, 0.29 0.05, 0.5, '1.0/t', 0.0, 98,0.60357474158494562, 0.33 0.05, 0.5, '1.0/t', 0.0, 95,0.581596870965292, 0.37 0.05, 0.5, '1.0/t', 0.0, 96,0.56446894540644543, 0.31 0.05, 0.5, '1.0/t', 0.0, 97,0.60396312164353394, 0.28 0.05, 0.5, '1.0/t', 0.0, 97,0.6054244209398848, 0.33 0.05, 0.5, '1.0/t', 0.0, 98,0.57551844980416411, 0.35 0.05, 0.5, '1.0/t', 0.0, 95,0.54002756892230575, 0.44 0.05, 0.5, '1.0/t', 0.0, 96,0.55296672077922071, 0.43 0.05, 0.5, '1.0/t', 0.0, 98,0.56043893747975382, 0.39 0.05, 0.5, '1.0/t', 0.0, 97,0.53887140923223398, 0.44 0.05, 0.5, '1.0/t', 0.0, 97,0.56505727376861392, 0.36 0.05, 0.5, '1.0/t', 0.0, 96,0.51868731962481962, 0.36 0.05, 0.5, '1.0/t', 0.0, 96,0.58216292388167379, 0.36 0.05, 0.5, '1.0/t', 0.0, 98,0.56562645404482137, 0.34 0.05, 0.5, '1.0/t', 0.0, 92,0.6013276397515529, 0.46 0.05, 0.5, '1.0/t', 0.0, 93,0.52922341696535247, 0.45 0.05, 0.5, '1.0/t', 0.0, 97,0.60121383198702794, 0.35 0.05, 0.5, '1.0/t', 0.0, 97,0.58462816679311524, 0.34 0.05, 0.5, '1.0/t', 0.0, 95,0.542475051264525, 0.46 0.05, 0.5, '1.0/t', 0.0, 99,0.57577404638010699, 0.32 0.05, 0.5, '1.0/t', 0.0, 90,0.61799871733205058, 0.38 0.05, 0.5, '1.0/t', 0.0, 98,0.57304907677356653, 0.29 0.05, 0.5, '1.0/t', 0.0, 99,0.59886892008104131, 0.3 0.05, 0.5, '1.0/t', 0.0, 97,0.55175644515850708, 0.38 0.05, 0.5, '1.0/t', 0.0, 98,0.59103660511823775, 0.36 0.05, 0.5, '1.0/t', 0.0, 97,0.58217476681394198, 0.41 0.05, 0.5, '1.0/t', 0.0, 98,0.53636930529787674, 0.38 0.05, 0.5, '1.0/t', 0.0, 96,0.53995137385762393, 0.29 0.05, 0.5, '1.0/t', 0.0, 100,0.56184675324675326, 0.39 0.05, 0.5, '1.0/t', 0.0, 97,0.5674079528718704, 0.33 0.05, 0.5, '1.0/t', 0.0, 93,0.55354412015702337, 0.45 0.05, 0.5, '1.0/t', 0.0, 97,0.5693798069055801, 0.3 0.05, 0.5, '1.0/t', 0.0, 100,0.6059214285714285, 0.36 0.05, 0.5, '1.0/t', 0.0, 96,0.56512385762385764, 0.5 0.05, 0.5, '1.0/t', 0.0, 98,0.56905895691609976, 0.28 0.05, 0.5, '1.0/t', 0.0, 96,0.56398118085618087, 0.41 0.05, 0.5, '1.0/t', 0.0, 97,0.563091295874801, 0.37 0.05, 0.5, '1.0/t', 0.0, 95,0.56899316473000683, 0.37 0.05, 0.5, '1.0/t', 0.0, 92,0.5563995545517284, 0.37 0.05, 0.5, '1.0/t', 0.0, 90,0.51202990219656896, 0.41 0.05, 0.5, '1.0/t', 0.0, 98,0.57248763141620285, 0.41 0.05, 0.5, '1.0/t', 0.0, 100,0.54707005772005779, 0.37 0.05, 0.5, '1.0/t', 0.0, 98,0.59901669758812626, 0.3 0.05, 0.5, '1.0/t', 0.0, 98,0.61301020408163265, 0.26 0.05, 0.5, '1.0/t', 0.0, 96,0.60939619408369416, 0.3 0.01, 0.5, '1.0/t', 0.0, 98,0.61360065671290165, 0.19 0.01, 0.5, '1.0/t', 0.0, 100,0.56471428571428572, 0.23 0.01, 0.5, '1.0/t', 0.0, 97,0.57634920634920639, 0.15 0.01, 0.5, '1.0/t', 0.0, 97,0.62080555183647956, 0.17 0.01, 0.5, '1.0/t', 0.0, 99,0.55092767501858408, 0.2 0.01, 0.5, '1.0/t', 0.0, 98,0.59536170745354422, 0.2 0.01, 0.5, '1.0/t', 0.0, 98,0.57323453190800122, 0.2 0.01, 0.5, '1.0/t', 0.0, 98,0.59025105280207324, 0.17 0.01, 0.5, '1.0/t', 0.0, 97,0.58853951890034362, 0.22 0.01, 0.5, '1.0/t', 0.0, 99,0.57385070036585195, 0.26 0.01, 0.5, '1.0/t', 0.0, 99,0.5810591484833908, 0.14 0.01, 0.5, '1.0/t', 0.0, 95,0.59945697577276513, 0.21 0.01, 0.5, '1.0/t', 0.0, 100,0.60340649350649356, 0.21 0.01, 0.5, '1.0/t', 0.0, 97,0.55662084765177555, 0.14 0.01, 0.5, '1.0/t', 0.0, 99,0.60293249959916628, 0.18 0.01, 0.5, '1.0/t', 0.0, 99,0.61575210984301887, 0.18 0.01, 0.5, '1.0/t', 0.0, 100,0.61039365079365071, 0.18 0.01, 0.5, '1.0/t', 0.0, 97,0.55821231460406717, 0.2 0.01, 0.5, '1.0/t', 0.0, 98,0.56171930677032722, 0.15 0.01, 0.5, '1.0/t', 0.0, 97,0.60464839856592434, 0.21 0.01, 0.5, '1.0/t', 0.0, 98,0.56416696115675702, 0.19 0.01, 0.5, '1.0/t', 0.0, 97,0.58117820324005887, 0.18 0.01, 0.5, '1.0/t', 0.0, 99,0.58074955908289239, 0.14 0.01, 0.5, '1.0/t', 0.0, 99,0.57188114915387644, 0.24 0.01, 0.5, '1.0/t', 0.0, 98,0.60229429867184969, 0.17 0.01, 0.5, '1.0/t', 0.0, 100,0.57632171717171721, 0.19 0.01, 0.5, '1.0/t', 0.0, 98,0.58915061695673943, 0.16 0.01, 0.5, '1.0/t', 0.0, 99,0.57351932018598695, 0.19 0.01, 0.5, '1.0/t', 0.0, 100,0.57365476190476195, 0.23 0.01, 0.5, '1.0/t', 0.0, 99,0.58723767254070292, 0.14 0.01, 0.5, '1.0/t', 0.0, 99,0.58668656259565355, 0.26 0.01, 0.5, '1.0/t', 0.0, 100,0.58569747474747469, 0.19 0.01, 0.5, '1.0/t', 0.0, 98,0.55319484936831875, 0.18 0.01, 0.5, '1.0/t', 0.0, 98,0.56665046971169419, 0.21 0.01, 0.5, '1.0/t', 0.0, 99,0.58321709155042478, 0.15 0.01, 0.5, '1.0/t', 0.0, 100,0.57955317460317468, 0.22 0.01, 0.5, '1.0/t', 0.0, 98,0.60939342403628116, 0.19 0.01, 0.5, '1.0/t', 0.0, 100,0.59265995670995675, 0.17 0.01, 0.5, '1.0/t', 0.0, 100,0.56601984126984128, 0.19 0.01, 0.5, '1.0/t', 0.0, 99,0.57780663780663777, 0.19 0.01, 0.5, '1.0/t', 0.0, 98,0.56918367346938781, 0.17 0.01, 0.5, '1.0/t', 0.0, 95,0.57836447178552441, 0.2 0.01, 0.5, '1.0/t', 0.0, 97,0.56490918016691216, 0.2 0.01, 0.5, '1.0/t', 0.0, 99,0.58789321789321791, 0.16 0.01, 0.5, '1.0/t', 0.0, 98,0.5888196100951204, 0.23 0.01, 0.5, '1.0/t', 0.0, 99,0.58594837261503918, 0.19 0.01, 0.5, '1.0/t', 0.0, 98,0.5768328327001796, 0.23 0.01, 0.5, '1.0/t', 0.0, 98,0.56058772859793271, 0.26 0.01, 0.5, '1.0/t', 0.0, 96,0.61278521825396826, 0.21 0.01, 0.5, '1.0/t', 0.0, 100,0.57831349206349214, 0.21 0.05, 0.25, '1.0/t', 0.0, 98,0.6070517860823984, 0.39 0.05, 0.25, '1.0/t', 0.0, 95,0.58806288448393695, 0.28 0.05, 0.25, '1.0/t', 0.0, 97,0.60150466372115852, 0.38 0.05, 0.25, '1.0/t', 0.0, 97,0.58432974814418115, 0.33 0.05, 0.25, '1.0/t', 0.0, 97,0.57156111929307807, 0.43 0.05, 0.25, '1.0/t', 0.0, 100,0.59136861471861468, 0.42 0.05, 0.25, '1.0/t', 0.0, 98,0.55583274435315244, 0.34 0.05, 0.25, '1.0/t', 0.0, 96,0.56730376683501682, 0.3 0.05, 0.25, '1.0/t', 0.0, 98,0.59468820861677985, 0.35 0.05, 0.25, '1.0/t', 0.0, 95,0.54312280701754378, 0.43 0.05, 0.25, '1.0/t', 0.0, 97,0.55542419779533181, 0.44 0.05, 0.25, '1.0/t', 0.0, 92,0.57396221532091107, 0.41 0.05, 0.25, '1.0/t', 0.0, 95,0.5902787271208324, 0.32 0.05, 0.25, '1.0/t', 0.0, 98,0.60390206732043472, 0.36 0.05, 0.25, '1.0/t', 0.0, 98,0.59035213652560592, 0.39 0.05, 0.25, '1.0/t', 0.0, 99,0.55438745317533189, 0.34 0.05, 0.25, '1.0/t', 0.0, 99,0.55442680776014119, 0.34 0.05, 0.25, '1.0/t', 0.0, 99,0.57354147535965716, 0.33 0.05, 0.25, '1.0/t', 0.0, 96,0.57424685846560841, 0.33 0.05, 0.25, '1.0/t', 0.0, 98,0.59241415613864601, 0.39 0.05, 0.25, '1.0/t', 0.0, 98,0.57442500809847752, 0.36 0.05, 0.25, '1.0/t', 0.0, 96,0.5238492063492064, 0.38 0.05, 0.25, '1.0/t', 0.0, 96,0.59295386904761915, 0.41 0.05, 0.25, '1.0/t', 0.0, 96,0.55208987193362191, 0.44 0.05, 0.25, '1.0/t', 0.0, 96,0.5483209325396825, 0.37 0.05, 0.25, '1.0/t', 0.0, 92,0.54144496204278802, 0.37 0.05, 0.25, '1.0/t', 0.0, 100,0.55603910533910539, 0.33 0.05, 0.25, '1.0/t', 0.0, 96,0.58305472883597875, 0.32 0.05, 0.25, '1.0/t', 0.0, 95,0.5787602339181287, 0.31 0.05, 0.25, '1.0/t', 0.0, 99,0.52448671418368387, 0.44 0.05, 0.25, '1.0/t', 0.0, 98,0.57446947610212917, 0.25 0.05, 0.25, '1.0/t', 0.0, 97,0.55437400514720103, 0.39 0.05, 0.25, '1.0/t', 0.0, 96,0.56952689093314091, 0.26 0.05, 0.25, '1.0/t', 0.0, 95,0.60473266499582301, 0.39 0.05, 0.25, '1.0/t', 0.0, 97,0.55838584668481572, 0.37 0.05, 0.25, '1.0/t', 0.0, 99,0.59991181657848325, 0.29 0.05, 0.25, '1.0/t', 0.0, 98,0.58163552433960597, 0.42 0.05, 0.25, '1.0/t', 0.0, 98,0.58535876255264008, 0.32 0.05, 0.25, '1.0/t', 0.0, 99,0.60100820615972117, 0.32 0.05, 0.25, '1.0/t', 0.0, 96,0.54836144179894186, 0.4 0.05, 0.25, '1.0/t', 0.0, 99,0.58814530587257874, 0.28 0.05, 0.25, '1.0/t', 0.0, 99,0.58489687641202792, 0.29 0.05, 0.25, '1.0/t', 0.0, 97,0.55709659183885984, 0.43 0.05, 0.25, '1.0/t', 0.0, 96,0.5956448412698413, 0.36 0.05, 0.25, '1.0/t', 0.0, 97,0.55880007735677839, 0.28 0.05, 0.25, '1.0/t', 0.0, 97,0.55831072135195847, 0.4 0.05, 0.25, '1.0/t', 0.0, 99,0.55836583730523126, 0.26 0.05, 0.25, '1.0/t', 0.0, 100,0.54646868686868688, 0.26 0.05, 0.25, '1.0/t', 0.0, 96,0.57612238455988452, 0.4 0.05, 0.25, '1.0/t', 0.0, 100,0.59010772005772016, 0.29 0.05, 0.01, '1.0/t', 0.0, 99,0.56737825586310442, 0.33 0.05, 0.01, '1.0/t', 0.0, 97,0.56594828996890845, 0.35 0.05, 0.01, '1.0/t', 0.0, 99,0.59318568076143841, 0.31 0.05, 0.01, '1.0/t', 0.0, 98,0.58138933062402454, 0.37 0.05, 0.01, '1.0/t', 0.0, 100,0.55861111111111117, 0.34 0.05, 0.01, '1.0/t', 0.0, 97,0.54545491736213392, 0.35 0.05, 0.01, '1.0/t', 0.0, 96,0.57423881673881672, 0.25 0.05, 0.01, '1.0/t', 0.0, 96,0.5786571067821068, 0.39 0.05, 0.01, '1.0/t', 0.0, 99,0.58893691605812815, 0.36 0.05, 0.01, '1.0/t', 0.0, 98,0.58864247430573968, 0.4 0.05, 0.01, '1.0/t', 0.0, 98,0.58602445740200848, 0.42 0.05, 0.01, '1.0/t', 0.0, 99,0.57885674931129472, 0.32 0.05, 0.01, '1.0/t', 0.0, 97,0.57854442808051054, 0.35 0.05, 0.01, '1.0/t', 0.0, 95,0.56522214627477796, 0.39 0.05, 0.01, '1.0/t', 0.0, 98,0.57893004387902336, 0.42 0.05, 0.01, '1.0/t', 0.0, 96,0.57617807539682542, 0.36 0.05, 0.01, '1.0/t', 0.0, 99,0.56425444925444934, 0.42 0.05, 0.01, '1.0/t', 0.0, 98,0.57308220690873757, 0.32 0.05, 0.01, '1.0/t', 0.0, 99,0.58172803066742462, 0.36 0.05, 0.01, '1.0/t', 0.0, 98,0.58409319138910987, 0.47 0.05, 0.01, '1.0/t', 0.0, 98,0.56927143151632942, 0.39 0.05, 0.01, '1.0/t', 0.0, 98,0.56910276231704804, 0.35 0.05, 0.01, '1.0/t', 0.0, 98,0.57913994169096217, 0.36 0.05, 0.01, '1.0/t', 0.0, 99,0.54682940516273848, 0.29 0.05, 0.01, '1.0/t', 0.0, 97,0.54242431680576009, 0.47 0.05, 0.01, '1.0/t', 0.0, 100,0.53985800865800859, 0.37 0.05, 0.01, '1.0/t', 0.0, 98,0.58775767882910734, 0.37 0.05, 0.01, '1.0/t', 0.0, 100,0.61395974025974032, 0.33 0.05, 0.01, '1.0/t', 0.0, 96,0.62758928571428563, 0.35 0.05, 0.01, '1.0/t', 0.0, 99,0.58266095296398324, 0.43 0.05, 0.01, '1.0/t', 0.0, 98,0.57985179786200192, 0.4 0.05, 0.01, '1.0/t', 0.0, 98,0.52490443796566244, 0.45 0.05, 0.01, '1.0/t', 0.0, 99,0.54206349206349203, 0.41 0.05, 0.01, '1.0/t', 0.0, 98,0.55815943693494707, 0.38 0.05, 0.01, '1.0/t', 0.0, 98,0.56487719763229971, 0.4 0.05, 0.01, '1.0/t', 0.0, 100,0.55405000000000004, 0.28 0.05, 0.01, '1.0/t', 0.0, 99,0.55197202909324128, 0.4 0.05, 0.01, '1.0/t', 0.0, 96,0.53746099386724389, 0.42 0.05, 0.01, '1.0/t', 0.0, 97,0.56061692030764187, 0.42 0.05, 0.01, '1.0/t', 0.0, 97,0.58223575965843999, 0.34 0.05, 0.01, '1.0/t', 0.0, 95,0.56733120680489102, 0.39 0.05, 0.01, '1.0/t', 0.0, 95,0.5742364243943191, 0.38 0.05, 0.01, '1.0/t', 0.0, 99,0.5567349541591966, 0.35 0.05, 0.01, '1.0/t', 0.0, 99,0.55833333333333335, 0.36 0.05, 0.01, '1.0/t', 0.0, 98,0.59581581117295401, 0.32 0.05, 0.01, '1.0/t', 0.0, 98,0.58284661483641076, 0.38 0.05, 0.01, '1.0/t', 0.0, 98,0.5664789292340312, 0.38 0.05, 0.01, '1.0/t', 0.0, 100,0.58341746031746022, 0.4 0.05, 0.01, '1.0/t', 0.0, 100,0.5398405483405484, 0.32 0.05, 0.01, '1.0/t', 0.0, 99,0.57557239057239062, 0.3 0.05, 0.75, '1.0/t', 0.0, 99,0.58616679056072996, 0.3 0.05, 0.75, '1.0/t', 0.0, 91,0.50573783359497648, 0.46 0.05, 0.75, '1.0/t', 0.0, 97,0.57098823284390299, 0.3 0.05, 0.75, '1.0/t', 0.0, 89,0.56407639800898224, 0.38 0.05, 0.75, '1.0/t', 0.0, 93,0.58164230631972558, 0.28 0.05, 0.75, '1.0/t', 0.0, 94,0.55441282122133195, 0.45 0.05, 0.75, '1.0/t', 0.0, 85,0.54536329683388507, 0.33 0.05, 0.75, '1.0/t', 0.0, 93,0.55755162997098473, 0.35 0.05, 0.75, '1.0/t', 0.0, 95,0.59138512949039268, 0.36 0.05, 0.75, '1.0/t', 0.0, 96,0.54059320887445883, 0.3 0.05, 0.75, '1.0/t', 0.0, 96,0.56741018819143818, 0.35 0.05, 0.75, '1.0/t', 0.0, 97,0.53685633953675183, 0.44 0.05, 0.75, '1.0/t', 0.0, 96,0.5367228084415584, 0.42 0.05, 0.75, '1.0/t', 0.0, 97,0.53450804064206126, 0.39 0.05, 0.75, '1.0/t', 0.0, 97,0.57256504663721164, 0.44 0.05, 0.75, '1.0/t', 0.0, 99,0.56712041045374384, 0.38 0.05, 0.75, '1.0/t', 0.0, 97,0.51636705791344972, 0.46 0.05, 0.75, '1.0/t', 0.0, 93,0.5597508107185527, 0.33 0.05, 0.75, '1.0/t', 0.0, 94,0.55639725522704242, 0.49 0.05, 0.75, '1.0/t', 0.0, 99,0.54748516915183576, 0.35 0.05, 0.75, '1.0/t', 0.0, 89,0.53895666131621189, 0.32 0.05, 0.75, '1.0/t', 0.0, 90,0.55768783068783079, 0.43 0.05, 0.75, '1.0/t', 0.0, 96,0.58385664682539684, 0.36 0.05, 0.75, '1.0/t', 0.0, 98,0.59332236357746571, 0.39 0.05, 0.75, '1.0/t', 0.0, 99,0.56878780590901801, 0.33 0.05, 0.75, '1.0/t', 0.0, 96,0.53603851010101, 0.33 0.05, 0.75, '1.0/t', 0.0, 96,0.5683151455026455, 0.43 0.05, 0.75, '1.0/t', 0.0, 90,0.54542448292448298, 0.58 0.05, 0.75, '1.0/t', 0.0, 96,0.59079966329966327, 0.36 0.05, 0.75, '1.0/t', 0.0, 96,0.57777206589706587, 0.35 0.05, 0.75, '1.0/t', 0.0, 93,0.56701298701298708, 0.39 0.05, 0.75, '1.0/t', 0.0, 91,0.59547182975754398, 0.41 0.05, 0.75, '1.0/t', 0.0, 96,0.55584332912457912, 0.39 0.05, 0.75, '1.0/t', 0.0, 87,0.50667827702310464, 0.41 0.05, 0.75, '1.0/t', 0.0, 93,0.51781548200903038, 0.38 0.05, 0.75, '1.0/t', 0.0, 99,0.55238729284183818, 0.34 0.05, 0.75, '1.0/t', 0.0, 91,0.49751090179661611, 0.49 0.05, 0.75, '1.0/t', 0.0, 98,0.55501604970992724, 0.31 0.05, 0.75, '1.0/t', 0.0, 96,0.55411120129870139, 0.28 0.05, 0.75, '1.0/t', 0.0, 91,0.57319989534275251, 0.56 0.05, 0.75, '1.0/t', 0.0, 97,0.59374875410957884, 0.37 0.05, 0.75, '1.0/t', 0.0, 88,0.55619195198740656, 0.44 0.05, 0.75, '1.0/t', 0.0, 96,0.58079545454545445, 0.32 0.05, 0.75, '1.0/t', 0.0, 92,0.51976315954576824, 0.37 0.05, 0.75, '1.0/t', 0.0, 97,0.59360988381606938, 0.25 0.05, 0.75, '1.0/t', 0.0, 87,0.55591133004926097, 0.46 0.05, 0.75, '1.0/t', 0.0, 93,0.55664478890285329, 0.36 0.05, 0.75, '1.0/t', 0.0, 93,0.56095075175720344, 0.43 0.05, 0.75, '1.0/t', 0.0, 87,0.54442163838715552, 0.38 0.05, 0.75, '1.0/t', 0.0, 93,0.57524181911278682, 0.33 0.05, 0.99, '1.0/t', 0.0, 80,0.50912896825396825, 0.36 0.05, 0.99, '1.0/t', 0.0, 77,0.55157362118401077, 0.4 0.05, 0.99, '1.0/t', 0.0, 87,0.54723565706324317, 0.43 0.05, 0.99, '1.0/t', 0.0, 59,0.51582299997554237, 0.44 0.05, 0.99, '1.0/t', 0.0, 91,0.57804005518291235, 0.36 0.05, 0.99, '1.0/t', 0.0, 78,0.50091371591371603, 0.74 0.05, 0.99, '1.0/t', 0.0, 51,0.50962736609795434, 0.45 0.05, 0.99, '1.0/t', 0.0, 68,0.56596458280281814, 0.47 0.05, 0.99, '1.0/t', 0.0, 66,0.48699254449254459, 0.46 0.05, 0.99, '1.0/t', 0.0, 81,0.59113480483850855, 0.27 0.05, 0.99, '1.0/t', 0.0, 65,0.50669719169719163, 0.85 0.05, 0.99, '1.0/t', 0.0, 70,0.52173582766439919, 0.66 0.05, 0.99, '1.0/t', 0.0, 83,0.51568551261322337, 0.65 0.05, 0.99, '1.0/t', 0.0, 54,0.56346707818930042, 0.44 0.05, 0.99, '1.0/t', 0.0, 88,0.54500762495080679, 0.52 0.05, 0.99, '1.0/t', 0.0, 91,0.51966335252049534, 1.05 0.05, 0.99, '1.0/t', 0.0, 69,0.56942834138486309, 0.45 0.05, 0.99, '1.0/t', 0.0, 78,0.56432141932141922, 0.75 0.05, 0.99, '1.0/t', 0.0, 82,0.52556523422377077, 0.56 0.05, 0.99, '1.0/t', 0.0, 72,0.52746693121693111, 0.53 0.05, 0.99, '1.0/t', 0.0, 74,0.5761529386529386, 0.99 0.05, 0.99, '1.0/t', 0.0, 88,0.55093975468975465, 0.36 0.05, 0.99, '1.0/t', 0.0, 61,0.51642348543987893, 1.08 0.05, 0.99, '1.0/t', 0.0, 78,0.49569088319088322, 0.45 0.05, 0.99, '1.0/t', 0.0, 69,0.57887508626639061, 1.52 0.05, 0.99, '1.0/t', 0.0, 79,0.53469304254114369, 2.68 0.05, 0.99, '1.0/t', 0.0, 95,0.55745454545454554, 0.35 0.05, 0.99, '1.0/t', 0.0, 73,0.52150052382929091, 0.58 0.05, 0.99, '1.0/t', 0.0, 69,0.55982757178409348, 0.58 0.05, 0.99, '1.0/t', 0.0, 92,0.5839977413890457, 0.88 0.05, 0.99, '1.0/t', 0.0, 52,0.54079115329115335, 0.64 0.05, 0.99, '1.0/t', 0.0, 79,0.57804482437393834, 0.43 0.05, 0.99, '1.0/t', 0.0, 69,0.52897829223916193, 0.56 0.05, 0.99, '1.0/t', 0.0, 68,0.54657212885154072, 0.43 0.05, 0.99, '1.0/t', 0.0, 94,0.51777562862669246, 0.61 0.05, 0.99, '1.0/t', 0.0, 85,0.61651914098972926, 0.31 0.05, 0.99, '1.0/t', 0.0, 95,0.58836272499430398, 0.34 0.05, 0.99, '1.0/t', 0.0, 26,0.51537240537240536, 0.7 0.05, 0.99, '1.0/t', 0.0, 53,0.51407157831686134, 0.48 0.05, 0.99, '1.0/t', 0.0, 36,0.56081790123456798, 0.46 0.05, 0.99, '1.0/t', 0.0, 96,0.52731120731120729, 0.55 0.05, 0.99, '1.0/t', 0.0, 66,0.53235690235690236, 0.48 0.05, 0.99, '1.0/t', 0.0, 92,0.57372843340234658, 0.31 0.05, 0.99, '1.0/t', 0.0, 77,0.46787260358688926, 0.41 0.05, 0.99, '1.0/t', 0.0, 74,0.51127052377052384, 0.45 0.05, 0.99, '1.0/t', 0.0, 92,0.54404056088838704, 0.57 0.05, 0.99, '1.0/t', 0.0, 94,0.52769587977034782, 0.31 0.05, 0.99, '1.0/t', 0.0, 90,0.52730864197530869, 0.82 0.05, 0.99, '1.0/t', 0.0, 68,0.49498132586367888, 0.68 0.05, 0.99, '1.0/t', 0.0, 91,0.58817373103087389, 0.3 0.05, 0.5, '1.0/(t**0.5)', 0.0, 92,0.5574076949620429, 0.31 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.59810515873015868, 0.45 0.05, 0.5, '1.0/(t**0.5)', 0.0, 95,0.5551310093415357, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.58643350413758577, 0.35 0.05, 0.5, '1.0/(t**0.5)', 0.0, 99,0.59581668051365022, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.5553361300783981, 0.38 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.56893041199163641, 0.28 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.55915886267927084, 0.33 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.56292989417989414, 0.35 0.05, 0.5, '1.0/(t**0.5)', 0.0, 95,0.5724079896711477, 0.44 0.05, 0.5, '1.0/(t**0.5)', 0.0, 93,0.56018859873698579, 0.42 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.56769605677768942, 0.31 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.55913219083322174, 0.24 0.05, 0.5, '1.0/(t**0.5)', 0.0, 99,0.61759193668284573, 0.41 0.05, 0.5, '1.0/(t**0.5)', 0.0, 95,0.54314938862307294, 0.31 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.56738132428854082, 0.47 0.05, 0.5, '1.0/(t**0.5)', 0.0, 99,0.53948022796507644, 0.38 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.5524929353054352, 0.32 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.58841418604305196, 0.3 0.05, 0.5, '1.0/(t**0.5)', 0.0, 99,0.5862121212121213, 0.36 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.56318568602073749, 0.44 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.58074547558922551, 0.33 0.05, 0.5, '1.0/(t**0.5)', 0.0, 100,0.56037619047619047, 0.34 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.56655979437229442, 0.32 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.58959938114577293, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.58411872777852158, 0.28 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.57884371993746997, 0.27 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.58938026094276086, 0.38 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.58289723449517261, 0.36 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.58083581349206348, 0.42 0.05, 0.5, '1.0/(t**0.5)', 0.0, 94,0.52852790826195095, 0.39 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.56203538359788363, 0.36 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.5677465618281945, 0.42 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.57630878758429771, 0.38 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.55296647230320695, 0.35 0.05, 0.5, '1.0/(t**0.5)', 0.0, 93,0.60778336358981522, 0.47 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.56641086862736356, 0.31 0.05, 0.5, '1.0/(t**0.5)', 0.0, 99,0.56733365400032054, 0.34 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.51857142857142857, 0.46 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.60365042174320516, 0.27 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.54969830856428803, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.57752086401570935, 0.31 0.05, 0.5, '1.0/(t**0.5)', 0.0, 96,0.58887686387686389, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 100,0.56803730158730159, 0.34 0.05, 0.5, '1.0/(t**0.5)', 0.0, 93,0.5797812999425902, 0.39 0.05, 0.5, '1.0/(t**0.5)', 0.0, 97,0.54769268532155124, 0.5 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.56524148187413492, 0.38 0.05, 0.5, '1.0/(t**0.5)', 0.0, 98,0.56818675089083248, 0.26 0.05, 0.5, '1.0/(t**0.5)', 0.0, 91,0.57345249988107116, 0.37 0.05, 0.5, '1.0/(t**0.5)', 0.0, 95,0.53992648287385137, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.58070294784580501, 0.31 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.57127963306534735, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.58453463203463196, 0.33 0.05, 0.25, '1.0/(t**0.5)', 0.0, 100,0.5690135642135643, 0.32 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.56966927572988191, 0.4 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.58310575998075997, 0.34 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.58837279500544803, 0.28 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.57551917989417989, 0.24 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.5553405629163205, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 97,0.60287387869862097, 0.32 0.05, 0.25, '1.0/(t**0.5)', 0.0, 97,0.55405624730366998, 0.5 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.60453190800129575, 0.3 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.57647013287638293, 0.44 0.05, 0.25, '1.0/(t**0.5)', 0.0, 95,0.56955054302422725, 0.43 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.57017963895514912, 0.28 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.58457983626350973, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.56773405046132319, 0.39 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.58427938274877045, 0.37 0.05, 0.25, '1.0/(t**0.5)', 0.0, 94,0.53229222314328695, 0.44 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.56882154882154878, 0.35 0.05, 0.25, '1.0/(t**0.5)', 0.0, 97,0.58995685871974535, 0.27 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.56826606842231842, 0.34 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.54290816326530611, 0.39 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.57240723562152129, 0.33 0.05, 0.25, '1.0/(t**0.5)', 0.0, 94,0.5696688004666729, 0.3 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.60778182701652084, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.55359088722725092, 0.47 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.58494227994227987, 0.3 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.5968855218855218, 0.4 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.55425471920369873, 0.45 0.05, 0.25, '1.0/(t**0.5)', 0.0, 100,0.58835634920634927, 0.31 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.53944437082192187, 0.42 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.5385546664334544, 0.38 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.56905543530543534, 0.36 0.05, 0.25, '1.0/(t**0.5)', 0.0, 95,0.5475574542416648, 0.3 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.56847903230556296, 0.33 0.05, 0.25, '1.0/(t**0.5)', 0.0, 97,0.57328424153166413, 0.4 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.54731388226286182, 0.45 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.55791265423918479, 0.39 0.05, 0.25, '1.0/(t**0.5)', 0.0, 100,0.57011479076479077, 0.37 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.59469233147804568, 0.39 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.55391178549341813, 0.33 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.56981616456106254, 0.35 0.05, 0.25, '1.0/(t**0.5)', 0.0, 96,0.59603670634920636, 0.41 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.57791602897663497, 0.41 0.05, 0.25, '1.0/(t**0.5)', 0.0, 98,0.55406668728097308, 0.29 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.5430814639905549, 0.44 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.59653278819945488, 0.42 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.60999037999037986, 0.3 0.05, 0.25, '1.0/(t**0.5)', 0.0, 99,0.58082112612415648, 0.32 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.58474667308000638, 0.37 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.55344661638476078, 0.36 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.55894467502714928, 0.52 0.05, 0.01, '1.0/(t**0.5)', 0.0, 95,0.59125541125541126, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 100,0.57079740259740253, 0.27 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.59571183112420223, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.53402036235369554, 0.34 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.56760248255146206, 0.34 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.59856107977320105, 0.4 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.60095485883364663, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.59521436753395507, 0.37 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.54843233513336598, 0.42 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.5252080691474631, 0.45 0.05, 0.01, '1.0/(t**0.5)', 0.0, 96,0.5679918981481481, 0.34 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.57773566569484935, 0.26 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.59003097351582201, 0.37 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.5762651294283947, 0.43 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.55644365735274826, 0.37 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.55098771217327913, 0.31 0.05, 0.01, '1.0/(t**0.5)', 0.0, 100,0.57910108225108214, 0.38 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.59470954017345767, 0.41 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.59891649733486463, 0.36 0.05, 0.01, '1.0/(t**0.5)', 0.0, 100,0.56212857142857142, 0.4 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.57850796595694554, 0.44 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.55065678652413341, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.58660768212314607, 0.36 0.05, 0.01, '1.0/(t**0.5)', 0.0, 100,0.55755476190476183, 0.3 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.5588026731966127, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.56940962099125358, 0.31 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.58978134110787173, 0.36 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.54656275568646695, 0.41 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.58413157549521189, 0.45 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.53229749631811496, 0.4 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.57426222870100418, 0.31 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.57647974591273554, 0.35 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.58970265424810875, 0.31 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.58822051685688059, 0.34 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.55587787495950769, 0.44 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.5934403923797863, 0.36 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.5527233707335748, 0.47 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.55684240362811799, 0.4 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.54167145213063583, 0.37 0.05, 0.01, '1.0/(t**0.5)', 0.0, 97,0.59557861382603638, 0.29 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.55821156168094954, 0.48 0.05, 0.01, '1.0/(t**0.5)', 0.0, 96,0.57153604497354493, 0.31 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.58295254128587459, 0.33 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.58906469947286277, 0.33 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.56092933710280646, 0.46 0.05, 0.01, '1.0/(t**0.5)', 0.0, 99,0.56959195125861795, 0.38 0.05, 0.01, '1.0/(t**0.5)', 0.0, 98,0.55275208351738958, 0.37 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.56075967043708974, 0.48 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.55841008872923781, 0.26 0.05, 0.75, '1.0/(t**0.5)', 0.0, 98,0.58881040727979517, 0.21 0.05, 0.75, '1.0/(t**0.5)', 0.0, 97,0.54807314678448704, 0.41 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.54938812083973376, 0.36 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.53975020885547198, 0.34 0.05, 0.75, '1.0/(t**0.5)', 0.0, 97,0.55045737195221733, 0.34 0.05, 0.75, '1.0/(t**0.5)', 0.0, 96,0.52841269841269833, 0.36 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.59171003265740107, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.55202594299368501, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.56782735185960997, 0.49 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.5478494623655914, 0.3 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.51792944809073849, 0.43 0.05, 0.75, '1.0/(t**0.5)', 0.0, 92,0.53787612146307784, 0.31 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.57253383458646623, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 89,0.54752314477033581, 0.6 0.05, 0.75, '1.0/(t**0.5)', 0.0, 88,0.55726100288600289, 0.47 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.53921202910564614, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 85,0.51021288515406182, 0.45 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.53466312056737597, 0.49 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.53811626907371601, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 90,0.50802388969055645, 0.43 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.55188045872256397, 0.35 0.05, 0.75, '1.0/(t**0.5)', 0.0, 91,0.52332984475841615, 0.44 0.05, 0.75, '1.0/(t**0.5)', 0.0, 96,0.58322758838383837, 0.31 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.53529004329004315, 0.36 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.57612670483638229, 0.38 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.55956983367509694, 0.34 0.05, 0.75, '1.0/(t**0.5)', 0.0, 100,0.54384047619047626, 0.32 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.55963893931635855, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 82,0.57300909794812238, 0.42 0.05, 0.75, '1.0/(t**0.5)', 0.0, 84,0.57845993953136809, 0.51 0.05, 0.75, '1.0/(t**0.5)', 0.0, 98,0.55137578407986565, 0.31 0.05, 0.75, '1.0/(t**0.5)', 0.0, 92,0.61185786435786438, 0.3 0.05, 0.75, '1.0/(t**0.5)', 0.0, 98,0.57762633624878523, 0.34 0.05, 0.75, '1.0/(t**0.5)', 0.0, 88,0.53168101469237827, 0.41 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.55466841668969324, 0.37 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.55816541353383464, 0.4 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.52878772689299003, 0.48 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.55240073546525159, 0.32 0.05, 0.75, '1.0/(t**0.5)', 0.0, 94,0.55072480120352474, 0.37 0.05, 0.75, '1.0/(t**0.5)', 0.0, 93,0.59605137395459973, 0.29 0.05, 0.75, '1.0/(t**0.5)', 0.0, 96,0.52658422017797024, 0.44 0.05, 0.75, '1.0/(t**0.5)', 0.0, 97,0.4879919221671799, 0.46 0.05, 0.75, '1.0/(t**0.5)', 0.0, 99,0.5935204862477591, 0.38 0.05, 0.75, '1.0/(t**0.5)', 0.0, 97,0.56699974710283985, 0.27 0.05, 0.75, '1.0/(t**0.5)', 0.0, 95,0.60085266195792519, 0.28 0.05, 0.75, '1.0/(t**0.5)', 0.0, 99,0.56528779862113199, 0.4 0.05, 0.75, '1.0/(t**0.5)', 0.0, 92,0.53821169772256727, 0.53 0.05, 0.75, '1.0/(t**0.5)', 0.0, 98,0.57233839856288837, 0.41 0.05, 0.2, '1.0/(t**0.5)', 0.0, 100,0.59637705627705628, 0.37 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.55296893749525333, 0.41 0.05, 0.2, '1.0/(t**0.5)', 0.0, 100,0.611951443001443, 0.25 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.5424060189524107, 0.47 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.53336491739552971, 0.42 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.55595434868162141, 0.38 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.59271314333814329, 0.41 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.57187766881644431, 0.39 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.58673265392015395, 0.38 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.5715144152899253, 0.35 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.54754373177842564, 0.46 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.58341307814992016, 0.34 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.58637497423211715, 0.31 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.59156223893065984, 0.41 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.58535083883568728, 0.4 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.58974643340622723, 0.31 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.56730986557302343, 0.43 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.6047975380628442, 0.32 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.59797506085384877, 0.31 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.56455186788520129, 0.42 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.58430638227513221, 0.41 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.53233871452621451, 0.32 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.57723930264746581, 0.29 0.05, 0.2, '1.0/(t**0.5)', 0.0, 100,0.59487409812409819, 0.3 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.57526621145177836, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.56536443148688054, 0.36 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.60363047383455548, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.53125261359955245, 0.38 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.58192560525893866, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.57166254380540094, 0.37 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.56802979287827782, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.5804160654160655, 0.37 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.59958954625621286, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.60313575874181935, 0.24 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.57985438803620626, 0.35 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.58960332649806346, 0.36 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.56180323644609353, 0.25 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.5812739322533137, 0.33 0.05, 0.2, '1.0/(t**0.5)', 0.0, 95,0.57833583959899748, 0.35 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.56973462301587297, 0.42 0.05, 0.2, '1.0/(t**0.5)', 0.0, 98,0.60344126395146791, 0.29 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.54815201072776831, 0.47 0.05, 0.2, '1.0/(t**0.5)', 0.0, 96,0.5760894660894661, 0.3 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.58162658329325001, 0.32 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.59154720994927179, 0.34 0.05, 0.2, '1.0/(t**0.5)', 0.0, 100,0.55910396825396813, 0.38 0.05, 0.2, '1.0/(t**0.5)', 0.0, 100,0.57857489177489185, 0.44 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.58335512411269985, 0.26 0.05, 0.2, '1.0/(t**0.5)', 0.0, 97,0.59488217967599399, 0.35 0.05, 0.2, '1.0/(t**0.5)', 0.0, 99,0.55651158045097437, 0.4 0.05, 0.99, '1.0/(t**0.5)', 0.0, 77,0.50013998988024966, 0.57 0.05, 0.99, '1.0/(t**0.5)', 0.0, 59,0.51317998385795005, 0.59 0.05, 0.99, '1.0/(t**0.5)', 0.0, 48,0.47663690476190473, 0.8 0.05, 0.99, '1.0/(t**0.5)', 0.0, 84,0.53121220710506423, 0.59 0.05, 0.99, '1.0/(t**0.5)', 0.0, 77,0.53125016397743663, 0.5 0.05, 0.99, '1.0/(t**0.5)', 0.0, 65,0.54707703407703412, 0.39 0.05, 0.99, '1.0/(t**0.5)', 0.0, 80,0.55038311688311681, 0.78 0.05, 0.99, '1.0/(t**0.5)', 0.0, 73,0.53362371266480857, 0.76 0.05, 0.99, '1.0/(t**0.5)', 0.0, 78,0.55979881229881234, 0.41 0.05, 0.99, '1.0/(t**0.5)', 0.0, 57,0.52429267613478148, 0.65 0.05, 0.99, '1.0/(t**0.5)', 0.0, 78,0.52337606837606832, 1.43 0.05, 0.99, '1.0/(t**0.5)', 0.0, 80,0.50826091269841278, 1.1 0.05, 0.99, '1.0/(t**0.5)', 0.0, 70,0.51055328798185939, 1.83 0.05, 0.99, '1.0/(t**0.5)', 0.0, 56,0.56222479901051337, 0.33 0.05, 0.99, '1.0/(t**0.5)', 0.0, 81,0.52480172091283206, 0.63 0.05, 0.99, '1.0/(t**0.5)', 0.0, 76,0.53565580618212205, 0.68 0.05, 0.99, '1.0/(t**0.5)', 0.0, 63,0.56630133534895433, 0.91 0.05, 0.99, '1.0/(t**0.5)', 0.0, 65,0.55149106449106444, 1.27 0.05, 0.99, '1.0/(t**0.5)', 0.0, 70,0.50446371882086172, 0.65 0.05, 0.99, '1.0/(t**0.5)', 0.0, 78,0.51583240833240829, 0.8 0.05, 0.99, '1.0/(t**0.5)', 0.0, 60,0.51049735449735456, 1.02 0.05, 0.99, '1.0/(t**0.5)', 0.0, 92,0.54468214756258237, 0.39 0.05, 0.99, '1.0/(t**0.5)', 0.0, 75,0.53504656084656077, 0.88 0.05, 0.99, '1.0/(t**0.5)', 0.0, 64,0.53187522546897559, 0.85 0.05, 0.99, '1.0/(t**0.5)', 0.0, 75,0.5712858104858104, 0.83 0.05, 0.99, '1.0/(t**0.5)', 0.0, 76,0.498950121515911, 0.64 0.05, 0.99, '1.0/(t**0.5)', 0.0, 55,0.49809379509379514, 0.43 0.05, 0.99, '1.0/(t**0.5)', 0.0, 70,0.53042517006802725, 1.15 0.05, 0.99, '1.0/(t**0.5)', 0.0, 61,0.55552172781680975, 0.69 0.05, 0.99, '1.0/(t**0.5)', 0.0, 64,0.53607131583694079, 0.75 0.05, 0.99, '1.0/(t**0.5)', 0.0, 69,0.55525649873475968, 0.7 0.05, 0.99, '1.0/(t**0.5)', 0.0, 76,0.54207744740639485, 0.43 0.05, 0.99, '1.0/(t**0.5)', 0.0, 72,0.54577160493827159, 0.91 0.05, 0.99, '1.0/(t**0.5)', 0.0, 75,0.54035873015873015, 0.61 0.05, 0.99, '1.0/(t**0.5)', 0.0, 67,0.52883795309168435, 0.61 0.05, 0.99, '1.0/(t**0.5)', 0.0, 53,0.45367026055705301, 0.45 0.05, 0.99, '1.0/(t**0.5)', 0.0, 64,0.5927442956349207, 0.86 0.05, 0.99, '1.0/(t**0.5)', 0.0, 85,0.53207749766573287, 0.4 0.05, 0.99, '1.0/(t**0.5)', 0.0, 42,0.47736566343709202, 0.75 0.05, 0.99, '1.0/(t**0.5)', 0.0, 58,0.51207580733442803, 0.74 0.05, 0.99, '1.0/(t**0.5)', 0.0, 75,0.55659894179894187, 0.5 0.05, 0.99, '1.0/(t**0.5)', 0.0, 72,0.55344907407407407, 0.54 0.05, 0.99, '1.0/(t**0.5)', 0.0, 74,0.52948841698841698, 0.67 0.05, 0.99, '1.0/(t**0.5)', 0.0, 81,0.55571098997024915, 0.34 0.05, 0.99, '1.0/(t**0.5)', 0.0, 71,0.53469585187895041, 0.66 0.05, 0.99, '1.0/(t**0.5)', 0.0, 63,0.56009402414164333, 0.44 0.05, 0.99, '1.0/(t**0.5)', 0.0, 62,0.58864776800260676, 0.72 0.05, 0.99, '1.0/(t**0.5)', 0.0, 89,0.50408863920099878, 0.72 0.05, 0.99, '1.0/(t**0.5)', 0.0, 45,0.4564973544973544, 0.35 0.05, 0.99, '1.0/(t**0.5)', 0.0, 80,0.55930068542568534, 0.44 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.55946470476773513, 0.31 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.57363073593073599, 0.32 0.05, 0.1, '1.0/(t**0.5)', 0.0, 96,0.57286503427128432, 0.29 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.55362696226332586, 0.34 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.52889720823394304, 0.44 0.05, 0.1, '1.0/(t**0.5)', 0.0, 96,0.55307171416546419, 0.38 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.54728103546285367, 0.41 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.5730622239713149, 0.42 0.05, 0.1, '1.0/(t**0.5)', 0.0, 95,0.57573266499582276, 0.28 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.58230091786792815, 0.3 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.57180883175781139, 0.34 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.57425413022351801, 0.38 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.5351238816738817, 0.39 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.59109476691109342, 0.39 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.57376452299132708, 0.32 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.54850924562264769, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.62140838398414155, 0.38 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.5619023569023569, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 94,0.59769480519480522, 0.34 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.54332050665383991, 0.42 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.56964802665833592, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.57391477365704169, 0.37 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.5816489177489178, 0.42 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.54850367965367963, 0.33 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.57241111111111098, 0.35 0.05, 0.1, '1.0/(t**0.5)', 0.0, 94,0.60104433391667444, 0.35 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.56291565656565667, 0.35 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.56715448950142833, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.56687266248490731, 0.27 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.56232102364755421, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.58500198780811019, 0.37 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.55573276496745883, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.57162657502863701, 0.33 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.53041707159054097, 0.41 0.05, 0.1, '1.0/(t**0.5)', 0.0, 95,0.55506068200805048, 0.41 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.59479024943310654, 0.39 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.58577539682539681, 0.37 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.55232665387304569, 0.26 0.05, 0.1, '1.0/(t**0.5)', 0.0, 100,0.53541320346320354, 0.33 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.58669326745084316, 0.36 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.59507561033071243, 0.33 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.58508427425953202, 0.33 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.569542776810818, 0.45 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.54446638395617986, 0.38 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.58886483886483887, 0.36 0.05, 0.1, '1.0/(t**0.5)', 0.0, 97,0.54004663721158574, 0.32 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.56703919663103342, 0.4 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.5336960514233241, 0.38 0.05, 0.1, '1.0/(t**0.5)', 0.0, 99,0.59562049062049072, 0.37 0.05, 0.1, '1.0/(t**0.5)', 0.0, 98,0.59440645522278179, 0.35 0.05, 0.1, '1.0/t', 0.0, 97,0.56499114859939603, 0.42 0.05, 0.1, '1.0/t', 0.0, 99,0.54700883291792379, 0.35 0.05, 0.1, '1.0/t', 0.0, 100,0.61034126984126991, 0.23 0.05, 0.1, '1.0/t', 0.0, 98,0.5288079777365492, 0.41 0.05, 0.1, '1.0/t', 0.0, 97,0.57613721902381698, 0.46 0.05, 0.1, '1.0/t', 0.0, 99,0.58016171819202123, 0.39 0.05, 0.1, '1.0/t', 0.0, 97,0.58268309010577046, 0.35 0.05, 0.1, '1.0/t', 0.0, 98,0.58959102688694531, 0.35 0.05, 0.1, '1.0/t', 0.0, 100,0.56510649350649333, 0.27 0.05, 0.1, '1.0/t', 0.0, 99,0.58792579474397655, 0.32 0.05, 0.1, '1.0/t', 0.0, 100,0.52842301587301599, 0.33 0.05, 0.1, '1.0/t', 0.0, 96,0.57222921176046171, 0.41 0.05, 0.1, '1.0/t', 0.0, 99,0.56742147302753365, 0.37 0.05, 0.1, '1.0/t', 0.0, 98,0.59801138204199433, 0.36 0.05, 0.1, '1.0/t', 0.0, 100,0.56654841269841283, 0.45 0.05, 0.1, '1.0/t', 0.0, 98,0.54276886945254288, 0.39 0.05, 0.1, '1.0/t', 0.0, 99,0.56098546795516491, 0.4 0.05, 0.1, '1.0/t', 0.0, 97,0.60671203939245189, 0.28 0.05, 0.1, '1.0/t', 0.0, 100,0.5944184704184704, 0.22 0.05, 0.1, '1.0/t', 0.0, 97,0.57233676975945025, 0.31 0.05, 0.1, '1.0/t', 0.0, 99,0.58577229728744873, 0.31 0.05, 0.1, '1.0/t', 0.0, 98,0.58060819565921606, 0.38 0.05, 0.1, '1.0/t', 0.0, 98,0.56420229996760607, 0.35 0.05, 0.1, '1.0/t', 0.0, 97,0.5767978756638551, 0.36 0.05, 0.1, '1.0/t', 0.0, 97,0.6010104729176895, 0.29 0.05, 0.1, '1.0/t', 0.0, 99,0.56880770183800478, 0.35 0.05, 0.1, '1.0/t', 0.0, 98,0.59386488794652059, 0.32 0.05, 0.1, '1.0/t', 0.0, 99,0.55266146311600861, 0.51 0.05, 0.1, '1.0/t', 0.0, 98,0.59012736696410162, 0.26 0.05, 0.1, '1.0/t', 0.0, 99,0.51935429329368721, 0.32 0.05, 0.1, '1.0/t', 0.0, 97,0.57640811651120927, 0.41 0.05, 0.1, '1.0/t', 0.0, 99,0.5845159386068477, 0.46 0.05, 0.1, '1.0/t', 0.0, 98,0.557357172306152, 0.33 0.05, 0.1, '1.0/t', 0.0, 97,0.576211005489356, 0.36 0.05, 0.1, '1.0/t', 0.0, 98,0.59817062755838257, 0.34 0.05, 0.1, '1.0/t', 0.0, 98,0.5707571340224401, 0.37 0.05, 0.1, '1.0/t', 0.0, 97,0.5775207152526739, 0.32 0.05, 0.1, '1.0/t', 0.0, 98,0.55930051241275736, 0.43 0.05, 0.1, '1.0/t', 0.0, 96,0.6054166666666666, 0.31 0.05, 0.1, '1.0/t', 0.0, 98,0.56725807639072945, 0.43 0.05, 0.1, '1.0/t', 0.0, 98,0.60329365079365072, 0.34 0.05, 0.1, '1.0/t', 0.0, 98,0.56938282239302651, 0.44 0.05, 0.1, '1.0/t', 0.0, 98,0.56151669758812617, 0.32 0.05, 0.1, '1.0/t', 0.0, 98,0.60467355773478215, 0.26 0.05, 0.1, '1.0/t', 0.0, 97,0.58609325954686775, 0.35 0.05, 0.1, '1.0/t', 0.0, 98,0.57852688694525434, 0.35 0.05, 0.1, '1.0/t', 0.0, 96,0.59235261844636844, 0.41 0.05, 0.1, '1.0/t', 0.0, 99,0.57551838733656913, 0.36 0.05, 0.1, '1.0/t', 0.0, 99,0.56055796055796059, 0.43 0.05, 0.1, '1.0/t', 0.0, 98,0.55462886886356277, 0.48 0.05, 0.2, '1.0/t', 0.0, 98,0.55557366669611574, 0.4 0.05, 0.2, '1.0/t', 0.0, 98,0.58498395029007266, 0.33 0.05, 0.2, '1.0/t', 0.0, 97,0.55179408220645332, 0.3 0.05, 0.2, '1.0/t', 0.0, 94,0.58766993644653231, 0.47 0.05, 0.2, '1.0/t', 0.0, 95,0.55791835649730392, 0.39 0.05, 0.2, '1.0/t', 0.0, 99,0.57723883860247494, 0.36 0.05, 0.2, '1.0/t', 0.0, 97,0.60125979976495436, 0.32 0.05, 0.2, '1.0/t', 0.0, 98,0.52919633654327536, 0.36 0.05, 0.2, '1.0/t', 0.0, 95,0.54543722943722939, 0.45 0.05, 0.2, '1.0/t', 0.0, 96,0.56131380772005768, 0.47 0.05, 0.2, '1.0/t', 0.0, 72,0.54691358024691361, 0.5 0.05, 0.2, '1.0/t', 0.0, 96,0.57774252946127946, 0.43 0.05, 0.2, '1.0/t', 0.0, 99,0.5578533531563834, 0.42 0.05, 0.2, '1.0/t', 0.0, 100,0.55982936507936509, 0.39 0.05, 0.2, '1.0/t', 0.0, 96,0.55812800625300618, 0.43 0.05, 0.2, '1.0/t', 0.0, 100,0.56697301587301585, 0.35 0.05, 0.2, '1.0/t', 0.0, 98,0.56373479694908268, 0.36 0.05, 0.2, '1.0/t', 0.0, 99,0.56718877082513453, 0.38 0.05, 0.2, '1.0/t', 0.0, 98,0.57760689990281822, 0.49 0.05, 0.2, '1.0/t', 0.0, 99,0.59087243284212976, 0.34 0.05, 0.2, '1.0/t', 0.0, 98,0.5507456489089142, 0.32 0.05, 0.2, '1.0/t', 0.0, 97,0.57581090730575257, 0.42 0.05, 0.2, '1.0/t', 0.0, 97,0.56197185403370964, 0.33 0.05, 0.2, '1.0/t', 0.0, 96,0.59925625300625296, 0.37 0.05, 0.2, '1.0/t', 0.0, 99,0.5765488944276822, 0.34 0.05, 0.2, '1.0/t', 0.0, 98,0.56050129575639773, 0.36 0.05, 0.2, '1.0/t', 0.0, 98,0.5220203492652471, 0.35 0.05, 0.2, '1.0/t', 0.0, 99,0.5652429052429051, 0.37 0.05, 0.2, '1.0/t', 0.0, 97,0.55079536156855746, 0.44 0.05, 0.2, '1.0/t', 0.0, 97,0.55089919816723942, 0.35 0.05, 0.2, '1.0/t', 0.0, 97,0.5705380758989006, 0.48 0.05, 0.2, '1.0/t', 0.0, 98,0.53007266542980824, 0.43 0.05, 0.2, '1.0/t', 0.0, 99,0.56853775853775856, 0.5 0.05, 0.2, '1.0/t', 0.0, 99,0.61003804276531548, 0.38 0.05, 0.2, '1.0/t', 0.0, 98,0.56112745531112873, 0.38 0.05, 0.2, '1.0/t', 0.0, 96,0.55880539021164022, 0.4 0.05, 0.2, '1.0/t', 0.0, 96,0.58448352573352569, 0.36 0.05, 0.2, '1.0/t', 0.0, 96,0.55781197390572379, 0.42 0.05, 0.2, '1.0/t', 0.0, 98,0.55795270489148041, 0.45 0.05, 0.2, '1.0/t', 0.0, 95,0.54642105263157903, 0.34 0.05, 0.2, '1.0/t', 0.0, 98,0.5895176988544335, 0.42 0.05, 0.2, '1.0/t', 0.0, 99,0.56619448452781784, 0.37 0.05, 0.2, '1.0/t', 0.0, 99,0.60088598831023077, 0.26 0.05, 0.2, '1.0/t', 0.0, 98,0.60668168566127756, 0.36 0.05, 0.2, '1.0/t', 0.0, 98,0.55213932326177229, 0.37 0.05, 0.2, '1.0/t', 0.0, 98,0.57058713961775187, 0.35 0.05, 0.2, '1.0/t', 0.0, 99,0.57774651274651267, 0.3 0.05, 0.2, '1.0/t', 0.0, 98,0.60559899284389085, 0.3 0.05, 0.2, '1.0/t', 0.0, 97,0.57659964891923643, 0.32 0.05, 0.2, '1.0/t', 0.0, 100,0.60228650793650784, 0.39 0.05, 0.2, '1.0/(t**0.25)', 0.0, 96,0.54907828282828286, 0.37 0.05, 0.2, '1.0/(t**0.25)', 0.0, 95,0.56421553884711773, 0.31 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.57978281355832373, 0.42 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.57399776334776331, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.56619273543515958, 0.36 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.54904174290772223, 0.34 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.55996816471043276, 0.42 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.53253068237604317, 0.4 0.05, 0.2, '1.0/(t**0.25)', 0.0, 96,0.57286240379990383, 0.3 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.5622091310751105, 0.36 0.05, 0.2, '1.0/(t**0.25)', 0.0, 94,0.60502778545331748, 0.4 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.55243269637209025, 0.41 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.55419734904270979, 0.31 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.54560926727593395, 0.37 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.57005183025591188, 0.33 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.5744055555555555, 0.33 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.54468417607592856, 0.33 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.60114303205212305, 0.3 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.57369333987890692, 0.29 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.5560628375061365, 0.33 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.5851120929471445, 0.35 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.57660894660894668, 0.29 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.57379038195364729, 0.36 0.05, 0.2, '1.0/(t**0.25)', 0.0, 94,0.53658845291824009, 0.4 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.56563499425744324, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.57947359598874748, 0.35 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.5880625102274587, 0.34 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.58526507936507943, 0.4 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.56537539682539684, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.54917151311090706, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.59884567322711646, 0.3 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.61272887606220949, 0.39 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.58581065759637185, 0.36 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.60787643195806462, 0.28 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.57826854551344353, 0.46 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.62902936507936502, 0.43 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.56052721088435375, 0.32 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.59838619430456153, 0.39 0.05, 0.2, '1.0/(t**0.25)', 0.0, 99,0.59139643185097723, 0.35 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.55435213698100294, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 96,0.55441145081770082, 0.5 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.61396582442500813, 0.34 0.05, 0.2, '1.0/(t**0.25)', 0.0, 98,0.5831122448979591, 0.28 0.05, 0.2, '1.0/(t**0.25)', 0.0, 100,0.56228903318903312, 0.38 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.53751989705597947, 0.45 0.05, 0.2, '1.0/(t**0.25)', 0.0, 93,0.57488052568697734, 0.32 0.05, 0.2, '1.0/(t**0.25)', 0.0, 96,0.58458355880230883, 0.32 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.59323180256169949, 0.37 0.05, 0.2, '1.0/(t**0.25)', 0.0, 96,0.52814476611351602, 0.42 0.05, 0.2, '1.0/(t**0.25)', 0.0, 97,0.58062644114190509, 0.3 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.57060657596371878, 0.38 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.59525090555702809, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.58709190580324599, 0.32 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.52734936831875612, 0.4 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.56376134860509863, 0.39 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.55041576479076482, 0.33 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.57440822365064792, 0.31 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.58365094089583891, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.58396927427230461, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.56114395442520448, 0.32 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.55925298641793497, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.54686669906057661, 0.41 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.57065678652413343, 0.33 0.05, 0.2, '1.0/(t**0.75)', 0.0, 100,0.54600800865800869, 0.34 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.57970491349279241, 0.41 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.55432229947381451, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.58844214742173917, 0.31 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.55942153493699887, 0.43 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.56915562101129102, 0.33 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.55979407780428181, 0.46 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.60165312012250782, 0.36 0.05, 0.2, '1.0/(t**0.75)', 0.0, 100,0.55265339105339117, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.57935340146680347, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.57270630411255408, 0.34 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.57036008092709123, 0.3 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.56128910608292049, 0.4 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.60370210854904738, 0.33 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.54568027210884351, 0.39 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.57008412549649656, 0.31 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.55908234126984124, 0.38 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.57134110787171999, 0.36 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.54163596607474152, 0.43 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.59829527048914799, 0.26 0.05, 0.2, '1.0/(t**0.75)', 0.0, 100,0.56543059163059173, 0.29 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.55931457431457432, 0.36 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.5559182398357656, 0.42 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.5495399886308977, 0.41 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.57775977745049911, 0.45 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.58336197249462551, 0.42 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.57135461760461759, 0.29 0.05, 0.2, '1.0/(t**0.75)', 0.0, 97,0.57450156945002306, 0.34 0.05, 0.2, '1.0/(t**0.75)', 0.0, 100,0.54112893217893221, 0.49 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.57402036235369569, 0.39 0.05, 0.2, '1.0/(t**0.75)', 0.0, 96,0.55906152296777301, 0.37 0.05, 0.2, '1.0/(t**0.75)', 0.0, 100,0.60050108225108234, 0.4 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.58986313349949704, 0.35 0.05, 0.2, '1.0/(t**0.75)', 0.0, 99,0.6056239159269462, 0.26 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.59304326059428103, 0.33 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.56099095915422448, 0.45 0.05, 0.2, '1.0/(t**0.75)', 0.0, 98,0.55131725417439703, 0.36 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.58864395055116703, 0.44 0.05, 0.1, '1.0/(t**0.75)', 0.0, 95,0.54978901799954438, 0.51 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.59925865800865796, 0.28 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.55754719817219811, 0.35 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.53774801587301579, 0.38 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.52768143192385619, 0.42 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.56107352092352092, 0.44 0.05, 0.1, '1.0/(t**0.75)', 0.0, 95,0.55400417710944017, 0.37 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.56923226433430507, 0.28 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.55071100616555158, 0.39 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.57042141531937451, 0.26 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.56162166584846995, 0.36 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.59434343434343428, 0.42 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.5606179138321995, 0.31 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.5824024501575521, 0.33 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.59972218578279179, 0.34 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.60082593237232407, 0.36 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.58574474907808227, 0.44 0.05, 0.1, '1.0/(t**0.75)', 0.0, 95,0.57077025898078526, 0.4 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.58741890632515636, 0.35 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.56064799783549779, 0.47 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.56882741408251614, 0.44 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.55161167064228289, 0.46 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.52670354337021008, 0.54 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.60618679653679652, 0.29 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.60002525252525241, 0.32 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.56277380952380951, 0.41 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.58162455458373818, 0.34 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.58220649350649345, 0.28 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.56979862914862911, 0.3 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.56374149659863937, 0.34 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.53071634714491855, 0.39 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.56128559648967813, 0.32 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.5863679064699473, 0.44 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.57570375769355364, 0.38 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.57215602267148657, 0.38 0.05, 0.1, '1.0/(t**0.75)', 0.0, 100,0.57686002886002885, 0.42 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.57687509202815324, 0.35 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.56560628375061373, 0.33 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.56093860684769781, 0.35 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.53523370672855208, 0.43 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.58083657272432787, 0.31 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.58610513504452899, 0.39 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.57828951719576727, 0.45 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.59865837677062173, 0.41 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.57798559973817698, 0.3 0.05, 0.1, '1.0/(t**0.75)', 0.0, 96,0.57862185846560843, 0.43 0.05, 0.1, '1.0/(t**0.75)', 0.0, 99,0.58135459938490242, 0.38 0.05, 0.1, '1.0/(t**0.75)', 0.0, 98,0.55287061577877905, 0.48 0.05, 0.1, '1.0/(t**0.75)', 0.0, 97,0.57575274095892659, 0.38 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.56959114959114954, 0.44 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.58559361839974089, 0.37 0.05, 0.01, '1.0/(t**0.75)', 0.0, 95,0.5392488038277512, 0.41 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.60479091054848633, 0.28 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.56132177429052432, 0.37 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.53802691197691199, 0.42 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.56095682656288715, 0.48 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.60394704621977335, 0.36 0.05, 0.01, '1.0/(t**0.75)', 0.0, 95,0.57447892458418781, 0.45 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.52909652076318736, 0.4 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.58493160774410768, 0.36 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.57565030774214443, 0.49 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.52747113997113992, 0.4 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.57652192478723097, 0.27 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.57321127326281962, 0.28 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.57310631568207315, 0.33 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.56347460317460307, 0.33 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.59041385281385284, 0.32 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.61539285714285707, 0.33 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.57327826368642687, 0.37 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.55451018935712815, 0.45 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.57889880952380957, 0.45 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.59326653873045621, 0.29 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.54030060075978437, 0.37 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.57706267386679755, 0.32 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.5385216673361003, 0.38 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.5786269841269841, 0.33 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.55953861144582795, 0.33 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.55819751268204876, 0.39 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.56897959183673474, 0.44 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.57032033159584172, 0.39 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.60102416291191818, 0.45 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.59498511904761908, 0.25 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.54263265943678318, 0.4 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.53556216931216927, 0.44 0.05, 0.01, '1.0/(t**0.75)', 0.0, 96,0.56844824735449728, 0.35 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.55727830588655336, 0.42 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.58144826839826846, 0.39 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.56635325558794947, 0.28 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.53198857259463317, 0.41 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.61179668255425823, 0.38 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.60946954972465173, 0.46 0.05, 0.01, '1.0/(t**0.75)', 0.0, 99,0.59213003046336377, 0.27 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.56177258594784363, 0.36 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.56415532879818586, 0.42 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.56029700540009819, 0.42 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.60949671643549197, 0.28 0.05, 0.01, '1.0/(t**0.75)', 0.0, 97,0.59254607935020298, 0.35 0.05, 0.01, '1.0/(t**0.75)', 0.0, 98,0.56475461613216715, 0.32 0.05, 0.01, '1.0/(t**0.75)', 0.0, 100,0.58241096681096682, 0.34 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.59013723089480663, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.55500992063492072, 0.44 0.05, 0.01, '1.0/(t**0.25)', 0.0, 95,0.57573600668337521, 0.41 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.56499759499759505, 0.38 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.57625675012272948, 0.39 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.59070795417734201, 0.28 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.58695555555555545, 0.36 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.59193503518245782, 0.34 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.56838464005130673, 0.38 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.56062500910985757, 0.32 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.59169713003046331, 0.42 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.53221019721019724, 0.4 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.59003784197661746, 0.25 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.57563244047619044, 0.39 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.60548420715087381, 0.26 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.57469159525281976, 0.38 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.59350569183902524, 0.39 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.59481894841269844, 0.37 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.57746753246753246, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.55204081632653068, 0.36 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.58327591080168395, 0.43 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.57352460464705357, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.57152266404843721, 0.46 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.57445486612153274, 0.28 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.5702508490387278, 0.36 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.59651225063596203, 0.38 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.57969990079365075, 0.32 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.56265714285714286, 0.36 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.59190888476602754, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.56629706490531229, 0.36 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.55537168218986388, 0.47 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.52843809523809526, 0.41 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.59092316017316016, 0.3 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.56261458472798687, 0.41 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.5455235297582236, 0.49 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.56890368701593197, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.57354940776815777, 0.39 0.05, 0.01, '1.0/(t**0.25)', 0.0, 96,0.56926985630110627, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.6079591732622035, 0.29 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.57138270459699025, 0.47 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.54890763303134438, 0.38 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.55982006655476035, 0.43 0.05, 0.01, '1.0/(t**0.25)', 0.0, 97,0.5807352613022716, 0.32 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.57387539682539679, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.58827789557381394, 0.29 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.53699689754689761, 0.33 0.05, 0.01, '1.0/(t**0.25)', 0.0, 98,0.5888589245221898, 0.4 0.05, 0.01, '1.0/(t**0.25)', 0.0, 100,0.58158095238095242, 0.34 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.55959916626583295, 0.35 0.05, 0.01, '1.0/(t**0.25)', 0.0, 99,0.51675914994096805, 0.42 0.05, 0.1, '1.0/(t**0.25)', 0.0, 96,0.58264054232804241, 0.27 0.05, 0.1, '1.0/(t**0.25)', 0.0, 96,0.5901645923520924, 0.35 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.58212762546095875, 0.43 0.05, 0.1, '1.0/(t**0.25)', 0.0, 96,0.58303744288119286, 0.45 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.59569792178039593, 0.38 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.5469920858065187, 0.41 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.53338974157155972, 0.42 0.05, 0.1, '1.0/(t**0.25)', 0.0, 95,0.56406098579782782, 0.31 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.57016683774415733, 0.26 0.05, 0.1, '1.0/(t**0.25)', 0.0, 96,0.58236276455026459, 0.35 0.05, 0.1, '1.0/(t**0.25)', 0.0, 95,0.56437426900584797, 0.38 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.59871315192743757, 0.36 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.54790541646211743, 0.47 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.55557403480872858, 0.44 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.52734167893961703, 0.4 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.55451428868954633, 0.47 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.54538015873015877, 0.29 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.55274326475357405, 0.34 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.57823143065411098, 0.36 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.61111825396825403, 0.28 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.6106182819448126, 0.27 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.58915079365079359, 0.29 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.5957316606296198, 0.31 0.05, 0.1, '1.0/(t**0.25)', 0.0, 96,0.58118318602693597, 0.42 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.55367460317460315, 0.48 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.57426838339209474, 0.47 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.60180331890331895, 0.36 0.05, 0.1, '1.0/(t**0.25)', 0.0, 95,0.5794801397432976, 0.37 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.55140425685425676, 0.3 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.55842116500279759, 0.44 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.5740733452854665, 0.43 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.58501298701298698, 0.27 0.05, 0.1, '1.0/(t**0.25)', 0.0, 95,0.59409280777701823, 0.35 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.54339862914862913, 0.4 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.54743095238095241, 0.31 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.56278749595076116, 0.46 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.58803015873015885, 0.3 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.5936047514913495, 0.34 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.59252554112554112, 0.33 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.56689603174603165, 0.32 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.58638287638287634, 0.25 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.58655079365079366, 0.33 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.55445967612634273, 0.32 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.53540694128322985, 0.44 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.60713709971285723, 0.34 0.05, 0.1, '1.0/(t**0.25)', 0.0, 99,0.56574795574795567, 0.41 0.05, 0.1, '1.0/(t**0.25)', 0.0, 97,0.5693243926749082, 0.36 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.54953975468975469, 0.33 0.05, 0.1, '1.0/(t**0.25)', 0.0, 98,0.56251950996848954, 0.34 0.05, 0.1, '1.0/(t**0.25)', 0.0, 100,0.58702265512265517, 0.28 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5722230238896906, 0.26 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57992063492063495, 0.36 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60989767807949624, 0.34 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57228921871779015, 0.42 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61508978675645343, 0.34 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.54618705464066275, 0.36 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58144574314574315, 0.25 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59594671201814065, 0.3 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60881062814736286, 0.27 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56687707983626356, 0.3 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.570419734904271, 0.53 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5864486703772418, 0.32 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54360349527016194, 0.44 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58319206349206343, 0.43 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.54526427753231876, 0.4 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58457725947521855, 0.35 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59643730158730168, 0.36 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5818847202180536, 0.36 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57406948493683174, 0.3 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57693158132552069, 0.31 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54572150072150072, 0.34 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5535080968414301, 0.47 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58516529581529586, 0.28 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54886002886002883, 0.47 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.58887148361375163, 0.35 0.05, 0.1, '1.0/(t**0.01)', 0.0, 96,0.56606804653679654, 0.26 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55792528459195123, 0.36 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.57796521920233268, 0.38 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56010240892893948, 0.38 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.54809397360943746, 0.35 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55356239159269471, 0.4 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59933673469387749, 0.4 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.53242857142857136, 0.49 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57381593714927048, 0.43 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58079285714285722, 0.4 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57028109668109661, 0.33 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60837101170434515, 0.39 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61719107989516153, 0.33 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56242777777777775, 0.41 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59600035703128484, 0.26 0.05, 0.1, '1.0/(t**0.01)', 0.0, 96,0.56604978354978353, 0.34 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56168838456717241, 0.41 0.05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57422983479105927, 0.31 0.05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.56974353252703769, 0.28 0.05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.53348614718614717, 0.4 0.05, 0.1, '1.0/(t**0.01)', 0.0, 95,0.54743783701678428, 0.39 0.05, 0.1, '1.0/(t**0.01)', 0.0, 94,0.57167380491848585, 0.38 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59572193799466522, 0.41 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57666907166907155, 0.43 0.05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57028459195125858, 0.34 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.57936957033895797, 0.34 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.5941270577495068, 0.44 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.54154791353770948, 0.36 0.05, 0.01, '1.0/(t**0.01)', 0.0, 96,0.57361306517556521, 0.48 0.05, 0.01, '1.0/(t**0.01)', 0.0, 100,0.5572031746031747, 0.39 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.55779461279461284, 0.35 0.05, 0.01, '1.0/(t**0.01)', 0.0, 96,0.58742213804713794, 0.36 0.05, 0.01, '1.0/(t**0.01)', 0.0, 95,0.56506015037593982, 0.45 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.59365572635980801, 0.36 0.05, 0.01, '1.0/(t**0.01)', 0.0, 95,0.58921303258145363, 0.38 0.05, 0.01, '1.0/(t**0.01)', 0.0, 96,0.57450021043771049, 0.41 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.57623136123136121, 0.35 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.55965063001145465, 0.33 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.54128587461920796, 0.45 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.57416666666666683, 0.34 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.60611611744264804, 0.38 0.05, 0.01, '1.0/(t**0.01)', 0.0, 100,0.57147171717171708, 0.31 0.05, 0.01, '1.0/(t**0.01)', 0.0, 95,0.61338558517505881, 0.37 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.58641719105636625, 0.33 0.05, 0.01, '1.0/(t**0.01)', 0.0, 100,0.5271165223665224, 0.38 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.56761744428411098, 0.35 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.55839937273610751, 0.41 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.59223184223184222, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.60511268799928597, 0.32 0.05, 0.01, '1.0/(t**0.01)', 0.0, 96,0.5977083333333334, 0.35 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.56817408781694489, 0.31 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.56501063655702832, 0.26 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.59051561268056108, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.61687291384261089, 0.32 0.05, 0.01, '1.0/(t**0.01)', 0.0, 95,0.62106447938026887, 0.37 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.55034551867885195, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.62034855179185078, 0.25 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.58690881114350513, 0.32 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.55171768707482993, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.57624399976440799, 0.37 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.56135561968895298, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.55484075448361159, 0.33 0.05, 0.01, '1.0/(t**0.01)', 0.0, 100,0.57088095238095238, 0.38 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.56625084665900993, 0.43 0.05, 0.01, '1.0/(t**0.01)', 0.0, 96,0.56782121813371822, 0.41 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.59442235768766372, 0.28 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.56031210484818739, 0.4 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.57232426303854878, 0.28 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.54762546095879427, 0.38 0.05, 0.01, '1.0/(t**0.01)', 0.0, 97,0.58670348551791851, 0.27 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.59606825834098554, 0.3 0.05, 0.01, '1.0/(t**0.01)', 0.0, 99,0.56053150553150555, 0.39 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.55787348705716067, 0.27 0.05, 0.01, '1.0/(t**0.01)', 0.0, 98,0.60049400712666012, 0.32 0.05, 0.01, '1.0/(t**0.01)', 0.0, 95,0.57115151515151519, 0.46 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.55795123547700864, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.58838413590990912, 0.4 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.57582332067025943, 0.37 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.5779119180139588, 0.49 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.56778236914600555, 0.39 0.05, 0.2, '1.0/(t**0.01)', 0.0, 100,0.55531522366522368, 0.42 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.52082401394901401, 0.45 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.57032039141414137, 0.36 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.59312714776632303, 0.25 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.55002595914967045, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.55367426064395753, 0.46 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.55402116402116408, 0.25 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.57993926141885321, 0.31 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.59315228174603174, 0.26 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.55030175264550263, 0.46 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.54099567099567114, 0.52 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.54130912297578959, 0.27 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.56264946965977891, 0.3 0.05, 0.2, '1.0/(t**0.01)', 0.0, 95,0.57465694539378753, 0.33 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.55857120542687555, 0.44 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.57746981476573311, 0.37 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.54096879877492121, 0.42 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.59429705215419504, 0.33 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.54598284431617761, 0.41 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.55716634272756715, 0.43 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.55960385101010102, 0.41 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.5375749559082893, 0.5 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.58337297943358546, 0.29 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.54384800384800391, 0.37 0.05, 0.2, '1.0/(t**0.01)', 0.0, 95,0.56495800106326421, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.56515114703890212, 0.49 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.59101250601250599, 0.37 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.57183822350489011, 0.5 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.55301557548980229, 0.46 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.55473853114478111, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.56701526931118773, 0.27 0.05, 0.2, '1.0/(t**0.01)', 0.0, 100,0.55171096681096687, 0.39 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.55789081289081288, 0.3 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.60212938422122098, 0.36 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.59064846717907937, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.56851370851370853, 0.39 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.5778532802775227, 0.41 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.56675817946226104, 0.28 0.05, 0.2, '1.0/(t**0.01)', 0.0, 97,0.55205776468663081, 0.34 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.55434336072091162, 0.35 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.57533378518227007, 0.35 0.05, 0.2, '1.0/(t**0.01)', 0.0, 98,0.58345584121094318, 0.31 0.05, 0.2, '1.0/(t**0.01)', 0.0, 96,0.60285451238576238, 0.36 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.5402277464398676, 0.36 0.05, 0.2, '1.0/(t**0.01)', 0.0, 99,0.56775933942600609, 0.4 0.05, 0.2, '1.0/(t**0.001)', 0.0, 94,0.54290780141843975, 0.4 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.55676566846669939, 0.41 0.05, 0.2, '1.0/(t**0.001)', 0.0, 96,0.5607961309523809, 0.41 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57444364277697613, 0.43 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.56130871396177506, 0.3 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57444378853469757, 0.37 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.5951826118326119, 0.33 0.05, 0.2, '1.0/(t**0.001)', 0.0, 95,0.58655851750588595, 0.35 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.54953028830579853, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.54903569219895754, 0.32 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.5409122893143512, 0.42 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.58367076245864125, 0.32 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.5996338941699767, 0.38 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.56390193420496448, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.60468090328915058, 0.32 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.55848703485067108, 0.34 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.56795309501495062, 0.47 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.58790331890331882, 0.4 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57108123077820039, 0.32 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.57748299319727903, 0.34 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57327881994548657, 0.36 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.51957617411225665, 0.38 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.58115484288953678, 0.35 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57380952380952377, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 96,0.57625864297739293, 0.34 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.58948968253968248, 0.34 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.56292096219931265, 0.33 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.56177758829273972, 0.4 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.55225404040404036, 0.42 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.54950930512786178, 0.42 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.59732453102453098, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.58195694316906443, 0.32 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.55443693792178639, 0.33 0.05, 0.2, '1.0/(t**0.001)', 0.0, 100,0.5414791486291487, 0.39 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57806550352004893, 0.39 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.57935221136252046, 0.37 0.05, 0.2, '1.0/(t**0.001)', 0.0, 96,0.57575216450216449, 0.36 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.59070669879948223, 0.33 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.54113565701194566, 0.37 0.05, 0.2, '1.0/(t**0.001)', 0.0, 97,0.57140075274095892, 0.38 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.59524771524771525, 0.36 0.05, 0.2, '1.0/(t**0.001)', 0.0, 96,0.57454102032227039, 0.33 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.5549562682215744, 0.4 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.57624017957351292, 0.34 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.60063011063011063, 0.24 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.54664589619135084, 0.41 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.58206665783196399, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 98,0.55195497246517644, 0.31 0.05, 0.2, '1.0/(t**0.001)', 0.0, 95,0.56100729095465929, 0.41 0.05, 0.2, '1.0/(t**0.001)', 0.0, 99,0.55548340548340558, 0.44 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.57783299466972937, 0.35 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.57811814760268365, 0.36 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.57684523809523813, 0.43 0.05, 0.1, '1.0/(t**0.001)', 0.0, 95,0.58018462823725969, 0.31 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.54753246753246743, 0.36 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.60462321628988291, 0.4 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.56574542804134642, 0.39 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.58845759179092505, 0.37 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.57663029100529106, 0.44 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.54662739322533138, 0.41 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.56570849867724871, 0.28 0.05, 0.1, '1.0/(t**0.001)', 0.0, 100,0.53516897546897535, 0.39 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.54962608411062019, 0.53 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.56869295634920636, 0.35 0.05, 0.1, '1.0/(t**0.001)', 0.0, 100,0.56740187590187585, 0.4 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.56966229348882413, 0.3 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.60120169953503289, 0.43 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.61119452542921915, 0.25 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.60128720238095235, 0.29 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.56222876779577802, 0.35 0.05, 0.1, '1.0/(t**0.001)', 0.0, 100,0.5685404761904761, 0.32 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58973540065376806, 0.29 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.54712281545614883, 0.4 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.54670502400094245, 0.34 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.55461840628507297, 0.45 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.58181978515311839, 0.33 0.05, 0.1, '1.0/(t**0.001)', 0.0, 94,0.53362208713272552, 0.44 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.55901154401154407, 0.37 0.05, 0.1, '1.0/(t**0.001)', 0.0, 100,0.5589069264069263, 0.31 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.58617493045328095, 0.36 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.5644185293164885, 0.3 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.57116699060576614, 0.36 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58536531495715172, 0.43 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.5458656521027655, 0.46 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.58263212481962479, 0.42 0.05, 0.1, '1.0/(t**0.001)', 0.0, 96,0.57028273809523811, 0.25 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.58294437885346972, 0.4 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.61838179777573721, 0.31 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.55657088376476127, 0.4 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58404275996112731, 0.34 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.55126984126984135, 0.37 0.05, 0.1, '1.0/(t**0.001)', 0.0, 95,0.60893415356573255, 0.33 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.55088192419825077, 0.37 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.59943958535795272, 0.27 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58238323467915309, 0.34 0.05, 0.1, '1.0/(t**0.001)', 0.0, 97,0.57217766769313161, 0.34 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58158082280531254, 0.36 0.05, 0.1, '1.0/(t**0.001)', 0.0, 95,0.57201420217209709, 0.39 0.05, 0.1, '1.0/(t**0.001)', 0.0, 98,0.58679263480283883, 0.34 0.05, 0.1, '1.0/(t**0.001)', 0.0, 99,0.59740099406766067, 0.3 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.58730563654033041, 0.35 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.55966329966329975, 0.31 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58017936507936507, 0.35 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.56807786317990394, 0.28 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.58931246082761235, 0.34 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58562936507936503, 0.33 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.59662426009364788, 0.3 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.58856737933268544, 0.32 0.05, 0.01, '1.0/(t**0.001)', 0.0, 97,0.55567583046964486, 0.39 0.05, 0.01, '1.0/(t**0.001)', 0.0, 97,0.58558828342333491, 0.29 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.56126174279235497, 0.4 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.59176959095326442, 0.44 0.05, 0.01, '1.0/(t**0.001)', 0.0, 97,0.56102601865488455, 0.39 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.57719817219817215, 0.37 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.58493719998822036, 0.43 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.56609005506964694, 0.36 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.54174700877825877, 0.49 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.57105433847858089, 0.41 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.55947440881114352, 0.36 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.58720954130045044, 0.39 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.58813204191992063, 0.39 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.54827546296296292, 0.46 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.59290816326530604, 0.33 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.59980038480038489, 0.37 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.55370667314544864, 0.34 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.58303538298436253, 0.4 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.59850882335257338, 0.38 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.57897554259799155, 0.31 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.54315448860903404, 0.44 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58138492063492064, 0.39 0.05, 0.01, '1.0/(t**0.001)', 0.0, 97,0.56770599961321599, 0.41 0.05, 0.01, '1.0/(t**0.001)', 0.0, 95,0.56868383078909401, 0.43 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.57480504756014961, 0.35 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.57519200753894628, 0.32 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.55509073418164323, 0.22 0.05, 0.01, '1.0/(t**0.001)', 0.0, 95,0.56306683375104416, 0.35 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.5104108910169517, 0.33 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.55562041699796805, 0.49 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.54760582010582004, 0.36 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58451666666666668, 0.28 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.59724328421298112, 0.35 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58951363636363641, 0.41 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.58052531082834113, 0.33 0.05, 0.01, '1.0/(t**0.001)', 0.0, 99,0.56664582331248992, 0.38 0.05, 0.01, '1.0/(t**0.001)', 0.0, 96,0.58992672258297263, 0.34 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.58318675089083249, 0.37 0.05, 0.01, '1.0/(t**0.001)', 0.0, 97,0.58370263756861696, 0.37 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.52232871572871575, 0.44 0.05, 0.01, '1.0/(t**0.001)', 0.0, 100,0.58388650793650787, 0.32 0.05, 0.01, '1.0/(t**0.001)', 0.0, 98,0.59421503666401632, 0.4 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58546737213403877, 0.15 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56163196248196245, 0.18 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58083095238095228, 0.17 0.01, 0.1, '1.0/(t**0.01)', 0.0, 97,0.56326564615224406, 0.18 0.01, 0.1, '1.0/(t**0.01)', 0.0, 97,0.57128412252123595, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6131369248035915, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58445085778419115, 0.26 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.55032756132756122, 0.13 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59879090909090915, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5925615484288953, 0.21 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56147395382395393, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58532948532948537, 0.19 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59204111081662103, 0.14 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.582761744428411, 0.17 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61708397102336499, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61834629089731141, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55637085137085129, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60906269841269844, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62984595959595968, 0.23 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58422497570456766, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58425339105339102, 0.24 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60039937615695194, 0.23 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60965448132114786, 0.23 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5717427187325147, 0.15 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56718658892128282, 0.17 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.6042851989280561, 0.24 0.01, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59144084437898869, 0.19 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59836999140029445, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57416984126984127, 0.21 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59788840788840791, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59512717361202205, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58873347174367574, 0.23 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57606607197516291, 0.15 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5819001705365342, 0.21 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59589079831504077, 0.16 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60446069643039346, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59587381754048419, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58841160522978708, 0.19 0.01, 0.1, '1.0/(t**0.01)', 0.0, 97,0.60218941997292508, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.54605604146420472, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58029683559986589, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.62929712577671759, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59809902779599744, 0.18 0.01, 0.1, '1.0/(t**0.01)', 0.0, 96,0.5949018458393458, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59950354920051885, 0.2 0.01, 0.1, '1.0/(t**0.01)', 0.0, 96,0.57214120370370369, 0.25 0.01, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57183174603174602, 0.21 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58537010042112081, 0.24 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57693067703271772, 0.22 0.01, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59686588921282802, 0.23 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59835971548092759, 0.16 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59927186147186151, 0.15 0.001, 0.1, '1.0/(t**0.01)', 0.0, 97,0.61295941744395355, 0.13 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61469603174603182, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58455507455507461, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58667388167388168, 0.16 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59360180375180371, 0.16 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60594069264069261, 0.14 0.001, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59220660210350939, 0.21 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59046700773973493, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61310014430014426, 0.14 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58057166178378294, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62100966373693645, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 98,0.6185916747651441, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59473297185418383, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60548023088023095, 0.16 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54774891774891776, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59633455319022322, 0.14 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60270380573410876, 0.14 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62443963443963435, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 96,0.58784940175565181, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59129200164914453, 0.18 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5886165223665224, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60894523809523815, 0.12 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60760952380952371, 0.23 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59468001443001428, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60236666666666672, 0.11 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60641421429300213, 0.12 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59553186992580931, 0.16 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58139409972743306, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 97,0.58141436455869444, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.54977857142857145, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59307157287157286, 0.21 0.001, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59320979474040691, 0.22 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5983541766875099, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57656485489818832, 0.19 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61604960135263176, 0.21 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59376783710117031, 0.13 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59180083664932159, 0.23 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60410934744268086, 0.14 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60561721107175659, 0.15 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61421035754369091, 0.12 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59631531767895396, 0.18 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59458275613275613, 0.15 0.001, 0.1, '1.0/(t**0.01)', 0.0, 97,0.63850322071971555, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56326191204979081, 0.12 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56766794933461595, 0.13 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5730103342224554, 0.2 0.001, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61251082251082256, 0.17 0.001, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60309141414141409, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.60329651448208155, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57699458874458875, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57460018656988354, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61671428571428577, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60040794239773831, 0.14 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59260119229816199, 0.14 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57284359631298409, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60317217363135733, 0.15 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5337205141796979, 0.22 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59739858906525578, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59111672278338945, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.6145434462444771, 0.23 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59865800865800856, 0.21 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56688181818181815, 0.15 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59180375180375189, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59522655122655121, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.577829365079365, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59901213299172484, 0.14 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.62090710310098063, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56688231521564858, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57953271784904425, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58182012987012977, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58200310245310238, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62904324631597353, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58623573396300666, 0.12 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.62166443522113635, 0.12 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57882453685483992, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58364088212573062, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58740740740740738, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6219594210503302, 0.09 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57737380952380957, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.55868761250204546, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56863658227294589, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5790573372206026, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58686031746031742, 0.18 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5598519101549404, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61174763508096841, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55031083429042615, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.58967525029380696, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55485970819304153, 0.14 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59059170421415308, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55766459690702108, 0.19 0, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56888383838383838, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59369252168221243, 0.2 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57586230268048455, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58791928026621898, 0.17 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5881561648228314, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56568115557911469, 0.16 0, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60954501281031892, 0.14 0, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58096207384086174, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59842150072150069, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57650166892591137, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5843636363636362, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59688046647230319, 0.21 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56084126984126981, 0.13 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59385769673648459, 0.23 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61445339105339114, 0.12 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59216406489133755, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57675501369378923, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 97,0.61346424480445094, 0.19 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57907764513825122, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55055489295285209, 0.21 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59031184864518194, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5793206349206349, 0.13 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57926190476190487, 0.22 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 96,0.5886832611832612, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60479581529581528, 0.19 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.63828209205760222, 0.15 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60842388903613398, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61707159054097827, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58355361192095889, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59738838602474964, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58334309910067483, 0.15 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61943340548340542, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 97,0.5992840778923253, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58293968253968265, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58543756467998898, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61720992726094759, 0.1 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57604719635022672, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59114968931295464, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60343521798067257, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60225380628441849, 0.22 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61592373737373729, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57500793650793658, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60878787878787866, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60784992784992786, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57544682029530514, 0.17 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56954022734634979, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58744851108487472, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59539761904761901, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58642770562770563, 0.18 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6122317693529814, 0.14 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58724466891133553, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58544306034101956, 0.13 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5541543136997682, 0.13 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57578253968253978, 0.15 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61270505050505042, 0.16 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60155844155844163, 0.19 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62372359307359315, 0.2 0.0005, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59050777453838676, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60555140146049247, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62443015873015872, 0.19 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59550264550264542, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55725268558601893, 0.19 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59439444444444445, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.58158730158730154, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61370698325243778, 0.19 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56935526695526695, 0.24 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59863636363636363, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5853436507936508, 0.13 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61538305798509885, 0.17 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60291901700992601, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62116984126984121, 0.17 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58367200139927411, 0.12 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5866920634920636, 0.2 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60998345649860797, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61118603057997001, 0.15 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57111592111592113, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58095012170769755, 0.17 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58472510822510815, 0.12 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58013191073797132, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60990299823633154, 0.21 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58682186147186144, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62458954625621288, 0.21 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55567784256559782, 0.26 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57535000000000003, 0.12 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57872676767676767, 0.11 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61044206349206354, 0.17 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57606847697756791, 0.19 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5801106782106783, 0.15 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57231211532231929, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58406507936507934, 0.19 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59493513855758751, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59305596465390287, 0.11 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61388619237104092, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59007683982683989, 0.21 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56245059928733399, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60277461200930582, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58530158730158732, 0.14 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6152757736091069, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56207279942279942, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57713809523809534, 0.12 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59823013686650039, 0.13 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61809268733511158, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60005291005290995, 0.1 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59400185112306325, 0.18 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61121831591528564, 0.15 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58173240339907006, 0.16 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60973812468710431, 0.15 1e-05, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58977684492836002, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.6037992784992785, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61231404958677693, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58103735770402432, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57924577667001909, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5762126984126984, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58999028182701652, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.55334978354978359, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62029754689754679, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60666666666666658, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59513533604442681, 0.12 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61718592854956489, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60172438672438666, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56914782748116077, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58318924963924967, 0.2 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59743466410133084, 0.19 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.60171538656074741, 0.19 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60529790764790758, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.57251811189955515, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56691882752488809, 0.2 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58814975148308479, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59849607182940501, 0.11 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58763253020828765, 0.23 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59157768157768154, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60373730158730166, 0.12 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57639235063477479, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.56408914215036665, 0.23 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60191713048855899, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58375555555555558, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55479775893041194, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59356340371646499, 0.22 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59219588744588747, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.60388969873663756, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 96,0.58012648809523804, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5899766955266954, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57583982683982693, 0.24 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56469631378722285, 0.21 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58307614383371964, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59250588980180807, 0.11 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57585406736921896, 0.23 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 96,0.5846459385521886, 0.21 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58329937178422031, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59049550337429113, 0.22 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6102794904310056, 0.15 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59639473304473312, 0.17 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61185692640692635, 0.16 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58181545778484545, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.55066284271284272, 0.12 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60039177489177487, 0.18 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 96,0.60548047438672448, 0.19 1e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57671984126984133, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61590783932620652, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5568220838118797, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59243961986386229, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58547813852813835, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56902036235369557, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60020347777923533, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.62643666990605762, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57100849767516426, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5707919017009927, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5791124812336933, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62429523809523801, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61147716229348881, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59141075477810179, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.5926345933562428, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56887243867243875, 0.09 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59885536461294042, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54588591543137011, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59310303030303035, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57730945165945169, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61603888888888891, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5956124098124097, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.6235042112082928, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.53361406270497169, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60251399711399711, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.60190052215825418, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58869408369408371, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59804232804232793, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57174042007375347, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55905221041584674, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59732935414753596, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56987275350911715, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59095555555555557, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61761190476190475, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54188005597096511, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58201786989665771, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.58499754540991655, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62284883466701657, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55716749019779321, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58157301587301591, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59205664145058079, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55419111752445083, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57710211785969356, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59861960149838944, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59209875725181838, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61244316341255112, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58747474747474748, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54931632340723258, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56110901875901875, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59739778739778737, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61518569533721046, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60788809523809528, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59992624659291327, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62964194615709768, 0.11 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59807229437229426, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59019240019240016, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59006406051860583, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59964444444444442, 0.1 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57108845598845603, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5628873015873016, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62194644861311532, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55845358345358342, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54357317766408675, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.5674341269841271, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.61734450923226425, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6116864168379319, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61381587301587304, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59885873015873003, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.63811269841269835, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.6012499814046206, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.5797848749889567, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.61634920634920642, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61498928680746856, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56829558208346087, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58044998085814414, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6086588832043377, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.55313852813852815, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.6219363184514699, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60869523809523807, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.59709488106395314, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.55652301587301589, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58137922077922088, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56955151515151514, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57797222222222222, 0.25 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59054664723032069, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 96,0.59503720238095237, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55666188120269744, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59695670995671002, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.62414411065926223, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60257094757094753, 0.1 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58456746031746032, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58451098284431613, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.57567523541750343, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.59751553435226901, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58641727520515396, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56459814596178226, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 96,0.59779183201058206, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59097592082440575, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58228253968253962, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59539813721631896, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57521578761374681, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59254191919191923, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60178116883116883, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60173364233970295, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59613836780503437, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57243546576879911, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57673203900476622, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.60087235996326904, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5796767093736791, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59251905782208814, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58696010101010099, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60760808080808071, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.61190967108492889, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.57502554701534281, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59126998702756284, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60167691197691187, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.62947035957240038, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55759718172983475, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60013412698412694, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59728227440348647, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.57866147186147177, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.571937484513242, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58681017316017314, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58109062049062055, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59517767866252713, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58456430191124054, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58096298701298699, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60311666666666663, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.58603662891541675, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62753621933621917, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58826190476190465, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.59828064191700558, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.5890860990860991, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.60701269841269834, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.62771868686868681, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56368888888888902, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58457604617604619, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.55697440881114346, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57593889836314072, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56140998731907821, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 98,0.58924301322260508, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61637726471059817, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.61658409491742827, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.54555861646770742, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.57361122042940216, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.61194999999999999, 0.1 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 97,0.595723285877925, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.59633095238095235, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 99,0.56534617458859882, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.58822698412698415, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.0, 100,0.56950007215007215, 0.27 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.57367666564636266, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58544098998644445, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.61330373707924724, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.59766022417537568, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.58734082810613431, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.59444925444925434, 0.11 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.56452546897546896, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.6032828282828282, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 97,0.56654148257241033, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.60466235223810982, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.58074718614718612, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.57895223665223672, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.60005836940836943, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.61299999999999999, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.54387103356800326, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.59522108843537413, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.56092206334630579, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.56676723949451213, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.59809122975789641, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58294510764207719, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58804349410410017, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.59157493300350439, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.58687649085608273, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.57966585042342622, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 97,0.60402039541214803, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.62413660413660399, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58329827860130878, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58515712682379339, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.61486861471861476, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.57951587301587304, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.60639761904761913, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.57242817788272338, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.59723216126277345, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.58853285036958514, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 97,0.57893046815727223, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.57205878022204559, 0.28 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.57235511087551916, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.62098109668109658, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.58161825396825395, 0.29 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.56757007302461848, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.59310657596371885, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.57757777777777786, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 97,0.60391112896267529, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.60099020508111411, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.58253013540892329, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 100,0.56028145743145741, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.60759179092512428, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.57942913988368538, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 99,0.61568061568061561, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 1.0, 98,0.60473517978620028, 0.11 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 96,0.55049189814814814, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.58288265045840804, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.57992792355037259, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59618354978354982, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.55521244187910845, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.605511111111111, 0.12 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57511121314151614, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.58955099333887218, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.60488581146744425, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.60166176046176045, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.58765630061548424, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57530864197530862, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 97,0.5980831882893739, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.61702704891480398, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.6019169096209912, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.59653388138236618, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59110634920634919, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57706837494716279, 0.25 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.56277142857142859, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 94,0.56284409443983907, 0.25 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.59694694761021283, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57370348506712143, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.60803627909688518, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59327857142857143, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.59619105922136217, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59600750360750365, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.60563841882023695, 0.09 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.6071130496888073, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57531345198011874, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.5758315295815295, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.61898484848484858, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 97,0.57692521682212405, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.60257244456224057, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.57301201043625283, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.60783027063639317, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.59952675442471359, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 96,0.60819414381914372, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.60200873015873013, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.58834710074505991, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.59733965014577262, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.57844847895868301, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.60145397119886912, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.57881681243926142, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59051709956709952, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.58079197457985332, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.59692936507936512, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 100,0.5635523809523808, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.59278338945005604, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 99,0.55163299663299659, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 0.5, 98,0.59332604470359573, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.60415370910268873, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.60888954479863566, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.58524691358024683, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.55949708454810498, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.60328807556080288, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.58637835789350934, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.60070281385281388, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.56222465176546799, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.55114499978136333, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.60910818138090861, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59258938592271926, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.57338730158730167, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.58394329004329004, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 97,0.60679720623019595, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.61123877256530312, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59143141370414087, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59756183771335281, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59029027650239774, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.59871875901875904, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.60118874458874461, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.6148643873133669, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.60206349206349208, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.58543152958152955, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.58652509055570279, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 98,0.5999684159378037, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.60872265512265511, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 97,0.59893530295592146, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.61338784672118007, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.61659539114084561, 0.11 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59051204687568315, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.58773864182955105, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.5755325396825397, 0.26 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.57498112437506377, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.59179199134199134, 0.13 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.58592483274301443, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59849301091725327, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.62122013788680464, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.57973435655253835, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.59380670995670981, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.61770555555555562, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.58037085137085132, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.59323968253968251, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.59339571763814192, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.58992624659291326, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.58805757575757556, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.56439451659451656, 0.27 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.5670349927849927, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.56592439546984996, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 100,0.58626767676767666, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.0, 99,0.57399368869065848, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.57812140160625003, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58613195446528787, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.55401394901394896, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.55041558441558447, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58366216275307181, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.58349011544011542, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 96,0.58653363997113994, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.57364895308772867, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 96,0.60074562590187586, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.55850907029478458, 0.15 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.57536313056931609, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.5719628538700704, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.57707143585931464, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.58558205966369237, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.55819841269841275, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.54443325382100893, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.61433673469387751, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.58556428571428565, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.60193605147686791, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.55657921203375749, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.56589635421268081, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.60574101068999031, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 96,0.59150087181337174, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.62506529945923883, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.57975461537317208, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58356384916990978, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.57362605648319931, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58127282930313229, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.57501253516405038, 0.18 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.56312694039966771, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.60098685265351937, 0.21 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.59735000000000005, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58674078446805711, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.59233780809538383, 0.16 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.5653624436787702, 0.25 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.59649578879170706, 0.2 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.53936522512280083, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.58089757604909131, 0.26 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.58678733398121152, 0.22 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.58729451659451659, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.58344877344877344, 0.23 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.57138662025259968, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.55137159518602818, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.61791588321891355, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 97,0.58763950253640962, 0.24 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 98,0.60637261831139389, 0.19 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 100,0.60189307359307354, 0.17 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.6073368606701941, 0.14 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.59935604238634532, 0.27 5e-06, 0.1, '1.0/(t**0.01)', 2.5, 99,0.60314931420992024, 0.21 ================================================ FILE: p4-smartcab/smartcab_params_summary.csv ================================================ epsilon,gamma,alpha,defaultq,successes,avg_buffer,avg_penalties 0.20 0.50 '1.0/t' 0.0 87.78 0.5179 1.0810 0.10 0.50 '1.0/t' 0.0 94.20 0.5709 0.5732 0.05 0.50 '1.0/t' 0.0 96.50 0.5709 0.3664 0.01 0.50 '1.0/t' 0.0 98.36 0.5829 0.1926 0.05 0.01 '1.0/t' 0.0 98.00 0.5705 0.3694 0.05 0.10 '1.0/t' 0.0 98.10 0.5747 0.3604 0.05 0.20 '1.0/t' 0.0 97.12 0.5685 0.3834 0.05 0.25 '1.0/t' 0.0 97.18 0.5726 0.3538 0.05 0.50 '1.0/t' 0.0 96.50 0.5709 0.3664 0.05 0.75 '1.0/t' 0.0 94.02 0.5573 0.3822 0.05 0.99 '1.0/t' 0.0 75.30 0.5399 0.6030 0.05 0.01 '1.0/(t**0.5)' 0.0 98.06 0.5709 0.3710 0.05 0.10 '1.0/(t**0.5)' 0.0 97.98 0.5682 0.3638 0.05 0.20 '1.0/(t**0.5)' 0.0 97.76 0.5767 0.3568 0.05 0.25 '1.0/(t**0.5)' 0.0 97.68 0.5722 0.3636 0.05 0.50 '1.0/(t**0.5)' 0.0 96.62 0.5696 0.3616 0.05 0.75 '1.0/(t**0.5)' 0.0 93.76 0.5539 0.3888 0.05 0.99 '1.0/(t**0.5)' 0.0 69.60 0.5312 0.7028 0.05 0.20 '1.0/(t**0.001)' 0.0 97.98 0.5691 0.3600 0.05 0.20 '1.0/(t**0.01)' 0.0 97.80 0.5653 0.3730 0.05 0.20 '1.0/(t**0.25)' 0.0 97.60 0.5724 0.3606 0.05 0.20 '1.0/(t**0.5)' 0.0 97.76 0.5767 0.3568 0.05 0.20 '1.0/(t**0.75)' 0.0 97.88 0.5694 0.3632 0.05 0.20 '1.0/t' 0.0 97.12 0.5685 0.3834 0.05 0.10 '1.0/(t**0.001)' 0.0 97.72 0.5733 0.3616 0.05 0.10 '1.0/(t**0.01)' 0.0 98.34 0.5737 0.3634 0.05 0.10 '1.0/(t**0.25)' 0.0 98.06 0.5723 0.3608 0.05 0.10 '1.0/(t**0.5)' 0.0 97.98 0.5682 0.3638 0.05 0.10 '1.0/(t**0.75)' 0.0 97.80 0.5707 0.3788 0.05 0.10 '1.0/t' 0.0 98.10 0.5747 0.3604 0.05 0.01 '1.0/(t**0.01)' 0.0 97.72 0.5761 0.3618 0.05 0.01 '1.0/(t**0.25)' 0.0 98.06 0.5722 0.3608 0.05 0.01 '1.0/(t**0.5)' 0.0 98.06 0.5709 0.3710 0.05 0.01 '1.0/(t**0.75)' 0.0 97.84 0.5713 0.3718 0.05 0.01 '1.0/t' 0.0 98.00 0.5705 0.3694 0.000 0.10 '1.0/(t**0.01)' 0.0 98.70 0.5861 0.1706 0.000001 0.10 '1.0/(t**0.01)' 0.0 98.90 0.5885 0.1728 0.000005 0.10 '1.0/(t**0.01)' 0.0 98.96 0.5869 0.1686 0.00001 0.10 '1.0/(t**0.01)' 0.0 99.12 0.5926 0.1640 0.001 0.10 '1.0/(t**0.01)' 0.0 98.98 0.5963 0.1692 0.01 0.10 '1.0/(t**0.01)' 0.0 98.66 0.5884 0.2058 0.05 0.10 '1.0/(t**0.01)' 0.0 98.34 0.5737 0.3634 epsilon 0.050000 gamma 0.500000 defaultq 0.000000 successes 96.620000 avg_buffer 0.569594 avg_penalties 0.361600 dtype: float64 epsilon 0.05000 gamma 0.25000 defaultq 0.00000 successes 97.68000 avg_buffer 0.57221 avg_penalties 0.36360 dtype: float64 ================================================ FILE: p5-capstone/.ipynb_checkpoints/2-analysis-code-py2-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis - Code" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LSE daily data: Exploratory" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The data has no header, so I'm going to add one.\n", "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Quick feature engineering for exploratory purposes\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.000000
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.9644131.7202680.3076701.720268
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.6783251.2085420.3255291.208542
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0000000.0000000.0000000.000000
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.5100000.9481260.0770290.948126
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.7600001.3981100.1956961.398110
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+061.1700002.1221970.4472942.122197
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+0812.12000016.0482924.08111016.048292
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation Percentage Variation \\\n", "count 10010.000000 1.001000e+04 10010.000000 10010.000000 \n", "mean 18.707358 3.408274e+06 0.964413 1.720268 \n", "std 14.122609 7.532096e+06 0.678325 1.208542 \n", "min 1.522366 0.000000e+00 0.000000 0.000000 \n", "25% 5.442764 7.536000e+05 0.510000 0.948126 \n", "50% 15.099474 1.904100e+06 0.760000 1.398110 \n", "75% 31.889513 4.051675e+06 1.170000 2.122197 \n", "max 50.533702 2.408085e+08 12.120000 16.048292 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "count 10010.000000 10010.000000 \n", "mean 0.307670 1.720268 \n", "std 0.325529 1.208542 \n", "min 0.000000 0.000000 \n", "25% 0.077029 0.948126 \n", "50% 0.195696 1.398110 \n", "75% 0.447294 2.122197 \n", "max 4.081110 16.048292 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZcAAAEZCAYAAABb3GilAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXfYFcX1+D+HjgiIoiKIgB27qChq9E1s0Yg9tthrxBgT\nExONiYKdGOPXmBhNfkbRWBOjYsSGil1sERQUKwhIEUGKdDi/P2bHu3fv3vrure/5PM99dnd2d2Z2\n7u6cmTNnzoiqYhiGYRhJ0qraGTAMwzAaDxMuhmEYRuKYcDEMwzASx4SLYRiGkTgmXAzDMIzEMeFi\nGIZhJI4JF6PsiMhfReSSaufDMIzKYcKlTIjIZBFZLCILROQrEXlURDYMnb9dRJYF5+eIyFMiskWO\n+HYXkWeC6+eJyCMi0r8yT5ORlzEisiTIy2wReVBE1s92vaqeo6pXVShv64jIS0GZzhORl0Vk9xzX\nXyYid5UpL5eLyHgRWSEil8acv0REpojI1yJyj4isGTrXU0QeDt6dz0Xk7NC5PUVkYVD+C4L91SJy\neI68nC4i74vIfBGZISL/FZFOCTzj7SJyeZ5rdheRsUFe3xGRPXJce5KIvBnk83MRGS4irULnu4nI\nQyKySEQ+E5HjQufaisi/gvDVIrJXTPwDROT5oMxmiMh5pT67kRsTLuVDgR+oahdgA2A2cFPkmuHB\n+Q2D87fHRSQig4AngYeCuPoB44GXRaRvOTKfBwWGBHnfHFgLuCHuwnDFUCEWAacD66lqN+D3wKN5\n8lGumcQfARcC/42eEJGTgR8Bg4CewBrAn0OX/BP4BFgXOBi4WkT2BlDVl1S1s6p2Cf6Dg4GFwBNx\nmQjuuwo4RlW7Av2B+xN5wjyISDdgJDAc6Apch/s/uma5pSNwPrAOsCuwD/DL0PmbgaW4cjkB+Guk\nkfUirlxnxORlHeBx4K9AN2BT4KlSn83Ig6rarww/4DPge6HjA4EPQse3A5eHjg8CFmSJ6wXgppjw\nUcAdwf7ewFTgYuBL4FPg+NC17YA/AFNwH97NQPvIvRcAs4DpwCk5nu054LTQ8RBgfOi5bgYew1V4\n34t51kOB/wHzcRXw/kF4F+D/AV8E+bkCkODcJsAY4GucIL63gP9AgMHAKqB7lmsuA+4MHf8f8HmQ\ntzeAPSPX3g+MABYA7wIDCsjHXcClkbB/Ab8MHQ8ClgAdgE7AamCd0PlbgRFZ4r8duC1H+r8A/pPj\nfCHvRsZ7BZwJLMdV9guAR2Li/gHwXiRsEnBqgd/Rz328OAG8DNgkdH4EcHXMfVOBvSJhV2UrQ/sl\n/7OeSwUQkTWAY4BXs5xfE9faejvmXEdgd+DfMbc+AOwXOu4BrI1rCZ8C/E1ENgvODce11LYLtr2A\nSyP3dg7uPQP4S47WZTh/3YEjI3k/DrhCVTsDL0euH4irEH6hrhW9FzA5OD0CV1ltDOwYPNsZwbkr\ngCdVdS1cTy/aC4zmaxyu0nsY+Luqzsn3LAGv48qoG3AP8C8RaRc6PzgI7wo8CvylwHjz0QpXyW+G\nE4oabD0CbBO9KXi3jgTuyBH3WOAAERkaqKjaRc4X8m5kvFeq+nfgbuD36npRhxb2qPHPkoW9gAnB\n/ubAClX9JHR+HLB1gXHtBnhV6axAtdy7wHuNYqm2dGvUH67nsgCYi6swpwFbh87fjmupzsW11B8G\n+sXE0wvXit085twBwLJgf+8gnQ6h8/cDlwT7i8Lx41rKn4bu/QZoFTo/CxiY5dmeC66fi2sh3kXQ\nyg6e647I9d/2XIBbgOtj4lwPJwzah8KOBZ4J9kcE9/Yq4j9ohxPqJ+a4Jq3nEnN+LrBt6NqnQuf6\nA98UkI+4nsvpwAdAH5ygegTXw9o1OP8CcCPQHhgAfAW8HxP3icAnBeThgCCNucF7eT2pXmG+dyPX\ne5XWK41Jd+0g70cDbYCTg+f8awF5Pg3Xi1w7ON4T+CJyzRnAszH3xvVcJgXPPyB4N24EXirmu7Zf\n4b82GOXkUFV9TkQEOAx4QUT6q+rs4Px1qpox0BthHk64bAB8GDm3ARBukc9T1aWh4ylATxFZF6dS\neMtlBXAt5XDL+CtVXR06XgysSXbOU9V/ZDk3Ncd9vXEqsyh9gLbAjCCPEvw+D85fCFwJvC4ic4E/\nqmrsGJVHVZcD94vIRBF5R1XfzXU9gIj8ElepbRAEdQa6hy6ZGdpfDHQQkVaRsiuEf+B6YGOA1rjK\n/mBcIwRcT/Zm3PN/ihNQcS30k4A7I8+wkNQ40laqOk1Vn8SN2yEi38X1hD8QkYfJ/27EvleFPKSq\nzhWRw4LnuznIw9Oh54wluOcqYB9VnRsEL8KpTsN0xalfC2EJ8JCqvh2kMQyYIyKdVbXQOIwCMbVY\neREAdTyEa7HtWUwEqroYp077Yczpo4HRoeNugRrNsxGuVzQHVxFuraprB7+11KmlykGuAfKpuPGT\nuPCluB7Q2qraLcjjdgCqOltVz1LVXsCPgZtFZOMC89MWp2rLiYh8ByfEjgrS74Zr5UvuO4sneCeG\nqWo/Vd0IeB+YrqrTg/NTVXWwqq6vqoNwA9ivR/K7IdBERLhoaLBfVTMqcVV9DngWp5oq5N3I9l5B\nAcYQqvqiqg5U1e44Ydg/+iyR5/o+bozpYFWdGDr1IdBGRMLvz/ak1Gb5GB+TX3MLXyZMuFQIETkU\nZ1U1Md+1MVwEnCwiPxGRNQNzzCtxOuRh4WSAYYFJ5ndwg6kPqKoCfwf+L+jFICK9RGT/5jxTidwG\nnCoi3xVHTxHZQlVn4ix3bhCRzsG5jb05qYgcJSK9gji+xvXmMnoLIrKriOwRlEEHEfk1TuU2toC8\nrQmsAL4SkXbizIc757knq+ARkTYi0gH3nbUVkfbeai34DzcO9rfCteyHhe7dMviv24rICbjxpz9G\nkjgJeFlVP8uZQZFDROQYEVkrOB6IU3e9WuC7EfteBedmkUdwi8gOQVl0CZ7zc1V9Osu138NZyh2p\nqm+FzwUNrf8Al4vIGiKyJ24M7K7Q/e2CMgdoLyLtQ1HcDhwuItuJSFvgdzi1mPVayoAJl/LyqDjb\n/vm4AemTVPWD4FzBLSZVfRmnMz8SZ83zGa7Ftoeqfhq6dAZOjfYF7oM7W1U/Cs79GvgYeE1EvsZV\n5JvnSjbBc9+GqeobwKk4q6z5OLXQRsHpk3C68Ik43fi/cIPJALsAY0VkAW586qeqOjkmrfa4QfY5\nONXL94GDAuGVL89edfQhrowXk1vFl/ZsMfw9iONY4DfB/gnBue7AKBFZhFMT/j9VvS107wE4ddhc\n4CzgAFX9KhL/CeQeyPfMw1l2fRi8i3fizODvC87nezdyvVe3AVuLyFwR+U+W9H+F+z+mAOsDWefj\nAL/Fqb5GSWouT1iNei5OjTcbJ4R+rKrvh85Pwo0H9sSZZi8WkY3g2x7bb3BWljNxQvH4HHkxmoEf\n0Cv+RpHbcDriWV51EYSfhzNNXQk8pqoXBeEX43TZK4HzVdXsyxNE3FyGuwIVi1EgIuIHti+odl5q\nEXuvjFJpTs/ldlzr6ltEpAnXTd1WVbfF2c4jbpLT0Thd64E4fXniemzDKIZATXQA8Ga182IYjUbJ\nwkVVX8J1lcOcA1yrqiuDa7wl06HAfaq6MlBlfAQMLDVtw2guIvIDnCroVVLjB4ZhJETSYy6bA3uJ\nyGsi8pyI7BSE9yJddz09CDMSQlWfN9VF4ajqY6raXVXP9I0hIxN7r4xSSXqeSxugm6ruJiK74AZk\nCzUXNQzDMBqEpIXLVJypIKr6hoisEucsbjopiyBwk8emx0UgImZ3bhiGUQKqWjNj2c1Vi/lZ1J6H\ncY4KEZHNgXaB+eRI4JjABr0fzn9R1klUSbogqOffZZddVvU81MrPysLKwsoi96/WKLnnIiL34GYH\nryMin+P8Lv0DuF1E3sV5Lz0JQFUnisgDuPkLK3Du2muvNAzDMIxEKFm4qGq2yUcnZrn+GuCaUtMz\nDMMw6geboV/DNDU1VTsLNYOVRQorixRWFrVLyTP0y4WImMbMMAyjSEQEraEBfXO5bxhG1enbty9T\npkypdjbqgj59+jB58uRqZyMv1nMxDKPqBK3uamejLshWVrXWc7ExF8MwDCNxTLgYhmEYiWPCxTAM\nw0gcEy6GYRhG4phwMQzDKIA77riD7bbbjk6dOtGzZ0+GDBnC/Pnzq52tmsWEi2EYRh6uv/56Lr74\nYq6//noWLFjAa6+9xpQpU9hvv/1YudJWbIjDTJENw6g6tWyKvHDhQnr27Mkdd9zBkUce+W34N998\nw8Ybb8zw4cOZMmUK7733Hq1bt2bUqFFsvvnm/OMf/2C77dwK8DNmzOC8887jhRdeoHPnzvzsZz/j\nvPPOA2DYsGFMnDiRDh068NBDD9GnTx9GjBjBgAEDYvNjpsiGYRgNwCuvvMKyZcs4/PDD08I7derE\ngQceyNNPPw3AyJEjOeaYY5g3bx7HHXcchx12GKtWrUJVGTx4MDvuuCMzZszgmWee4cYbb/z2PoBH\nH32U448/nvnz5zN48GDOPffcij5jOTDhYhhGzSOSzK8U5syZQ/fu3WnVKrO63GCDDZgzx63mvtNO\nO3H44YfTunVrLrjgApYtW8Zrr73GG2+8wZw5c7jkkkto3bo1ffv25YwzzuC+++77Np4999yTAw44\nABHhxBNPZPz48aVltoYw9y+GYdQ81dSYde/enTlz5rB69eoMATNjxgy6d+8OQO/evb8NFxF69erF\nF198AcD06dNZe+21Abde1erVq9lrr72+vb5Hjx7f7q+xxhosXbo0Nr16on5zbhiGUQEGDRpE+/bt\n+c9//pMWvmjRIh5//HH22WcfAKZOnfrtOVVl2rRp9OzZk969e7Pxxhszd+5c5s6dy7x585g/fz6P\nPvpoRZ+j0phwMYxm8MYb1c6BUW66dOnCpZdeynnnnceTTz7JypUrmTx5MscccwwbbbQRJ57olrB6\n6623ePjhh1m1ahU33HADHTp0YLfddmPgwIF07tyZ3//+9yxdupRVq1YxYcIE3nzzzaxp1qpxQzGY\ncDGMIlGFuXNh1SoYOBDMErXxufDCC7n66qv55S9/SdeuXRk0aBB9+vRh9OjRtG3bFoBDDz2U+++/\nn27dunH33Xfz0EMP0bp1a1q1asV///tf3nnnHfr168d6663HmWeeyYIFC7KmJ6UOENUQZopsGEVy\n//1w7LGwYgW0bQtLl0L79tXOVX1Ty6bIhTBs2DA++eQT7rzzzrKnZabIhtGgTJ/utqtXu20d14mG\nUTZMuBhGkXiPH16o3Hpr9fJiGLWKqcUMo0i8OnzJEujYEQ49FB5+uLp5qnfqXS1WSUwtZhgNzqRJ\nbrtiRXXzYRi1iAkXwyiCZctS+zNnuu2oUdXJi2HUMiULFxG5TURmiUiGnwIR+YWIrBaRtUNhF4vI\nRyLyvojsX2q6hlFNfG8FnKWYYRjxNMf9y+3ATUCa7Z2IbAjsB0wJhfUHjgb6AxsCo0VkMxtcMeoN\nbyEG0K1b9fLRaPTp06ch5nZUgj59+lQ7CwVRsnBR1ZdEJO4pbwAuBEaGwg4F7lPVlcBkEfkIGAiM\nLTV9w6gGzz+f2m/Xzm1/8Yvq5KWRmDx5crWzYCRMomMuInIIMFVV342c6gVMDR1PD8IMo6742c9S\n+74XY+oxw8gkMa/IItIR+A1OJdYshg4d+u1+U1MTTU1NzY3SMBLnhBOqnQOjJTNmzBjGjBlT7Wxk\npVnzXAK12KOqup2IbAOMBhYDghtbmY5Tf50GoKrXBvc9AVymqhlqMZvnYtQyfligSxfwrqEuugiu\nuaZ6eTIMaLx5LhL8UNX3VLWHqm6sqv2AacCOqjobN/5yjIi0E5F+wKbA681M2zCqRg6fg4Zh0DxT\n5HuAV4DNReRzETk1comSEjwTgQeAicAoYIh1TwzDMBqX5liLHZ/n/MaR42sAUx4YhmG0AGyGvmEY\nhpE4JlwMo0DCEyg9HTpUPh+GUQ+YcDGMAlm1KjNs6dLK58Mw6gETLoZRILacsWEUjgkXwyiQbMLF\n7B4NIxMTLoZRINZzMYzCMeFiGAViwsUwCseEi2EUyHnnZYZtvXXl82EY9YAJF8MoAFW4//7M8D32\nqHxeDKMeSMwrsmE0MnPmZIZde60TOl9/Xfn8GEatYz0XwyiA8ATKl16Ce+6BCy+sXn4Mo9axnoth\nFEDY3HiPPUwdZhj5sJ6LYRRA3Ox8wzCyY8LFMArAhIthFIcJF8MoAJvjYhjFYcLFMArAei6GURwm\nXAyjAKznYhjFYcLFMArAei6GURwmXAyjAHIJF/OKbBiZmHAxjALIphYTqWw+DKNeMOFiGAWwciVs\nvz1MnlztnBhGfWDCxTAKYMUK6NQJ+vSpdk4Moz4w9y+GUQAHHwzz51c7F4ZRP5TccxGR20RkloiM\nD4X9XkTeF5F3RORBEekSOnexiHwUnN+/uRk3jEpSbsFy0UXw6qvlTcMwKklz1GK3AwdEwp4CtlbV\nHYCPgIsBRGQr4GigP3AgcLOIDYUahmf4cLj55mrnwjCSo2ThoqovAfMiYaNV1Tsnfw3YMNg/BLhP\nVVeq6mSc4BlYatqG0YiYSbPRSJRzQP80YFSw3wuYGjo3PQgzDMMwGpCyDOiLyCXAClW9t5T7hw4d\n+u1+U1MTTU1NyWTMMEqgUj2Kb76pTDpGYzBmzBjGjBlT7WxkRbQZX46I9AEeVdXtQmGnAGcC31PV\nZUHYRYCq6vDg+AngMlUdGxOnNidPhpE0c+fCOuu4/eirOXy4Oz98ePPS8COQq1fbxEyjNEQEVa2Z\nt6e5ajEJfu5A5PvAhcAhXrAEjASOFZF2ItIP2BR4vZlpG0ZFWLLEbf/85/KntWhR+dMwjEpQslpM\nRO4BmoB1RORz4DLgN0A74OnAGOw1VR2iqhNF5AFgIrACGGLdE6NeWLzYbXfZpfxpzZ4NnTuXPx3D\nKDclCxdVPT4m+PYc118DXFNqeoZRLXzPZY01yp/Wppua1ZjRGJj7F8PIw5IlsN56sM028edNGBhG\nJiZcDCMPS5bAllvGn7PBd8OIx3yLGUYeFi2Cdu3KE/fKlfDll+WJ2zCqifVcDCMPM2dC69bliXvI\nEOjZszxxG0Y1MeFiGAWw4Yb5rymFCRPKE69hVBsTLoaRg6lT4cwzoW3baufEMOoLEy6GkYPHH3fb\nco25mEGA0aiYcDGMHPTv77bl6rm8/HJmmJk2G42ACRfDyIHvWSxblvu6JIkTOIZRb5hwMYwcrA5W\nJ7rzzsqluWpV5dIyjHJhwsUwYli1CtZeG8aNc8cLFlQubRuHMRqBFitcTjwRRo+udi6MWuWxx2De\nPHjqKXfcqwJL2333u25rwsVoBFqscPnnPyur6jDqCz9pslXwhey3X/nTPOus9DQNo56x19gwYmgT\nOEbyvYgTTih/mt4izYSL0Qi06Nf4dVuuzMjC/fe7bfv2cMQRsM8+5U/T95bMFNloBFq0cPn442rn\nwKhVbg9WJnrggfzWW0kJA99jMWsxoxFo0cLFBk6NQnjkkeznknyHfFze/Nkw6pkWLVwMo1aYOdOE\ni9FYtGjhsttu1c6BYTjWWy+lFttgg+rmxTCSoEULlwMOqHYOjJbMJ5+k9kVghx3cfhtbws9oAFq0\ncDGMQvDzT5LmscfSj3v2hE02KU9ahlFprI1kGCH+9Cd48830sFtvLU9avofy2Wflid8wqkmLFy5f\nfQXdu9vcAsNx/vlu2749XH457LJL+dOMLqFs76LRCJSsFhOR20RkloiMD4V1E5GnRGSSiDwpIl1D\n5y4WkY9E5H0R2b+5GW8OK1em9hcvrl4+jNpl2TIYPDjl76sceKuwsHAx83ijUWjOmMvtQHRI/CJg\ntKpuATwLXAwgIlsBRwP9gQOBm0Wq9xk98YTb/u53KQudFSuqlRujVon2KJImTrgYRqNQsnBR1ZeA\neZHgQ4ERwf4I4LBg/xDgPlVdqaqTgY+AgaWm3VzCgsTPhl6ypDp5MWqXcvv48u9eNB1TixmNQNKf\nz3qqOgtAVWcC6wXhvYCpoeumB2FVITxJzYSLkY1y961nz3ZbU4sZjUi5B/RLaoMNHTr02/2mpiaa\nmpoSyo4j/DH78RcTLkaUclf0117rtqYWM0phzJgxjBkzptrZyErSwmWWiKyvqrNEpAcQtM2YDvQO\nXbdhEBZLWLiUg/btU/u+52KqCKNamHAxSiHa8B42bFj1MhNDc9ViEvw8I4FTgv2TgUdC4ceKSDsR\n6QdsClTd4f0Pf5huOWa0bCZNSj8utMHR3IaJmSIbjUjJPRcRuQdoAtYRkc+By4BrgX+JyGnAFJyF\nGKo6UUQeACYCK4AhqtX7hPyiTKtWwTPPVCsXRq3xxRfpx927578nCdWZjbkYjUjJwkVVj89yat8s\n118DXFNqekniVWErV8LPflbdvBi1Q+fOqf2334auXbNfmwQbbAAzZpgvMaMxaZG+xbwqLLwok6ki\njLAVYVjQlAvfMzJTZKMRaZHCZcUKpxqzFf+MMAsXwlpruf0NN2x+fJtuCrvv7noncbz7bmaYqcWM\nRqFFCpeVK6FDBxvMN9I57TT4+mu3H7YoLJVPPoFXX4WnnkqFzZ4Ne+zR/LgNo9Zp0cLFei5GmOkh\n4/gkexAXX5zaHzcOXnklubgNo1ZpscKlfftUK9UwANZZx23Hj899XbGE1WJ+XMc7TF177czrbczF\naARapJ2K77lMmJAKsw+65aLqfj//Obz4Imy7bWnxrFqVf0KkFy4LF8KPfpS5GqqNuRiNQosTLqtX\nw0MPOeHSti0sX17tHBnV5o473HgLNG+2fJs28OSTsH8BC0o89lhhwsgw6pUWpxabOBFGjnTCxeYX\nGKopwQLNH4d7553c573q7fTTswsX60UbjUCLEy7+w23f3qzFDHjhhWTj+/WvM8P2289tp02DXXdN\nha9enSlcTC1mNAo1LVxEyjfo3r69qcQMt+JkuXn6abc988z08JUry79mjGFUi5p/tbNNQGsuHTqk\nLxrmezTLlsHkyeVJ06g9oqrRww8vTzrnnpup7nrkERtzMRqXmhUuCxe67VZblSf+sKuPMFdcAf36\nlSdNo/ZYY4304/D4S6FEhcY992Rec/PN8ffamIvRqNSscAkPjGYTBM0h2wf82WfJp2XUHpMnO7Vr\nnAuWYogbI/nRjwq/38ZcjEalZoXLxImp/XnzkovXf8zZ3HuMG5dcWkbt4v/ns85KDw/PfSqGu+7K\nf01cg8bGXIxGpWZf7R//OLWf5MC77wWNHJke7j98azm2DJ57Lj78nHNKi++RR/JfE2edaGoxo1Gp\nWeESJknhkm8eQ7nX8DBqg5tuSj/u29dtu3QpLb4HH8x/zbPPZoaZWsxoVFqccFmyJPf5o45KLq2W\nTqkqpkqwxRbpx80xSc7V08jnut+sxYxGpabnqA8YAEuXJitcBg3Kfd504MmxzTawYEFlFt4qlrPO\ncr7EAG691a0K+dVXpcWVzeCkb18YNSq3xaO9b0ajUpOv9kcfpfbbtSvPZMchQ+LDTS2RLLXqBSE8\nx6l3bxg8GE45pbS44oTLypXOIi2fiyEbczEalZoULptv7rbHHOMmUc6alXwam2zitjvt5ASYfdDl\noU+f1JylanLllXDIIanjsHBp1655cceN43nrsbjGin+/IbO3ZI0bo1GoSeHiOfZYJ1jClUJS+Bbl\njTe6CtBjH3eyLFwIf/97tXMB994Ljz6aOr7kktR+hw7Nizuu5+J723HvU7ghM2dO89I2jFqlpoWL\nFwDhVmZS+I++bdv4cKN5hCvQcvx/xRKnfho82I2J7LZb8+L++OPMMP/8cWMq4bKJU5tZL9poBGpe\nuOy+e7yn2STTMJInPE5WC+MuS5dmhp19Nhx4YPMttkaPzgzzAlUEpkxJP3fiial9r571WOPGaBTK\nIlxE5Oci8p6IjBeRu0WknYh0E5GnRGSSiDwpInlnlLRuDd/7Xnncv3gHhdGei8daj83jhhtS+81d\nIyUJwkYiqq5R4V3hJ8XRR6f2/TLGS5bARhulwpua4He/Sx3ns140jHolceEiIj2B84ABqrodztz5\nOOAiYLSqbgE8C1ycL642bZxgue665Cv7DTeExx935rKQit9vyyHQWhLhgepa6LmEWb7cqauaO5Af\nJdzr+MMf3DYqWC+6yF33j38km7Zh1BrlUou1BjqJSBugIzAdOBQYEZwfARyWL5Kwymr48MTzyPe/\n7z70cKXgK4NaaG3XM2G12BVXwFVXVS8vYVSdkcGaayYfd//+qX0/UO8bLx7v027PPbPHY71moxFI\nXLio6hfA9cDnOKEyX1VHA+ur6qzgmpnAevniCqusLr4Yxo5NOreZ+B5LowqX2bOdaqbcRMc4CnGP\nUglatUpWuIQbJoVYNfoG02abxQsRG3MxGoXEh7NFZC1cL6UPMB/4l4j8CIh+SjnaZ0MB19q95ZYm\noAmAL79MJo+5ZkU3unD58Y/h+efLn07SKqck2Wuv0n2INRczICmO9u2d+vp736t2TmqPMWPGMGbM\nmGpnIyvleNX3BT5V1bkAIvIQsDswS0TWV9VZItIDmJ0tgl13HcrBB8NvfwuXX54Kf+0195JFF3gq\nllzCxQuVJ55oTD9jlRAsAPvu6zwFT53qjqup6vnii/TjadOST2PzzaFTp/zXFSJcTC2WYvlyeP11\nEy5xNDU10RRSQwwbNqx6mYmhHGMunwO7iUgHERFgH2AiMBI4JbjmZCCrk/IePZxgiXLVVYV9wPmI\n83wcHcj/y1+an04t0twJg4WyahVsumn6cbUIT5ItFxtt5ARMPsGVzTrRY2qxTKxM6pNyjLm8Dvwb\n+B8wDhDgb8BwYD8RmYQTONdmiyM876AcwvjFF9OP4wb0a2HiXznItkha0qxalS7I3n23OgLmuusq\nY612zTVu26tX7utMLVY8YU/mqm7c0Kh9ymItpqrDVLW/qm6nqier6gpVnauq+6rqFqq6v6p+ne3+\n//wntR9dKbA5+AWi+vXLfo3vudSa+WxSHBbY6JW7ol+1KlOQtWlT+Vbor35VmXTixpji1KotWS32\nwQfFOaFL/zmhAAAgAElEQVT95pvMsHvvhfXXTy5PRvmo6Rn64FRko0YlE5fX2+b6wH2l26jCZd11\n3da3tMvF6tVOuFRKDVdt4sbxzj03MyyfcGlkFVD//sX1nK+4wm0//jglcJMy6jHKT80LF0h+JnUu\ndx+N3nPxvPFGeeNftcpVpEuWOOusMDvvXN60s7H22qn9rbdONu44oRBn8m1qscLxqum77y6vCyij\nPNSkcImutdKmDdxzT3Lx5/JU2+g9F+8Ha+TI8o4rrVqVEuIHH5x+7q23ypdumKefTj/25sdvv505\n7tZcFizIff6cc9y2kXsmSRN+P6+7zm0bdYpAI1KTwuWYYzLDfItv992TTy/8wTdyz+Xmm9PXcU9S\nYEe57DK48063X60Kdf/9049feAEmTYIdd4Ru3ZJJY9w4t50/P/d1N99ceJyNOuZSKE89BSNGxI/P\nmHCpH2qyk77ddplhXrhsv315025k4RIdAzjlFDj55PKk9fnnqf318vpiKC8zZrixu3LwSGBQv+uu\nqbDLLss+STOfoLWeDRxwgNuedlrmORMu9UNN9lzWWisz7P333bbclb5/eT/5pLzptCTCLuY9vpwX\nLsx0O58E4V5Zx47Jx+/xzxEexxs6FC64IPPaF190DlONwohrEJhwqR9qUrjE4Qf1yzVO4FURcWtz\nNBKVWvmwSxf4xS/cflxr3HtNnjYNPv003uy0OfzoR6n9SgiXQgbq99yzsJ5JI6jFFiyARYvc/hZb\nwJ/+lDoXdRYbxVuUhZeD9sRNrjZqk7oRLjvvDGecUZ6ei3/RFy1K6dDjuuT1jHfx3lzXOYWyYAGE\n3R5FW/Jz5zqV0lZbuePmrgaZi3yz4puDn/3f3AXHPI2iFuvaFTp3dvsffgiPPVb4vV64nnJKKmyn\nnRLLmlEh6ka4iLh5Kv/8J8ybV540woKrmMle9cDpp7ttJeedhFUY0d7DBRekJnQCvPde+fJRzgr7\n4Yfd1kyMU8SprorROMQ1IKvlaNQonboRLpBaq/zDD8uf1j//Wf40qkG4og3P+2gukybBgAHpYeH4\now2Cnj2TS7uaeNf9uZyhtjTiBO0HHxR+f9xCfV7gbLml25oLmNqnrj6JmTPd1uvr+/VLLSdbKLnG\nHFraYOGyZcnF9cMfwv/+lx4Wdv4ZLfdyLNYVx+23lzf+tdZyFV6SvaNGGHOJMmNGZljcc/qGY1TN\n6IWLF1yV8u5tlE5dCRdv0jp7tnsxJ08u3H26N42N84gMLj4vXPw8m0YSNrvvnpo46HsUSar+3n03\n/bhLl3QfUNHW6I03Jpd2LsrtqLNTp5QlYxI0yphLITzxRPpE11Gj3OA/pL69tdeGV1/NnNx8ww2V\ny6dRGnUlXH75Sxg40FWKvtVd6AC/H3iN67L7D9q/wH58oJE8I69cmXr2uXPddsWKzBUjm4uPb8mS\ndOOBP//ZtUr//vf4+3I5Ey2GrbZK9wjw6afJxGuUxmefZT930EFuoqtvePzgB5nXzJ3rejH+Gq9e\ne/XVZPNpJE9dCZdOnZxe/+yz3WxrSFYAROcsNNKg/sqVKaupW25J9eCStr6bN8+V48qV6Z6C11/f\nLe17xhmZ9zz2WMqyqLm8/366ZVKllhhIkkZSi228cfpx796Z1+SytOvSxY1nNZIWoaVQV8IFUr0M\nbzK8ww7JxR2ds9BowsU/19lnw9dfu3GPuMHTUjjpJLedNw+23dZVkIWoeLp0cRVOsWNnhZLk+1EJ\nGlktNmxY8d/UOus44TN/vnlErjfqTri8+abbPvlk8nG3FOHiEUmulex7CL/7XXFjEKtXux5VEtZW\nUa8KH33klls2aoNWrVIOPg88MP3clCmwzTaZ9xxxhBMun37qxlwbWfg2GnUnXLyr+GeeSTbe8IC+\n76Y36piLp1WrZITLBx+kxlK8uXgufK8TnHBp3dqNx+Rz/piPv/0t/Ti8zLJRGU44Ifu5zp1Tq0o+\n/nj6udWrndo0yh/+kK42a9cObrrJ5hXVA3UnXOIoVLWTzVIsOqDvXc20hJ5LEmqxjz7K3I9bmdGz\nzjqpfS9cIN6nXDE0ylyTehtzueyy1Df0wAPZr+vUKfu5FSvgoYfcGjhjx6afC/+vy5bBHns0pmPZ\nRqNuP8dDDkntF6qvv/zy3Oe9Lf7BB0PfvvnX6KgnVqwon1os/F/4lmkuwRx2SHjyycm5ThkxIpl4\nqkk9qn38d6Wa6u1PmJB+zcMPp/t78/z3v2579tlu+/3vO4vQMNH3Y8qU5uXXqAx1J1wuvthtvTkt\npBzk5WKddeD443Nfc+qpqf02bRpPLRb1sZWUWiyOqE49jK8sdt3VWa6FnVY2Z2Jn3EQ9o3KE/8eo\nafmhhzoT/9mz3cD8E0+48Keeclvvhy7sNfqHP3TbqHDx0wqM2qbuhIt3G/LSS6mwQjzqrliRW1UD\n6a3tdddtLPPHcqrF4sjnqLBbt5SOvX//VHip81LqscWfjXpTi3nCjkqzeaJed13o3h0GDXLH3bun\nnw8vFOj/06hw2XZbt506teSsGhWg7oTLiSdmekgtpOeyfHlu4RI1nW3dumUIl3BFJgK33ZZMevkq\n+y++SHlqDl+7yy7JpF+v1LOQHDw4/XjmTOeQ9JZbMq/t0sUJo1/9Kj08/I7GCZeOHVPXvP56s7Ns\nlJG6Ey5du2YuPrVwYf77li/P7nrdv8QtTbjEqcXCllyF4lUZxay10aFD/P+R9LouRuXxYzDrrw9b\nb50aT4my9965J7n6nm14QN+P6UHK16BRm5RFuIhIVxH5l4i8LyITRGRXEekmIk+JyCQReVJEsthu\nFRK/2x50kFuAKZ9wWbXK3ZNv4LilCZc4tdhNNxUftx+gb447/3XXLf3ecCVz9dXlXRysEowcGT/n\no9Z45BGn/vzOd9LDk1jQa8ECt6InZP9uf/KTwuNbsSJ96W2j/JSr53IjMEpV+wPbAx8AFwGjVXUL\n4Fng4lIjf/BBtx01yo29/L//l/v6BQsKExRnnw0bbOD227RpHOHirXiaO8/FW/Z4RJxqwxs++HXk\nS3HlP316+vFuuxXu+TbcuNh6azjzzOLTryWuvjrT2qoWOewwZ1kZ7W0Wq9rzrpzCdO6cEipJqAq7\ndzdDgEqTuHARkS7Ad1T1dgBVXamq84FDAW8sOgI4LEsUefEv4957u4pkjz1yX19oZde5c8pCpVWr\nxrGl98+Sq+eST0AvW+Z06qtXO6Hr3el//LETLu++m5oNX0plEFWRjR3r5j1k45lnUk4ywzr9Dh3q\nu1EQLrt6GNhv2xbefhu23770OKI9nyhJzF/yE2qXLDF3/ZWiHD2XfsAcEbldRN4Wkb+JyBrA+qo6\nC0BVZwLrlZrAdtu5bY8ebmJWEi0bP0Pfv8hPPOHMJxuJ6EcaHtDPN0fEV9hff+0Gab1K4swznXAJ\nC4dSK4PofbkWmNp3X7jjDrf/xz+mwutduIQpl7+1JPFGMqWM1RVKEt+3n6B71FFuoqZRfsrhRKEN\nMAA4V1XfFJEbcCqxaDssa7tsqFe2Ak1NTTRF3oY773QOCe+/H372s+a38MIz9MP63UappLKRTS32\npz/BT3+aOl6+PGUiOmhQvLWen319/PGlqx/uvNO55vc9xnxzXpYvz8x/q1blM6+uNAMGuBU+axH/\nzXiV2Eknuf+vHIQbHUcf7bbXXJOpps1GWDi9805y+ao2Y8aMYUzY/rvGKIdwmQZMVdXAxSQP4oTL\nLBFZX1VniUgPIOtCpWHhEodfxbBPn/yzzIsRPFHh4u9P0jz08svduhXRCroahNViYRcu55+fLlzm\nzEl9yB9+6NbgCDNvXsqly913l56fxYvhtdfgtNPccdS0Ncp772V6XWjbFjbfvPQ8VJvwuxZeznvr\nreGvf4W99qp8ngphn32ccInOrk8C/00edljq3fj4Y3j55eLjapSGB2Q2vIcNG1a9zMSQuFosUH1N\nFRH/ie8DTABGAqcEYScDj5Sahl8j4pVX8lf8xbiKmDYtc/GspF/Gyy5LX/63moi4Ckwkt9PIaBlv\ntFH68erVzbMU8/gey113uW02FzK+R/n3v8Nbb7n9AQPctn17uOCC5BdBqxTz5sWHT5wIzz1X2bxk\nI67B5pdc2Hnn0uK8/37nIiaOLl2cw9qHHoIDDnBhflvs/2zmy5WjXL5FfwrcLSJtgU+BU4HWwAMi\nchowBTi61MijvZVcvZNCVzhUTVX6N97obPRnzXKqmfCKis3BuydJoiIulFxeilu1SnmXPvDA7APo\nUd3/rFnpx8uXl2fyX3hOQ5jwjH7fqj38cDew3KqVy0s9LhIGudVgf/mLK5Orr66uk85s/8v8+aWb\ngR+dpzaICi1vofjFF5kLkoXJtgZM0hoJI5OyvKKqOk5Vd1HVHVT1CFWdr6pzVXVfVd1CVfdX1a+T\nSKvQF+SLL4qLw1egSQ6q+l5UPsusJIlzY+4RgX/+0+336OHGO847L2VS7Im6sr/++mTz6Ik2ErJV\nYmEVnhcivXq5bSNWGL4cvvwShg+v7kD/Bx+4dwTgxRfTz3Xpkn2ictJ44ZpP7Z1tDlwjqcdqlbqb\noR9HIeMqfv5KsST5EnpX4rXiEPOTT1K9qbvvdq3Ogw9OX3J42TL4/e8rk59oWRei8rj/frf1LdR8\n/uPqkVGj0o+rOYZ7993Obc9GG7kJzB9+CF99Vfl8eE/c+b7PbK6hGt1Ypxaoe+GS5GqKcdR7C6fQ\nOT4LFjh1XadO6ZPivI56553TXaaHHQ7mW8qgUKIffHRBqVyMGOFUSltskUxeaoloBZnP0KGc+N6K\ntw7cbLPSJs02F6+q3nrr3Nc9/rgzAIo2Our9u64HGkK4lIObb3bbJNd0qcYL/fOfF35tx46ZwuWz\nz9z2zTdTKjSAc85JDbgnVblEhUshq1p6dt+9vq3EsnHVVfDoo7mv+ewzZ9FXThYtcoPqfgJiMUtZ\nl5NcWgBVuOgiJwC9WXu7du49t55L+al74QLJ9FxU3RwOPx7y4x+7bZIqiPBKi82tDKZMyT4mEaYY\nLwOtWjnhMn48/PrXLuy7302/xk9YHDzY6dc//DC7Y8JiKeSDzzb3JTouVO/4nuFvf5tydxQm3JvZ\neGPnm63U5QoK4ZprymNmXE6GD3fb8He3fLkzArGeS/mpe+GSSy1WqNDxvZ911kk5UBRxwsa3hj//\nPN4HUjF4G31In0dSCn37OtVAPqedXriEx1GysWxZykVMtnGWn/3MucX36ojNNktuPfPdd0/tb7pp\n/EzquMHsFSsabyD/2Wdzn4/r1V1zTfy1661X2LIUubj66ubdXw1878rPi/O0amU9l0rQEMIlG8X6\nBov633r1VTjlFLc/fLjzZVYqX0ds4157rfS4wmQztfSsWOEqhmzzJ8K0b59u4hr+AL1gFXHraCRl\nnh0m7CNu553jveH6//TNN1NhSQm3WqF37/zm6nENp2xWiF9+mbza7Kijko0vSV55xZWFn/sUHbur\nlZ6LN4cu1NNAvVH3wgWy91CKbZ1EfWRBcut1H354+rEfy2gut96a+7xfgbOQdeo7dEgvS7+k9MKF\n+Z0LJoU3nT7jjPgKwI/zDBjQeL7fwBlH/Pvf6aqcONq2dRVTtHElkt6Q8C5Zdtop+6TUfMR9X5ts\nUlpcleAXv3A+73zPJdrIrJWei1fxPvlkdfNRLupeuORSi61c6VrYhfZgxo2Lt9OfM6f5reNymY/m\ncxgY5w05jtNPd27ue/dOhV13ndtG1Qrl5OST3Tabj7Dly51KUMTNq2g0fvc7N7YRXd8mukZKuOcW\nJdwr9uU5d67zQFEK4UFzP9nRW4vVIt4Ixze8DjzQbUeMcBNRa6Xn4v+PkSOrm49y0RDCJY6ZM13X\nffHi/K32ZcvcIPacOfHCZeDAwlr+1SCqbosS1xuLcsMNTo3Qtat7znvvdfMYvJvySrJe4Cs7m1PN\nN9+EyZPd/uDBbq5FS8D3fH1D6dRTs1970EHxY2abbJL/fYkjPN/o7rvdRMro8sS1xMSJ6cdeEJ50\nEgwZArNnZ15TaZYvT/XSG3URs7oXLhBfCZ16auHdzQ8+SA22x1XEX3xRmGVWMQwZUtz1TzzhWp9R\nxo51+Q/3zm65xQ2OqzqVVj7h4tew8Rx7rFORffxxSjVWKQ46yFnqZeu5hN2E/PCHmbPEG5Utt3T/\nZ7ZGTtQFSrY5QlGno4WwbJkzdlF1veAttqgv9zr77ZcZls2PWSW45BJ46qnqpV8p6l64ZFOLPfFE\ncfF4HWy2iji8IFUSfPJJan/8+PyuwA88MN0aKFxJ9O/vZk17HnzQGSMccIBraeYazD399JTrlDDe\nI+999+XOV9L06uW8/37zjVtl1HsQaOnkM6CIDgofFizFF/XZ9cYbhae5ZIn7vtZbrzqz8PNxySVu\nm8uo59e/hrPOygyvpm+2q6+GSy+tXvqVoiGES5RSuv6ecGW2ww5uG55bUcpAYFj4eSugcK9q++1h\nxx3zxxNOO5cfLn/d00+7bTZvut/5Tv7Z3kkZHhSLN7Hu2bM66dcbUesy7xYnzgS50N5ora4l4znx\nxNT+X/+a2g+PB8U1nCC+VzxmTOlGD4Xiv9P//c9tH3+8uoKunDTEY0Ur2uZ8FH7wD+CBBzLPl+LK\n/dVXU/t+Nrtf/yRMvsH5sBVQ9JnDg/ZRAZjN0eQLL+S3uDr22Nznjcpz5pmZYVEh4t+5UaPSPSsA\nXHttYemEPTXUIuF3fsiQlGAIW9p973uZ94nEWz9+97tO3fdIyYuB5CfaA+3Xzwm6RllSPUzdC5c4\ntVhzXNqHe0JxVlKljL34wdeddnJL8772WkpHHlaPjR3r1A/ZnGzecYerRPya9b5nAukfWrTntl4J\nC0p/9BFstRX84Q/F35sE4cmSo0enn6snfX85+NOfMsPWXz/79aXOSWruxMtyE7WC9Kq76dPd9pRT\n4n2PbbFF+ncXxa8nFMcrrzgDmFKIU9/7JUHCc7wahYYQLlHCvYtC1svO5r4kzsNuKcLFj1+ccIIb\nXFxrLaf7XrIk3SLr7LPdcsIzZ6a/iOFn7NzZvYh+rRnPO++kxmHGj09PvxRhu+mmMGFCdrVCJfEf\nsy8T79ajpRInXOMaEN6EuFMnZ+JcLOGe8p//XPz95SbfEg3Zxom6dcttivzBB9mnN+yxh1uMrhSi\n6q8BA1J1zOuvlxZnLVP3wgWyv2SXX17Y6n1eXxttEUYtczbdtHlWY7ODhZ19tz2qGjvooJTbj1x6\nWK+vfeyxVNgtt7ieTJzarmvX0vJbK4wa5dQGXu3RrVt181Npoi5+wo2N3XbLfl+PHm67xx7pc4IK\naXBBunA599zC7qkk0dVTV6xIN17JNj9r110zG1zevB1coyqf+51iCS9Z7fHLBngaTTVW98IlTi3m\nl0AtdG6K/1i32y49PNrt7tjRqWuKUReEW0h+31f2UUG1666F+UPzL2Hceurnn59+XM7lCCrJ4Yen\nyr1W5xyVi1yTWB97DKZOTR2Hy8abrnfq5HrEnkKNNObOdRXgL39ZeF4rSXQe1ooV6YI42+Thtm0z\nB+6jPuv23ddNuPQNuSjFfldxqrbLLnNbb9zTaPNdGkK4RPEvTrHOIaNqsGgl1rEj3HSTU00VutZI\n2Nmljy+bmioqbFavzu07LM7Sq1G8A0d7J//9b8rd+5FHVj4/tcjo0c5AZMMN3bFq+po7YXr3Ti0P\nvc02hcU/d64b+PaeGmqN6LSBbbdNb/1nM1Fu1y7TVX+csPjJT1L+ySDdUOY//ykur+GlO3r2TBeC\nr7zittZzqUGiL0afPq73UqzbkkKEi/dXdNBBhcUZjiOXPf6pp2YOnt9wQ0qXPmxY5oTBWnbB0VwG\nD87U83uh0hyDjUZBFfbZJzM811iCf3fD6tQwIunqm3nzalsFGac6Xrw4NSYVZ5EJ8PLLmWNQflnz\nON54w2kJwmvYxM2jW77cleFbb2We23575/j29dedwUG4btp+e7dNcu2oWqDuhUucWmyXXdLd2xfC\nU09lzjVp1y69q9qxY7pZcSGEBVYuq62XXspsuXzwQWr/N79xrk6iz5qrVVnPs9dF0vXgRmFEzdB9\nr6ZQfAX64INuQLwaq0wWSjbhssMO7t3JtkxA9LtYuDBeUHuee87ds+22qbB//SvzOj/r/tFH3f8Q\n/laXLnXWl7vsknnfYYc5ARMdQ6p3GkK4RFm2rPjW7X77xb+sYUeOpcxS9vrU6dNdN9sTNZEM68GP\nO85twy7Us+mPf/CD7GlnM2muF7xKohHNNAvhoIOKf/aouiff3Kkoc+e6hs5RR7leTC0Ll7hv/5tv\nXI++T5/sdUBUQ3HwwbnTiav0w2HHHOOMgnyPadUqJ6xatXKCZvp0ZxARnugZfY5+/TLTufTS8k/q\nLCd1L1wgvYWwfLkTAkmrTg45pDjXGR7v1qVnz3ThNWGC2+60k/NdFjaHvuee9Dhefjn9OOwxt39/\np764/vr0lQJVa9steiEcd5x7jgsvrHZOqsM99+Rf4jhK+Fu4/PJ04eAdJQLcdlv6fV4onXZaaoLh\nBx/Utlosl3DJRdSUO98igLmW3Vi+3E22HjIk1VNq0yY1PnjIISknn37MK46VK93S6l6tuXw5XHFF\nyo1PPVL3wiWqFjv2WDdAlqRwmT699Fm7RxyR6onEcfzxroeRS40X/Rieey59PGKttZzt/dixpeXR\nqE26di2+cv/LX+CZZ9x+dFzB6/bBrZcTJpu+v97GtxYvzi9coj0XbyU6Zowz2Q73+HN5RFdNF9he\njR1dJdQ3FrOt7grOYOWZZ1L1zMyZbluo4VAtUjbhIiKtRORtERkZHHcTkadEZJKIPCkiicy+iLZe\nRo1y2yRNcLP5t8q3JsQ55zj/R7ksvvyELG/58u67bhsWSNElirfeujbnHZSLsIl4PY8jVYL113cu\nT4p9/7MN8ocrz3rg+OPd2GguvIpZ1Q2w+0nHnTq5mfthd/zLl6ePhYYNHhYtSh+T9QIh6m7Hk2up\nce8l/YgjnKYi7LU56Tk3laKcPZfzgfCqCRcBo1V1C+BZIDFn7uEPyc9az/eClcKNN6Yf55vv4j0p\n5/N4DKnWkR+LCbdyNt+8sPw1Kv36uf9YteWs31IOogLntttSjlqji5M9+6yrSHNZONYq+dwDeeGy\n8cZubpmnUyfo3t1pArz/tnfeSXentMkmqYnZ+VaBjZLrOw5729hzz/T5armMDWqZsggXEdkQOAgI\nr+p9KDAi2B8BJKJNjKrF/CBwePwhKbyK4MADnS47brb+HXe4PGVrCXqGDk0/9s/gP+ZirXwMIx9R\nQXHGGa5XPm1a+pypu+92ThzrpdcSNTrIZ3Xl1WZRa8SwefCtt6bUXF4bAm7ctKnJlU3U5x2kj6vc\ne29qf+HC3AY2caq3uEnS9US5ei43ABcC4bbS+qo6C0BVZwIluFPMxH8we+/t9M0rVriBsHLgX4BR\no9yLGCdcLr/cbcOminEvVdRnV//+6Y4owS34VSyvvOIW2zKMKNl6Ib17p5swh2fz1yPeWCYbcY4/\nIX0sRiR17FXUYeHTtWv6shlHHeW2fkIkuMF4VWeGXMpS4fkMDWqdZq4Mn4mI/ACYparviEhTjkuz\naoWHhpr1TU1NNOVxhqTq/gj/Z7z7buaa40kQtvbq2DHej5d3IxGePRxnznnaaemtxVatnMuJMOee\n66zJimHQIPczjCj5VFzt2rkxhnpzrxN9rqjj1ijduzvjBm+mffTRrpcS9cHnv2HfAwkv0BcWFrNm\nOcOL22934dH5QYV48d5zz+K9a4wZM4YxY8YUd1MlUdVEf8DVwOfAp8AMYBFwF/A+rvcC0AN4P8v9\nWgxXX626wQZeI+9+RxxRVBQFc8cdLn5V1R12UH377cxrhg1z15xxRio/Rx5ZnvwYRjEcc0z6dxL9\njR2rOnNmtXNZHKB65ZWqr7+e/iy5GDdOtWfP1LVbbhl/3eefp67Zbz/VpUtT53ydM3Bgcs8yYUL6\nM+y4YyqsEIK6M/E6vdRf4moxVf2Nqm6kqhsDxwLPquqJwKPAKcFlJwOJLMkjkrkUbrncg4dbdB07\nptRihxwCV17p9n1XOmxJls2lv2FUkvPPd54ecpFrXZha5Kyz3Dyo8Mz3XOuxgBtr+eKL1HHYE0aY\nsHXX00+n90B8nRN1ntkcoibUd92VmqtWjw5oKznP5VpgPxGZBOwTHJeFsHvxJAmrxV59NbUGw6OP\npuYUeKESXtN+v/3Kkx/DKIZBg+Cqq9K9TnheeCHeNUmtc+utmfNWTjgh9z3RJQzOOSf+uvCKltnG\naaJu85tD3LiMf7YRIzLP1TplFS6q+ryqHhLsz1XVfVV1C1XdX1WbsdJ9ijg9cjnMkCHTN9g112Re\nE3XTYh58jVrDzx4PWzPttlt9mh1HKcQIJmx+DCmtQy6iq3l679NJGj9Eey7du6f+k0mTnBeOuFUw\nm5rcJMxaI/EB/UoT90HkWmirOey7b2pC5AknOHPhqC+nsL06FO/23zDKTY8errL0pq6LFmW6r69X\nCjFG6NMn/bgULwRDhzpXM0kSVrtF1WATJ8LIka4n8/Ofp597/vl07wu1Qt27f6k03bu77b33wrXX\nprqtXtUQXfDH+2kyjFqhY0dXMXqBUm8uXnJRSMMyql0oxJor2ojddFN46KHC81UIuXqOI0e6bTZH\nlnffnWxekqDuhYv/Q4YNc1s/s7bcRF2bL13q3ESEPRnvsUdjqBqMxqbeTI+z0bYtbLRR/uui32Qh\nz1/NMvrRj9LVcmFjId/DyeUUs1o0jHDxLhK22KIy6Ua7ocuWZS6JeuyxlcmLYZRC9+7w739XOxfJ\nMWmSWyk2SXxFXikXTAsXZi65vN9+6f4Nw5Zu3hPISy+VP2/FUvfCxeMdPkYtQcrFHXekHy9YkOmg\n0jujM4xaRKSxDE769cucCJmLffbJXM4iincvVamJyWuumWmQFFVbevc248aVb9pFEtT9gL5n773d\nNttJEecAAA1ySURBVOqAr1zEeTiNus0vl2GBYRjNp02b0lwsVZqOHZ23Zo8fd9l998xeTi1R99Wf\nd4+95ZbOe2k2m/WkCVvX+K6pX4c713LGhmHUBp9+Wu0cFMayZa735AWhN0eudQu/uu+5+IF1keK6\nxM0l3Cs56KD0c1FzZMMwao+PPqp2DgrDryfjnWLedZcbgwl7fy5kBc5KI1pjfgVERIvJkx/Qr8Zj\nhNMeODC1DPL8+W7hoJa+Doth1CrVrDeKZexYN8k1F6ogIqhqzdinmnBpBuG0w+aNNVakhmFEqCfh\nAvmnNNSicKn7MZdawy9WZhiGkTR9+6YfX3pp/uXWq0XdC5ckvZIWy4svptaE8PgZ/IZh1Db1ZHhz\n/fVuMmV0PsvPf167E7XrXi323nswZ45z3lZNTC1mGPWDiFshNjwhsR5YujR9HsyKFSl3NrWmFqt7\na7Fttql2DtKpNYsNwzDiiTqdrQfCEypnzsz0k1ZL1L1arFbwDirDvsUMw6hd6lG4AFx0kdvW+sJu\nNSz36osXXoADD7SFwQyjHnjkkfKt+1Ruzjwz3kNIrVH3Yy6GYRhG7Y25mFrMMAzDSBwTLoZhGEbi\nmHAxDMMwEseEi2EYhpE4JlwMwzCMxElcuIjIhiLyrIhMEJF3ReSnQXg3EXlKRCaJyJMiUkEH+YZh\nGEYlKUfPZSVwgapuDQwCzhWRLYGLgNGqugXwLHBxGdJuKMaMGVPtLNQMVhYprCxSWFnULokLF1Wd\nqarvBPuLgPeBDYFDgRHBZSOAw5JOu9GwDyeFlUUKK4sUVha1S1nHXESkL7AD8BqwvqrOAieAgDry\nSWoYhmEUQ9mEi4isCfwbOD/owUSn3ds0fMMwjAalLO5fRKQN8F/gcVW9MQh7H2hS1Vki0gN4TlX7\nx9xrQscwDKMEasn9S7kcV/4DmOgFS8BI4BRgOHAy8EjcjbVUOIZhGEZpJN5zEZE9gBeAd3GqLwV+\nA7wOPAD0BqYAR6vq14kmbhiGYdQENecV2TAMw2gAVDXnD7gNmAWMD4VtB7wCjMOpt9YMwo8H/ge8\nHWxXBdeuGQn/EvhjlvQGAOOBD4H/C4V/B3gLWAEckSO/7YD7gI+AV4GNgvCNgvvfxvWqzs737M0s\nizbAHcGzTAAuiolvZDiumPNXAp8DCyLhhZbFz4O03wGeBnqHzg0PymE8rhdZzrJoi1OVjg/+/72D\n8I64sbn3g7xcXUJZxP7fJZTFe8H5/yumHIL7N8TN3ZoQPMdPg/BuwFPAJOBJoGvonouDPL8P7J/v\n/S/iO9kIGB38B88CPStZHgmXxXHBM74DjALWLlNZZP2ecHWYr7ceLlc5AGsH1y8E/hSJqy1wa3DP\nRODwIsuhdxD320FZHljCO9E7yO/E4N2I/c7S4iugkPbEmROHK5HXgT2D/VOAy2Pu2wb4KEucbwJ7\nZDk3Ftgl2B8FHBB6UbbBVdi5KtRzgJuD/WOA+0J/UNtgfw3gM6BHkR9OwWURfBj3BPsdg/Q2Ct13\nOPBPcguXgcD6ZFaohZbF3kCHYP/HobI4KHhRJCiL1wkEQZnKYghwW7C/LvBmqFz2Dvbb4NSpBxRZ\nFrH/dxFlMQh4MdgXnHDcq8iy6AHsEOyviasEtsRV0r8Kwn8NXBvsb4WrrNoAfYGPSWkRYt//Ir6T\nB4ATgv0m4M5KlkdSZQG0xjVeugXXDQcuLVNZZP2eou9bGcthDWB34CwyhctQQnUs2YVstnK4laAx\nDfQHPivmnQiOnwO+F8prh3xlkNcUWVVfAuZFgjcLwsG1DI6MufU4XIsyDRHZHFhXVV+OOdcD6Kyq\nbwRBdxJMtlTVz1X1PfKbMIcna/4b2Ce4f4Wq+oVNO+Je4KIosiwU6CQirXF/xjJgAYCIdMK1Eq7M\nk97rGswNioQXVBaq+ryqLg0OXwN6BftbAS+oYzGutfP9XHHFxF1IWRwRSu/Z4L4vga9FZGdVXaKq\nzwfhK3Etqw2zpBdbFmT5v2Puz1YWCnQQkQ6496INrlIrGC1+4vAhuA93papOxrXaB+Z6/8PkuW4r\nXEWAqo4J8hCX57KUR1JlQer77CwiAnQBvoiml1BZ5PqeSjIwKrYcVHWxqr6CqyeinAZcE4p7bkYm\nc5eD4soPYC1gepY8x74TItIfaK2q/hteHLouK6XOc5kgIocE+0cTXyEcA9ybJfz+LPH2AqaFjqeR\neukLpRcwFUBVV+EqsrXhW79n43AGBcPVTeZsLtnK4t/AYmAGMBn4g6YMGK4A/gAsSSD9QjkdeDzY\nHwd8X0Q6ikh34Lu4bm9ziZaFj3MccIiItBaRfsBO0fREZC1gMPBMkWlm/b9z8G1ZqOprwBjc/zQd\neFJVJxWZh28pcOLwt3kOmB6EFfr+57ruHQKhLiJHAGuKSLc82S5LeTSnLILGxhCcSmkarsV9W0wy\nSZdFlPYi8qaIvCIiscIpH82ZTB7ywXiliLwlIveLyLoxl+Yqh6HAiSIyFaeGPq+AbIfri82B+SLy\nYJCH4YHAz0mpwuU0nM+wN4BOwPLwSREZCHyjqhNj7j2WeKFTLr4tBFWdpqrbA5sCp2T5k4olW1ns\nivOz1gPYGPiliPQVke2BTVR1ZJC3sptei8gJuAr9OgBVfRr34rwC3B1sVyWQVLay+Aeu0ngD+CPw\ncji9oHd3D05PPLmZechZntGyEJFNcOqKnriPcZ/A4rH4hGtj4vCFQJOIvIUbS5hOjv+2XOXR3LII\n5sqdA2yvqr1wQuY3RWajqLLIQh9V3Rn4EfB/QeOoYBJ4J9rgGqwvqepOOAF1fTF5wGmRblfV3sAP\ncOr4XHlOeyeCPOwJXADsAmyCU3vnpCThoqofquoBqroLTvX1SeSSWAEiItvhulf/C45bicj/RORt\nERmK+/PDLdoNydKFC8V5pY8jCPo2jqDS6hLtRgYthvdwL1yzyFEWxwFPqOrqQBX0MrAzTqe9k4h8\nCrwIbB54kY6WRdHElAUisi9uwHRwSC2Iql6tqjuq6gG49+DDUtIMk60sVHWVql6gqgNU9XDcoGY4\nvb8Bk1T1piDPxZTFNGL+7yLK4nDgtUBFtxgndAcV++xBZfhv4C5V9XO4ZonI+sH5HsDsIDzbex4b\nXsx3oqozVPXIoCL6bRC2oJLlkVBZ7OCy/m1j4wFgULnKIhuqOiPYfobr0e1YpnLIlv5XuIb6Q0HQ\nv4AdxVFo3Xk6rvx8z7SDiHQv4p2YBryjqlNUdTXwMM54IDda2OBUX+Dd0PG6wbYVTm94SuicBJnp\nGxPPNcBledJ6jZTOdRTw/cj524Ejc9w/hNQA77GkBip7kRqs6oYbYNu6kOcvsixODo5/RWoQuxPO\nCmObSFx9yDGgH7puYZbwfGWxI26AdJNIeCuCQUGchdd4oFUZyuKU4LgjsEawvx8wJnTPlcC/ikhz\nYeQ49v8uoiyOxlnvtMYZfYwGflBCWdxJxAISN3j762A/bhC7HdCP9AH9nO9/vu8EWCcU15XA0EqX\nRxJlAWyAqxzXCa67HLiuHGWR7XvCjU+0C/a7EwzKl6McQudPBm6KhN0DfDfYPwW4v8By8AP6j5Gq\nl/oD04p8J1oF/5H/L/4BnJP3+QsooHtwA2nLcKagpwI/DQr6AyLmoziLg1eyxPUxsHme9HbCdYE/\nAm4Mhe+M080uxJkyv5vl/vY4Kf1RUNh9g/B9cbr//+F0sacX88EUWxY4gfIArof0Hm4Zgmh8OYVL\n8CJOxanXPiewlimiLJ7G6c7TTCmDMpoQ5OsVYNsyl0WfIGwCruLqHYT3AlYH4d5U/bQiyyL2/y6i\nLFoBt5AysYytwPKUxR44dcs7oef4Ps68dHRQJk8Ba4XuuRj3PUTNb2Pf/yK+kyNxvcIPcD3CtpUs\nj4TL4qwgH+/gTNu7laksYr8nXI/Nm8+PI9SILlM5fAbMwRn+fE4gyHDWbM+TMhHesMhy6A+8FNz/\nNrBPMe9EcG6foAzG4YRLm3xlYJMoDcMwjMSxZY4NwzCMxDHhYhiGYSSOCRfDMAwjcUy4GIZhGIlj\nwsUwDMNIHBMuhmEYRuKYcDFaPCKyKpjp/F4wY/mCfL6TRKSPiBxXqTwaRr1hwsUwnHuNAaq6Dc6D\nwIHAZXnu6Ydbv8gwjBhMuBhGCFWdg5sZ/hP4tofyQuAZ900R2S249Bpgz6DHc37g8+r3IjJWRN4R\nkTOr9QyGUQvYDH2jxSMiC1S1SyRsLrAFziXIalVdLiKbAveq6i4isjfwC1U9JLj+TJxvtatFpB3O\nUelRqjqlsk9jGLVBm2pnwDBqFD/m0g74s4jsgPMVtVmW6/cHthWRHwbHXYJrTbgYLRITLoYRQUQ2\nBlaq6pcichkwU1W3C1z6Z1vgTYDz1K2VYxgtHhtzMYzQAmPBAnJ/BW4KgrriPMUCnIRzRQ9OXdY5\nFMeTwJBgDQ9EZDMR6VjOTBtGLWM9F8Nwiye9jVOBrQDuVNUbgnM3Aw+KyEnAE8A3Qfh4YLWI/A+4\nQ1VvFLec7duBGfNsUmuYG0aLwwb0DcMwjMQxtZhhGIaROCZcDMMwjMQx4WIYhmEkjgkXwzAMI3FM\nuBiGYRiJY8LFMAzDSBwTLoZhGEbimHAxDMMwEuf/A86B6zeIrUXKAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nmjRpQteuXbnxxhvZvHlzRUSuNZhyMQyjWrJo0SKmTJlCnTp1ePnll3N2nz/84Q88+uijjB07lrVr\n1/Laa6/x9ttvM3CgRbBKhikXwzCqJWPGjOHggw9m2LBh/POf/4zLW7VqFaeccgotWrSgb9++LFiw\nIC6/Tp06fPPNNynv8fXXX/Pwww8zfvx4DjroIOrUqUPPnj157rnneP311ykpKQHg/PPP5/e//z39\n+/enefPmHHnkkSxevHh7OXPnzqV///60bt2anj178uyzz27PO//887n88ss56aSTaN68OQcffDAL\nF1b/hWpNuRiGUS0ZM2YMQ4YM4ZxzzmHSpEmsXLlye96ll15K48aNKS0t5bHHHuPxxx+PuzZoIkvG\n22+/TefOnenTp09ceqdOnejbty9vvvnm9rTx48czYsQIfvzxR3r37s3gwYMB2LBhA/3792fIkCH8\n8MMPPPXUU1x66aXMnTt3+7VPP/00N998M6tXr6Z79+7cdNNNGddHoWHKxTCMCiGSnU9FmDJlCosX\nL2bgwIHsv//+7LrrrowfPx6AsrIynn/+eW699VYaNmxIr169GDp0aNz16U4O/eGHH2jfvn1kXvv2\n7fnhhx+2H5944okccsgh1KtXj9tvv51p06bx3Xff8corr7DLLrtw3nnnISL07t2b008/Pa73ctpp\np9GnTx/q1KnD4MGDmTlzZqZVUnCYcjEMo0KoZudTEcaMGUP//v1p2dKtnD5o0CBGjx4NwMqVK9m2\nbRudOnXafn6XLl0qdJ82bdqwbNmyyLxly5bRpk2b7cedO3fevt+kSRNatmzJ999/z6JFi5g2bRqt\nWrWiVatWtGzZkvHjx1NaWrr9/Hbt2m3fb9y4MevWrauQvIWExRYzDKNasWnTJp555hnKysq29yo2\nb97M6tWrmTNnDr169aKoqIglS5bQo4dbszA4/pEJRx11FJdddhnTp0/ngAMO2J6+ZMkSpk2bxogR\nI+LSfNatW8dPP/1Ehw4d6Ny5M8XFxUyaNKlCMlRXrOdiGEa14oUXXqCoqIgvv/ySWbNmMWvWLL78\n8ksOPfRQxowZQ506dTjttNMYOXIkGzdu5Isvvtjeq8mU3XbbjUsuuYTBgwfz4YcfUlZWxueff84Z\nZ5xB//79OfLII7efO3HiRKZOncrmzZv5n//5H/r27UvHjh056aSTmD9/PmPHjmXr1q1s2bKF6dOn\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nuugiOnXqRNeuXbn11lvr3Q4ePJj999+fq6++mi233JJ+/foB8Pjjj7P99tvTunVrdtxxRyZOdEey\nf/vtt5x88slsvfXWbLvttjz44IP14ffr14/TTjuN3r1707p1a3baaSc+/fRTAM4991zmzZvHMccc\nQ+vWrRkwYAAAp556Kh07dqRdu3ZUV1czbdq0ev+WLVvGMcccQ5s2bdhnn3249dZbOeCAA+rtZ8yY\nweGHH84WW2zBdtttxwsvvBAYL/vuuy+dO3fmpZeix9zX1dUxdOjQ+hbNJ598wm9+8xvatWtH586d\nufLKK9m4MXrUeFVVFQ8//DC9evWiV69e9WazZ88G4M0332T33XenTZs2dO/evT4eAQ466CAA2rZt\nS+vWrfn4448ZPHhwzLuMHTuWvffem3bt2rHPPvvwv//9r97u4IMP5q9//Sv7778/rVu35sgjj2TZ\nsmXBicAwDEexd/IM2NlTg0hkXir06NFD33vvPVVVnTdvnu6www7ap08fVVU9/vjj9bLLLtO1a9fq\n999/r/vss48+9thjqqr65JNPapMmTfShhx7S2tpaXbdunT7//PPapUsXnTBhgqqqzpo1S+fNm6d1\ndXW6xx57aP/+/XXjxo06Z84c3XbbbXXkyJGqqtq3b1/ddNNNdcSIEVpXV6c33XST7rvvvjEyjho1\nKkbuQYMG6Y8//qjr16/Xq666Snfdddd6u9NOO03POOMMXbdunU6bNk27du2qBxxwgKqq/vjjj9q1\na1cdPHiw1tXV6cSJE3WrrbbS6dOnB8bP7bffrr/97W/r70eMGKFbb721bty4UVVVJ0yYoB9//LHW\n1dXp3Llzdfvtt9cHHnig3r2I6OGHH67Lly/XdevWqapqVVWVzpo1S1VV33//fZ06daqqqk6ZMkU7\ndOigr732mqqqfv3111pVVaV1dXX1/j355JP177Js2TJt166dPvPMM1pbW6vDhg3Tdu3a6bJly1RV\ntbq6Wn/+85/rV199pevWrdPq6mq96aabAt+z1NOpUbl4aa/oZXjkV3QBGgiUg3KBcH7Z0KNHD23V\nqpW2a9dOe/TooX/4wx903bp1unjxYm3evHl9gaiqOmzYMD344INV1RVy3bt3j/HriCOO0H/84x8N\nwvj4448buL3zzjv1ggsuUFWnXA477LB6u2nTpmnLli1jZIwowCCWL1+uIqIrV67U2tpabdq0qc6c\nObPe/pZbbqkvkJ977jk98MADY56/9NJL9W9/+1ug3/PmzdNmzZrpwoULVVX1rLPO0j//+c8JZbn/\n/vv1xBNPrL8XEa2pqYlxIyL1yiWeP//5z3r11VeralS51NbW1tv7lcvTTz+t++yzT8zzv/71r3Xw\n4MGq6pTL7bffXm/38MMP61FHHRUYrikXo1iUmnIpm+1f0kGL3KX+2muvcfDBB8eYzZ07lw0bNtCx\nY0cgqsy7detW76Zr164xz8yfP59tt922gf9z585l4cKFtG/fvt6vuro6DjzwwHo3HTp0qL9u2bIl\n69ato66ujqqqhj2gdXV1/OUvf+HFF19kyZIliAgiwpIlS1izZg21tbV06dIlUM65c+fy0UcfxchS\nW1vLOeecExg3Xbt25YADDmDIkCFcccUVvPrqq4wZM6befubMmVx99dWMHz+etWvXsnHjRvbYY48Y\nP/yyxPPxxx9z0003MXXqVNavX8/69es55ZRTErr3880339C9e/cYs+7du7Nw4cL6+/h4Xb16dVp+\nG0ZjxcZcQkQDtFvXrl1p0aIFS5cuZdmyZSxfvpwVK1YwefLkejci0uCZWbNmBfrVs2dPli1bVu/X\nDz/8wPDhw9OSLz6coUOHMnz4cEaNGsWKFSv4+uuv65XfVlttRZMmTViwYEG9+/nz58fIUl1dHSPL\nypUreeihhxKG37t3b5566ileeuklevbsya677lpvd9lll7Hddtsxa9YsVqxYwe23394gPuPl93PW\nWWdx/PHHs3DhQlasWMGll15a/3yy5wA6derUYErzvHnz6Ny5c9LnDMNIjCmXPNOhQwcOP/xwrrrq\nKlatWoWqMnv2bD744IOEz1x00UUMGDCgfjB+1qxZzJ8/n7333ptWrVpx9913s27dOmpra/n8888Z\nP358Qr/8BXSHDh3qB8DBTeVt3rw57dq148cff+Smm26qL4irqqo48cQT6du3L2vXrmXGjBk89dRT\n9c/+7ne/48svv2TIkCFs3LiRDRs2MH78eGbMmJFQlpNOOol58+bRp0+fBlOTV61aRevWrWnZsiUz\nZszgkUceSehPEKtXr6Zdu3Y0bdqUcePGMXTo0Hq7rbbaiqqqqkCFDXD00Uczc+ZMnn32WWpra3nu\nueeYPn06xxxzTEYyGIYRJS/KRUQGishiEZkcZ36liEwXkSki8vd8hF0sktWOn3rqKdavX8/2229P\n+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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nRESLTSbDMIxiR0TQIhrQL5kt93feeWfmzMl2t3vDKB86d+7M7NmzCy2GYQRSMi0XTysXQCLDKE4s\nTxh+iq3lYmMuhmEYRuiYcjEMwzBCx5SLYRiGETqmXArEoEGDOOKII2rvW7RoYYOzRcq8efNo2bJl\nxuMbd999NxdfbGuGjYaFKZeQqayspG3btmzcuDGpW5G6sbdVq1ax8847pxRGRUUFLVq0oGXLlnTq\n1Inrr7++6AZ2KyoqmDlzZt7DPeGEE6iqqqpn/vrrr7PddttRU1OTtp+dOnVi5cqVUd8rHqNGjaJT\np05RZrfccguPP/542uEaRiljyiVE5syZw+jRo6moqGDYsGE5C0dEmDhxIitXruT9999n6NChPPHE\nE2n7s3nz5hxI50ilIM4Fffr0YciQ+oeCDhkyhF69elFRkV6STzeOVLVg724YxYQplxAZPHgwhxxy\nCOeffz5PP/10lN2yZcs4+eSTadWqFQcffDAzZsyIsk+npu/fqK5r164cccQRTJ48GYCFCxdy+umn\ns80227Drrrvy8MMP1z7Xv39/zjjjDHr16kXr1q0ZNGgQNTU13HXXXey22260atWKAw44gAUL3Dlu\n33zzDcceeyzt2rWjW7duvPTSS7V+XXDBBVx55ZX8+te/pmXLlhxyyCHMmuUO5DzqqKNQVbp3707L\nli156aWXWLFiBSeddBLbbLMN7dq146STTuLbb7+t9W/27NkcddRRtGrVimOPPZYrr7ySXr161dp/\n+umnHHbYYbRp04Z9992XUaNGBcbNqaeeytKlSxk9enSt2YoVK/jPf/5D7969AXjzzTfp0aMHrVq1\nonPnzvTv37/W7Zw5c6ioqOCpp56ic+fOHHPMMbVmkVbP008/zR577EHLli3Zbbfdalsla9as4cQT\nT+Tbb7+tbVkuWrSI/v37R73LsGHD+NnPfkbbtm05+uij+eabb2rtdtllF+677z723ntv2rRpQ8+e\nPdmwYUPyRGEYxUahd/IM2NlTg4hnXkzstttu+uijj+oXX3yhTZo00e+++67W7qyzztKzzjpL165d\nq5MnT9YddthBjzjiiFr7iooKnTFjRkrhiEit26+++ko7duyoAwcO1JqaGt1vv/30jjvu0E2bNums\nWbN011131REjRqiqalVVlTZt2lSHDRumqqrr1q3TAQMGaPfu3XX69Omqqjpx4kRdtmyZ/vjjj9qp\nUycdNGiQ1tTU6Pjx47V9+/Y6ZcoUVVU9//zztX379jp27FjdvHmznnvuudqzZ88oGWfOnFl7v3Tp\nUn3llVd03bp1unr1aj3zzDP11FNPrbU/5JBD9MYbb9SNGzfq6NGjtWXLltqrVy9VVZ0/f762a9dO\n3377bVVVfe+997Rdu3a6ZMmSwPi56KKL9KKLLqq9f/TRR3XfffetvR81apROnjxZVVUnTZqkHTt2\n1Ndff11VVWfPnq0ion369NE1a9bounXrdPbs2VpRUaGbN29WVdU333xTZ82apaqqH374oW611VY6\nbtw4VVWtrq7WTp06RclTVVVV+y5Tp07VrbfeWt9//33dtGmTDhgwQHfbbTfduHGjqqruvPPOetBB\nB+miRYt0+fLl2q1bN33ssccC37MU8oSRP7z0UPAyPPIruAD1BMpCuUA4v0z46KOPtGnTprps2TJV\nVe3WrZs+8MADqqq6efNmbdKkiU6bNq3W/R//+Mco5eJXGMkQEW3VqpW2bdtWd9ttN/3zn/+sqqqf\nffaZdu7cOcrt3XffrX379lVVV8gdddRRUfa77767Dh8+vF4YL7zwgh555JFRZpdcconefvvtquqU\ni78Af/PNN7Vbt24pv8+4ceO0bdu2qqo6Z84cbdKkia5du7bW/rzzzqstkO+55x7t3bt31PPHHXec\nDh48ONDv0aNHa+vWrXX9+vWqqnrYYYfVfosgfv/73+t1112nqlqrSGbPnl1rH6tcYjn11FP1oYce\nUtXkyuUvf/mLnnXWWbV2NTU1usMOO+ioUaNU1SmXoUOH1trfeOONetlllwWGa8rF8FNsyqVktn9J\nBS3gmPbgwYM59thjadOmDQA9e/Zk0KBBXHPNNXz//fds3ryZHXfcsdZ9586d+eijjzIOb9y4ceyy\nyy5RZnPmzGHBggW0bdsWcBWHmpoajjzyyFo3sYPN8+bNo0uXLvX8nzNnDp9++mmUX5s3b67tWgLo\n2LFj7fVWW23F6tWr48q7du1afv/73/POO++wYsUKVJXVq1ejqixcuJC2bdvSrFmzKDnnz59fK8uL\nL77I8OHDa2XZtGkTRx99dGBYhx12GB06dOC1115j//33Z8yYMbz66qu19p9//jk333wzkydPZsOG\nDWzYsIEzzjgjyg//t4rlrbfe4vbbb2fatGnU1NSwdu1aunfvHte9n2+//ZbOnTvX3osInTp1qu2K\nBNh2221rr7faaisWLlyYkt+GUUyUlXIpFOvWrePFF1+kpqaG7bbbDoANGzawYsUKJk2axJ577knj\nxo2ZN28eXbt2BWDu3LlZhakBmrRTp0506dKFqVOnxn0udrB5p512YsaMGeyxxx71/KqsrOSdd97J\nSs4I9913H9OnT2fMmDF06NCBCRMm0KNHD1SV7bbbjmXLlrFu3bpaBTNv3rxaWTt16kTv3r157LHH\nUg6vV69eDBo0iG+++YbjjjuODh061Nqdc845XH311bzzzjs0adKEa6+9lqVLl0Y9H29QfsOGDZx+\n+ukMGTKEU045hYqKCk477bTa75FsMH/77bevHR+LMG/evITKzDBKERvQD4FXX32Vxo0bM2XKFCZM\nmMCECROYMmUKhx9+OIMHD64tgKqqqli7di1ff/01gwYNCl2OAw88kBYtWjBgwADWrVvH5s2b+eqr\nrxg7dmzcZy688EJuu+02/ve//wEwadIkli9fzq9//WumTZvGkCFD2LRpExs3bmTs2LEJFZefjh07\nRk1QWLVqFVtuuSUtW7Zk2bJlUdOFd9ppJ/bff3+qqqrYuHEjn3zySW0rBeC8885j+PDhjBgxgpqa\nGtatW8eoUaOiJgTE0rt3b9577z3+9a9/0adPnyi71atX06ZNG5o0acLnn3/O0KFDo+yDFHfELNLS\nad++PRUVFbz11luMGDGi1t22227L0qVLWblyZaBcZ555Jm+88QYjR45k06ZN3HvvvTRr1oxDDjkk\n7rsYRimSE+UiIk+KyGIRmRhjfpWITBGRSSLy11yEXQgGDx5M37592WGHHdhmm21qf1deeSXPPvss\nNTU1/P3vf2fVqlVst9129O3bl759+8b17+677+ZXv/pVXPt4teOKigr+85//MH78eHbZZRe22WYb\nLrroorgFHcB1113HmWeeybHHHkurVq343e9+x9q1a2nevDkjRozg+eefZ/vtt2f77bfn5ptvZv36\n9SnFSVVVFb1796Zt27a8/PLLXHvttaxZs4b27dtz6KGHcuKJJ0a5f/bZZ/n4449p3749f/7znzn7\n7LPZYostANdF9frrr3PXXXfRoUMHOnfuzL333ptwzUrnzp059NBDWbNmDSeffHKU3T//+U9uu+02\nWrVqxR133MFZZ50VZR8UvxGz5s2b89BDD3HGGWfQtm1bnn/+eU455ZRad7vvvjs9e/akS5cutG3b\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Percentage Variation\n", "\n", "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] } ], "metadata": { "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/2-analysis-code-py3-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis - Code" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LSE daily data: Exploratory" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The data has no header, so I'm going to add one.\n", "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Quick feature engineering for exploratory purposes\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.000000
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.9644131.7202680.3076701.720268
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.6783251.2085420.3255291.208542
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0000000.0000000.0000000.000000
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.5100000.9481260.0770290.948126
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.7600001.3981100.1956961.398110
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+061.1700002.1221970.4472942.122197
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+0812.12000016.0482924.08111016.048292
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation Percentage Variation \\\n", "count 10010.000000 1.001000e+04 10010.000000 10010.000000 \n", "mean 18.707358 3.408274e+06 0.964413 1.720268 \n", "std 14.122609 7.532096e+06 0.678325 1.208542 \n", "min 1.522366 0.000000e+00 0.000000 0.000000 \n", "25% 5.442764 7.536000e+05 0.510000 0.948126 \n", "50% 15.099474 1.904100e+06 0.760000 1.398110 \n", "75% 31.889513 4.051675e+06 1.170000 2.122197 \n", "max 50.533702 2.408085e+08 12.120000 16.048292 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "count 10010.000000 10010.000000 \n", "mean 0.307670 1.720268 \n", "std 0.325529 1.208542 \n", "min 0.000000 0.000000 \n", "25% 0.077029 0.948126 \n", "50% 0.195696 1.398110 \n", "75% 0.447294 2.122197 \n", "max 4.081110 16.048292 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nyww8ifgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nWjvRWwMHAmcBB2EJke7+XsjLyw068PS02hXita8WMXb4uW7X9iypESrNmjVyuzdmwjK/6ajysjEs\nJycz6DR6+tnKy8tl8vyNVFZWMeDI2grZ+OlrwOHgjLxct7JokpvlM47MzHS3Zz3LMKdxls9yrUt5\nxwJn+uI9nU5at25CTnZG9e8tBaXVf3vLQzD58nwm0Due9/eVuQ+gnnhvdq02Eu+0bNGYvNaNfd4P\nqn6k4KZ25LXOJTU1PoRKotRvX0RLgOwA/hSRCmCZMWafMaa1iGz39UJ+fvCeb32N1DzDePubRTX3\ntgc3yegMw9uxt3v2BK+xeAqg/Pwinh0zG4BDD2wOwOYdJWzIL6Fv9za89tkfAJzRv7NbPoqLS/FF\nWVmF27Oe+S8pKfVZrnUp71iQn19EXl5u3KfTyfbtxTTKqmlOu3fXzMt5y0Mw+XJ9Jpiy8LxfWlbb\nJJYo5elk585i0h2+l8IHkx9PUZG/vShu3KCE+z1iLYCiZcKaApwOYIzZH8jBEiox4+UvFtbtBS8y\nKtJ17sE3ZzLyq0UU+BES/ifRI5seJXLESf+U9IyZIFz99ES+m7E2+Je03USMqAgQEfkWmGeM+R34\nGrhZRBLmsy1evZP3vl8aVhh1yWykJ0+daB+mJDvOlY6f/bIyxilpmETNG6+I3BetsKPN8I/ne72+\nZefekMNUtyJKfRNJd+dl5ZWkpaWQlpqQW8eC5uspq9mYX8zN5x8W66QkBAnpzn3rTu/7PqKNt5Ve\nwfLcR96FEgTQVsJQIxJG5UsCkt2ceOPwX2mRm8XwW46LdVLqTK1Nnjjw1bC+tjcMVzkccTNPEs8k\n93Aiprj3KLESeooSKXYV+Zmri2vqLgh2FKjFIBhUgESJiI1Iw9mJrjRokqF6uGbB72ITP4SiSLzx\nzWKK6rDqsqGiAiSB8ewfyiuq+OH3dTX3k6EHSRjqVtY6J1Z3dhSGKEBCeGfVpkK+UW8SAVEB4oHn\n5qtEYtLcDUnnYK6isiopBeE73/0Z9TjKK/QUQm8EW53KorQ60pW5y/K59cXfyN/te4FOQXEpv87f\n6HVvWqxRAeLBF79GxnOuv0+93U9lqUUdhk9bdoW+Sixeuf65X/j3f2fHOhkB8fe9vZ0JU7wnOEeA\n4TDmB4l6HAlBHM+Fv/71Ikr2VfDr/E0+nxn+8Xze+174/c+t9Ziy4IgbAbJuaxEvfPIHhSWxtTv+\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Percentage Variation\n", "\n", "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/3-methodology-results-conclusion-code-py2-Copy1-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]\n", "#['Symbol'].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model but are nice for visualisations\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Oil Stocks\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", "print(\"Oil stocks in DF: \", oil_stocks_in_df)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract GAIA data\n", "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and GAIA data start intersecting \n", "# i.e. date = 1999-10-29\n", "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read in FTSE100 data\n", "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "\n", "# Preview data\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort FTSE100 data by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and FTSE data start intersecting \n", "# i.e. date = 1984-04-02\n", "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Adds FTSE data to BP dataframe, joining at dates\n", "\n", "# FTSE columns we want to copy to BP dataframe\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close'] \n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the FTSE row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "bp_counter = 0\n", "ftse_counter = 0\n", "while ftse_counter < len(sorted_ftse100):\n", " bp_date = bp.loc[bp_ftse_start + bp_counter, 'Date']\n", " ftse_date = sorted_ftse100.loc[ftse_start - ftse_counter, 'Date']\n", " if bp_date == ftse_date:\n", " # Add FTSE data to BP row\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start + bp_counter, 'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start - ftse_counter,'%s' % str(col)]\n", " # FTSE counter + 1, BP counter + 1\n", " bp_counter += 1\n", " ftse_counter += 1\n", " elif bp_date < ftse_date:\n", " # Move to next BP row, same FTSE row and repeat\n", " bp_counter += 1\n", " elif bp_date > ftse_date:\n", " # Move to next FTSE row, same BP row and repeat\n", " ftse_counter += 1\n", " else:\n", " print(\"Error: BP date is \", bp_date, \"; FTSE date is \", ftse_date)\n", " # FTSE row + 1, BP row + 1\n", " bp_counter += 1\n", " ftse_counter += 1" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1984-04-27\n", "1984-05-02\n", "1984-05-07\n", "1984-05-29\n", "1984-08-27\n", "1984-12-26\n", "1985-04-08\n", "1985-05-06\n", "1985-08-26\n", "1985-12-26\n", "1986-03-31\n", "1986-05-05\n", "1986-08-25\n", "1986-12-26\n", "1987-04-20\n", "1987-05-04\n", "1987-08-31\n", "1987-12-28\n", "1988-04-04\n", "1988-05-02\n", "1988-08-29\n", "1988-12-27\n", "1989-03-27\n", "1989-05-01\n", "1989-08-28\n", "1989-12-26\n", "1990-04-16\n", "1990-05-07\n", "1990-08-27\n", "1990-12-26\n", "1991-04-01\n", "1991-05-06\n", "1991-08-26\n", "1991-12-26\n", "1992-04-20\n", "1992-05-04\n", "1992-08-31\n", "1992-12-28\n", "1993-04-12\n", "1993-05-03\n", "1993-08-30\n", "1993-12-27\n", "1993-12-28\n", "1994-01-03\n", "1994-04-04\n", "1994-05-02\n", "1994-08-29\n", "1994-12-27\n", "1995-04-17\n", "1995-05-08\n", "1995-08-28\n", "1995-12-26\n", "1996-04-08\n", "1996-05-06\n", "1996-08-26\n", "1996-12-26\n", "1997-03-31\n", "1997-05-05\n", "1997-08-25\n", "1997-12-26\n", "1998-04-13\n", "1998-05-04\n", "1998-08-31\n", "1998-12-28\n", "1998-12-31\n", "1999-04-05\n", "1999-05-03\n", "1999-08-30\n", "1999-12-27\n", "1999-12-28\n", "1999-12-31\n", "2000-01-03\n", "2000-04-24\n", "2000-05-01\n", "2000-08-28\n", "2000-12-26\n", "2001-04-16\n", "2001-05-07\n", "2001-08-27\n", "2001-12-26\n", "2002-04-01\n", "2002-05-06\n", "2002-06-03\n", "2002-06-04\n", "2002-08-26\n", "2002-12-26\n", "2003-04-21\n", "2003-05-05\n", "2003-08-25\n", "2003-12-26\n", "2004-04-12\n", "2004-05-03\n", "2004-08-30\n", "2004-12-27\n", "2004-12-28\n", "2005-01-03\n", "2005-03-28\n", "2005-05-02\n", "2005-08-29\n", "2005-12-27\n", "2006-04-17\n", "2006-05-01\n", "2006-08-28\n", "2006-12-26\n", "2007-04-09\n", "2007-05-07\n", "2007-08-27\n", "2007-12-26\n", "2008-03-24\n", "2008-05-05\n", "2008-08-25\n", "2008-12-26\n", "2009-03-27\n", "2009-04-13\n", "2009-05-04\n", "2009-06-25\n", "2009-08-11\n", "2009-08-31\n", "2009-09-02\n", "2009-12-28\n", "2010-04-05\n", "2010-04-19\n", "2010-04-20\n", "2010-05-03\n", "2010-05-12\n", "2010-08-30\n", "2010-12-27\n", "2010-12-28\n", "2011-01-03\n", "2011-04-25\n", "2011-04-29\n", "2011-05-02\n", "2011-08-29\n", "2011-12-27\n", "2012-04-09\n", "2012-05-07\n", "2012-06-04\n", "2012-06-05\n", "2012-08-27\n", "2012-12-26\n", "2013-04-01\n", "2013-05-06\n", "2013-08-26\n", "2013-09-23\n", "2013-12-26\n", "2014-04-21\n", "2014-05-05\n", "2014-08-25\n", "2014-12-26\n", "2015-01-02\n", "2015-04-06\n", "2015-05-04\n", "2015-08-31\n", "2015-12-17\n", "2015-12-28\n", "2016-03-28\n", "2016-05-02\n", "2016-08-29\n", "NaNs: 158\n" ] } ], "source": [ "# Count and display NaNs in FTSE data \n", "# i.e. dates where we have BP but not FTSE data\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Proxy remaining FTSE NaNs by taking the mean of the prices in the \n", "# two closest trading days where data is available \n", "# (one before, one after the day)\n", "ftse_data_to_average = ['Open', 'High', 'Low', 'Close'] \n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " if not (pd.isnull(bp.loc[bp_ftse_start+row-1, 'FTSE Date']) or pd.isnull(bp.loc[bp_ftse_start+row+1, 'FTSE Date'])):\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']\n", " else:\n", " go_back = 0\n", " go_forward = 0\n", " while pd.isnull(bp.loc[bp_ftse_start+row-1-go_back, 'FTSE Date']):\n", " go_back += 1\n", " while pd.isnull(bp.loc[bp_ftse_start+row+1+go_forward, 'FTSE Date']):\n", " go_forward += 1\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1-go_back,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1+go_forward,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs: 0\n" ] } ], "source": [ "# Check there are no more NaNs\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", "# prices.iloc[i]['Target'] = bp.iloc[i+days][target]\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", "# print(\"Features\", features.head())\n", "# print(\"Prices\", nday_prices.head())\n", " \n", " X = features\n", " y = nday_prices\n", " print(\"X.tail: \", X.tail())\n", "# print(\"y.head: \", y.head())\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "X_train = []\n", "X_test = []\n", "y_train = []\n", "y_test = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2)) * 100\n", "\n", "def print_metrics(test, pred):\n", " print(\"Root Mean Squared Percentage Error\", rmsp(test, pred))\n", " print(\"Mean Absolute Error: \", mean_absolute_error(test, pred))\n", " print(\"Explained Variance Score: \", explained_variance_score(test, pred))\n", " print(\"Mean Squared Error: \", mean_squared_error(test, pred))\n", " print(\"R2 score: \", r2_score(test, pred))\n", "# print(\"Median Absolute Error: \", median_absolute_error(test, pred))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "days = 7" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " # Lines below for debugging purposes\n", "# print(\"X_train.head(): \", X_train.head())\n", "# print(\"X_train.tail(): \", X_train.tail())\n", "# print(\"Pred: \", pred[:5])\n", "# print(\"Test: \", y_test[:5])\n", " \n", " # Print metrics\n", " print(\"# Days used to predict: %s\" % str(days))\n", " print(\"\\n%s-day predictions\" % str(target_days)) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "def execute(steps=8, buffer_step=1000, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=days, periods=periods, buffer=buffer)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64\n", "Mean Absolute Error: 1.35177309038\n", "Explained Variance Score: -0.999897657081\n", "Mean Squared Error: 5.3988704324\n", "R2 score: -1.79018260924\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64\n", "Mean Absolute Error: 0.0968047690639\n", "Explained Variance Score: 0.631705385589\n", "Mean Squared Error: 0.0157858151181\n", "R2 score: 0.624974281171\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64\n", "Mean Absolute Error: 0.121813762853\n", "Explained Variance Score: 0.841217523638\n", "Mean Squared Error: 0.0294876156146\n", "R2 score: 0.833996914272\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64\n", "Mean Absolute Error: 0.426327931115\n", "Explained Variance Score: 0.603248858424\n", "Mean Squared Error: 0.3014216695\n", "R2 score: 0.267021281001\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64\n", "Mean Absolute Error: 2.78950172548\n", "Explained Variance Score: -3.16904684367\n", "Mean Squared Error: 12.5284487756\n", "R2 score: -9.15605753784\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64\n", "Mean Absolute Error: 0.794150514869\n", "Explained Variance Score: 0.596407090489\n", "Mean Squared Error: 1.14332478592\n", "R2 score: 0.597101359913\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64\n", "Mean Absolute Error: 4.81075475134\n", "Explained Variance Score: -1.96163694244\n", "Mean Squared Error: 33.132880399\n", "R2 score: -8.55239322845\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64\n", "Mean Absolute Error: 1.21013490927\n", "Explained Variance Score: 0.826791346825\n", "Mean Squared Error: 2.43831676478\n", "R2 score: 0.822383271832\n", "Errors: [Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64, Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64, Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64, Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64, Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64, Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64, Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64, Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64]\n", "Daily error: [[28.167307082010478, 1.4463260128939317, 1.4015691053772388, 10.765715566952402, 24.41364846412203, 2.5976792674283566, 18.495640626302091, 2.5516641001831584], [28.524924281544262, 2.1150843700255639, 1.9904192071209452, 9.9777793095670795, 24.431344729424715, 3.367362298621531, 18.32452824442602, 2.9446157412542853], [28.966326367296624, 2.5023622771613652, 2.3109755963471068, 10.480972016930716, 24.620149855164474, 3.7850136112690573, 18.233121169601173, 3.1880683026068426], [29.085697436318398, 2.8063986750089587, 2.7077120693474366, 10.557942877986475, 24.986822088443628, 4.1801925531737281, 18.358886996507305, 3.4904393628985919], [29.562881417844032, 3.021868557170595, 3.0291535073135702, 10.431970367583759, 25.272566808380592, 4.6500648454107214, 18.479669548458453, 4.1392852048533699], [29.542482156287058, 3.1522506324077977, 3.4807177473584945, 10.593414589800933, 26.220902712818216, 5.0692206066914274, 18.598393316146357, 4.6759345302063018], [29.721120149448151, 3.3063521749028761, 4.1903047240177909, 11.1043790016977, 26.731233491624817, 5.4599845932349131, 18.818122838439312, 5.1515982900107735]]\n", "Mean daily error: [11.229943778158709, 11.45950727274805, 11.76087364954717, 12.021761507460564, 12.323432532126887, 12.666664536464573, 13.060386907922041]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# svm.SVR() trial\n", "execute(model=svm.SVR(), steps=8)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64\n", "Mean Absolute Error: 0.238191228204\n", "Explained Variance Score: 0.936734586453\n", "Mean Squared Error: 0.124174009044\n", "R2 score: 0.935825805621\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64\n", "Mean Absolute Error: 0.0972692755964\n", "Explained Variance Score: 0.631714378075\n", "Mean Squared Error: 0.0158811529743\n", "R2 score: 0.622709326982\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64\n", "Mean Absolute Error: 0.107737269091\n", "Explained Variance Score: 0.871650317662\n", "Mean Squared Error: 0.0228261083752\n", "R2 score: 0.871498446163\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64\n", "Mean Absolute Error: 0.181147312912\n", "Explained Variance Score: 0.875052508652\n", "Mean Squared Error: 0.0677040810751\n", "R2 score: 0.835361370336\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64\n", "Mean Absolute Error: 0.214491478056\n", "Explained Variance Score: 0.938634248613\n", "Mean Squared Error: 0.079359261295\n", "R2 score: 0.935668234886\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64\n", "Mean Absolute Error: 0.800157764607\n", "Explained Variance Score: 0.613715850639\n", "Mean Squared Error: 1.11699089039\n", "R2 score: 0.606381217067\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64\n", "Mean Absolute Error: 0.64399497304\n", "Explained Variance Score: 0.892268550448\n", "Mean Squared Error: 0.724194775999\n", "R2 score: 0.791210628505\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64\n", "Mean Absolute Error: 1.05035951615\n", "Explained Variance Score: 0.867777620914\n", "Mean Squared Error: 1.93149720042\n", "R2 score: 0.859302032386\n", "Errors: [Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64, Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64, Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64, Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64, Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64, Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64, Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64, Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64]\n", "Daily error: [[2.3698570333111504, 1.4112606385290734, 1.3388596770845407, 1.9978731488987438, 1.0643274139994094, 2.1726600714614435, 1.2096456519754599, 1.7851545701577813], [3.5397290828630266, 2.0992094906568943, 1.8827346495576485, 2.9916658848423605, 1.5585063699310966, 3.1013013471389437, 1.8485430242142713, 2.3575578468241742], [4.4040805111224612, 2.4921560557064821, 2.1764572183007651, 3.8243303952515619, 1.9133366253171493, 3.7697615623429668, 2.3093446670878617, 2.8551593057497877], [5.1323698739556516, 2.7671208137147856, 2.5543948404668759, 4.5282824168670546, 2.2001438159343518, 4.2080025337986378, 2.6823554175829778, 3.1844563168900706], [5.7184126896356871, 2.9697212352907276, 2.8435756292022925, 5.2200020876609496, 2.4613047808963091, 4.6245858986274824, 3.0873673748688937, 3.7434820521423369], [6.3399233706097196, 3.1396242770876306, 3.0843584513004441, 5.8895164465804859, 2.661753553657308, 5.0196880611640164, 3.4767926237582256, 4.2266657488609063], [6.8622343672731771, 3.2855971145088323, 3.3444418914677345, 6.4172185016832541, 2.843053391214541, 5.462962469783192, 3.8883808398183208, 4.6139581254374233]]\n", "Mean daily error: [1.6687047756772002, 2.4224059620035518, 2.9680782926098792, 3.4071407536513005, 3.8335564685405847, 4.2297903166273416, 4.5897308376483092]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Linear Regression trial\n", "execute(steps=8)\n", "\n", "# R2 scores: [0.859, 0.791, 0.606, 0.936, 0.835, 0.871, 0.623, 0.936]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n", "\n", "No change in performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Feature Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1 Adding more of the same type of features" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-09 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-10 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "1979-10-11 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 \n", "1979-10-12 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 \n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1979-10-09 7.67689 7.59882 7.72894 8.36703 7.28654 \n", "1979-10-10 7.69042 7.67689 7.59882 8.36703 7.28654 \n", "1979-10-11 7.67689 7.69042 7.67689 8.36703 7.55926 \n", "1979-10-12 7.9111 7.67689 7.69042 8.36703 7.53428 \n", "1979-10-13 8.22338 7.9111 7.67689 8.36703 7.53428 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64\n", "Mean Absolute Error: 0.245263403626\n", "Explained Variance Score: 0.934491328873\n", "Mean Squared Error: 0.129280801098\n", "R2 score: 0.933454012643\n", "Buffer: 700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-07-15 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 5.80321 \n", "1982-07-16 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 \n", "1982-07-17 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 \n", "1982-07-18 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 \n", "1982-07-19 5.15262 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1982-07-15 5.89377 5.9073 5.77718 5.95935 5.50446 \n", "1982-07-16 5.80321 5.89377 5.9073 5.95935 5.30876 \n", "1982-07-17 5.62104 5.80321 5.89377 5.95935 5.24423 \n", "1982-07-18 5.67309 5.62104 5.80321 5.89377 5.08809 \n", "1982-07-19 5.68558 5.67309 5.62104 5.82923 5.06102 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64\n", "Mean Absolute Error: 0.173300277596\n", "Explained Variance Score: 0.888815416717\n", "Mean Squared Error: 0.0490251778494\n", "R2 score: 0.883431428434\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-04-24 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 4.6967 \n", "1985-04-25 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 \n", "1985-04-26 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 \n", "1985-04-27 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 \n", "1985-04-28 4.21578 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1985-04-24 4.72376 4.6967 4.72376 4.74874 4.50204 \n", "1985-04-25 4.6967 4.72376 4.6967 4.74874 4.44999 \n", "1985-04-26 4.71023 4.6967 4.72376 4.73625 4.35943 \n", "1985-04-27 4.6842 4.71023 4.6967 4.72376 4.26783 \n", "1985-04-28 4.6842 4.6842 4.71023 4.72376 4.21578 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64\n", "Mean Absolute Error: 0.119108631048\n", "Explained Variance Score: 0.711899830922\n", "Mean Squared Error: 0.0289413179188\n", "R2 score: 0.708651146753\n", "Buffer: 2100\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-28 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 6.23485 \n", "1988-01-29 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 \n", "1988-01-30 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 \n", "1988-01-31 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 \n", "1988-02-01 6.3015 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1988-01-28 6.31547 6.34235 6.2757 6.34235 5.93923 \n", "1988-01-29 6.23485 6.31547 6.34235 6.34235 5.93923 \n", "1988-01-30 6.1682 6.23485 6.31547 6.32945 5.93923 \n", "1988-01-31 6.11445 6.1682 6.23485 6.35525 5.93923 \n", "1988-02-01 6.10048 6.11445 6.1682 6.3961 5.93923 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64\n", "Mean Absolute Error: 0.0952769269966\n", "Explained Variance Score: 0.871507295966\n", "Mean Squared Error: 0.0159940255259\n", "R2 score: 0.870509426232\n", "Buffer: 2800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-11-07 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 6.98862 \n", "1990-11-08 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 \n", "1990-11-09 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 \n", "1990-11-10 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 \n", "1990-11-11 6.98862 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1990-11-07 6.91929 7.01658 6.86338 7.22567 6.80748 \n", "1990-11-08 6.98862 6.91929 7.01658 7.22567 6.80748 \n", "1990-11-09 7.21226 6.98862 6.91929 7.22567 6.80748 \n", "1990-11-10 7.08702 7.21226 6.98862 7.22567 6.80748 \n", "1990-11-11 6.98862 7.08702 7.21226 7.22567 6.80748 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64\n", "Mean Absolute Error: 0.144183713669\n", "Explained Variance Score: 0.723639903735\n", "Mean Squared Error: 0.0348028136176\n", "R2 score: 0.713646708273\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-11 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-12 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "1993-08-13 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 \n", "1993-08-14 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 \n", "1993-08-15 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1993-08-11 9.36866 9.29831 9.29831 9.3998 9.00997 \n", "1993-08-12 9.21296 9.36866 9.29831 9.47131 9.00997 \n", "1993-08-13 9.11146 9.21296 9.36866 9.70198 9.00997 \n", "1993-08-14 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-15 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64\n", "Mean Absolute Error: 0.175887097751\n", "Explained Variance Score: 0.887963498445\n", "Mean Squared Error: 0.0551035235759\n", "R2 score: 0.867615685704\n", "Buffer: 4200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1996-05-18 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 19.2888 \n", "1996-05-19 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 \n", "1996-05-20 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 \n", "1996-05-21 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 \n", "1996-05-22 20.0734 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1996-05-18 19.4235 19.6291 19.6008 19.7473 18.8327 \n", "1996-05-19 19.2888 19.4235 19.6291 19.9553 18.8327 \n", "1996-05-20 18.8776 19.2888 19.4235 20.3381 18.8327 \n", "1996-05-21 19.0691 18.8776 19.2888 20.6193 18.8327 \n", "1996-05-22 19.5252 19.0691 18.8776 20.6193 18.8327 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64\n", "Mean Absolute Error: 0.338537070406\n", "Explained Variance Score: 0.880567104974\n", "Mean Squared Error: 0.199301427398\n", "R2 score: 0.878296105939\n", "Buffer: 4900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-02-25 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 25.869 \n", "1999-02-26 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 \n", "1999-02-27 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 \n", "1999-02-28 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 \n", "1999-03-01 27.0567 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1999-02-25 25.6215 25.468 25.3739 27.384 24.8145 \n", "1999-02-26 25.869 25.6215 25.468 27.384 25.1907 \n", "1999-02-27 26.8889 25.869 25.6215 27.384 25.3096 \n", "1999-02-28 27.29 26.8889 25.869 27.384 25.4383 \n", "1999-03-01 26.3344 27.29 26.8889 27.384 26.0522 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64\n", "Mean Absolute Error: 0.79987099583\n", "Explained Variance Score: 0.713699257351\n", "Mean Squared Error: 1.14286865075\n", "R2 score: 0.709731902283\n", "Buffer: 5600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-12-05 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 20.6785 \n", "2001-12-06 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 \n", "2001-12-07 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 \n", "2001-12-08 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 \n", "2001-12-09 21.2375 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2001-12-05 20.6677 20.8934 20.7161 21.5437 20.4119 \n", "2001-12-06 20.6785 20.6677 20.8934 21.5437 20.4119 \n", "2001-12-07 21.4792 20.6785 20.6677 21.5437 20.4119 \n", "2001-12-08 21.3878 21.4792 20.6785 21.5437 20.4119 \n", "2001-12-09 21.2803 21.3878 21.4792 21.5437 20.4119 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64\n", "Mean Absolute Error: 0.841030573229\n", "Explained Variance Score: 0.823346393459\n", "Mean Squared Error: 1.23605771115\n", "R2 score: 0.721970087336\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2004-09-17 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 39.3459 \n", "2004-09-18 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 \n", "2004-09-19 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 \n", "2004-09-20 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 \n", "2004-09-21 39.8887 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2004-09-17 39.4294 40.4553 40.4672 41.3022 39.0358 \n", "2004-09-18 39.3459 39.4294 40.4553 41.3022 39.0358 \n", "2004-09-19 39.2684 39.3459 39.4294 41.3022 39.0358 \n", "2004-09-20 40.4374 39.2684 39.3459 41.3022 39.0358 \n", "2004-09-21 40.6223 40.4374 39.2684 41.3022 39.0358 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64\n", "Mean Absolute Error: 0.728558429454\n", "Explained Variance Score: 0.795888858571\n", "Mean Squared Error: 0.927322469233\n", "R2 score: 0.79156569031\n", "Errors: [Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64, Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64, Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64, Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64, Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64, Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64, Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64, Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64, Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64, Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64]\n", "Daily error: [[2.3633119350196083, 2.3656668815405815, 1.8068967673168335, 1.1618527298758623, 1.2445199687301822, 1.3663233859342694, 1.2306040140332253, 2.0991032810897887, 2.4324477531714686, 1.2507503445957771], [3.5547442825053919, 3.481529290249135, 2.5856310121744528, 1.6496590138637148, 1.809132425557288, 1.9964030368392935, 1.8720955368221319, 3.1280968433143097, 3.5227538429212828, 1.8321069037719084], [4.4479717498041955, 4.3049728599220547, 3.1680784232346348, 1.9720295214110184, 2.1910410000791423, 2.5121823913989516, 2.3170550743329108, 3.8585169441853613, 4.3728666842384767, 2.2386315167496664], [5.2227419733682234, 4.7215794009499099, 3.4891579548518452, 2.2414627141040615, 2.5055902203003813, 2.90970213520768, 2.6274277931002956, 4.376862471759261, 5.1061285474682583, 2.5932743630842392], [5.8260923948398808, 5.0598325984063965, 3.8226976530484578, 2.4088856925610633, 2.7730862599144057, 3.2157984690632953, 2.9342447416299611, 4.7079859138129168, 5.7969965267876038, 2.8488069806603251], [6.4375575079233638, 5.3681318110243605, 4.1111391646782698, 2.5862495537524421, 2.9855585838487566, 3.482818119821625, 3.2730794532705025, 4.9961485085103687, 6.418081003261106, 3.0338810314181326], [6.9698629698470569, 5.6450129168027123, 4.3105607363275551, 2.6921943572726881, 3.1522043963508404, 3.7153490809861225, 3.4874417668039328, 5.3341041131784843, 6.9664616392606362, 3.1588584581960775]]\n", "Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Considering more than 7 days' worth of prior data\n", "# 10 days' worth of prior data\n", "execute(steps=10, days=10, buffer_step = 700)\n", "\n", "# Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "1979-10-14 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 \n", "1979-10-15 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 \n", "1979-10-16 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 \n", "1979-10-17 7.20847 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1979-10-13 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-14 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-15 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-16 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-17 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-13 8.36703 7.28654 \n", "1979-10-14 8.36703 7.28654 \n", "1979-10-15 8.36703 7.39063 \n", "1979-10-16 8.36703 7.18245 \n", "1979-10-17 8.36703 6.92221 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64\n", "Mean Absolute Error: 0.248776074705\n", "Explained Variance Score: 0.932287153948\n", "Mean Squared Error: 0.131935951513\n", "R2 score: 0.931564117202\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-07 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 3.87748 \n", "1981-10-08 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 \n", "1981-10-09 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 \n", "1981-10-10 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 \n", "1981-10-11 3.72134 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1981-10-07 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 3.44757 \n", "1981-10-08 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 \n", "1981-10-09 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 \n", "1981-10-10 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 \n", "1981-10-11 3.64327 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 \n", "\n", " Adj. High Adj. Low \n", "1981-10-07 4.0076 3.3185 \n", "1981-10-08 4.0076 3.3185 \n", "1981-10-09 4.0076 3.3185 \n", "1981-10-10 4.0076 3.48713 \n", "1981-10-11 4.0076 3.53918 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64\n", "Mean Absolute Error: 0.139681061468\n", "Explained Variance Score: 0.695779905092\n", "Mean Squared Error: 0.0337119645641\n", "R2 score: 0.685613674393\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-30 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 4.39795 \n", "1983-10-01 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 \n", "1983-10-02 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 \n", "1983-10-03 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 \n", "1983-10-04 4.35943 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1983-09-30 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-10-01 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-10-02 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-10-03 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-10-04 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-30 4.60613 4.3459 \n", "1983-10-01 4.60613 4.3459 \n", "1983-10-02 4.56762 4.26783 \n", "1983-10-03 4.56762 4.26783 \n", "1983-10-04 4.56762 4.26783 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64\n", "Mean Absolute Error: 0.0983383277787\n", "Explained Variance Score: 0.673001905538\n", "Mean Squared Error: 0.0159582555222\n", "R2 score: 0.663777302829\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-09-20 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 5.14013 \n", "1985-09-21 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 \n", "1985-09-22 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 \n", "1985-09-23 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 \n", "1985-09-24 5.11307 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1985-09-20 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 5.20467 \n", "1985-09-21 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 \n", "1985-09-22 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 \n", "1985-09-23 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 \n", "1985-09-24 5.14013 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 \n", "\n", " Adj. High Adj. Low \n", "1985-09-20 5.26921 4.89239 \n", "1985-09-21 5.26921 4.89239 \n", "1985-09-22 5.26921 4.89239 \n", "1985-09-23 5.26921 4.90488 \n", "1985-09-24 5.26921 4.91841 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64\n", "Mean Absolute Error: 0.122285822087\n", "Explained Variance Score: 0.532878366341\n", "Mean Squared Error: 0.025722263709\n", "R2 score: 0.528611373486\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-10 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 5.67454 \n", "1987-09-11 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 \n", "1987-09-12 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 \n", "1987-09-13 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 \n", "1987-09-14 5.78111 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1987-09-10 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-11 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-12 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-13 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-14 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-10 5.84824 5.62126 \n", "1987-09-11 5.84824 5.62126 \n", "1987-09-12 5.84824 5.62126 \n", "1987-09-13 5.84824 5.62126 \n", "1987-09-14 5.84824 5.62126 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64\n", "Mean Absolute Error: 0.107345237581\n", "Explained Variance Score: 0.872175783957\n", "Mean Squared Error: 0.0226157683537\n", "R2 score: 0.872187834621\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-02 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 8.62105 \n", "1989-09-03 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 \n", "1989-09-04 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 \n", "1989-09-05 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 \n", "1989-09-06 8.74405 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1989-09-02 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 8.56614 \n", "1989-09-03 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 \n", "1989-09-04 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 \n", "1989-09-05 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 \n", "1989-09-06 8.57932 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 \n", "\n", " Adj. High Adj. Low \n", "1989-09-02 8.78578 8.35967 \n", "1989-09-03 8.78578 8.35967 \n", "1989-09-04 8.78578 8.35967 \n", "1989-09-05 8.78578 8.35967 \n", "1989-09-06 8.78578 8.35967 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64\n", "Mean Absolute Error: 0.182993141917\n", "Explained Variance Score: 0.923373254714\n", "Mean Squared Error: 0.0633763394031\n", "R2 score: 0.913263877343\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-27 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 5.01791 \n", "1991-08-28 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 \n", "1991-08-29 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 \n", "1991-08-30 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 \n", "1991-08-31 4.97595 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1991-08-27 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-28 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-29 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-30 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-31 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-27 5.27306 4.69245 \n", "1991-08-28 5.24471 4.69245 \n", "1991-08-29 5.24471 4.69245 \n", "1991-08-30 5.15966 4.69245 \n", "1991-08-31 5.14605 4.69245 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64\n", "Mean Absolute Error: 0.196205423468\n", "Explained Variance Score: 0.867530206283\n", "Mean Squared Error: 0.0757048791729\n", "R2 score: 0.806951047925\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-18 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "1993-08-19 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 \n", "1993-08-20 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 \n", "1993-08-21 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 \n", "1993-08-22 9.34213 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1993-08-18 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 9.29831 \n", "1993-08-19 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 \n", "1993-08-20 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 \n", "1993-08-21 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-22 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "\n", " Adj. High Adj. Low \n", "1993-08-18 9.83231 9.00997 \n", "1993-08-19 9.83231 9.00997 \n", "1993-08-20 9.83231 9.00997 \n", "1993-08-21 9.83231 9.00997 \n", "1993-08-22 9.83231 9.00997 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64\n", "Mean Absolute Error: 0.174147642649\n", "Explained Variance Score: 0.892678602856\n", "Mean Squared Error: 0.0544705960063\n", "R2 score: 0.872851342431\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-09 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 15.3418 \n", "1995-08-10 15.005 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 \n", "1995-08-11 15.0778 15.005 15.2984 15.5612 15.4004 15.357 15.2538 \n", "1995-08-12 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 15.357 \n", "1995-08-13 15.1071 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1995-08-09 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-08-10 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-08-11 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-12 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-13 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-08-09 15.5612 14.9311 \n", "1995-08-10 15.5612 14.9463 \n", "1995-08-11 15.5612 14.9463 \n", "1995-08-12 15.5612 14.9463 \n", "1995-08-13 15.5612 14.9463 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64\n", "Mean Absolute Error: 0.214711322421\n", "Explained Variance Score: 0.942826192476\n", "Mean Squared Error: 0.0808523509562\n", "R2 score: 0.937817635223\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-07-31 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 20.5119 \n", "1997-08-01 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 \n", "1997-08-02 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 \n", "1997-08-03 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 \n", "1997-08-04 19.7879 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1997-07-31 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 22.0346 \n", "1997-08-01 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 \n", "1997-08-02 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 \n", "1997-08-03 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 \n", "1997-08-04 20.9197 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 \n", "\n", " Adj. High Adj. Low \n", "1997-07-31 22.1407 20.1788 \n", "1997-08-01 22.1407 19.8627 \n", "1997-08-02 21.5061 19.8627 \n", "1997-08-03 21.4771 19.8482 \n", "1997-08-04 21.4771 19.6528 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64\n", "Mean Absolute Error: 0.575956001159\n", "Explained Variance Score: 0.632401065134\n", "Mean Squared Error: 0.536694556461\n", "R2 score: 0.635433823871\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-23 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 26.9688 \n", "1999-07-24 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 \n", "1999-07-25 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 \n", "1999-07-26 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 \n", "1999-07-27 27.47 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1999-07-23 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-24 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-25 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-26 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-27 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-23 27.3146 25.811 \n", "1999-07-24 28.1917 25.811 \n", "1999-07-25 28.7229 25.811 \n", "1999-07-26 28.7229 25.9664 \n", "1999-07-27 28.7229 25.9664 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64\n", "Mean Absolute Error: 0.834586135448\n", "Explained Variance Score: 0.552372347128\n", "Mean Squared Error: 1.19797116115\n", "R2 score: 0.541753682113\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-17 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 21.771 \n", "2001-07-18 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 \n", "2001-07-19 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 \n", "2001-07-20 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 \n", "2001-07-21 21.9624 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2001-07-17 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 21.7337 \n", "2001-07-18 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 \n", "2001-07-19 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 \n", "2001-07-20 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 \n", "2001-07-21 21.0584 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 \n", "\n", " Adj. High Adj. Low \n", "2001-07-17 22.6378 19.9417 \n", "2001-07-18 22.6378 19.9417 \n", "2001-07-19 22.6378 19.9417 \n", "2001-07-20 22.6378 19.9417 \n", "2001-07-21 22.6378 19.9417 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64\n", "Mean Absolute Error: 0.676312438719\n", "Explained Variance Score: 0.79312466119\n", "Mean Squared Error: 0.850174654841\n", "R2 score: 0.78753038764\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-10 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 33.5442 \n", "2003-07-11 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 \n", "2003-07-12 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 \n", "2003-07-13 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 \n", "2003-07-14 33.6131 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2003-07-10 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-11 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-12 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-13 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-14 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-10 34.3357 32.0187 \n", "2003-07-11 34.3357 32.5005 \n", "2003-07-12 34.3357 32.7585 \n", "2003-07-13 34.3357 32.7585 \n", "2003-07-14 34.3357 32.7585 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64\n", "Mean Absolute Error: 0.633855324068\n", "Explained Variance Score: 0.893339521738\n", "Mean Squared Error: 0.718058387086\n", "R2 score: 0.80969350896\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-09 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 40.2947 \n", "2005-07-10 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 \n", "2005-07-11 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 \n", "2005-07-12 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 \n", "2005-07-13 39.5982 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2005-07-09 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 39.867 \n", "2005-07-10 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 \n", "2005-07-11 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 \n", "2005-07-12 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 \n", "2005-07-13 39.7571 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 \n", "\n", " Adj. High Adj. Low \n", "2005-07-09 40.8933 38.9812 \n", "2005-07-10 40.8933 38.9812 \n", "2005-07-11 40.8933 38.8041 \n", "2005-07-12 40.6123 38.8041 \n", "2005-07-13 40.6123 38.8041 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64\n", "Mean Absolute Error: 0.813134820175\n", "Explained Variance Score: 0.629454488747\n", "Mean Squared Error: 1.11504616982\n", "R2 score: 0.634165070736\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-06 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 34.1229 \n", "2007-07-07 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 \n", "2007-07-08 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 \n", "2007-07-09 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 \n", "2007-07-10 33.2667 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2007-07-06 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-07-07 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-07-08 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-07-09 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-10 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-07-06 37.6275 32.8884 \n", "2007-07-07 37.6275 32.8884 \n", "2007-07-08 37.6275 32.0919 \n", "2007-07-09 37.6275 32.0919 \n", "2007-07-10 37.6275 32.0919 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64\n", "Mean Absolute Error: 1.15665536203\n", "Explained Variance Score: 0.868995317818\n", "Mean Squared Error: 2.51929559765\n", "R2 score: 0.848349836178\n", "Errors: [Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64, Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64, Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64, Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64, Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64, Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64, Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64, Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64, Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64, Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64, Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64, Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64, Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64, Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64, Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64]\n", "Daily error: [[2.3428046878594335, 2.5494465554647414, 1.3954581010084075, 1.9338110474345769, 1.349031388428084, 1.3082501119097614, 2.0877971918382312, 1.362629656063173, 1.0672541331288881, 1.7560891545451207, 2.2842628093726178, 2.0416633481835507, 1.1975233764939945, 1.2541140107194724, 1.9979717114798277], [3.5258552334178641, 3.7320533743630255, 2.1034184642616141, 2.6897205756015548, 1.8969039843105724, 2.0506153412586832, 3.2171984334944406, 1.9827940259871397, 1.5688995987559236, 2.6367635568182766, 3.3068351824563802, 2.8945074594428291, 1.8249088288131119, 1.7898187399932406, 2.6622184489674865], [4.420877989036649, 4.7032147476522344, 2.5136196508353961, 3.0922152789031143, 2.1796658505265682, 2.6304796746940839, 4.1915655602523731, 2.4924344110851404, 1.9105828050113176, 3.2464940581864847, 4.0444675805083419, 3.4573108599535782, 2.2800119253617375, 2.1330178906407928, 3.2434631632331032], [5.2453007591988934, 5.3658643734648832, 2.7831224905377154, 3.416748711154967, 2.5549049030530955, 3.0746731020488789, 4.9524019488849751, 2.8907889072630373, 2.1787553036935075, 3.7318496940231114, 4.5205370675953178, 3.9785266649335007, 2.6882642728569226, 2.5139768692486597, 3.8987847995297504], [5.9123764917439461, 5.9343992865756627, 2.9779283268835495, 3.749884830258206, 2.8424480771173175, 3.4493099318044464, 5.6296725435585397, 3.1974315805691531, 2.4205889442104498, 4.1528377889957317, 4.8491578280113066, 4.4437933328538719, 3.0871274223490661, 2.8212984449238308, 4.5627499655632802], [6.5253540389538474, 6.411869704769062, 3.1595872490659578, 3.9820786600745923, 3.0589602014064852, 3.6925343353850728, 6.2161677524830603, 3.4512842358405149, 2.6052006922636068, 4.4255891500298041, 5.1504375410897554, 4.8667198046540632, 3.4479777609243358, 3.1141175250353417, 5.4764165109956515], [7.0484327153638269, 6.8859112718527289, 3.3214906751109079, 4.1319603443044786, 3.2919049518842676, 3.8961844607912113, 6.645652227769677, 3.680437333538447, 2.7931310314182922, 4.6362674911036841, 5.5220713093967051, 5.2196422824700353, 3.7666650074113814, 3.3699869165228575, 6.3198328863514632]]\n", "Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 14 days' worth of prior data\n", "execute(steps=15, days=14, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-24 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 7.49473 \n", "1979-10-25 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 \n", "1979-10-26 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 \n", "1979-10-27 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 \n", "1979-10-28 7.39063 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1979-10-24 7.63838 7.58633 7.72894 ... 8.14531 8.22338 7.9111 \n", "1979-10-25 7.49473 7.63838 7.58633 ... 8.0027 8.14531 8.22338 \n", "1979-10-26 7.4687 7.49473 7.63838 ... 7.78098 8.0027 8.14531 \n", "1979-10-27 7.20847 7.4687 7.49473 ... 7.79452 7.78098 8.0027 \n", "1979-10-28 7.20847 7.20847 7.4687 ... 7.72894 7.79452 7.78098 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1979-10-24 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-10-25 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-10-26 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-10-27 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-10-28 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.47982 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64\n", "Mean Absolute Error: 0.247178558128\n", "Explained Variance Score: 0.934716071877\n", "Mean Squared Error: 0.125104935048\n", "R2 score: 0.934194798936\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-16 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 3.63078 \n", "1981-10-17 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 \n", "1981-10-18 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 \n", "1981-10-19 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 \n", "1981-10-20 4.15125 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1981-10-16 3.60371 3.59122 3.68283 ... 3.87748 3.95555 3.85146 \n", "1981-10-17 3.63078 3.60371 3.59122 ... 3.66929 3.87748 3.95555 \n", "1981-10-18 3.70781 3.63078 3.60371 ... 3.66929 3.66929 3.87748 \n", "1981-10-19 3.72134 3.70781 3.63078 ... 3.64327 3.66929 3.66929 \n", "1981-10-20 3.72134 3.72134 3.70781 ... 3.68283 3.64327 3.66929 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1981-10-16 3.69532 3.53918 3.47464 3.39553 3.44757 4.0076 3.3185 \n", "1981-10-17 3.85146 3.69532 3.53918 3.47464 3.39553 4.0076 3.3185 \n", "1981-10-18 3.95555 3.85146 3.69532 3.53918 3.47464 4.0076 3.3185 \n", "1981-10-19 3.87748 3.95555 3.85146 3.69532 3.53918 4.07213 3.48713 \n", "1981-10-20 3.66929 3.87748 3.95555 3.85146 3.69532 4.20329 3.53918 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64\n", "Mean Absolute Error: 0.14560789487\n", "Explained Variance Score: 0.697986240547\n", "Mean Squared Error: 0.0357285529497\n", "R2 score: 0.693931872833\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-11 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 4.38441 \n", "1983-10-12 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 \n", "1983-10-13 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 \n", "1983-10-14 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 \n", "1983-10-15 4.28032 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1983-10-11 4.44999 4.51557 4.55409 ... 4.39795 4.42397 4.37192 \n", "1983-10-12 4.38441 4.44999 4.51557 ... 4.44999 4.39795 4.42397 \n", "1983-10-13 4.29385 4.38441 4.44999 ... 4.37192 4.44999 4.39795 \n", "1983-10-14 4.3459 4.29385 4.38441 ... 4.47602 4.37192 4.44999 \n", "1983-10-15 4.35943 4.3459 4.29385 ... 4.55409 4.47602 4.37192 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1983-10-11 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.21578 \n", "1983-10-12 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.18976 \n", "1983-10-13 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.18976 \n", "1983-10-14 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.18976 \n", "1983-10-15 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.18976 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64\n", "Mean Absolute Error: 0.100467856093\n", "Explained Variance Score: 0.707746188515\n", "Mean Squared Error: 0.0166816164165\n", "R2 score: 0.690365934271\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-01 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 5.03604 \n", "1985-10-02 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 \n", "1985-10-03 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 \n", "1985-10-04 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 \n", "1985-10-05 5.15262 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1985-10-01 5.10058 5.23069 5.25672 ... 5.14013 5.16512 5.15262 \n", "1985-10-02 5.03604 5.10058 5.23069 ... 5.08809 5.14013 5.16512 \n", "1985-10-03 4.99648 5.03604 5.10058 ... 5.17865 5.08809 5.14013 \n", "1985-10-04 4.95693 4.99648 5.03604 ... 5.14013 5.17865 5.08809 \n", "1985-10-05 5.11307 4.95693 4.99648 ... 5.25672 5.14013 5.17865 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1985-10-01 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-02 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-03 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-04 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-05 5.08809 5.14013 5.16512 5.15262 4.98399 5.26921 4.91841 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64\n", "Mean Absolute Error: 0.118704995917\n", "Explained Variance Score: 0.599720926078\n", "Mean Squared Error: 0.0233000629812\n", "R2 score: 0.596620827484\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-22 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 5.79496 \n", "1987-09-23 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 \n", "1987-09-24 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 \n", "1987-09-25 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 \n", "1987-09-26 5.90152 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1987-09-22 5.84824 5.79496 5.70118 ... 5.67454 5.72782 5.70118 \n", "1987-09-23 5.79496 5.84824 5.79496 ... 5.74168 5.67454 5.72782 \n", "1987-09-24 5.76725 5.79496 5.84824 ... 5.72782 5.74168 5.67454 \n", "1987-09-25 5.79496 5.76725 5.79496 ... 5.6479 5.72782 5.74168 \n", "1987-09-26 5.78111 5.79496 5.76725 ... 5.70118 5.6479 5.72782 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1987-09-22 5.66069 5.79496 5.72782 5.71397 5.6479 5.86103 5.62126 \n", "1987-09-23 5.70118 5.66069 5.79496 5.72782 5.71397 5.86103 5.62126 \n", "1987-09-24 5.72782 5.70118 5.66069 5.79496 5.72782 5.86103 5.62126 \n", "1987-09-25 5.67454 5.72782 5.70118 5.66069 5.79496 5.86103 5.62126 \n", "1987-09-26 5.74168 5.67454 5.72782 5.70118 5.66069 5.90152 5.62126 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64\n", "Mean Absolute Error: 0.107246850816\n", "Explained Variance Score: 0.873418919146\n", "Mean Squared Error: 0.0223804852513\n", "R2 score: 0.873053045647\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-13 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 8.51123 \n", "1989-09-14 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 \n", "1989-09-15 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 \n", "1989-09-16 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 \n", "1989-09-17 8.66302 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1989-09-13 8.38823 8.38823 8.4695 ... 8.62105 8.71769 8.73087 \n", "1989-09-14 8.51123 8.38823 8.38823 ... 8.71769 8.62105 8.71769 \n", "1989-09-15 8.52441 8.51123 8.38823 ... 8.64851 8.71769 8.62105 \n", "1989-09-16 8.62105 8.52441 8.51123 ... 8.57932 8.64851 8.71769 \n", "1989-09-17 8.74405 8.62105 8.52441 ... 8.4695 8.57932 8.64851 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1989-09-13 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.35967 \n", "1989-09-14 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.35967 \n", "1989-09-15 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.35967 \n", "1989-09-16 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.35967 \n", "1989-09-17 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.35967 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64\n", "Mean Absolute Error: 0.183367476501\n", "Explained Variance Score: 0.923191778806\n", "Mean Squared Error: 0.062951655998\n", "R2 score: 0.914995737201\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-05 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 4.96121 \n", "1991-09-06 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 \n", "1991-09-07 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 \n", "1991-09-08 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 \n", "1991-09-09 4.86252 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1991-09-05 4.83307 4.79111 4.80585 ... 5.01791 5.03265 5.11657 \n", "1991-09-06 4.96121 4.83307 4.79111 ... 4.96121 5.01791 5.03265 \n", "1991-09-07 4.97595 4.96121 4.83307 ... 4.90451 4.96121 5.01791 \n", "1991-09-08 5.01791 4.97595 4.96121 ... 4.69245 4.90451 4.96121 \n", "1991-09-09 4.97595 5.01791 4.97595 ... 4.80585 4.69245 4.90451 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1991-09-05 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-06 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-07 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-08 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-09 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64\n", "Mean Absolute Error: 0.179845135179\n", "Explained Variance Score: 0.878379857563\n", "Mean Squared Error: 0.0637005335646\n", "R2 score: 0.832463137105\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-27 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 9.52898 \n", "1993-08-28 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 \n", "1993-08-29 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 \n", "1993-08-30 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 \n", "1993-08-31 9.35597 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1993-08-27 9.5728 9.77464 9.6743 ... 9.21296 9.2268 9.08263 \n", "1993-08-28 9.52898 9.5728 9.77464 ... 9.3133 9.21296 9.2268 \n", "1993-08-29 9.58664 9.52898 9.5728 ... 9.32829 9.3133 9.21296 \n", "1993-08-30 9.3998 9.58664 9.52898 ... 9.45747 9.32829 9.3133 \n", "1993-08-31 9.34213 9.3998 9.58664 ... 9.6743 9.45747 9.32829 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1993-08-27 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 9.00997 \n", "1993-08-28 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 9.00997 \n", "1993-08-29 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 9.00997 \n", "1993-08-30 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-31 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64\n", "Mean Absolute Error: 0.173480085165\n", "Explained Variance Score: 0.889783953988\n", "Mean Squared Error: 0.0542550164358\n", "R2 score: 0.87630032975\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-19 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 15.005 \n", "1995-08-20 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 \n", "1995-08-21 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 \n", "1995-08-22 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 \n", "1995-08-23 14.7703 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1995-08-19 15.2984 15.5612 15.4004 ... 15.3418 15.4298 15.4298 \n", "1995-08-20 15.005 15.2984 15.5612 ... 15.1071 15.3418 15.4298 \n", "1995-08-21 15.0778 15.005 15.2984 ... 15.2538 15.1071 15.3418 \n", "1995-08-22 15.1071 15.0778 15.005 ... 15.357 15.2538 15.1071 \n", "1995-08-23 15.1071 15.1071 15.0778 ... 15.4004 15.357 15.2538 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1995-08-19 15.1364 15.1071 15.3124 15.4298 15.2397 15.5612 14.6812 \n", "1995-08-20 15.4298 15.1364 15.1071 15.3124 15.4298 15.5612 14.6812 \n", "1995-08-21 15.4298 15.4298 15.1364 15.1071 15.3124 15.5612 14.6812 \n", "1995-08-22 15.3418 15.4298 15.4298 15.1364 15.1071 15.5612 14.6671 \n", "1995-08-23 15.1071 15.3418 15.4298 15.4298 15.1364 15.5612 14.6378 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64\n", "Mean Absolute Error: 0.21969484392\n", "Explained Variance Score: 0.941053178728\n", "Mean Squared Error: 0.0874448127494\n", "R2 score: 0.934717418017\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-09 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 20.0003 \n", "1997-08-10 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 \n", "1997-08-11 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 \n", "1997-08-12 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 \n", "1997-08-13 21.523 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1997-08-09 20.9486 21.4313 21.4023 ... 20.5119 20.9197 21.2069 \n", "1997-08-10 20.0003 20.9486 21.4313 ... 20.6036 20.5119 20.9197 \n", "1997-08-11 20.1788 20.0003 20.9486 ... 20.6928 20.6036 20.5119 \n", "1997-08-12 19.9689 20.1788 20.0003 ... 20.9197 20.6928 20.6036 \n", "1997-08-13 19.7879 19.9689 20.1788 ... 21.4023 20.9197 20.6928 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1997-08-09 20.8883 21.2358 20.7387 21.0403 22.0346 22.1407 19.6528 \n", "1997-08-10 21.2069 20.8883 21.2358 20.7387 21.0403 22.1407 19.6528 \n", "1997-08-11 20.9197 21.2069 20.8883 21.2358 20.7387 21.6267 19.6528 \n", "1997-08-12 20.5119 20.9197 21.2069 20.8883 21.2358 21.6267 19.6528 \n", "1997-08-13 20.6036 20.5119 20.9197 21.2069 20.8883 21.6267 19.6528 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64\n", "Mean Absolute Error: 0.587602123323\n", "Explained Variance Score: 0.597673117636\n", "Mean Squared Error: 0.562295173611\n", "R2 score: 0.599602671043\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-03 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 27.6253 \n", "1999-08-04 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 \n", "1999-08-05 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 \n", "1999-08-06 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 \n", "1999-08-07 26.0316 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1999-08-03 27.1893 26.8435 26.623 ... 26.9688 26.5628 26.1569 \n", "1999-08-04 27.6253 27.1893 26.8435 ... 26.7533 26.9688 26.5628 \n", "1999-08-05 28.4122 27.6253 27.1893 ... 26.5027 26.7533 26.9688 \n", "1999-08-06 27.3447 28.4122 27.6253 ... 26.3423 26.5027 26.7533 \n", "1999-08-07 27.47 27.3447 28.4122 ... 26.623 26.3423 26.5027 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1999-08-03 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 25.811 \n", "1999-08-04 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 25.811 \n", "1999-08-05 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 25.811 \n", "1999-08-06 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 25.9664 \n", "1999-08-07 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 25.9363 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64\n", "Mean Absolute Error: 0.80841683447\n", "Explained Variance Score: 0.55978076116\n", "Mean Squared Error: 1.12748077923\n", "R2 score: 0.551337857615\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-26 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 21.2871 \n", "2001-07-27 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 \n", "2001-07-28 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 \n", "2001-07-29 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 \n", "2001-07-30 21.3349 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2001-07-26 20.7074 19.9948 20.633 ... 21.771 22.2762 21.2179 \n", "2001-07-27 21.2871 20.7074 19.9948 ... 21.4998 21.771 22.2762 \n", "2001-07-28 21.2339 21.2871 20.7074 ... 21.1701 21.4998 21.771 \n", "2001-07-29 22.2708 21.2339 21.2871 ... 21.0584 21.1701 21.4998 \n", "2001-07-30 21.9624 22.2708 21.2339 ... 20.633 21.0584 21.1701 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2001-07-26 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.9417 \n", "2001-07-27 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.9417 \n", "2001-07-28 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.9417 \n", "2001-07-29 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.9417 \n", "2001-07-30 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.9417 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64\n", "Mean Absolute Error: 0.702921222006\n", "Explained Variance Score: 0.80646285415\n", "Mean Squared Error: 0.898869096996\n", "R2 score: 0.800649358483\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-19 33.831 33.5959 33.2632 33.6131 34.0719 34.112 33.9686 \n", "2003-07-20 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 34.112 \n", "2003-07-21 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 \n", "2003-07-22 33.917 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 \n", "2003-07-23 33.8826 33.917 33.4926 33.5729 33.831 33.5959 33.2632 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2003-07-19 34.1522 33.5959 33.0052 ... 33.5442 33.1944 33.0052 \n", "2003-07-20 33.9686 34.1522 33.5959 ... 32.8962 33.5442 33.1944 \n", "2003-07-21 34.112 33.9686 34.1522 ... 32.9937 32.8962 33.5442 \n", "2003-07-22 34.0719 34.112 33.9686 ... 33.3722 32.9937 32.8962 \n", "2003-07-23 33.6131 34.0719 34.112 ... 33.0052 33.3722 32.9937 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2003-07-19 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-07-20 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-07-21 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-07-22 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-07-23 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64\n", "Mean Absolute Error: 0.607302274291\n", "Explained Variance Score: 0.912255975134\n", "Mean Squared Error: 0.641949670141\n", "R2 score: 0.841214975617\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-20 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 39.9404 \n", "2005-07-21 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 \n", "2005-07-22 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 \n", "2005-07-23 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 \n", "2005-07-24 41.2538 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2005-07-20 40.0625 40.1969 40.4413 ... 40.2947 39.7082 39.8304 \n", "2005-07-21 39.9404 40.0625 40.1969 ... 39.8304 40.2947 39.7082 \n", "2005-07-22 38.9263 39.9404 40.0625 ... 39.7449 39.8304 40.2947 \n", "2005-07-23 39.7388 38.9263 39.9404 ... 39.7571 39.7449 39.8304 \n", "2005-07-24 39.5982 39.7388 38.9263 ... 40.4413 39.7571 39.7449 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2005-07-20 40.0442 39.6227 40.2275 40.7162 39.867 40.8933 38.8041 \n", "2005-07-21 39.8304 40.0442 39.6227 40.2275 40.7162 40.8933 38.8041 \n", "2005-07-22 39.7082 39.8304 40.0442 39.6227 40.2275 40.8933 38.8041 \n", "2005-07-23 40.2947 39.7082 39.8304 40.0442 39.6227 40.6123 38.8041 \n", "2005-07-24 39.8304 40.2947 39.7082 39.8304 40.0442 41.3454 38.8041 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64\n", "Mean Absolute Error: 0.834239650358\n", "Explained Variance Score: 0.583600781437\n", "Mean Squared Error: 1.16134570271\n", "R2 score: 0.585510921947\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-17 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 36.2071 \n", "2007-07-18 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 \n", "2007-07-19 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 \n", "2007-07-20 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 \n", "2007-07-21 26.9147 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2007-07-17 36.7314 35.5367 35.9084 ... 34.1229 34.7269 34.4681 \n", "2007-07-18 36.2071 36.7314 35.5367 ... 34.1561 34.1229 34.7269 \n", "2007-07-19 32.6162 36.2071 36.7314 ... 36.2071 34.1561 34.1229 \n", "2007-07-20 33.2999 32.6162 36.2071 ... 36.6119 36.2071 34.1561 \n", "2007-07-21 33.2667 33.2999 32.6162 ... 35.9084 36.6119 36.2071 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2007-07-17 36.3664 35.457 35.5035 34.78 36.1009 37.6275 28.4479 \n", "2007-07-18 34.4681 36.3664 35.457 35.5035 34.78 37.6275 28.4479 \n", "2007-07-19 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 28.3484 \n", "2007-07-20 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 26.5629 \n", "2007-07-21 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64\n", "Mean Absolute Error: 1.2420603359\n", "Explained Variance Score: 0.882276409115\n", "Mean Squared Error: 2.85887227574\n", "R2 score: 0.862561522356\n", "Errors: [Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64, Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64, Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64, Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64, Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64, Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64, Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64, Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64, Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64, Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64, Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64, Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64, Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64, Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64, Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64]\n", "Daily error: [[2.2932086903598066, 2.5745843677223665, 1.410938665851232, 1.8560341967801308, 1.3452118535491773, 1.2953543921120965, 2.0706240035799164, 1.3163805720674671, 1.0787215801674817, 1.7589705465567647, 2.2752138152167474, 2.0880627448808471, 1.1687399396644256, 1.2874672090863213, 2.3679740132036238], [3.5051253714594792, 3.7758939807647049, 2.1101590340760858, 2.5311938217644379, 1.8869590042388795, 2.0136643031598154, 3.0941050306484827, 1.9668400833290185, 1.5852576005774814, 2.6692218359360016, 3.2804625406152712, 3.0511678681477217, 1.7709780411099409, 1.8590066437215769, 3.2260112930119331], [4.3910769731836528, 4.73443172240734, 2.5163581244682867, 2.8921256793047787, 2.1712841603268145, 2.5715803374493698, 3.9478706366382608, 2.5025348594217718, 1.9241814438590694, 3.2905025186776364, 3.9550573049063185, 3.6441654215575263, 2.1770380803647402, 2.2190678049570254, 3.7581852465385679], [5.1361009877654604, 5.4151232904822937, 2.7996492546644527, 3.254525792271338, 2.552883694387567, 3.030218079266386, 4.6195946055962853, 2.8935016311120809, 2.2056247688212975, 3.7878186640966414, 4.3904674266100656, 4.1287784929628275, 2.544219187098574, 2.5895015720185302, 4.440659439319135], [5.7410212232012947, 6.0457890220500268, 3.0383136360900456, 3.5252188012037138, 2.826196220616342, 3.4278249217933108, 5.1806333088289245, 3.2002251370334793, 2.4562804221504946, 4.2112453125333271, 4.6795839169286628, 4.5588302590783849, 2.9100623154365133, 2.8787401524867353, 5.1795549205147617], [6.3168411174496839, 6.565847199104029, 3.2619156971270429, 3.7370190918129889, 3.0182882726444662, 3.7051905637636322, 5.6874360343827588, 3.4407560971972138, 2.6628209714516475, 4.5058494414038934, 4.9211912763832011, 5.0124273285269396, 3.2339526748757406, 3.1592652479164429, 5.8957221091782941], [6.8191565595888122, 7.0508931309669327, 3.4473160422940028, 3.964312202423975, 3.2338778357552651, 3.9255667936052023, 6.0096699233415531, 3.6545134565638175, 2.8840627731649513, 4.7448298869292778, 5.2894102436662802, 5.4030603118359393, 3.5305738678012406, 3.3828891687730129, 6.526988671729911]]\n", "Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 21 days' worth of prior data\n", "execute(steps=15, days=21, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-11-06 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 7.09084 \n", "1979-11-07 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 \n", "1979-11-08 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 \n", "1979-11-09 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 \n", "1979-11-10 6.55789 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1979-11-06 6.83061 6.87017 6.92221 ... 8.14531 8.22338 7.9111 \n", "1979-11-07 7.09084 6.83061 6.87017 ... 8.0027 8.14531 8.22338 \n", "1979-11-08 7.39063 7.09084 6.83061 ... 7.78098 8.0027 8.14531 \n", "1979-11-09 7.39063 7.39063 7.09084 ... 7.79452 7.78098 8.0027 \n", "1979-11-10 7.26052 7.39063 7.39063 ... 7.72894 7.79452 7.78098 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1979-11-06 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-11-07 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-11-08 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-11-09 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-11-10 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.46628 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64\n", "Mean Absolute Error: 0.265589379571\n", "Explained Variance Score: 0.923826112353\n", "Mean Squared Error: 0.137645958828\n", "R2 score: 0.924053762052\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-29 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 4.02009 \n", "1981-10-30 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 \n", "1981-10-31 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 \n", "1981-11-01 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 \n", "1981-11-02 4.16374 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1981-10-29 3.9035 3.65576 3.70781 ... 3.87748 3.95555 3.85146 \n", "1981-10-30 4.02009 3.9035 3.65576 ... 3.66929 3.87748 3.95555 \n", "1981-10-31 4.15125 4.02009 3.9035 ... 3.66929 3.66929 3.87748 \n", "1981-11-01 4.17623 4.15125 4.02009 ... 3.64327 3.66929 3.66929 \n", "1981-11-02 4.26783 4.17623 4.15125 ... 3.68283 3.64327 3.66929 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1981-10-29 3.69532 3.53918 3.47464 3.39553 3.44757 4.30739 3.3185 \n", "1981-10-30 3.85146 3.69532 3.53918 3.47464 3.39553 4.30739 3.3185 \n", "1981-10-31 3.95555 3.85146 3.69532 3.53918 3.47464 4.30739 3.3185 \n", "1981-11-01 3.87748 3.95555 3.85146 3.69532 3.53918 4.30739 3.48713 \n", "1981-11-02 3.66929 3.87748 3.95555 3.85146 3.69532 4.30739 3.53918 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64\n", "Mean Absolute Error: 0.147636752695\n", "Explained Variance Score: 0.723234662854\n", "Mean Squared Error: 0.0364831332012\n", "R2 score: 0.711874870251\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-22 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 4.28032 \n", "1983-10-23 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 \n", "1983-10-24 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 \n", "1983-10-25 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 \n", "1983-10-26 4.31988 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1983-10-22 4.30739 4.25534 4.25534 ... 4.39795 4.42397 4.37192 \n", "1983-10-23 4.28032 4.30739 4.25534 ... 4.44999 4.39795 4.42397 \n", "1983-10-24 4.28032 4.28032 4.30739 ... 4.37192 4.44999 4.39795 \n", "1983-10-25 4.37192 4.28032 4.28032 ... 4.47602 4.37192 4.44999 \n", "1983-10-26 4.37192 4.37192 4.28032 ... 4.55409 4.47602 4.37192 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1983-10-22 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.13771 \n", "1983-10-23 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.13771 \n", "1983-10-24 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.12418 \n", "1983-10-25 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.12418 \n", "1983-10-26 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.12418 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64\n", "Mean Absolute Error: 0.0982455236583\n", "Explained Variance Score: 0.738585897896\n", "Mean Squared Error: 0.0162113557319\n", "R2 score: 0.736956378599\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-12 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 5.04853 \n", "1985-10-13 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 \n", "1985-10-14 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 \n", "1985-10-15 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 \n", "1985-10-16 5.40037 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1985-10-12 4.99648 5.08809 5.15262 ... 5.14013 5.16512 5.15262 \n", "1985-10-13 5.04853 4.99648 5.08809 ... 5.08809 5.14013 5.16512 \n", "1985-10-14 5.15262 5.04853 4.99648 ... 5.17865 5.08809 5.14013 \n", "1985-10-15 5.24423 5.15262 5.04853 ... 5.14013 5.17865 5.08809 \n", "1985-10-16 5.20467 5.24423 5.15262 ... 5.25672 5.14013 5.17865 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1985-10-12 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-13 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-14 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-15 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-16 5.08809 5.14013 5.16512 5.15262 4.98399 5.43888 4.91841 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64\n", "Mean Absolute Error: 0.125644826003\n", "Explained Variance Score: 0.64103714916\n", "Mean Squared Error: 0.0279968462683\n", "R2 score: 0.621838958431\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-10-06 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 5.83439 \n", "1987-10-07 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 \n", "1987-10-08 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 \n", "1987-10-09 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 \n", "1987-10-10 5.71397 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1987-10-06 5.76725 5.76725 5.84824 ... 5.67454 5.72782 5.70118 \n", "1987-10-07 5.83439 5.76725 5.76725 ... 5.74168 5.67454 5.72782 \n", "1987-10-08 5.90152 5.83439 5.76725 ... 5.72782 5.74168 5.67454 \n", "1987-10-09 5.86103 5.90152 5.83439 ... 5.6479 5.72782 5.74168 \n", "1987-10-10 5.98038 5.86103 5.90152 ... 5.70118 5.6479 5.72782 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1987-10-06 5.66069 5.79496 5.72782 5.71397 5.6479 6.07416 5.62126 \n", "1987-10-07 5.70118 5.66069 5.79496 5.72782 5.71397 6.07416 5.62126 \n", "1987-10-08 5.72782 5.70118 5.66069 5.79496 5.72782 6.07416 5.62126 \n", "1987-10-09 5.67454 5.72782 5.70118 5.66069 5.79496 6.07416 5.62126 \n", "1987-10-10 5.74168 5.67454 5.72782 5.70118 5.66069 6.07416 5.62126 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64\n", "Mean Absolute Error: 0.101127508153\n", "Explained Variance Score: 0.896285604892\n", "Mean Squared Error: 0.0175440030481\n", "R2 score: 0.895446126394\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-28 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 8.73244 \n", "1989-09-29 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 \n", "1989-09-30 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 \n", "1989-10-01 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 \n", "1989-10-02 8.29169 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1989-09-28 8.84263 8.81508 8.84263 ... 8.62105 8.71769 8.73087 \n", "1989-09-29 8.73244 8.84263 8.81508 ... 8.71769 8.62105 8.71769 \n", "1989-09-30 8.66302 8.73244 8.84263 ... 8.64851 8.71769 8.62105 \n", "1989-10-01 8.52639 8.66302 8.73244 ... 8.57932 8.64851 8.71769 \n", "1989-10-02 8.44264 8.52639 8.66302 ... 8.4695 8.57932 8.64851 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1989-09-28 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.20904 \n", "1989-09-29 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.1264 \n", "1989-09-30 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.1264 \n", "1989-10-01 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.1264 \n", "1989-10-02 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.1264 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64\n", "Mean Absolute Error: 0.192674964535\n", "Explained Variance Score: 0.915662166478\n", "Mean Squared Error: 0.0693827817393\n", "R2 score: 0.904473158945\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-19 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 4.86252 \n", "1991-09-20 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 \n", "1991-09-21 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 \n", "1991-09-22 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 \n", "1991-09-23 4.96148 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1991-09-19 4.89096 4.91925 4.91925 ... 5.01791 5.03265 5.11657 \n", "1991-09-20 4.86252 4.89096 4.91925 ... 4.96121 5.01791 5.03265 \n", "1991-09-21 4.86252 4.86252 4.89096 ... 4.90451 4.96121 5.01791 \n", "1991-09-22 4.83409 4.86252 4.86252 ... 4.69245 4.90451 4.96121 \n", "1991-09-23 4.83409 4.83409 4.86252 ... 4.80585 4.69245 4.90451 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1991-09-19 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-20 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-21 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-22 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-23 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64\n", "Mean Absolute Error: 0.169117487826\n", "Explained Variance Score: 0.885949963038\n", "Mean Squared Error: 0.0583397959215\n", "R2 score: 0.84902479478\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-09-09 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 9.29831 \n", "1993-09-10 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 \n", "1993-09-11 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 \n", "1993-09-12 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 \n", "1993-09-13 9.17272 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1993-09-09 9.25563 9.24064 9.35597 ... 9.21296 9.2268 9.08263 \n", "1993-09-10 9.29831 9.25563 9.24064 ... 9.3133 9.21296 9.2268 \n", "1993-09-11 9.35597 9.29831 9.25563 ... 9.32829 9.3133 9.21296 \n", "1993-09-12 9.28827 9.35597 9.29831 ... 9.45747 9.32829 9.3133 \n", "1993-09-13 9.17272 9.28827 9.35597 ... 9.6743 9.45747 9.32829 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1993-09-09 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.86881 \n", "1993-09-10 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.86881 \n", "1993-09-11 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.86881 \n", "1993-09-12 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.86881 \n", "1993-09-13 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.86881 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64\n", "Mean Absolute Error: 0.173953716023\n", "Explained Variance Score: 0.882699120583\n", "Mean Squared Error: 0.055246949342\n", "R2 score: 0.868280591863\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-09-01 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 14.7844 \n", "1995-09-02 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 \n", "1995-09-03 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 \n", "1995-09-04 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 \n", "1995-09-05 16.2301 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1995-09-01 14.7551 14.7551 14.7551 ... 15.3418 15.4298 15.4298 \n", "1995-09-02 14.7844 14.7551 14.7551 ... 15.1071 15.3418 15.4298 \n", "1995-09-03 14.7703 14.7844 14.7551 ... 15.2538 15.1071 15.3418 \n", "1995-09-04 15.005 14.7703 14.7844 ... 15.357 15.2538 15.1071 \n", "1995-09-05 15.3265 15.005 14.7703 ... 15.4004 15.357 15.2538 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1995-09-01 15.1364 15.1071 15.3124 15.4298 15.2397 15.5764 14.6378 \n", "1995-09-02 15.4298 15.1364 15.1071 15.3124 15.4298 15.7738 14.6378 \n", "1995-09-03 15.4298 15.4298 15.1364 15.1071 15.3124 16.1125 14.6378 \n", "1995-09-04 15.3418 15.4298 15.4298 15.1364 15.1071 16.3183 14.6378 \n", "1995-09-05 15.1071 15.3418 15.4298 15.4298 15.1364 16.3183 14.6378 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64\n", "Mean Absolute Error: 0.239159740022\n", "Explained Variance Score: 0.944241221285\n", "Mean Squared Error: 0.101972988604\n", "R2 score: 0.93697372492\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-23 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 21.3565 \n", "1997-08-24 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 \n", "1997-08-25 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 \n", "1997-08-26 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 \n", "1997-08-27 22.3992 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1997-08-23 21.4771 21.0235 20.8594 ... 20.5119 20.9197 21.2069 \n", "1997-08-24 21.3565 21.4771 21.0235 ... 20.6036 20.5119 20.9197 \n", "1997-08-25 21.523 21.3565 21.4771 ... 20.6928 20.6036 20.5119 \n", "1997-08-26 21.7933 21.523 21.3565 ... 20.9197 20.6928 20.6036 \n", "1997-08-27 22.1407 21.7933 21.523 ... 21.4023 20.9197 20.6928 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1997-08-23 20.8883 21.2358 20.7387 21.0403 22.0346 22.1721 19.6528 \n", "1997-08-24 21.2069 20.8883 21.2358 20.7387 21.0403 22.1721 19.6528 \n", "1997-08-25 20.9197 21.2069 20.8883 21.2358 20.7387 22.1721 19.6528 \n", "1997-08-26 20.5119 20.9197 21.2069 20.8883 21.2358 22.1721 19.6528 \n", "1997-08-27 20.6036 20.5119 20.9197 21.2069 20.8883 22.3992 19.6528 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64\n", "Mean Absolute Error: 0.601937849493\n", "Explained Variance Score: 0.588903471007\n", "Mean Squared Error: 0.583981651008\n", "R2 score: 0.583088547014\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-14 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 26.7533 \n", "1999-08-15 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 \n", "1999-08-16 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 \n", "1999-08-17 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 \n", "1999-08-18 24.6834 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1999-08-14 27.0339 27.3146 26.9086 ... 26.9688 26.5628 26.1569 \n", "1999-08-15 26.7533 27.0339 27.3146 ... 26.7533 26.9688 26.5628 \n", "1999-08-16 26.0316 26.7533 27.0339 ... 26.5027 26.7533 26.9688 \n", "1999-08-17 26.0616 26.0316 26.7533 ... 26.3423 26.5027 26.7533 \n", "1999-08-18 25.3098 26.0616 26.0316 ... 26.623 26.3423 26.5027 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1999-08-14 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 24.964 \n", "1999-08-15 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 24.964 \n", "1999-08-16 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 24.4027 \n", "1999-08-17 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 24.4027 \n", "1999-08-18 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 24.4027 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64\n", "Mean Absolute Error: 0.794397514735\n", "Explained Variance Score: 0.589058113891\n", "Mean Squared Error: 1.06170118828\n", "R2 score: 0.586860973735\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-08-08 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 21.1594 \n", "2001-08-09 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 \n", "2001-08-10 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 \n", "2001-08-11 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 \n", "2001-08-12 19.8885 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2001-08-08 21.2445 21.2658 22.3559 ... 21.771 22.2762 21.2179 \n", "2001-08-09 21.1594 21.2445 21.2658 ... 21.4998 21.771 22.2762 \n", "2001-08-10 21.3349 21.1594 21.2445 ... 21.1701 21.4998 21.771 \n", "2001-08-11 20.9786 21.3349 21.1594 ... 21.0584 21.1701 21.4998 \n", "2001-08-12 19.5588 20.9786 21.3349 ... 20.633 21.0584 21.1701 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2001-08-08 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.2769 \n", "2001-08-09 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.2769 \n", "2001-08-10 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.2769 \n", "2001-08-11 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.2769 \n", "2001-08-12 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.2769 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64\n", "Mean Absolute Error: 0.716918405219\n", "Explained Variance Score: 0.831164391363\n", "Mean Squared Error: 0.921046477113\n", "R2 score: 0.8261118985\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-08-01 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 33.917 \n", "2003-08-02 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 \n", "2003-08-03 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 \n", "2003-08-04 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 \n", "2003-08-05 33.9973 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2003-08-01 33.4926 33.5729 33.831 ... 33.5442 33.1944 33.0052 \n", "2003-08-02 33.917 33.4926 33.5729 ... 32.8962 33.5442 33.1944 \n", "2003-08-03 33.8826 33.917 33.4926 ... 32.9937 32.8962 33.5442 \n", "2003-08-04 33.8195 33.8826 33.917 ... 33.3722 32.9937 32.8962 \n", "2003-08-05 34.112 33.8195 33.8826 ... 33.0052 33.3722 32.9937 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2003-08-01 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-08-02 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-08-03 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-08-04 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-08-05 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64\n", "Mean Absolute Error: 0.58624564363\n", "Explained Variance Score: 0.917058612472\n", "Mean Squared Error: 0.59587482901\n", "R2 score: 0.858798903078\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-08-02 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 40.3008 \n", "2005-08-03 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 \n", "2005-08-04 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 \n", "2005-08-05 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 \n", "2005-08-06 41.5776 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2005-08-02 39.751 39.0118 39.4211 ... 40.2947 39.7082 39.8304 \n", "2005-08-03 40.3008 39.751 39.0118 ... 39.8304 40.2947 39.7082 \n", "2005-08-04 41.2538 40.3008 39.751 ... 39.7449 39.8304 40.2947 \n", "2005-08-05 41.3943 41.2538 40.3008 ... 39.7571 39.7449 39.8304 \n", "2005-08-06 40.6551 41.3943 41.2538 ... 40.4413 39.7571 39.7449 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2005-08-02 40.0442 39.6227 40.2275 40.7162 39.867 41.7791 38.8041 \n", "2005-08-03 39.8304 40.0442 39.6227 40.2275 40.7162 41.8952 38.8041 \n", "2005-08-04 39.7082 39.8304 40.0442 39.6227 40.2275 42.3962 38.8041 \n", "2005-08-05 40.2947 39.7082 39.8304 40.0442 39.6227 42.4511 38.8041 \n", "2005-08-06 39.8304 40.2947 39.7082 39.8304 40.0442 42.4511 38.8041 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64\n", "Mean Absolute Error: 0.802958635558\n", "Explained Variance Score: 0.615314748251\n", "Mean Squared Error: 1.07455580184\n", "R2 score: 0.610929179905\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-28 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 27.0143 \n", "2007-07-29 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 \n", "2007-07-30 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 \n", "2007-07-31 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 \n", "2007-08-01 29.9082 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2007-07-28 29.6692 29.4834 30.2998 ... 34.1229 34.7269 34.4681 \n", "2007-07-29 27.0143 29.6692 29.4834 ... 34.1561 34.1229 34.7269 \n", "2007-07-30 26.9147 27.0143 29.6692 ... 36.2071 34.1561 34.1229 \n", "2007-07-31 30.8639 26.9147 27.0143 ... 36.6119 36.2071 34.1561 \n", "2007-08-01 31.0033 30.8639 26.9147 ... 35.9084 36.6119 36.2071 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2007-07-28 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-07-29 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-07-30 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-07-31 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-08-01 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64\n", "Mean Absolute Error: 1.34141196406\n", "Explained Variance Score: 0.8823848576\n", "Mean Squared Error: 3.23643017946\n", "R2 score: 0.870276149629\n", "Errors: [Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64, Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64, Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64, Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64, Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64, Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64, Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64, Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64, Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64, Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64, Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64, Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64, Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64, Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64, Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64]\n", "Daily error: [[2.3547309468646977, 2.6843698878562434, 1.4073060638117993, 1.8257205265526617, 1.2571302541332623, 1.3070616670286337, 1.9988507624239815, 1.2774261200573758, 1.0972884438734316, 1.7713207964022895, 2.2515787402833238, 2.1936305240618905, 1.1322810611135845, 1.2781940755820749, 2.9218559619814704], [3.6177056160450944, 3.8529029980585308, 2.0996497849323741, 2.5200941777904116, 1.7425090853194207, 2.0767602945362782, 2.9825225833769546, 1.9238545410998846, 1.6284871067250986, 2.6941111554594688, 3.193383888830593, 3.1126222980274192, 1.7023257899660558, 1.8256993808103501, 3.9248097333153922], [4.5649082663487981, 4.919654734680905, 2.5310312168153977, 2.9836384156717788, 2.0110091568888309, 2.6672760574192766, 3.7613247626665651, 2.4870650021890679, 1.9946989514581441, 3.3683432902069392, 3.8294519687663078, 3.7373617983789833, 2.080606518150474, 2.14060014177976, 4.2051556740937093], [5.4024502775560101, 5.5403781813156501, 2.8324489798600148, 3.4016521599695979, 2.3200498153968843, 3.1868909037254345, 4.4188904926330173, 2.8895466676894839, 2.3126474095813565, 3.8741601379971553, 4.2175713308860896, 4.2133650475354072, 2.4493016707758857, 2.465324887372323, 4.9642444869322437], [6.0874752741145528, 6.1238292431129455, 3.0779955606900775, 3.7679999784167957, 2.5431262388706335, 3.5929183893538976, 5.033414123710652, 3.230316091173671, 2.5966357031707243, 4.2764916616348794, 4.5333785968485394, 4.6529261285101802, 2.7891901712253597, 2.7680731557270328, 5.6452968644470065], [6.7355277492693739, 6.5918510035213815, 3.2815416890282374, 4.0959675621588527, 2.742164531970531, 3.874977862896968, 5.5623865765175768, 3.461071665532764, 2.8417667456729157, 4.5564166688903143, 4.779192398380526, 5.086101610706165, 3.0854034250811742, 3.0325416694322258, 6.1485518594275472], [7.3347922060064086, 7.025247411581879, 3.453130554000138, 4.4229639877662024, 2.8911324077574512, 4.0773842621070342, 5.9115774229114351, 3.6835908281785965, 3.0577563801686329, 4.7911542187225136, 5.0594615569728996, 5.4556849461479642, 3.3659760913065653, 3.2410121186171836, 6.7994967443732222]]\n", "Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 30 days' worth of prior data\n", "\n", "execute(steps=15, days=30, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1980-02-14 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 5.04853 \n", "1980-02-15 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 \n", "1980-02-16 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 \n", "1980-02-17 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 \n", "1980-02-18 5.20467 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1980-02-14 5.03604 4.89239 4.91841 ... 8.14531 8.22338 7.9111 \n", "1980-02-15 5.04853 5.03604 4.89239 ... 8.0027 8.14531 8.22338 \n", "1980-02-16 5.10058 5.04853 5.03604 ... 7.78098 8.0027 8.14531 \n", "1980-02-17 5.02251 5.10058 5.04853 ... 7.79452 7.78098 8.0027 \n", "1980-02-18 5.10058 5.02251 5.10058 ... 7.72894 7.79452 7.78098 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1980-02-14 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 4.6842 \n", "1980-02-15 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 4.6842 \n", "1980-02-16 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 4.6842 \n", "1980-02-17 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 4.6842 \n", "1980-02-18 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 4.6842 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64\n", "Mean Absolute Error: 0.308123611359\n", "Explained Variance Score: 0.883196210344\n", "Mean Squared Error: 0.174895557318\n", "R2 score: 0.882761749111\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-02-06 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 4.67171 \n", "1982-02-07 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 \n", "1982-02-08 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 \n", "1982-02-09 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 \n", "1982-02-10 4.91841 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1982-02-06 4.74874 4.73625 4.7883 ... 3.87748 3.95555 3.85146 \n", "1982-02-07 4.67171 4.74874 4.73625 ... 3.66929 3.87748 3.95555 \n", "1982-02-08 4.71023 4.67171 4.74874 ... 3.66929 3.66929 3.87748 \n", "1982-02-09 4.72376 4.71023 4.67171 ... 3.64327 3.66929 3.66929 \n", "1982-02-10 4.74874 4.72376 4.71023 ... 3.68283 3.64327 3.66929 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1982-02-06 3.69532 3.53918 3.47464 3.39553 3.44757 4.85284 3.3185 \n", "1982-02-07 3.85146 3.69532 3.53918 3.47464 3.39553 4.85284 3.3185 \n", "1982-02-08 3.95555 3.85146 3.69532 3.53918 3.47464 4.8799 3.3185 \n", "1982-02-09 3.87748 3.95555 3.85146 3.69532 3.53918 4.94444 3.48713 \n", "1982-02-10 3.66929 3.87748 3.95555 3.85146 3.69532 4.94444 3.53918 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64\n", "Mean Absolute Error: 0.153771584056\n", "Explained Variance Score: 0.858967690029\n", "Mean Squared Error: 0.037657109341\n", "R2 score: 0.855415148739\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1984-02-01 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 4.82785 \n", "1984-02-02 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 \n", "1984-02-03 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 \n", "1984-02-04 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 \n", "1984-02-05 4.90488 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1984-02-01 4.7883 4.7883 4.84034 ... 4.39795 4.42397 4.37192 \n", "1984-02-02 4.82785 4.7883 4.7883 ... 4.44999 4.39795 4.42397 \n", "1984-02-03 4.86637 4.82785 4.7883 ... 4.37192 4.44999 4.39795 \n", "1984-02-04 4.90488 4.86637 4.82785 ... 4.47602 4.37192 4.44999 \n", "1984-02-05 4.86637 4.90488 4.86637 ... 4.55409 4.47602 4.37192 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1984-02-01 4.35943 4.39795 4.43646 4.58011 4.56762 5.02251 4.12418 \n", "1984-02-02 4.37192 4.35943 4.39795 4.43646 4.58011 5.02251 4.12418 \n", "1984-02-03 4.42397 4.37192 4.35943 4.39795 4.43646 5.02251 4.12418 \n", "1984-02-04 4.39795 4.42397 4.37192 4.35943 4.39795 5.02251 4.12418 \n", "1984-02-05 4.44999 4.39795 4.42397 4.37192 4.35943 5.02251 4.12418 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64\n", "Mean Absolute Error: 0.101043295151\n", "Explained Variance Score: 0.769182909465\n", "Mean Squared Error: 0.0161008843587\n", "R2 score: 0.617638917329\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1986-01-22 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 7.36443 \n", "1986-01-23 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 \n", "1986-01-24 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 \n", "1986-01-25 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 \n", "1986-01-26 7.39064 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1986-01-22 7.36443 7.39064 7.48289 ... 5.14013 5.16512 5.15262 \n", "1986-01-23 7.36443 7.36443 7.39064 ... 5.08809 5.14013 5.16512 \n", "1986-01-24 7.43048 7.36443 7.36443 ... 5.17865 5.08809 5.14013 \n", "1986-01-25 7.41685 7.43048 7.36443 ... 5.14013 5.17865 5.08809 \n", "1986-01-26 7.40322 7.41685 7.43048 ... 5.25672 5.14013 5.17865 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1986-01-22 4.98399 4.99648 4.90488 5.15262 5.20467 7.5741 4.89239 \n", "1986-01-23 5.15262 4.98399 4.99648 4.90488 5.15262 7.5741 4.89239 \n", "1986-01-24 5.16512 5.15262 4.98399 4.99648 4.90488 7.5741 4.89239 \n", "1986-01-25 5.14013 5.16512 5.15262 4.98399 4.99648 7.5741 4.90488 \n", "1986-01-26 5.08809 5.14013 5.16512 5.15262 4.98399 7.5741 4.91841 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64\n", "Mean Absolute Error: 0.212433916939\n", "Explained Variance Score: 0.908541965433\n", "Mean Squared Error: 0.0861793881797\n", "R2 score: 0.881980679802\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-14 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 6.44985 \n", "1988-01-15 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 \n", "1988-01-16 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 \n", "1988-01-17 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 \n", "1988-01-18 6.23485 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1988-01-14 6.49069 6.42297 6.50359 ... 5.67454 5.72782 5.70118 \n", "1988-01-15 6.44985 6.49069 6.42297 ... 5.74168 5.67454 5.72782 \n", "1988-01-16 6.43695 6.44985 6.49069 ... 5.72782 5.74168 5.67454 \n", "1988-01-17 6.42297 6.43695 6.44985 ... 5.6479 5.72782 5.74168 \n", "1988-01-18 6.36922 6.42297 6.43695 ... 5.70118 5.6479 5.72782 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1988-01-14 5.66069 5.79496 5.72782 5.71397 5.6479 6.62399 5.62126 \n", "1988-01-15 5.70118 5.66069 5.79496 5.72782 5.71397 6.62399 5.62126 \n", "1988-01-16 5.72782 5.70118 5.66069 5.79496 5.72782 6.62399 5.62126 \n", "1988-01-17 5.67454 5.72782 5.70118 5.66069 5.79496 6.62399 5.62126 \n", "1988-01-18 5.74168 5.67454 5.72782 5.70118 5.66069 6.62399 5.62126 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64\n", "Mean Absolute Error: 0.104323850003\n", "Explained Variance Score: 0.850284924048\n", "Mean Squared Error: 0.0187007596422\n", "R2 score: 0.835576466493\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-01-05 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 8.25312 \n", "1990-01-06 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 \n", "1990-01-07 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 \n", "1990-01-08 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 \n", "1990-01-09 7.67357 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1990-01-05 8.30842 8.46105 8.41902 ... 8.62105 8.71769 8.73087 \n", "1990-01-06 8.25312 8.30842 8.46105 ... 8.71769 8.62105 8.71769 \n", "1990-01-07 8.06067 8.25312 8.30842 ... 8.64851 8.71769 8.62105 \n", "1990-01-08 7.92131 8.06067 8.25312 ... 8.57932 8.64851 8.71769 \n", "1990-01-09 7.92131 7.92131 8.06067 ... 8.4695 8.57932 8.64851 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1990-01-05 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 7.57546 \n", "1990-01-06 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 7.57546 \n", "1990-01-07 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 7.57546 \n", "1990-01-08 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 7.57546 \n", "1990-01-09 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 7.57546 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64\n", "Mean Absolute Error: 0.210351894406\n", "Explained Variance Score: 0.741325230038\n", "Mean Squared Error: 0.0765172809939\n", "R2 score: 0.70389414274\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-12-31 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 5.7994 \n", "1992-01-01 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 \n", "1992-01-02 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 \n", "1992-01-03 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 \n", "1992-01-04 6.19833 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1991-12-31 5.7994 5.75608 5.71277 ... 5.01791 5.03265 5.11657 \n", "1992-01-01 5.7994 5.7994 5.75608 ... 4.96121 5.01791 5.03265 \n", "1992-01-02 5.82675 5.7994 5.7994 ... 4.90451 4.96121 5.01791 \n", "1992-01-03 5.74241 5.82675 5.7994 ... 4.69245 4.90451 4.96121 \n", "1992-01-04 5.72759 5.74241 5.82675 ... 4.80585 4.69245 4.90451 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1991-12-31 5.11657 5.15966 5.22997 5.21636 5.18801 5.87006 4.67712 \n", "1992-01-01 5.11657 5.11657 5.15966 5.22997 5.21636 5.95555 4.67712 \n", "1992-01-02 5.03265 5.11657 5.11657 5.15966 5.22997 6.14134 4.67712 \n", "1992-01-03 5.01791 5.03265 5.11657 5.11657 5.15966 6.1687 4.67712 \n", "1992-01-04 4.96121 5.01791 5.03265 5.11657 5.11657 6.22569 4.67712 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64\n", "Mean Absolute Error: 0.183122699785\n", "Explained Variance Score: 0.66511338143\n", "Mean Squared Error: 0.0658789640265\n", "R2 score: 0.599655687338\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-12-22 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 8.78214 \n", "1993-12-23 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 \n", "1993-12-24 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 \n", "1993-12-25 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 \n", "1993-12-26 8.846 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1993-12-22 8.99938 9.09992 9.14267 ... 9.21296 9.2268 9.08263 \n", "1993-12-23 8.78214 8.99938 9.09992 ... 9.3133 9.21296 9.2268 \n", "1993-12-24 8.83992 8.78214 8.99938 ... 9.32829 9.3133 9.21296 \n", "1993-12-25 8.78214 8.83992 8.78214 ... 9.45747 9.32829 9.3133 \n", "1993-12-26 8.94161 8.78214 8.83992 ... 9.6743 9.45747 9.32829 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1993-12-22 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.65272 \n", "1993-12-23 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.65272 \n", "1993-12-24 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.65272 \n", "1993-12-25 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.65272 \n", "1993-12-26 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.65272 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64\n", "Mean Absolute Error: 0.158445846768\n", "Explained Variance Score: 0.620247529876\n", "Mean Squared Error: 0.0465380189471\n", "R2 score: 0.60132021659\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-12-13 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 15.4516 \n", "1995-12-14 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 \n", "1995-12-15 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 \n", "1995-12-16 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 \n", "1995-12-17 15.8276 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1995-12-13 15.7456 15.7738 16.0396 ... 15.3418 15.4298 15.4298 \n", "1995-12-14 15.4516 15.7456 15.7738 ... 15.1071 15.3418 15.4298 \n", "1995-12-15 15.5329 15.4516 15.7456 ... 15.2538 15.1071 15.3418 \n", "1995-12-16 15.5482 15.5329 15.4516 ... 15.357 15.2538 15.1071 \n", "1995-12-17 15.6354 15.5482 15.5329 ... 15.4004 15.357 15.2538 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1995-12-13 15.1364 15.1071 15.3124 15.4298 15.2397 17.2886 14.6378 \n", "1995-12-14 15.4298 15.1364 15.1071 15.3124 15.4298 17.2886 14.6378 \n", "1995-12-15 15.4298 15.4298 15.1364 15.1071 15.3124 17.2886 14.6378 \n", "1995-12-16 15.3418 15.4298 15.4298 15.1364 15.1071 17.2886 14.6378 \n", "1995-12-17 15.1071 15.3418 15.4298 15.4298 15.1364 17.2886 14.6378 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64\n", "Mean Absolute Error: 0.287728749471\n", "Explained Variance Score: 0.938381959646\n", "Mean Squared Error: 0.147641443939\n", "R2 score: 0.93566576996\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-12-04 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 20.2949 \n", "1997-12-05 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 \n", "1997-12-06 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 \n", "1997-12-07 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 \n", "1997-12-08 20.5831 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1997-12-04 20.462 20.6121 21.1885 ... 20.5119 20.9197 21.2069 \n", "1997-12-05 20.2949 20.462 20.6121 ... 20.6036 20.5119 20.9197 \n", "1997-12-06 20.1278 20.2949 20.462 ... 20.6928 20.6036 20.5119 \n", "1997-12-07 19.9172 20.1278 20.2949 ... 20.9197 20.6928 20.6036 \n", "1997-12-08 19.8276 19.9172 20.1278 ... 21.4023 20.9197 20.6928 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1997-12-04 20.8883 21.2358 20.7387 21.0403 22.0346 23.0966 19.4643 \n", "1997-12-05 21.2069 20.8883 21.2358 20.7387 21.0403 23.0966 19.4643 \n", "1997-12-06 20.9197 21.2069 20.8883 21.2358 20.7387 23.0966 19.4643 \n", "1997-12-07 20.5119 20.9197 21.2069 20.8883 21.2358 23.0966 19.4643 \n", "1997-12-08 20.6036 20.5119 20.9197 21.2069 20.8883 23.0966 19.4643 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64\n", "Mean Absolute Error: 0.597633444026\n", "Explained Variance Score: 0.503137515046\n", "Mean Squared Error: 0.589490186568\n", "R2 score: 0.482368816144\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-11-26 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 26.6624 \n", "1999-11-27 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 \n", "1999-11-28 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 \n", "1999-11-29 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 \n", "1999-11-30 25.0023 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1999-11-26 26.2385 26.1124 25.9862 ... 26.9688 26.5628 26.1569 \n", "1999-11-27 26.6624 26.2385 26.1124 ... 26.7533 26.9688 26.5628 \n", "1999-11-28 26.4959 26.6624 26.2385 ... 26.5027 26.7533 26.9688 \n", "1999-11-29 26.1881 26.4959 26.6624 ... 26.3423 26.5027 26.7533 \n", "1999-11-30 26.2284 26.1881 26.4959 ... 26.623 26.3423 26.5027 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1999-11-26 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 22.767 \n", "1999-11-27 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 22.767 \n", "1999-11-28 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 22.767 \n", "1999-11-29 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 22.767 \n", "1999-11-30 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 22.767 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64\n", "Mean Absolute Error: 0.701837927805\n", "Explained Variance Score: 0.61258560237\n", "Mean Squared Error: 0.807580404799\n", "R2 score: 0.6103741195\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-11-21 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 20.8021 \n", "2001-11-22 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 \n", "2001-11-23 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 \n", "2001-11-24 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 \n", "2001-11-25 20.6785 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2001-11-21 20.8719 20.8558 20.9633 ... 21.771 22.2762 21.2179 \n", "2001-11-22 20.8021 20.8719 20.8558 ... 21.4998 21.771 22.2762 \n", "2001-11-23 20.2432 20.8021 20.8719 ... 21.1701 21.4998 21.771 \n", "2001-11-24 20.2486 20.2432 20.8021 ... 21.0584 21.1701 21.4998 \n", "2001-11-25 20.399 20.2486 20.2432 ... 20.633 21.0584 21.1701 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2001-11-21 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 18.6311 \n", "2001-11-22 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 18.6311 \n", "2001-11-23 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 18.6311 \n", "2001-11-24 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 18.6311 \n", "2001-11-25 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 18.6311 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64\n", "Mean Absolute Error: 0.901971504049\n", "Explained Variance Score: 0.812150385253\n", "Mean Squared Error: 1.39923634887\n", "R2 score: 0.736584033371\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-11-14 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 34.4386 \n", "2003-11-15 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 \n", "2003-11-16 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 \n", "2003-11-17 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 \n", "2003-11-18 35.9577 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2003-11-14 34.3577 34.7736 34.6003 ... 33.5442 33.1944 33.0052 \n", "2003-11-15 34.4386 34.3577 34.7736 ... 32.8962 33.5442 33.1944 \n", "2003-11-16 34.9527 34.4386 34.3577 ... 32.9937 32.8962 33.5442 \n", "2003-11-17 35.0335 34.9527 34.4386 ... 33.3722 32.9937 32.8962 \n", "2003-11-18 34.9411 35.0335 34.9527 ... 33.0052 33.3722 32.9937 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2003-11-14 32.7585 33.0338 33.3206 32.5234 32.3628 35.8711 32.0187 \n", "2003-11-15 33.0052 32.7585 33.0338 33.3206 32.5234 35.8711 32.5005 \n", "2003-11-16 33.1944 33.0052 32.7585 33.0338 33.3206 36.0733 32.6941 \n", "2003-11-17 33.5442 33.1944 33.0052 32.7585 33.0338 36.079 32.6941 \n", "2003-11-18 32.8962 33.5442 33.1944 33.0052 32.7585 36.1079 32.6941 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64\n", "Mean Absolute Error: 0.570240576978\n", "Explained Variance Score: 0.883135670682\n", "Mean Squared Error: 0.543397166296\n", "R2 score: 0.840783709451\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-11-15 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 39.2664 \n", "2005-11-16 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 \n", "2005-11-17 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 \n", "2005-11-18 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 \n", "2005-11-19 38.755 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2005-11-15 39.2171 40.0858 40.1844 ... 40.2947 39.7082 39.8304 \n", "2005-11-16 39.2664 39.2171 40.0858 ... 39.8304 40.2947 39.7082 \n", "2005-11-17 38.7119 39.2664 39.2171 ... 39.7449 39.8304 40.2947 \n", "2005-11-18 39.1863 38.7119 39.2664 ... 39.7571 39.7449 39.8304 \n", "2005-11-19 39.1308 39.1863 38.7119 ... 40.4413 39.7571 39.7449 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2005-11-15 40.0442 39.6227 40.2275 40.7162 39.867 42.5812 37.763 \n", "2005-11-16 39.8304 40.0442 39.6227 40.2275 40.7162 42.5812 37.763 \n", "2005-11-17 39.7082 39.8304 40.0442 39.6227 40.2275 42.5812 37.763 \n", "2005-11-18 40.2947 39.7082 39.8304 40.0442 39.6227 42.5812 37.763 \n", "2005-11-19 39.8304 40.2947 39.7082 39.8304 40.0442 42.5812 37.763 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64\n", "Mean Absolute Error: 0.805184356548\n", "Explained Variance Score: 0.654726098599\n", "Mean Squared Error: 1.0911864143\n", "R2 score: 0.607901692497\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-11-08 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 28.4939 \n", "2007-11-09 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 \n", "2007-11-10 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 \n", "2007-11-11 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 \n", "2007-11-12 29.1031 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2007-11-08 27.9387 29.9291 29.4484 ... 34.1229 34.7269 34.4681 \n", "2007-11-09 28.4939 27.9387 29.9291 ... 34.1561 34.1229 34.7269 \n", "2007-11-10 28.0538 28.4939 27.9387 ... 36.2071 34.1561 34.1229 \n", "2007-11-11 27.607 28.0538 28.4939 ... 36.6119 36.2071 34.1561 \n", "2007-11-12 28.9068 27.607 28.0538 ... 35.9084 36.6119 36.2071 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2007-11-08 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-11-09 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-11-10 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-11-11 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-11-12 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64\n", "Mean Absolute Error: 1.56779790378\n", "Explained Variance Score: 0.910623053074\n", "Mean Squared Error: 4.56773993183\n", "R2 score: 0.895897673607\n", "Errors: [Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64, Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64, Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64, Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64, Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64, Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64, Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64, Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64, Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64, Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64, Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64, Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64, Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64, Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64, Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64]\n", "Daily error: [[2.6862566648548238, 2.8732187489270236, 1.3256064617379473, 2.1600519846869646, 1.2235156291439226, 1.305420663991631, 2.0685360603124372, 1.0875370689226691, 1.0580095307028299, 2.0217217081378305, 2.0537492673878845, 2.4976641398052424, 1.1175050339269137, 1.3645755070232506, 4.0144579037852735], [4.0592999976323814, 3.9678510989277207, 1.9701678416738304, 3.1636611153866219, 1.7692200297767153, 2.0939347787175921, 3.1255411549111267, 1.5935961405005887, 1.6621738433483118, 2.8422732907658617, 2.8428406166970612, 3.7016790635281951, 1.5881359065976202, 1.838708716353143, 5.2950310548423047], [5.2012518896016813, 4.8595851174817444, 2.4015165262481593, 3.9663184853702087, 2.0937319599079633, 2.725889802618255, 4.0256221884370413, 2.0881478237011293, 2.1198589394936009, 3.4394436515955458, 3.1903941017651203, 4.5898554829578231, 1.9260258581576921, 2.1713779643400297, 5.7435946634475581], [6.2376680609655004, 5.1906888229530841, 2.7333023116243766, 4.771870644055527, 2.3317264370474895, 3.2484164567711518, 4.8235413121812867, 2.44198402513774, 2.4877734757315642, 3.9035877213534098, 3.4596893962513113, 5.3691221960409514, 2.2172821574031762, 2.5155067947627172, 6.6214749061448526], [7.101348672465936, 5.5598705130212815, 2.9861408788558754, 5.5072501857210723, 2.6000741043961906, 3.7020463356701927, 5.5006034680471787, 2.7726485729779609, 2.8237001385613416, 4.2351005173762228, 3.7102018424167729, 6.1433467552325984, 2.4636478733847298, 2.8408545898388282, 7.3789947893347989], [7.9277550527409595, 5.7625298134685217, 3.2529086470869495, 6.1356457071558008, 2.8329554445052851, 4.0602549841923929, 6.1326462265073882, 3.0168250033454465, 3.1420826313227979, 4.5159739803948229, 3.93149884705644, 6.8548130816086976, 2.7183436027777019, 3.1374226069422688, 8.1094147478977305], [8.7018642223453728, 6.1191921810565226, 3.5381132656657028, 6.6786375127786863, 3.0316781856016899, 4.3423819076586243, 6.6589006154937413, 3.2298492480472585, 3.4452102937068454, 4.7210730604544686, 4.2033108503209542, 7.4993260970943192, 2.9790689586399646, 3.4016567175540446, 8.8936393091082984]]\n", "Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 100 days' worth of prior data\n", "\n", "execute(steps=15, days=100, buffer_step = 500)\n", "\n", "# Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2 Adding Oil Stock Prices (GAIA)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1932616BP2014-09-2445.8245.8845.3645.516237900.00.01.040.666021...2014-09-246.756.956.6456.942014-09-246676.086707.266651.986706.27
1932617BP2014-09-2544.9644.9943.8944.0615355000.00.01.039.902756...2014-09-256.946.946.7006.702014-09-256706.276726.406621.486639.71
1932618BP2014-09-2643.9444.5543.8144.367105500.00.01.038.997489...2014-09-266.706.746.6306.702014-09-266639.716664.006615.126649.39
1932619BP2014-09-2944.2544.7244.1444.544460900.00.01.039.272619...2014-09-296.626.696.5706.622014-09-296649.396653.946608.666646.60
1932620BP2014-09-3044.0444.2243.8043.956834500.00.01.039.086241...2014-09-306.617.416.6107.342014-09-306646.606658.916601.626622.72
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1932616 BP 2014-09-24 45.82 45.88 45.36 45.51 6237900.0 \n", "1932617 BP 2014-09-25 44.96 44.99 43.89 44.06 15355000.0 \n", "1932618 BP 2014-09-26 43.94 44.55 43.81 44.36 7105500.0 \n", "1932619 BP 2014-09-29 44.25 44.72 44.14 44.54 4460900.0 \n", "1932620 BP 2014-09-30 44.04 44.22 43.80 43.95 6834500.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open ... GAIA Date \\\n", "1932616 0.0 1.0 40.666021 ... 2014-09-24 \n", "1932617 0.0 1.0 39.902756 ... 2014-09-25 \n", "1932618 0.0 1.0 38.997489 ... 2014-09-26 \n", "1932619 0.0 1.0 39.272619 ... 2014-09-29 \n", "1932620 0.0 1.0 39.086241 ... 2014-09-30 \n", "\n", " GAIA Adj. Open GAIA Adj. High GAIA Adj. Low GAIA Adj. Close \\\n", "1932616 6.75 6.95 6.645 6.94 \n", "1932617 6.94 6.94 6.700 6.70 \n", "1932618 6.70 6.74 6.630 6.70 \n", "1932619 6.62 6.69 6.570 6.62 \n", "1932620 6.61 7.41 6.610 7.34 \n", "\n", " FTSE Date FTSE Open FTSE High FTSE Low FTSE Close \n", "1932616 2014-09-24 6676.08 6707.26 6651.98 6706.27 \n", "1932617 2014-09-25 6706.27 6726.40 6621.48 6639.71 \n", "1932618 2014-09-26 6639.71 6664.00 6615.12 6649.39 \n", "1932619 2014-09-29 6649.39 6653.94 6608.66 6646.60 \n", "1932620 2014-09-30 6646.60 6658.91 6601.62 6622.72 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create dataframe with BP and GAIA data in overlapping date range\n", "# Date range: 1999-10-29 to 2014-09-30\n", "# `bp_gaia_start` etc defined in Feature Engineering section 1.2.2.2\n", "bp_gaia = bp.loc[bp_gaia_start:bp_gaia_start+bp_gaia_intersect_length-1]\n", "\n", "# Check it ends at the right date\n", "bp_gaia.tail()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3753" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(bp_gaia)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add GAIA data.\n", "\n", "# Potential improvement: Generalise `prepare_train_test` function instead\n", "# of copy and pasting it and making a new function.\n", "def prepare_train_test_with_gaia(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_gaia): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days`: the number of days prior we consider (the prices of)\n", " `periods`: the total number of datapoints used (training + test)\n", " \"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # GAIA cols\n", " for j in range(1,days+1):\n", " columns.append('GAIA i-%s' % str(j))\n", " columns.append('GAIA Adj. High')\n", " columns.append('GAIA Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['GAIA i-%s' % str(days-j)] = df.iloc[buffer+i+j]['GAIA %s' % str(target)]\n", " features.iloc[i]['GAIA Adj. High'] = max(df[buffer+i:buffer+i+days]['GAIA Adj. High'])\n", " features.iloc[i]['GAIA Adj. Low'] = min(df[buffer+i:buffer+i+days]['GAIA Adj. Low'])\n", "# print(\"Features\", features.head())\n", "# print(\"Prices\", nday_prices.head())\n", " \n", " X = features\n", " y = nday_prices\n", "# print(\"X.head: \", X.head())\n", "# print(\"X.tail: \", X.tail())\n", "# print(\"y.head: \", y.head())\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_gaia(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + GAIA data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_gaia(days=days, periods=periods, buffer=buffer, df=bp_gaia)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64\n", "Mean Absolute Error: 0.390417267381\n", "Explained Variance Score: 0.853744159868\n", "Mean Squared Error: 0.253189951823\n", "R2 score: 0.846876833577\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64\n", "Mean Absolute Error: 0.640084309346\n", "Explained Variance Score: 0.937272372234\n", "Mean Squared Error: 0.720859692963\n", "R2 score: 0.86521356578\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64\n", "Mean Absolute Error: 0.559376996819\n", "Explained Variance Score: 0.848725761062\n", "Mean Squared Error: 0.504733717139\n", "R2 score: 0.836876888323\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64\n", "Mean Absolute Error: 0.807669964064\n", "Explained Variance Score: 0.513947367438\n", "Mean Squared Error: 1.11918208013\n", "R2 score: 0.47656012379\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64\n", "Mean Absolute Error: 0.784485223446\n", "Explained Variance Score: 0.611742357358\n", "Mean Squared Error: 1.08805000734\n", "R2 score: 0.59682736149\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64\n", "Mean Absolute Error: 0.823528275858\n", "Explained Variance Score: 0.854979604454\n", "Mean Squared Error: 1.21173657923\n", "R2 score: 0.848280893753\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64\n", "Mean Absolute Error: 1.08202656801\n", "Explained Variance Score: 0.785807434633\n", "Mean Squared Error: 2.18729500527\n", "R2 score: 0.771849063305\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64\n", "Mean Absolute Error: 1.64293719873\n", "Explained Variance Score: 0.701929531055\n", "Mean Squared Error: 4.86875519644\n", "R2 score: 0.576854711057\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64\n", "Mean Absolute Error: 1.09213527916\n", "Explained Variance Score: 0.877782414782\n", "Mean Squared Error: 1.85736866345\n", "R2 score: 0.823140444507\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64\n", "Mean Absolute Error: 1.26399823305\n", "Explained Variance Score: 0.917408689638\n", "Mean Squared Error: 3.26079876466\n", "R2 score: 0.904206507456\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64\n", "Mean Absolute Error: 0.949041466517\n", "Explained Variance Score: 0.760114297454\n", "Mean Squared Error: 1.50840397037\n", "R2 score: 0.751639652033\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64\n", "Mean Absolute Error: 0.83600905218\n", "Explained Variance Score: 0.749597354718\n", "Mean Squared Error: 1.16224774383\n", "R2 score: 0.742591965811\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64\n", "Mean Absolute Error: 0.557442173078\n", "Explained Variance Score: 0.46981043696\n", "Mean Squared Error: 0.522034902854\n", "R2 score: 0.465782842549\n", "Errors: [Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64, Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64, Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64, Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64, Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64, Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64, Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64, Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64, Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64, Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64, Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64, Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64, Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64]\n", "Daily error: [[1.3416274627176741, 1.2253222561285753, 1.0255495409576574, 1.266776829926521, 1.1982064351141712, 1.310712301821582, 1.7298817238551929, 3.8921754249906253, 1.6629575970691628, 3.0941354597945034, 2.0330820163702419, 1.7164225319161091, 1.1686884331757421], [1.7150760880207037, 1.8964172603677423, 1.4834673922912223, 1.8554594521723491, 1.6787503849419985, 1.8263483157031517, 2.3241398333250651, 5.2355080851844216, 2.3752099271864098, 4.4270718273765972, 2.9025947293955445, 2.4521487734937994, 1.5958526122466832], [2.0477430054053203, 2.3723857338154257, 1.7988798566364699, 2.2637800713580867, 2.0641570748232887, 2.1815157366804447, 2.8355986521448, 5.9932443782633227, 2.9633965226109846, 5.2083198103473851, 3.5852639670979616, 2.9819102400068132, 1.8925844623819319], [2.3097316999351953, 2.8071999746923053, 2.0500517838892773, 2.6324197507576557, 2.4726133505762671, 2.5425603577844873, 3.2307653588653578, 7.1525225718155419, 3.4134342032425726, 6.2465795890314988, 4.0172291702026053, 3.4643390217868517, 2.1742172950593774], [2.5975117870884237, 3.2335105558655264, 2.2739368989119333, 2.9489855905646274, 2.8044131318548891, 2.870944054320459, 3.7485731532447448, 8.3852639729218854, 3.8372768182949173, 7.2493788386688047, 4.3865708556257568, 3.7613389113197311, 2.3577017695179605], [2.7408301709503315, 3.6348871408243957, 2.4565607234069882, 3.2327235750256049, 3.1394000107197346, 3.1446997267702699, 4.354234736214309, 9.4347187346765544, 4.2807532074257058, 8.2875526190580011, 4.6089459172836937, 3.9769158354848391, 2.5282971175926079], [2.855423021053821, 4.0729371465412827, 2.6544296847203288, 3.4571876639216557, 3.4085147945800864, 3.3865251171130839, 4.7922194765634272, 10.64932394540064, 4.6834300530757496, 9.5173590389649085, 4.8463224597302119, 4.1659653260441791, 2.632187257416279]]\n", "Mean daily error: [1.743502924141366, 2.4436957447465919, 2.9375984239670951, 3.4241280098183839, 3.8811851029384354, 4.2938861165717714, 4.701678845009666]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of BP and GAIA data\n", "execute_with_gaia(steps=13)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64\n", "Mean Absolute Error: 0.411869432422\n", "Explained Variance Score: 0.860958167317\n", "Mean Squared Error: 0.278323948034\n", "R2 score: 0.821867759953\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64\n", "Mean Absolute Error: 0.606986183256\n", "Explained Variance Score: 0.932648097155\n", "Mean Squared Error: 0.66024635669\n", "R2 score: 0.868677365951\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64\n", "Mean Absolute Error: 0.559944807019\n", "Explained Variance Score: 0.833869148805\n", "Mean Squared Error: 0.505571476681\n", "R2 score: 0.823962424354\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64\n", "Mean Absolute Error: 0.821987533814\n", "Explained Variance Score: 0.46989388159\n", "Mean Squared Error: 1.15104795599\n", "R2 score: 0.430126472698\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64\n", "Mean Absolute Error: 0.817292176686\n", "Explained Variance Score: 0.605237375421\n", "Mean Squared Error: 1.16563063035\n", "R2 score: 0.588600663963\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64\n", "Mean Absolute Error: 0.855518357378\n", "Explained Variance Score: 0.855221593528\n", "Mean Squared Error: 1.28660241537\n", "R2 score: 0.84831538254\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64\n", "Mean Absolute Error: 1.1189552901\n", "Explained Variance Score: 0.781265137134\n", "Mean Squared Error: 2.30617202977\n", "R2 score: 0.76007064928\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64\n", "Mean Absolute Error: 1.74362867052\n", "Explained Variance Score: 0.676636001157\n", "Mean Squared Error: 5.47659375935\n", "R2 score: 0.50027082935\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64\n", "Mean Absolute Error: 1.06057828555\n", "Explained Variance Score: 0.877606203974\n", "Mean Squared Error: 1.77876224515\n", "R2 score: 0.831199539803\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64\n", "Mean Absolute Error: 1.28699529802\n", "Explained Variance Score: 0.905327333598\n", "Mean Squared Error: 3.46556542013\n", "R2 score: 0.892876435992\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64\n", "Mean Absolute Error: 0.957755739612\n", "Explained Variance Score: 0.758091797889\n", "Mean Squared Error: 1.51735582203\n", "R2 score: 0.751963233546\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64\n", "Mean Absolute Error: 0.828153458555\n", "Explained Variance Score: 0.748810119642\n", "Mean Squared Error: 1.15885573253\n", "R2 score: 0.739717381937\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64\n", "Mean Absolute Error: 0.536701478378\n", "Explained Variance Score: 0.501934925031\n", "Mean Squared Error: 0.493473147419\n", "R2 score: 0.496826916953\n", "Errors: [Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64, Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64, Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64, Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64, Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64, Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64, Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64, Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64, Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64, Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64, Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64, Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64, Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64]\n", "Daily error: [[1.3231776216477114, 1.1980342560885635, 1.0337559381524328, 1.2807686653343162, 1.2456589674532657, 1.3280813790944388, 1.7103664889037826, 3.9654429549097601, 1.6030301361552719, 3.1262859191366834, 2.0575536901156961, 1.7625814480985875, 1.122261076440187], [1.6714227116632154, 1.7937529603665612, 1.4762654529955792, 1.8988415982605655, 1.7986447274603283, 1.8411983204181284, 2.3179232847517244, 5.5067122215563318, 2.2614338115669748, 4.5366470960465399, 2.9088991347268269, 2.509250623322357, 1.5543009007901478], [2.0030655887796156, 2.2380077065815658, 1.780142194025534, 2.3358307699453613, 2.1709139424992134, 2.2349182679689812, 2.9254723250608365, 6.3890225539288785, 2.8520975853223187, 5.3572107545469327, 3.6021525960354821, 3.0062242229108511, 1.8244880060908213], [2.2800381048939928, 2.6718769676440171, 2.0485058953109236, 2.7139945310843472, 2.5292649062139549, 2.6223432174672223, 3.3576365342598042, 7.6482257503288977, 3.3136212289590303, 6.4358480297866265, 4.0176389505663028, 3.4729158251810874, 2.1141046081849635], [2.6130558930393306, 3.0947438014593844, 2.2777450341905157, 2.9928587868727545, 2.8834172521302088, 2.9595736804925212, 3.922805774129059, 8.8953440466338662, 3.7744107155179223, 7.4638214002320096, 4.3930553757686583, 3.7290523761223286, 2.3044743756514912], [2.8253797825024778, 3.4910159576111015, 2.4592393810665074, 3.2417476593438641, 3.2341045345752168, 3.2340433613195385, 4.4995984413286916, 10.009035103965697, 4.1986423675716669, 8.5729105007004449, 4.632208728692107, 3.9248259983154372, 2.4578823506143306], [3.1181366825666315, 3.9477940431715237, 2.6568415237777345, 3.4724030082407742, 3.527884207580871, 3.495192276717217, 4.925807113061305, 11.437354010217145, 4.6016137595911006, 9.8966156891001624, 4.8838613016883965, 4.0961565153048944, 2.5430114038608864]]\n", "Mean daily error: [1.7505383493485149, 2.4673302187634834, 2.9784266548997227, 3.4789241961447055, 3.9464891163261573, 4.3677410898159295, 4.8155901180675889]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of BP and GAIA data\n", "execute_with_gaia(days=10, steps=13)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.3 TODO: Adding FTSE100" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1924931BP1984-04-0245.6246.3845.5046.00209700.00.01.04.748742...NaNNaNNaNNaNNaN1984-04-021108.11108.11108.11108.1
1924932BP1984-04-0346.1246.5045.8846.38148900.00.01.04.800788...NaNNaNNaNNaNNaN1984-04-031095.41095.41095.41095.4
1924933BP1984-04-0446.6248.0046.6248.00283800.00.01.04.852835...NaNNaNNaNNaNNaN1984-04-041095.41095.41095.41095.4
1924934BP1984-04-0548.3848.3847.0047.50166400.00.01.05.036040...NaNNaNNaNNaNNaN1984-04-051102.21102.21102.21102.2
1924935BP1984-04-0647.1247.5047.0047.5081500.00.01.04.904882...NaNNaNNaNNaNNaN1984-04-061096.31096.31096.31096.3
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.50 46.00 209700.0 0.0 \n", "1924932 BP 1984-04-03 46.12 46.50 45.88 46.38 148900.0 0.0 \n", "1924933 BP 1984-04-04 46.62 48.00 46.62 48.00 283800.0 0.0 \n", "1924934 BP 1984-04-05 48.38 48.38 47.00 47.50 166400.0 0.0 \n", "1924935 BP 1984-04-06 47.12 47.50 47.00 47.50 81500.0 0.0 \n", "\n", " Split Ratio Adj. Open ... GAIA Date GAIA Adj. Open \\\n", "1924931 1.0 4.748742 ... NaN NaN \n", "1924932 1.0 4.800788 ... NaN NaN \n", "1924933 1.0 4.852835 ... NaN NaN \n", "1924934 1.0 5.036040 ... NaN NaN \n", "1924935 1.0 4.904882 ... NaN NaN \n", "\n", " GAIA Adj. High GAIA Adj. Low GAIA Adj. Close FTSE Date \\\n", "1924931 NaN NaN NaN 1984-04-02 \n", "1924932 NaN NaN NaN 1984-04-03 \n", "1924933 NaN NaN NaN 1984-04-04 \n", "1924934 NaN NaN NaN 1984-04-05 \n", "1924935 NaN NaN NaN 1984-04-06 \n", "\n", " FTSE Open FTSE High FTSE Low FTSE Close \n", "1924931 1108.1 1108.1 1108.1 1108.1 \n", "1924932 1095.4 1095.4 1095.4 1095.4 \n", "1924933 1095.4 1095.4 1095.4 1095.4 \n", "1924934 1102.2 1102.2 1102.2 1102.2 \n", "1924935 1096.3 1096.3 1096.3 1096.3 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create df with BP and FTSE data\n", "bp_ftse = bp.loc[bp_ftse_start:]\n", "bp_ftse.head()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add FTSE data.\n", "def prepare_train_test_with_ftse(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_ftse, name='FTSE'): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # FTSE cols\n", " for j in range(1,days+1):\n", " columns.append('%s i-%s' % (name, str(j)))\n", " columns.append('%s High' % name)\n", " columns.append('%s Low' % name)\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['%s i-%s' % (name, str(days-j))] = df.iloc[buffer+i+j]['%s %s' % (name, 'Close')]\n", " features.iloc[i]['%s High' % name] = max(df[buffer+i:buffer+i+days]['%s High' % name])\n", " features.iloc[i]['%s Low' % name] = min(df[buffer+i:buffer+i+days]['%s Low' % name])\n", "# print(\"Features\", features.head())\n", "# print(\"Prices\", nday_prices.head())\n", " \n", " X = features\n", " y = nday_prices\n", "# print(\"X.head: \", X.head())\n", "# print(\"X.tail: \", X.tail())\n", "# print(\"y.head: \", y.head())\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_ftse(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64\n", "Mean Absolute Error: 0.211015556424\n", "Explained Variance Score: 0.899000260643\n", "Mean Squared Error: 0.101319536893\n", "R2 score: 0.896790144908\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64\n", "Mean Absolute Error: 0.103662027254\n", "Explained Variance Score: 0.810914496372\n", "Mean Squared Error: 0.0191496161364\n", "R2 score: 0.791651910968\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64\n", "Mean Absolute Error: 0.16109328452\n", "Explained Variance Score: 0.509005999538\n", "Mean Squared Error: 0.0448450594299\n", "R2 score: 0.483113556059\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64\n", "Mean Absolute Error: 0.134831719911\n", "Explained Variance Score: 0.940362863942\n", "Mean Squared Error: 0.0312949743422\n", "R2 score: 0.930443446072\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64\n", "Mean Absolute Error: 0.138033710537\n", "Explained Variance Score: 0.808072775502\n", "Mean Squared Error: 0.0334602089163\n", "R2 score: 0.796224083528\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64\n", "Mean Absolute Error: 0.283227004062\n", "Explained Variance Score: 0.94135464242\n", "Mean Squared Error: 0.148338070724\n", "R2 score: 0.940791765118\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64\n", "Mean Absolute Error: 0.592720577547\n", "Explained Variance Score: 0.590618890488\n", "Mean Squared Error: 0.561331819027\n", "R2 score: 0.591291118732\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64\n", "Mean Absolute Error: 0.806309397821\n", "Explained Variance Score: 0.691786541195\n", "Mean Squared Error: 1.15097371293\n", "R2 score: 0.680775196711\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64\n", "Mean Absolute Error: 0.555161284679\n", "Explained Variance Score: 0.783418594845\n", "Mean Squared Error: 0.535944911988\n", "R2 score: 0.778980606844\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64\n", "Mean Absolute Error: 0.601145418071\n", "Explained Variance Score: 0.928081215955\n", "Mean Squared Error: 0.703987908082\n", "R2 score: 0.867484525348\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64\n", "Mean Absolute Error: 0.728988512466\n", "Explained Variance Score: 0.810817817708\n", "Mean Squared Error: 0.896347592801\n", "R2 score: 0.805988449328\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64\n", "Mean Absolute Error: 0.922073321462\n", "Explained Variance Score: 0.85113491032\n", "Mean Squared Error: 1.46122600596\n", "R2 score: 0.850264942708\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64\n", "Mean Absolute Error: 1.17309132125\n", "Explained Variance Score: 0.799408239284\n", "Mean Squared Error: 2.27030564663\n", "R2 score: 0.796642650027\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64\n", "Mean Absolute Error: 0.843137827511\n", "Explained Variance Score: 0.832739639424\n", "Mean Squared Error: 1.16152586731\n", "R2 score: 0.800540577102\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64\n", "Mean Absolute Error: 0.631785589032\n", "Explained Variance Score: 0.609102226738\n", "Mean Squared Error: 0.685708026384\n", "R2 score: 0.61435314998\n", "Errors: [Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64, Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64, Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64, Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64, Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64, Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64, Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64, Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64, Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64, Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64, Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64, Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64, Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64, Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64, Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64]\n", "Daily error: [[2.1093203849638837, 1.0882498665812053, 1.1727221193362856, 1.412586577442704, 0.9378952735856545, 1.0300941063834617, 1.7405932434523412, 2.1849168154032079, 1.609139147394997, 1.1597121603824943, 1.2455832253947525, 1.3370203586317857, 2.8222226244345667, 1.5229049347204531, 1.4034412486597296], [3.137677932962208, 1.5142879962397864, 1.7868339361639278, 2.1822902059145175, 1.3950071506620265, 1.6581419571681995, 2.5994688610024981, 3.150312167798214, 2.2094784630369553, 1.8210669198683502, 1.7831545661313932, 1.9538476861974765, 3.8732839254645901, 2.2895125324881676, 1.9691207311038021], [3.9275897295520128, 1.8580481167789493, 2.2658084022672815, 2.6901289014995937, 1.767085268420445, 2.1449275152997287, 3.2412865657258387, 3.8620255289884353, 2.6511445367500901, 2.3681564296528759, 2.1178502784134459, 2.4027006524959704, 4.4847012689782151, 2.8754387124563219, 2.3383173887217694], [4.8109068581784316, 2.1202592771408266, 2.7240948901950901, 3.0806499448309483, 2.0219604798575306, 2.5452837022717545, 3.7324950514184696, 4.3328167447346981, 3.0359152242486602, 2.8815894798898607, 2.4314952470219375, 2.7936258809738246, 5.1413550904137146, 3.3644214225425011, 2.6694884382791546], [5.6093030750366921, 2.3865041173957149, 3.0906874855810553, 3.3625090179209156, 2.2210374912412818, 2.9087622099011363, 4.1787916887657, 4.7142020078698375, 3.307851012047319, 3.3951893092285954, 2.6908537577255762, 3.1376619968233004, 5.6210588492955305, 3.7242680240618635, 2.8336973969591983], [6.3945931299753953, 2.6514816004326791, 3.3716820089302235, 3.6483218764886902, 2.3863700872043565, 3.2013104222689206, 4.5022040533065981, 5.0931736226381776, 3.5136885049685351, 3.9347008139004784, 2.9018384802534278, 3.3989102445656725, 5.9285358715306176, 4.01961642402006, 2.9085703842103929], [7.2348796444965835, 2.8974138017887943, 3.5583384572569687, 3.9429838565291648, 2.5529337042005769, 3.4398540607220633, 4.7926283817650912, 5.5118415837853485, 3.7316462933370311, 4.4484836960925431, 3.0861939411336166, 3.64371401011475, 6.4010282408578716, 4.2815500163757605, 2.9131303105673707]]\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=7, steps=15, buffer_step=450)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64\n", "Mean Absolute Error: 0.215528703585\n", "Explained Variance Score: 0.89239332126\n", "Mean Squared Error: 0.106333053016\n", "R2 score: 0.889423358708\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64\n", "Mean Absolute Error: 0.10544394771\n", "Explained Variance Score: 0.823015071932\n", "Mean Squared Error: 0.020152560856\n", "R2 score: 0.801681477257\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64\n", "Mean Absolute Error: 0.159314434074\n", "Explained Variance Score: 0.516143726707\n", "Mean Squared Error: 0.0435129876798\n", "R2 score: 0.495386197593\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64\n", "Mean Absolute Error: 0.136614189089\n", "Explained Variance Score: 0.939952177211\n", "Mean Squared Error: 0.0322690576029\n", "R2 score: 0.928442841529\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64\n", "Mean Absolute Error: 0.140535916916\n", "Explained Variance Score: 0.809072502567\n", "Mean Squared Error: 0.0343899561873\n", "R2 score: 0.799698674935\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64\n", "Mean Absolute Error: 0.280129258983\n", "Explained Variance Score: 0.941835339241\n", "Mean Squared Error: 0.143004453044\n", "R2 score: 0.941407871428\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64\n", "Mean Absolute Error: 0.622769626763\n", "Explained Variance Score: 0.549268768233\n", "Mean Squared Error: 0.608912691972\n", "R2 score: 0.544265975032\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64\n", "Mean Absolute Error: 0.822610971931\n", "Explained Variance Score: 0.667388346685\n", "Mean Squared Error: 1.20046660692\n", "R2 score: 0.65660643821\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64\n", "Mean Absolute Error: 0.578147544172\n", "Explained Variance Score: 0.771641543361\n", "Mean Squared Error: 0.577674968314\n", "R2 score: 0.758137073698\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64\n", "Mean Absolute Error: 0.62310658889\n", "Explained Variance Score: 0.935786377244\n", "Mean Squared Error: 0.733200459648\n", "R2 score: 0.866502386196\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64\n", "Mean Absolute Error: 0.753820405372\n", "Explained Variance Score: 0.789718883382\n", "Mean Squared Error: 0.961684765187\n", "R2 score: 0.787036306482\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64\n", "Mean Absolute Error: 0.923211659748\n", "Explained Variance Score: 0.849260130266\n", "Mean Squared Error: 1.4577408598\n", "R2 score: 0.849596798634\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64\n", "Mean Absolute Error: 1.17807639875\n", "Explained Variance Score: 0.811070055435\n", "Mean Squared Error: 2.27195431925\n", "R2 score: 0.80485970809\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64\n", "Mean Absolute Error: 0.811337617748\n", "Explained Variance Score: 0.814434213769\n", "Mean Squared Error: 1.06810231014\n", "R2 score: 0.795783463702\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64\n", "Mean Absolute Error: 0.621253472644\n", "Explained Variance Score: 0.584629646453\n", "Mean Squared Error: 0.678659874536\n", "R2 score: 0.590446476591\n", "Errors: [Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64, Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64, Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64, Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64, Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64, Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64, Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64, Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64, Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64, Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64, Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64, Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64, Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64, Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64, Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64]\n", "Daily error: [[2.1917071373549142, 1.0834175849417413, 1.1790388483576231, 1.4185720767250298, 0.96921873843174433, 1.0389149513076914, 1.7978906762316238, 2.2081130786782364, 1.626428265072178, 1.1688790011372792, 1.2442918199208317, 1.3543393912886921, 2.8279137985254801, 1.4834687450605335, 1.3679706504709863], [3.2551135884486477, 1.5219113117998229, 1.7845167567514877, 2.2058091975797436, 1.4079893663844747, 1.64581116515362, 2.7233218542675242, 3.1854362480671763, 2.2185746552549848, 1.8257198705930926, 1.7965291955873381, 1.9540303097844811, 3.7968068102836212, 2.1882198067251681, 1.9383968951517652], [4.1071642717896424, 1.899441698280516, 2.2520776093061308, 2.7079657528262455, 1.7743659001210701, 2.1122985914925523, 3.356193360147429, 3.977846700859939, 2.6167864392207312, 2.3844631650635484, 2.1738537747800573, 2.383788098908028, 4.3513351771356108, 2.7333448756427385, 2.3176337055862728], [4.9069274993299832, 2.1753970232525957, 2.6855930147788434, 3.0651327146777625, 2.0068103232086885, 2.4837707641410778, 3.878115561655151, 4.5680307683121617, 2.9908780138635374, 2.9145726033700368, 2.496350569513452, 2.7916378601993737, 5.0011359073546746, 3.1891975828644781, 2.6554416096311888], [5.684571865013738, 2.4463368567295891, 3.0361268916304378, 3.3729085591425267, 2.2222876725032874, 2.8291606439532142, 4.3457001749901645, 4.9489701760890119, 3.3523269094516883, 3.484220273558515, 2.7805684594518505, 3.1350021688093856, 5.5633024838786831, 3.5779675235638311, 2.8246714585341386], [6.5457674951850882, 2.6984515540580043, 3.2977446703014217, 3.7227666232643482, 2.4311370551028717, 3.1270319944324179, 4.6977181415685774, 5.2485644247119962, 3.7005685112433282, 4.0597642961603251, 3.0202781279834614, 3.4146913692062437, 5.9173890041333834, 3.8490686937976597, 2.9228497474023731], [7.4729519181537638, 2.9691887750983366, 3.4845684255477578, 4.0859302671068836, 2.6285168571962965, 3.3663785847193122, 5.0597293035706112, 5.539855260240377, 4.0349747441790287, 4.593526881685257, 3.2322257784365647, 3.6331538446606069, 6.4351103994170922, 4.0985222258397407, 2.8998887303961443]]\n", "Mean daily error: [1.5306776509003057, 2.2298791354555303, 2.7432372747440339, 3.1872661210768669, 3.5736081411533376, 3.9102527805700995, 4.2356347997498514]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=10, steps=15, buffer_step=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# We want an array with predictions for our model in a long date range.\n", "# We will consider the max error predictions, that is,\n", "# predictions of adjusted close prices 7 days ahead.\n", "\n", "# Initialise variable\n", "predictions_800_off = []" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Append predictions to `predictions_800_off`.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " print(\"Pred: \", pred)\n", " predictions_800_off.append(pred)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Pared-down execute function that runs train-test cycles and \n", "# appends the predictions to `predictions_800_off` via the function `predict()`.\n", "def execute_viz(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " predict(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "Pred: [[ 7.83601976 7.84714155 7.85292535 ..., 7.89987737 7.91755521\n", " 7.93865868]\n", " [ 7.85539551 7.86158008 7.87498252 ..., 7.90506271 7.91740818\n", " 7.93852032]\n", " [ 7.83170231 7.84749588 7.87738729 ..., 7.89285396 7.91642424\n", " 7.92424915]\n", " ..., \n", " [ 6.36738278 6.39213824 6.39270447 ..., 6.43798347 6.45461204\n", " 6.4751872 ]\n", " [ 6.42016386 6.417325 6.42707883 ..., 6.47916005 6.50267402\n", " 6.51950021]\n", " [ 6.28080118 6.27092368 6.28282955 ..., 6.30547753 6.3252951\n", " 6.3264697 ]]\n", "Buffer: 200\n", "Pred: [[ 6.14075766 6.11117589 6.09574853 ..., 6.07217018 6.07748552\n", " 6.08070167]\n", " [ 6.21540435 6.17492322 6.17149764 ..., 6.1453285 6.13813657\n", " 6.14081275]\n", " [ 6.27753279 6.27307459 6.23843178 ..., 6.24830207 6.24374508\n", " 6.21901832]\n", " ..., \n", " [ 5.75919469 5.78334022 5.79923807 ..., 5.83008595 5.859385\n", " 5.87740631]\n", " [ 5.76238715 5.7892002 5.81412139 ..., 5.85030748 5.88508911\n", " 5.88637507]\n", " [ 5.78833298 5.81875138 5.83850427 ..., 5.88612816 5.8986934\n", " 5.90478152]]\n", "Buffer: 400\n", "Pred: [[ 5.7641509 5.79247187 5.81926042 ..., 5.84616883 5.86198088\n", " 5.87727484]\n", " [ 5.8513131 5.86385014 5.88638345 ..., 5.89063265 5.90502758\n", " 5.90804928]\n", " [ 5.9113665 5.92879268 5.93253659 ..., 5.94752817 5.95264971\n", " 5.95534078]\n", " ..., \n", " [ 6.1998076 6.19815249 6.22826773 ..., 6.25852243 6.2950688\n", " 6.28322814]\n", " [ 6.19140054 6.19932943 6.23777417 ..., 6.25145184 6.25277943\n", " 6.24492933]\n", " [ 6.22481015 6.25710477 6.27123817 ..., 6.28618561 6.29833129\n", " 6.29616353]]\n", "Buffer: 600\n", "Pred: [[ 6.1645113 6.1747009 6.17346569 ..., 6.14073882 6.13655823\n", " 6.15464913]\n", " [ 6.23869668 6.22906726 6.21064429 ..., 6.19525349 6.199533 6.1829646 ]\n", " [ 5.94298817 5.92847236 5.91129748 ..., 5.89322178 5.86434585\n", " 5.87953873]\n", " ..., \n", " [ 8.94246533 8.87626646 8.89060421 ..., 8.84848815 8.85793555\n", " 8.86792794]\n", " [ 8.78322534 8.79037462 8.72943888 ..., 8.72055999 8.7383812\n", " 8.68878426]\n", " [ 8.83433927 8.76940226 8.77364936 ..., 8.77248502 8.72566135\n", " 8.69839892]]\n", "Buffer: 800\n", "Pred: [[ 8.67603806 8.67084409 8.65130791 ..., 8.67378925 8.69676109\n", " 8.69455006]\n", " [ 8.82830315 8.8205379 8.86009166 ..., 8.87552595 8.85568772\n", " 8.84410872]\n", " [ 8.84748948 8.84911858 8.81238761 ..., 8.78189801 8.75265697\n", " 8.72581647]\n", " ..., \n", " [ 7.71616361 7.7100549 7.68435219 ..., 7.6489673 7.61926738\n", " 7.60503466]\n", " [ 7.59805829 7.59515854 7.53381661 ..., 7.5060898 7.47964638\n", " 7.49137924]\n", " [ 7.54657369 7.52483132 7.53333146 ..., 7.50714863 7.52033692\n", " 7.5104685 ]]\n", "Buffer: 1000\n", "Pred: [[ 7.46215011 7.4436282 7.43918656 ..., 7.5010726 7.48113362\n", " 7.48813435]\n", " [ 7.56216243 7.57242677 7.60962549 ..., 7.59408734 7.58687173\n", " 7.59213207]\n", " [ 7.55189234 7.58738691 7.61589834 ..., 7.60049142 7.60064947\n", " 7.60278131]\n", " ..., \n", " [ 6.19883297 6.22711546 6.24523835 ..., 6.30446123 6.33864273\n", " 6.33903875]\n", " [ 6.17836606 6.19567673 6.22059366 ..., 6.29335772 6.30085317\n", " 6.31700372]\n", " [ 6.30048133 6.33373495 6.37895762 ..., 6.41007597 6.40794933\n", " 6.42844116]]\n", "Buffer: 1200\n", "Pred: [[ 6.30754289 6.34315541 6.37136507 ..., 6.34725709 6.3533664\n", " 6.36701006]\n", " [ 6.2183139 6.22645131 6.20859811 ..., 6.19826357 6.21393204\n", " 6.22498325]\n", " [ 6.13231736 6.11064193 6.06756449 ..., 6.10864178 6.12762316\n", " 6.12009367]\n", " ..., \n", " [ 4.93362234 4.93814477 4.93428253 ..., 4.96908178 4.9916257\n", " 5.0119479 ]\n", " [ 4.94855637 4.96672313 4.9753907 ..., 5.01327007 5.04827391\n", " 5.06702398]\n", " [ 4.94109813 4.95766805 4.9861515 ..., 5.00727657 5.02994663\n", " 5.03880748]]\n", "Buffer: 1400\n", "Pred: [[ 4.99871061 5.02010571 5.014281 ..., 5.0026121 4.99747618\n", " 4.97557435]\n", " [ 5.15365698 5.15594044 5.1491617 ..., 5.09127283 5.05670229\n", " 5.06074197]\n", " [ 5.15264849 5.14912635 5.12308927 ..., 5.05939273 5.0643763\n", " 5.04887009]\n", " ..., \n", " [ 6.73631505 6.69817443 6.67661297 ..., 6.63990072 6.64029307\n", " 6.62941594]\n", " [ 6.80586543 6.78280213 6.77308604 ..., 6.73267206 6.70165677\n", " 6.68567721]\n", " [ 6.87717059 6.8713965 6.85461032 ..., 6.80891943 6.78659161\n", " 6.7676666 ]]\n", "Buffer: 1600\n", "Pred: [[ 6.88960025 6.895621 6.91178743 ..., 6.90648271 6.91037924\n", " 6.91464528]\n", " [ 6.92029213 6.93896731 6.93794831 ..., 6.94105214 6.94581302\n", " 6.93479959]\n", " [ 6.94258489 6.94132069 6.93738101 ..., 6.95109387 6.94439441\n", " 6.96149157]\n", " ..., \n", " [ 8.63303575 8.6153931 8.62242329 ..., 8.60348853 8.61375744\n", " 8.62515753]\n", " [ 8.65670167 8.66375148 8.66798893 ..., 8.65346248 8.65856181\n", " 8.64789495]\n", " [ 8.7674598 8.76709683 8.7645547 ..., 8.78059364 8.7585914\n", " 8.76297732]]\n", "Buffer: 1800\n", "Pred: [[ 8.68953042 8.68353244 8.69167093 ..., 8.69226758 8.69669531\n", " 8.70359861]\n", " [ 8.66104825 8.66338749 8.68358337 ..., 8.67084048 8.68664223\n", " 8.67802482]\n", " [ 8.67468363 8.69245015 8.66828894 ..., 8.69130084 8.67790535\n", " 8.69542446]\n", " ..., \n", " [ 10.25132895 10.26123566 10.25052647 ..., 10.2702956 10.28387785\n", " 10.29072272]\n", " [ 10.18370737 10.17290369 10.18125306 ..., 10.2112286 10.21762469\n", " 10.21706292]\n", " [ 10.22958344 10.23782323 10.24337281 ..., 10.26467471 10.25519154\n", " 10.2341133 ]]\n", "Buffer: 2000\n", "Pred: [[ 10.22064293 10.22413787 10.24471743 ..., 10.27029812 10.2744557\n", " 10.28765738]\n", " [ 10.26516025 10.27459074 10.29442757 ..., 10.31496257 10.32870539\n", " 10.33393516]\n", " [ 10.12818121 10.13767282 10.16435904 ..., 10.23174691 10.25429594\n", " 10.27571162]\n", " ..., \n", " [ 11.64694204 11.67793627 11.71878894 ..., 11.72885817 11.73598723\n", " 11.74138426]\n", " [ 11.50646666 11.55801859 11.60061623 ..., 11.59712143 11.60710104\n", " 11.62519194]\n", " [ 11.66543188 11.70375594 11.72575794 ..., 11.7634877 11.80012102\n", " 11.80921948]]\n", "Buffer: 2200\n", "Pred: [[ 11.62959737 11.64537291 11.62913452 ..., 11.63915597 11.63946331\n", " 11.67432874]\n", " [ 11.51306747 11.4921517 11.48731226 ..., 11.48843655 11.5272199\n", " 11.53575298]\n", " [ 11.4459014 11.44132033 11.44303377 ..., 11.43963244 11.4371997\n", " 11.45553989]\n", " ..., \n", " [ 16.22239336 16.21976356 16.22826391 ..., 16.21574299 16.22293648\n", " 16.26595504]\n", " [ 15.98826989 16.00674066 16.03692572 ..., 16.0496106 16.10671921\n", " 16.11635139]\n", " [ 15.79752122 15.88073774 15.95919399 ..., 16.04615273 16.04535607\n", " 16.03367065]]\n", "Buffer: 2400\n", "Pred: [[ 16.04780654 16.10427504 16.15325971 ..., 16.21640137 16.23310984\n", " 16.24580039]\n", " [ 15.93923871 15.96865021 16.01241045 ..., 16.04899501 16.0097939\n", " 16.01058251]\n", " [ 15.95002904 15.99504448 16.00543129 ..., 16.08477758 16.0724383\n", " 16.01255977]\n", " ..., \n", " [ 20.43621626 20.48574881 20.53403285 ..., 20.5853136 20.65182418\n", " 20.70740506]\n", " [ 21.01478432 21.0377329 21.06384251 ..., 21.11292127 21.16689338\n", " 21.25102393]\n", " [ 20.80946572 20.84214892 20.83450899 ..., 20.87816108 20.94758599\n", " 20.97840243]]\n", "Buffer: 2600\n", "Pred: [[ 20.79530755 20.70031722 20.67570255 ..., 20.67175512 20.75003016\n", " 20.7424359 ]\n", " [ 20.51491535 20.51195086 20.47751748 ..., 20.61619501 20.61899275\n", " 20.71100874]\n", " [ 20.88903686 20.83145557 20.76382639 ..., 20.84093447 20.95482155\n", " 20.93470293]\n", " ..., \n", " [ 21.35898088 21.44310834 21.58442593 ..., 21.67728542 21.63729079\n", " 21.76718696]\n", " [ 21.02670418 21.22586046 21.36227848 ..., 21.31522747 21.4562707\n", " 21.61980196]\n", " [ 21.08453035 21.20775213 21.19865266 ..., 21.28921609 21.44822081\n", " 21.56667633]]\n", "Buffer: 2800\n", "Pred: [[ 20.44161666 20.44133304 20.50606671 ..., 20.78067392 20.83525299\n", " 20.88356921]\n", " [ 20.47831642 20.55669655 20.6800365 ..., 20.94345539 21.0255306\n", " 21.09250263]\n", " [ 20.0543866 20.24467179 20.42056851 ..., 20.71879315 20.80801567\n", " 20.8139791 ]\n", " ..., \n", " [ 25.55444964 25.73089496 25.78688107 ..., 25.83001772 25.87363941\n", " 25.94209486]\n", " [ 26.10683785 26.13568262 26.21882171 ..., 26.1706635 26.17482513\n", " 25.99067047]\n", " [ 25.78641012 25.93842086 25.87267253 ..., 26.02785251 25.8333293\n", " 25.74114593]]\n", "Buffer: 3000\n", "Pred: [[ 26.09202122 26.16659026 26.28513376 ..., 26.27827853 26.19880974\n", " 26.29279004]\n", " [ 27.09296713 27.16525979 27.07816223 ..., 26.79828223 26.82462005\n", " 26.80115994]\n", " [ 27.37426618 27.26991991 27.08514753 ..., 26.99525355 27.0364177\n", " 27.06762629]\n", " ..., \n", " [ 25.74252888 25.81395317 25.96051853 ..., 26.19018399 26.25012269\n", " 26.22686022]\n", " [ 24.28942298 24.55436301 24.86490981 ..., 25.19589939 25.32405251\n", " 25.35862108]\n", " [ 24.10812922 24.39599208 24.70467848 ..., 25.0249339 25.12917584\n", " 25.13941702]]\n", "Buffer: 3200\n", "Pred: [[ 23.89936317 24.16238987 24.37814933 ..., 24.6867283 24.73517262\n", " 24.9000166 ]\n", " [ 22.796028 23.03957929 23.36191281 ..., 23.95134918 24.05807653\n", " 24.32577573]\n", " [ 23.98201714 24.24346901 24.60352667 ..., 24.83600538 25.01300299\n", " 25.28700399]\n", " ..., \n", " [ 25.88867191 25.80319669 25.80762619 ..., 25.73744858 25.58444691\n", " 25.6317368 ]\n", " [ 25.74242634 25.69379746 25.73573117 ..., 25.64464014 25.67333293\n", " 25.64796163]\n", " [ 25.3468584 25.36760481 25.38439543 ..., 25.45652486 25.45199294\n", " 25.37327864]]\n", "Buffer: 3400\n", "Pred: [[ 25.98449668 25.98521208 25.95242912 ..., 25.89368463 25.88045388\n", " 25.93171006]\n", " [ 25.76105977 25.70375977 25.63967045 ..., 25.59240848 25.66132277\n", " 25.66463929]\n", " [ 25.23810548 25.19061044 25.23695191 ..., 25.46131797 25.38041014\n", " 25.40377967]\n", " ..., \n", " [ 26.24824289 26.17127915 26.07623138 ..., 25.84710184 25.78029758\n", " 25.70586174]\n", " [ 26.19759651 26.09744315 25.92235382 ..., 25.63588018 25.63291115\n", " 25.59553912]\n", " [ 25.77531313 25.60455853 25.42752481 ..., 25.30530249 25.33317719\n", " 25.22147558]]\n", "Buffer: 3600\n", "Pred: [[ 25.40656908 25.27074144 25.21409378 ..., 25.28521185 25.22632841\n", " 25.16945681]\n", " [ 25.18921491 25.07334629 25.05299874 ..., 24.94128607 24.95502997\n", " 24.95791613]\n", " [ 24.81985555 24.80298349 24.7612829 ..., 24.59692495 24.58690609\n", " 24.58263133]\n", " ..., \n", " [ 26.0389708 25.93263093 25.87256265 ..., 25.77298706 25.6439993\n", " 25.58368641]\n", " [ 26.56849541 26.50595118 26.36715477 ..., 26.37166457 26.3312083\n", " 26.14700985]\n", " [ 26.80613189 26.67530444 26.66849488 ..., 26.59946944 26.42169587\n", " 26.33018949]]\n", "Buffer: 3800\n", "Pred: [[ 26.06044987 26.12046614 26.05471894 ..., 25.93053422 25.96502619\n", " 25.96056563]\n", " [ 26.03326405 25.99975566 25.8123115 ..., 25.6606701 25.76405528\n", " 25.65340638]\n", " [ 26.56229083 26.42947167 26.36848794 ..., 26.51685341 26.46719925\n", " 26.41071161]\n", " ..., \n", " [ 21.28992895 21.33566945 21.43008967 ..., 21.71406469 21.85169081\n", " 21.92897556]\n", " [ 21.21583534 21.37312981 21.57666978 ..., 21.84861172 21.88918311\n", " 21.93881172]\n", " [ 21.1126037 21.34119817 21.47466187 ..., 21.63830162 21.80664827\n", " 21.87502314]]\n", "Buffer: 4000\n", "Pred: [[ 21.24389337 21.37252773 21.35683562 ..., 21.48408902 21.48832578\n", " 21.4263668 ]\n", " [ 21.22127677 21.24046477 21.34895607 ..., 21.41706179 21.37656328\n", " 21.35550317]\n", " [ 21.43282338 21.46888922 21.493978 ..., 21.51923313 21.50631784\n", " 21.53775008]\n", " ..., \n", " [ 26.79653366 26.64113656 26.49911428 ..., 26.25092122 26.10219452\n", " 25.9559183 ]\n", " [ 26.50290012 26.38396506 26.21567803 ..., 26.05643976 25.92729177\n", " 25.75297956]\n", " [ 26.49228551 26.2948515 26.14185587 ..., 25.91011466 25.7620661\n", " 25.60436813]]\n", "Buffer: 4200\n", "Pred: [[ 26.59862697 26.53265571 26.46607521 ..., 26.31185187 26.22269463\n", " 26.15406759]\n", " [ 26.55732047 26.49355051 26.42777149 ..., 26.2624713 26.21316348\n", " 26.13021364]\n", " [ 26.38850061 26.32645169 26.21572275 ..., 26.15394371 26.11911926\n", " 25.99641195]\n", " ..., \n", " [ 34.39713553 34.08620781 33.9011808 ..., 33.34027792 33.04665311\n", " 32.89668644]\n", " [ 33.98517109 33.82119053 33.5508494 ..., 33.05718995 32.86762085\n", " 32.58866132]\n", " [ 33.8906325 33.64126562 33.39516092 ..., 32.95667114 32.6643352\n", " 32.42929969]]\n", "Buffer: 4400\n", "Pred: [[ 34.41874727 34.43546507 34.39947704 ..., 34.34448666 34.32896368\n", " 34.34120397]\n", " [ 34.46582211 34.4089387 34.43652649 ..., 34.3424298 34.30309225\n", " 34.3895445 ]\n", " [ 34.59749054 34.58828052 34.57559093 ..., 34.53213034 34.55857317\n", " 34.6258566 ]\n", " ..., \n", " [ 39.55704137 39.59838257 39.602544 ..., 39.60300783 39.63200396\n", " 39.69585152]\n", " [ 40.46611222 40.43535902 40.40883545 ..., 40.43070392 40.44180509\n", " 40.54478546]\n", " [ 41.35119597 41.342732 41.31906462 ..., 41.47767905 41.55588714\n", " 41.5559466 ]]\n", "Buffer: 4600\n", "Pred: [[ 41.24501714 41.30563545 41.33906701 ..., 41.41231404 41.36247167\n", " 41.32137465]\n", " [ 41.55176282 41.61250172 41.6040215 ..., 41.5859052 41.4933257\n", " 41.49596777]\n", " [ 41.11082905 41.21096532 41.24008778 ..., 41.10885342 41.11014781\n", " 41.19066485]\n", " ..., \n", " [ 40.40333667 40.57757536 40.7444689 ..., 40.55767817 40.62361813\n", " 40.7688445 ]\n", " [ 39.63679228 39.85222014 39.7001448 ..., 39.82137182 39.90308844\n", " 39.89175773]\n", " [ 40.03398294 39.90566847 39.92936408 ..., 40.00273409 39.99056338\n", " 40.13290444]]\n", "Buffer: 4800\n", "Pred: [[ 40.57613285 40.36745876 40.34832271 ..., 40.14127925 40.25699571\n", " 40.17561628]\n", " [ 39.98152946 40.00012052 39.84018882 ..., 39.76283388 39.68356018\n", " 39.62743014]\n", " [ 40.65448136 40.47656975 40.40428358 ..., 40.32405542 40.34608955\n", " 40.51020122]\n", " ..., \n", " [ 40.70973214 40.82156695 40.94997294 ..., 41.05915738 41.2009332\n", " 41.24048475]\n", " [ 40.74221266 40.91247665 40.94516366 ..., 41.11094752 41.12695732\n", " 41.2238754 ]\n", " [ 40.51848579 40.63794176 40.6930074 ..., 40.83603721 40.96158001\n", " 41.20000058]]\n", "Buffer: 5000\n", "Pred: [[ 41.02840608 40.97742881 41.04879639 ..., 41.08703686 41.13259893\n", " 41.13751978]\n", " [ 41.06644308 41.14932577 41.14604797 ..., 41.28572476 41.31572252\n", " 41.31868877]\n", " [ 42.00121108 41.91105222 41.98860594 ..., 42.05340097 42.0514623\n", " 42.07459136]\n", " ..., \n", " [ 41.61889522 41.77265455 42.134165 ..., 42.26888054 42.27023834\n", " 42.27099558]\n", " [ 39.61382401 39.3572463 38.99373902 ..., 39.08954502 39.72855523\n", " 40.20378919]\n", " [ 39.26326568 38.77189241 38.68857487 ..., 38.98425831 39.33537682\n", " 39.83910962]]\n", "Buffer: 5200\n", "Pred: [[ 40.47205982 40.6031967 40.7555591 ..., 41.30306999 41.58849567\n", " 42.20678238]\n", " [ 40.53496451 40.74019047 40.91134542 ..., 41.1356297 41.85741949\n", " 42.23975788]\n", " [ 40.68819248 40.89227875 40.86005788 ..., 41.29318408 41.69474886\n", " 41.93568032]\n", " ..., \n", " [ 32.58236996 32.68722674 32.94694616 ..., 33.68935864 34.40763451\n", " 35.0411307 ]\n", " [ 34.11827593 34.29691869 34.56631295 ..., 35.77380712 36.1406701\n", " 36.65944805]\n", " [ 32.53922298 32.93070035 33.1267649 ..., 33.88362425 34.34724461\n", " 35.05498163]]\n", "Buffer: 5400\n", "Pred: [[ 31.52461716 31.57967856 31.70310795 ..., 31.60969549 31.97998058\n", " 31.76583509]\n", " [ 32.56237362 32.44398294 32.30184175 ..., 32.87763302 32.50008364\n", " 32.21124309]\n", " [ 32.08373777 32.0604223 32.18122015 ..., 32.3427488 31.88531891\n", " 32.15190584]\n", " ..., \n", " [ 36.47434384 36.56338542 36.61949077 ..., 36.48991746 36.31746724\n", " 36.40344402]\n", " [ 37.24605504 37.18514913 37.20037653 ..., 36.99259881 36.96397396\n", " 36.84186326]\n", " [ 37.03819783 37.07523111 37.0042887 ..., 36.83422073 36.62528101\n", " 36.64031558]]\n", "Buffer: 5600\n", "Pred: [[ 37.15097768 37.16165774 37.0631008 ..., 36.92139965 36.90713708\n", " 36.99238524]\n", " [ 36.81621957 36.81704608 36.83068939 ..., 36.76175825 36.76190017\n", " 36.74666901]\n", " [ 37.09933134 37.1138151 37.12286448 ..., 37.17231345 37.17322168\n", " 37.11568705]\n", " ..., \n", " [ 25.7344187 26.06591327 26.15460221 ..., 27.08788596 27.12449494\n", " 27.39248972]\n", " [ 22.49560126 22.71537861 22.34032905 ..., 22.91827229 22.94172241\n", " 24.24507425]\n", " [ 24.54302106 24.12607841 24.37067691 ..., 24.36400232 25.51053396\n", " 26.15846606]]\n", "Buffer: 5800\n", "Pred: [[ 24.79977904 24.69590721 24.0883611 ..., 24.91928808 25.20504994\n", " 25.25962951]\n", " [ 23.1419501 22.66726302 21.87925864 ..., 23.11620493 22.89603025\n", " 23.68080167]\n", " [ 23.12996329 22.22263254 23.34052642 ..., 23.00870146 23.76270941\n", " 23.85789826]\n", " ..., \n", " [ 35.2820164 35.36034423 35.48074954 ..., 35.78691612 35.82649512\n", " 35.96429514]\n", " [ 35.47454644 35.55712141 35.53895006 ..., 35.77111792 35.8272775\n", " 36.00105157]\n", " [ 35.59562223 35.77160935 35.9847767 ..., 36.14101777 36.22937931\n", " 36.35845682]]\n", "Buffer: 6000\n", "Pred: [[ 34.87543571 35.05866248 34.96081266 ..., 34.91188916 34.8865196\n", " 35.09534966]\n", " [ 34.07850517 34.09411023 33.94862945 ..., 33.7652154 33.70499976\n", " 34.01118595]\n", " [ 33.74560074 33.59630762 33.55275587 ..., 33.25894686 33.44248384\n", " 33.64523254]\n", " ..., \n", " [ 34.37043957 34.49072721 34.46713889 ..., 34.61641291 34.6316781\n", " 34.65009482]\n", " [ 34.34755901 34.44125379 34.69034084 ..., 34.58201637 34.64234545\n", " 34.57663455]\n", " [ 34.57448406 34.80322892 34.60662199 ..., 34.71353755 34.54698945\n", " 34.75533398]]\n", "Buffer: 6200\n", "Pred: [[ 34.48058576 34.46931947 34.39645689 ..., 34.56175966 34.60120682\n", " 34.6889119 ]\n", " [ 34.42459542 34.4041518 34.59273011 ..., 34.71655572 34.77569208\n", " 34.91001211]\n", " [ 34.02746584 34.17503955 34.19326864 ..., 34.41906863 34.49378041\n", " 34.54149122]\n", " ..., \n", " [ 34.26729796 34.33198393 34.52037656 ..., 34.26471212 34.32199879\n", " 34.43204531]\n", " [ 33.37651991 33.60677572 33.52148382 ..., 33.42863803 33.44812737\n", " 33.44797037]\n", " [ 33.77101123 33.70474743 33.57014533 ..., 33.57211048 33.6467882\n", " 33.75261216]]\n", "Buffer: 6400\n", "Pred: [[ 33.53133289 33.43869191 33.37263046 ..., 33.32649401 33.31416629\n", " 33.19199006]\n", " [ 33.46584109 33.39713333 33.33327354 ..., 33.28221668 33.15383874\n", " 33.13431947]\n", " [ 34.41622601 34.29761196 34.4366854 ..., 34.39820455 34.52023716\n", " 34.3539505 ]\n", " ..., \n", " [ 34.78692903 34.73536166 34.73454473 ..., 34.35468426 34.27153208\n", " 34.18379174]\n", " [ 35.01790079 34.99299477 34.80046662 ..., 34.59019432 34.47643505\n", " 34.32671027]\n", " [ 34.93577164 34.68553218 34.54299772 ..., 34.42529695 34.26793524\n", " 34.20209156]]\n", "Buffer: 6600\n", "Pred: [[ 34.97898179 34.98256211 35.07425527 ..., 35.19605749 35.29951325\n", " 35.34528396]\n", " [ 35.01624583 35.10178264 35.12680389 ..., 35.30594613 35.35298146\n", " 35.4299613 ]\n", " [ 34.93937399 34.9619017 35.07676871 ..., 35.17815547 35.28027676\n", " 35.31059197]\n", " ..., \n", " [ 44.10058135 43.8139945 43.50204997 ..., 42.79200923 42.46908938\n", " 42.18424781]\n", " [ 43.92034495 43.61468664 43.30103441 ..., 42.6139226 42.32034584\n", " 42.01517437]\n", " [ 44.03369297 43.71493941 43.41566069 ..., 42.70811157 42.40436291\n", " 42.15296897]]\n", "Buffer: 6800\n", "Pred: [[ 44.26824904 44.22815477 44.2189972 ..., 44.12417068 44.16232578\n", " 44.12297489]\n", " [ 43.86504688 43.81346145 43.79542729 ..., 43.81453745 43.80092968\n", " 43.78132118]\n", " [ 44.17142766 44.10927042 44.07602426 ..., 44.01900881 44.03224618\n", " 44.05145594]\n", " ..., \n", " [ 34.95488639 35.16294448 35.49386909 ..., 35.56308703 35.46595545\n", " 35.52188355]\n", " [ 36.1446683 36.4019933 36.67338125 ..., 36.68118139 36.80819138\n", " 36.84463694]\n", " [ 35.82839891 35.92646934 36.05010142 ..., 36.31325315 36.35564094\n", " 36.41780309]]\n" ] }, { "data": { "text/plain": [ "[array([[ 7.83601976, 7.84714155, 7.85292535, ..., 7.89987737,\n", " 7.91755521, 7.93865868],\n", " [ 7.85539551, 7.86158008, 7.87498252, ..., 7.90506271,\n", " 7.91740818, 7.93852032],\n", " [ 7.83170231, 7.84749588, 7.87738729, ..., 7.89285396,\n", " 7.91642424, 7.92424915],\n", " ..., \n", " [ 6.36738278, 6.39213824, 6.39270447, ..., 6.43798347,\n", " 6.45461204, 6.4751872 ],\n", " [ 6.42016386, 6.417325 , 6.42707883, ..., 6.47916005,\n", " 6.50267402, 6.51950021],\n", " [ 6.28080118, 6.27092368, 6.28282955, ..., 6.30547753,\n", " 6.3252951 , 6.3264697 ]]),\n", " array([[ 6.14075766, 6.11117589, 6.09574853, ..., 6.07217018,\n", " 6.07748552, 6.08070167],\n", " [ 6.21540435, 6.17492322, 6.17149764, ..., 6.1453285 ,\n", " 6.13813657, 6.14081275],\n", " [ 6.27753279, 6.27307459, 6.23843178, ..., 6.24830207,\n", " 6.24374508, 6.21901832],\n", " ..., \n", " [ 5.75919469, 5.78334022, 5.79923807, ..., 5.83008595,\n", " 5.859385 , 5.87740631],\n", " [ 5.76238715, 5.7892002 , 5.81412139, ..., 5.85030748,\n", " 5.88508911, 5.88637507],\n", " [ 5.78833298, 5.81875138, 5.83850427, ..., 5.88612816,\n", " 5.8986934 , 5.90478152]]),\n", " array([[ 5.7641509 , 5.79247187, 5.81926042, ..., 5.84616883,\n", " 5.86198088, 5.87727484],\n", " [ 5.8513131 , 5.86385014, 5.88638345, ..., 5.89063265,\n", " 5.90502758, 5.90804928],\n", " [ 5.9113665 , 5.92879268, 5.93253659, ..., 5.94752817,\n", " 5.95264971, 5.95534078],\n", " ..., \n", " [ 6.1998076 , 6.19815249, 6.22826773, ..., 6.25852243,\n", " 6.2950688 , 6.28322814],\n", " [ 6.19140054, 6.19932943, 6.23777417, ..., 6.25145184,\n", " 6.25277943, 6.24492933],\n", " [ 6.22481015, 6.25710477, 6.27123817, ..., 6.28618561,\n", " 6.29833129, 6.29616353]]),\n", " array([[ 6.1645113 , 6.1747009 , 6.17346569, ..., 6.14073882,\n", " 6.13655823, 6.15464913],\n", " [ 6.23869668, 6.22906726, 6.21064429, ..., 6.19525349,\n", " 6.199533 , 6.1829646 ],\n", " [ 5.94298817, 5.92847236, 5.91129748, ..., 5.89322178,\n", " 5.86434585, 5.87953873],\n", " ..., \n", " [ 8.94246533, 8.87626646, 8.89060421, ..., 8.84848815,\n", " 8.85793555, 8.86792794],\n", " [ 8.78322534, 8.79037462, 8.72943888, ..., 8.72055999,\n", " 8.7383812 , 8.68878426],\n", " [ 8.83433927, 8.76940226, 8.77364936, ..., 8.77248502,\n", " 8.72566135, 8.69839892]]),\n", " array([[ 8.67603806, 8.67084409, 8.65130791, ..., 8.67378925,\n", " 8.69676109, 8.69455006],\n", " [ 8.82830315, 8.8205379 , 8.86009166, ..., 8.87552595,\n", " 8.85568772, 8.84410872],\n", " [ 8.84748948, 8.84911858, 8.81238761, ..., 8.78189801,\n", " 8.75265697, 8.72581647],\n", " ..., \n", " [ 7.71616361, 7.7100549 , 7.68435219, ..., 7.6489673 ,\n", " 7.61926738, 7.60503466],\n", " [ 7.59805829, 7.59515854, 7.53381661, ..., 7.5060898 ,\n", " 7.47964638, 7.49137924],\n", " [ 7.54657369, 7.52483132, 7.53333146, ..., 7.50714863,\n", " 7.52033692, 7.5104685 ]]),\n", " array([[ 7.46215011, 7.4436282 , 7.43918656, ..., 7.5010726 ,\n", " 7.48113362, 7.48813435],\n", " [ 7.56216243, 7.57242677, 7.60962549, ..., 7.59408734,\n", " 7.58687173, 7.59213207],\n", " [ 7.55189234, 7.58738691, 7.61589834, ..., 7.60049142,\n", " 7.60064947, 7.60278131],\n", " ..., \n", " [ 6.19883297, 6.22711546, 6.24523835, ..., 6.30446123,\n", " 6.33864273, 6.33903875],\n", " [ 6.17836606, 6.19567673, 6.22059366, ..., 6.29335772,\n", " 6.30085317, 6.31700372],\n", " [ 6.30048133, 6.33373495, 6.37895762, ..., 6.41007597,\n", " 6.40794933, 6.42844116]]),\n", " array([[ 6.30754289, 6.34315541, 6.37136507, ..., 6.34725709,\n", " 6.3533664 , 6.36701006],\n", " [ 6.2183139 , 6.22645131, 6.20859811, ..., 6.19826357,\n", " 6.21393204, 6.22498325],\n", " [ 6.13231736, 6.11064193, 6.06756449, ..., 6.10864178,\n", " 6.12762316, 6.12009367],\n", " ..., \n", " [ 4.93362234, 4.93814477, 4.93428253, ..., 4.96908178,\n", " 4.9916257 , 5.0119479 ],\n", " [ 4.94855637, 4.96672313, 4.9753907 , ..., 5.01327007,\n", " 5.04827391, 5.06702398],\n", " [ 4.94109813, 4.95766805, 4.9861515 , ..., 5.00727657,\n", " 5.02994663, 5.03880748]]),\n", " array([[ 4.99871061, 5.02010571, 5.014281 , ..., 5.0026121 ,\n", " 4.99747618, 4.97557435],\n", " [ 5.15365698, 5.15594044, 5.1491617 , ..., 5.09127283,\n", " 5.05670229, 5.06074197],\n", " [ 5.15264849, 5.14912635, 5.12308927, ..., 5.05939273,\n", " 5.0643763 , 5.04887009],\n", " ..., \n", " [ 6.73631505, 6.69817443, 6.67661297, ..., 6.63990072,\n", " 6.64029307, 6.62941594],\n", " [ 6.80586543, 6.78280213, 6.77308604, ..., 6.73267206,\n", " 6.70165677, 6.68567721],\n", " [ 6.87717059, 6.8713965 , 6.85461032, ..., 6.80891943,\n", " 6.78659161, 6.7676666 ]]),\n", " array([[ 6.88960025, 6.895621 , 6.91178743, ..., 6.90648271,\n", " 6.91037924, 6.91464528],\n", " [ 6.92029213, 6.93896731, 6.93794831, ..., 6.94105214,\n", " 6.94581302, 6.93479959],\n", " [ 6.94258489, 6.94132069, 6.93738101, ..., 6.95109387,\n", " 6.94439441, 6.96149157],\n", " ..., \n", " [ 8.63303575, 8.6153931 , 8.62242329, ..., 8.60348853,\n", " 8.61375744, 8.62515753],\n", " [ 8.65670167, 8.66375148, 8.66798893, ..., 8.65346248,\n", " 8.65856181, 8.64789495],\n", " [ 8.7674598 , 8.76709683, 8.7645547 , ..., 8.78059364,\n", " 8.7585914 , 8.76297732]]),\n", " array([[ 8.68953042, 8.68353244, 8.69167093, ..., 8.69226758,\n", " 8.69669531, 8.70359861],\n", " [ 8.66104825, 8.66338749, 8.68358337, ..., 8.67084048,\n", " 8.68664223, 8.67802482],\n", " [ 8.67468363, 8.69245015, 8.66828894, ..., 8.69130084,\n", " 8.67790535, 8.69542446],\n", " ..., \n", " [ 10.25132895, 10.26123566, 10.25052647, ..., 10.2702956 ,\n", " 10.28387785, 10.29072272],\n", " [ 10.18370737, 10.17290369, 10.18125306, ..., 10.2112286 ,\n", " 10.21762469, 10.21706292],\n", " [ 10.22958344, 10.23782323, 10.24337281, ..., 10.26467471,\n", " 10.25519154, 10.2341133 ]]),\n", " array([[ 10.22064293, 10.22413787, 10.24471743, ..., 10.27029812,\n", " 10.2744557 , 10.28765738],\n", " [ 10.26516025, 10.27459074, 10.29442757, ..., 10.31496257,\n", " 10.32870539, 10.33393516],\n", " [ 10.12818121, 10.13767282, 10.16435904, ..., 10.23174691,\n", " 10.25429594, 10.27571162],\n", " ..., \n", " [ 11.64694204, 11.67793627, 11.71878894, ..., 11.72885817,\n", " 11.73598723, 11.74138426],\n", " [ 11.50646666, 11.55801859, 11.60061623, ..., 11.59712143,\n", " 11.60710104, 11.62519194],\n", " [ 11.66543188, 11.70375594, 11.72575794, ..., 11.7634877 ,\n", " 11.80012102, 11.80921948]]),\n", " array([[ 11.62959737, 11.64537291, 11.62913452, ..., 11.63915597,\n", " 11.63946331, 11.67432874],\n", " [ 11.51306747, 11.4921517 , 11.48731226, ..., 11.48843655,\n", " 11.5272199 , 11.53575298],\n", " [ 11.4459014 , 11.44132033, 11.44303377, ..., 11.43963244,\n", " 11.4371997 , 11.45553989],\n", " ..., \n", " [ 16.22239336, 16.21976356, 16.22826391, ..., 16.21574299,\n", " 16.22293648, 16.26595504],\n", " [ 15.98826989, 16.00674066, 16.03692572, ..., 16.0496106 ,\n", " 16.10671921, 16.11635139],\n", " [ 15.79752122, 15.88073774, 15.95919399, ..., 16.04615273,\n", " 16.04535607, 16.03367065]]),\n", " array([[ 16.04780654, 16.10427504, 16.15325971, ..., 16.21640137,\n", " 16.23310984, 16.24580039],\n", " [ 15.93923871, 15.96865021, 16.01241045, ..., 16.04899501,\n", " 16.0097939 , 16.01058251],\n", " [ 15.95002904, 15.99504448, 16.00543129, ..., 16.08477758,\n", " 16.0724383 , 16.01255977],\n", " ..., \n", " [ 20.43621626, 20.48574881, 20.53403285, ..., 20.5853136 ,\n", " 20.65182418, 20.70740506],\n", " [ 21.01478432, 21.0377329 , 21.06384251, ..., 21.11292127,\n", " 21.16689338, 21.25102393],\n", " [ 20.80946572, 20.84214892, 20.83450899, ..., 20.87816108,\n", " 20.94758599, 20.97840243]]),\n", " array([[ 20.79530755, 20.70031722, 20.67570255, ..., 20.67175512,\n", " 20.75003016, 20.7424359 ],\n", " [ 20.51491535, 20.51195086, 20.47751748, ..., 20.61619501,\n", " 20.61899275, 20.71100874],\n", " [ 20.88903686, 20.83145557, 20.76382639, ..., 20.84093447,\n", " 20.95482155, 20.93470293],\n", " ..., \n", " [ 21.35898088, 21.44310834, 21.58442593, ..., 21.67728542,\n", " 21.63729079, 21.76718696],\n", " [ 21.02670418, 21.22586046, 21.36227848, ..., 21.31522747,\n", " 21.4562707 , 21.61980196],\n", " [ 21.08453035, 21.20775213, 21.19865266, ..., 21.28921609,\n", " 21.44822081, 21.56667633]]),\n", " array([[ 20.44161666, 20.44133304, 20.50606671, ..., 20.78067392,\n", " 20.83525299, 20.88356921],\n", " [ 20.47831642, 20.55669655, 20.6800365 , ..., 20.94345539,\n", " 21.0255306 , 21.09250263],\n", " [ 20.0543866 , 20.24467179, 20.42056851, ..., 20.71879315,\n", " 20.80801567, 20.8139791 ],\n", " ..., \n", " [ 25.55444964, 25.73089496, 25.78688107, ..., 25.83001772,\n", " 25.87363941, 25.94209486],\n", " [ 26.10683785, 26.13568262, 26.21882171, ..., 26.1706635 ,\n", " 26.17482513, 25.99067047],\n", " [ 25.78641012, 25.93842086, 25.87267253, ..., 26.02785251,\n", " 25.8333293 , 25.74114593]]),\n", " array([[ 26.09202122, 26.16659026, 26.28513376, ..., 26.27827853,\n", " 26.19880974, 26.29279004],\n", " [ 27.09296713, 27.16525979, 27.07816223, ..., 26.79828223,\n", " 26.82462005, 26.80115994],\n", " [ 27.37426618, 27.26991991, 27.08514753, ..., 26.99525355,\n", " 27.0364177 , 27.06762629],\n", " ..., \n", " [ 25.74252888, 25.81395317, 25.96051853, ..., 26.19018399,\n", " 26.25012269, 26.22686022],\n", " [ 24.28942298, 24.55436301, 24.86490981, ..., 25.19589939,\n", " 25.32405251, 25.35862108],\n", " [ 24.10812922, 24.39599208, 24.70467848, ..., 25.0249339 ,\n", " 25.12917584, 25.13941702]]),\n", " array([[ 23.89936317, 24.16238987, 24.37814933, ..., 24.6867283 ,\n", " 24.73517262, 24.9000166 ],\n", " [ 22.796028 , 23.03957929, 23.36191281, ..., 23.95134918,\n", " 24.05807653, 24.32577573],\n", " [ 23.98201714, 24.24346901, 24.60352667, ..., 24.83600538,\n", " 25.01300299, 25.28700399],\n", " ..., \n", " [ 25.88867191, 25.80319669, 25.80762619, ..., 25.73744858,\n", " 25.58444691, 25.6317368 ],\n", " [ 25.74242634, 25.69379746, 25.73573117, ..., 25.64464014,\n", " 25.67333293, 25.64796163],\n", " [ 25.3468584 , 25.36760481, 25.38439543, ..., 25.45652486,\n", " 25.45199294, 25.37327864]]),\n", " array([[ 25.98449668, 25.98521208, 25.95242912, ..., 25.89368463,\n", " 25.88045388, 25.93171006],\n", " [ 25.76105977, 25.70375977, 25.63967045, ..., 25.59240848,\n", " 25.66132277, 25.66463929],\n", " [ 25.23810548, 25.19061044, 25.23695191, ..., 25.46131797,\n", " 25.38041014, 25.40377967],\n", " ..., \n", " [ 26.24824289, 26.17127915, 26.07623138, ..., 25.84710184,\n", " 25.78029758, 25.70586174],\n", " [ 26.19759651, 26.09744315, 25.92235382, ..., 25.63588018,\n", " 25.63291115, 25.59553912],\n", " [ 25.77531313, 25.60455853, 25.42752481, ..., 25.30530249,\n", " 25.33317719, 25.22147558]]),\n", " array([[ 25.40656908, 25.27074144, 25.21409378, ..., 25.28521185,\n", " 25.22632841, 25.16945681],\n", " [ 25.18921491, 25.07334629, 25.05299874, ..., 24.94128607,\n", " 24.95502997, 24.95791613],\n", " [ 24.81985555, 24.80298349, 24.7612829 , ..., 24.59692495,\n", " 24.58690609, 24.58263133],\n", " ..., \n", " [ 26.0389708 , 25.93263093, 25.87256265, ..., 25.77298706,\n", " 25.6439993 , 25.58368641],\n", " [ 26.56849541, 26.50595118, 26.36715477, ..., 26.37166457,\n", " 26.3312083 , 26.14700985],\n", " [ 26.80613189, 26.67530444, 26.66849488, ..., 26.59946944,\n", " 26.42169587, 26.33018949]]),\n", " array([[ 26.06044987, 26.12046614, 26.05471894, ..., 25.93053422,\n", " 25.96502619, 25.96056563],\n", " [ 26.03326405, 25.99975566, 25.8123115 , ..., 25.6606701 ,\n", " 25.76405528, 25.65340638],\n", " [ 26.56229083, 26.42947167, 26.36848794, ..., 26.51685341,\n", " 26.46719925, 26.41071161],\n", " ..., \n", " [ 21.28992895, 21.33566945, 21.43008967, ..., 21.71406469,\n", " 21.85169081, 21.92897556],\n", " [ 21.21583534, 21.37312981, 21.57666978, ..., 21.84861172,\n", " 21.88918311, 21.93881172],\n", " [ 21.1126037 , 21.34119817, 21.47466187, ..., 21.63830162,\n", " 21.80664827, 21.87502314]]),\n", " array([[ 21.24389337, 21.37252773, 21.35683562, ..., 21.48408902,\n", " 21.48832578, 21.4263668 ],\n", " [ 21.22127677, 21.24046477, 21.34895607, ..., 21.41706179,\n", " 21.37656328, 21.35550317],\n", " [ 21.43282338, 21.46888922, 21.493978 , ..., 21.51923313,\n", " 21.50631784, 21.53775008],\n", " ..., \n", " [ 26.79653366, 26.64113656, 26.49911428, ..., 26.25092122,\n", " 26.10219452, 25.9559183 ],\n", " [ 26.50290012, 26.38396506, 26.21567803, ..., 26.05643976,\n", " 25.92729177, 25.75297956],\n", " [ 26.49228551, 26.2948515 , 26.14185587, ..., 25.91011466,\n", " 25.7620661 , 25.60436813]]),\n", " array([[ 26.59862697, 26.53265571, 26.46607521, ..., 26.31185187,\n", " 26.22269463, 26.15406759],\n", " [ 26.55732047, 26.49355051, 26.42777149, ..., 26.2624713 ,\n", " 26.21316348, 26.13021364],\n", " [ 26.38850061, 26.32645169, 26.21572275, ..., 26.15394371,\n", " 26.11911926, 25.99641195],\n", " ..., \n", " [ 34.39713553, 34.08620781, 33.9011808 , ..., 33.34027792,\n", " 33.04665311, 32.89668644],\n", " [ 33.98517109, 33.82119053, 33.5508494 , ..., 33.05718995,\n", " 32.86762085, 32.58866132],\n", " [ 33.8906325 , 33.64126562, 33.39516092, ..., 32.95667114,\n", " 32.6643352 , 32.42929969]]),\n", " array([[ 34.41874727, 34.43546507, 34.39947704, ..., 34.34448666,\n", " 34.32896368, 34.34120397],\n", " [ 34.46582211, 34.4089387 , 34.43652649, ..., 34.3424298 ,\n", " 34.30309225, 34.3895445 ],\n", " [ 34.59749054, 34.58828052, 34.57559093, ..., 34.53213034,\n", " 34.55857317, 34.6258566 ],\n", " ..., \n", " [ 39.55704137, 39.59838257, 39.602544 , ..., 39.60300783,\n", " 39.63200396, 39.69585152],\n", " [ 40.46611222, 40.43535902, 40.40883545, ..., 40.43070392,\n", " 40.44180509, 40.54478546],\n", " [ 41.35119597, 41.342732 , 41.31906462, ..., 41.47767905,\n", " 41.55588714, 41.5559466 ]]),\n", " array([[ 41.24501714, 41.30563545, 41.33906701, ..., 41.41231404,\n", " 41.36247167, 41.32137465],\n", " [ 41.55176282, 41.61250172, 41.6040215 , ..., 41.5859052 ,\n", " 41.4933257 , 41.49596777],\n", " [ 41.11082905, 41.21096532, 41.24008778, ..., 41.10885342,\n", " 41.11014781, 41.19066485],\n", " ..., \n", " [ 40.40333667, 40.57757536, 40.7444689 , ..., 40.55767817,\n", " 40.62361813, 40.7688445 ],\n", " [ 39.63679228, 39.85222014, 39.7001448 , ..., 39.82137182,\n", " 39.90308844, 39.89175773],\n", " [ 40.03398294, 39.90566847, 39.92936408, ..., 40.00273409,\n", " 39.99056338, 40.13290444]]),\n", " array([[ 40.57613285, 40.36745876, 40.34832271, ..., 40.14127925,\n", " 40.25699571, 40.17561628],\n", " [ 39.98152946, 40.00012052, 39.84018882, ..., 39.76283388,\n", " 39.68356018, 39.62743014],\n", " [ 40.65448136, 40.47656975, 40.40428358, ..., 40.32405542,\n", " 40.34608955, 40.51020122],\n", " ..., \n", " [ 40.70973214, 40.82156695, 40.94997294, ..., 41.05915738,\n", " 41.2009332 , 41.24048475],\n", " [ 40.74221266, 40.91247665, 40.94516366, ..., 41.11094752,\n", " 41.12695732, 41.2238754 ],\n", " [ 40.51848579, 40.63794176, 40.6930074 , ..., 40.83603721,\n", " 40.96158001, 41.20000058]]),\n", " array([[ 41.02840608, 40.97742881, 41.04879639, ..., 41.08703686,\n", " 41.13259893, 41.13751978],\n", " [ 41.06644308, 41.14932577, 41.14604797, ..., 41.28572476,\n", " 41.31572252, 41.31868877],\n", " [ 42.00121108, 41.91105222, 41.98860594, ..., 42.05340097,\n", " 42.0514623 , 42.07459136],\n", " ..., \n", " [ 41.61889522, 41.77265455, 42.134165 , ..., 42.26888054,\n", " 42.27023834, 42.27099558],\n", " [ 39.61382401, 39.3572463 , 38.99373902, ..., 39.08954502,\n", " 39.72855523, 40.20378919],\n", " [ 39.26326568, 38.77189241, 38.68857487, ..., 38.98425831,\n", " 39.33537682, 39.83910962]]),\n", " array([[ 40.47205982, 40.6031967 , 40.7555591 , ..., 41.30306999,\n", " 41.58849567, 42.20678238],\n", " [ 40.53496451, 40.74019047, 40.91134542, ..., 41.1356297 ,\n", " 41.85741949, 42.23975788],\n", " [ 40.68819248, 40.89227875, 40.86005788, ..., 41.29318408,\n", " 41.69474886, 41.93568032],\n", " ..., \n", " [ 32.58236996, 32.68722674, 32.94694616, ..., 33.68935864,\n", " 34.40763451, 35.0411307 ],\n", " [ 34.11827593, 34.29691869, 34.56631295, ..., 35.77380712,\n", " 36.1406701 , 36.65944805],\n", " [ 32.53922298, 32.93070035, 33.1267649 , ..., 33.88362425,\n", " 34.34724461, 35.05498163]]),\n", " array([[ 31.52461716, 31.57967856, 31.70310795, ..., 31.60969549,\n", " 31.97998058, 31.76583509],\n", " [ 32.56237362, 32.44398294, 32.30184175, ..., 32.87763302,\n", " 32.50008364, 32.21124309],\n", " [ 32.08373777, 32.0604223 , 32.18122015, ..., 32.3427488 ,\n", " 31.88531891, 32.15190584],\n", " ..., \n", " [ 36.47434384, 36.56338542, 36.61949077, ..., 36.48991746,\n", " 36.31746724, 36.40344402],\n", " [ 37.24605504, 37.18514913, 37.20037653, ..., 36.99259881,\n", " 36.96397396, 36.84186326],\n", " [ 37.03819783, 37.07523111, 37.0042887 , ..., 36.83422073,\n", " 36.62528101, 36.64031558]]),\n", " array([[ 37.15097768, 37.16165774, 37.0631008 , ..., 36.92139965,\n", " 36.90713708, 36.99238524],\n", " [ 36.81621957, 36.81704608, 36.83068939, ..., 36.76175825,\n", " 36.76190017, 36.74666901],\n", " [ 37.09933134, 37.1138151 , 37.12286448, ..., 37.17231345,\n", " 37.17322168, 37.11568705],\n", " ..., \n", " [ 25.7344187 , 26.06591327, 26.15460221, ..., 27.08788596,\n", " 27.12449494, 27.39248972],\n", " [ 22.49560126, 22.71537861, 22.34032905, ..., 22.91827229,\n", " 22.94172241, 24.24507425],\n", " [ 24.54302106, 24.12607841, 24.37067691, ..., 24.36400232,\n", " 25.51053396, 26.15846606]]),\n", " array([[ 24.79977904, 24.69590721, 24.0883611 , ..., 24.91928808,\n", " 25.20504994, 25.25962951],\n", " [ 23.1419501 , 22.66726302, 21.87925864, ..., 23.11620493,\n", " 22.89603025, 23.68080167],\n", " [ 23.12996329, 22.22263254, 23.34052642, ..., 23.00870146,\n", " 23.76270941, 23.85789826],\n", " ..., \n", " [ 35.2820164 , 35.36034423, 35.48074954, ..., 35.78691612,\n", " 35.82649512, 35.96429514],\n", " [ 35.47454644, 35.55712141, 35.53895006, ..., 35.77111792,\n", " 35.8272775 , 36.00105157],\n", " [ 35.59562223, 35.77160935, 35.9847767 , ..., 36.14101777,\n", " 36.22937931, 36.35845682]]),\n", " array([[ 34.87543571, 35.05866248, 34.96081266, ..., 34.91188916,\n", " 34.8865196 , 35.09534966],\n", " [ 34.07850517, 34.09411023, 33.94862945, ..., 33.7652154 ,\n", " 33.70499976, 34.01118595],\n", " [ 33.74560074, 33.59630762, 33.55275587, ..., 33.25894686,\n", " 33.44248384, 33.64523254],\n", " ..., \n", " [ 34.37043957, 34.49072721, 34.46713889, ..., 34.61641291,\n", " 34.6316781 , 34.65009482],\n", " [ 34.34755901, 34.44125379, 34.69034084, ..., 34.58201637,\n", " 34.64234545, 34.57663455],\n", " [ 34.57448406, 34.80322892, 34.60662199, ..., 34.71353755,\n", " 34.54698945, 34.75533398]]),\n", " array([[ 34.48058576, 34.46931947, 34.39645689, ..., 34.56175966,\n", " 34.60120682, 34.6889119 ],\n", " [ 34.42459542, 34.4041518 , 34.59273011, ..., 34.71655572,\n", " 34.77569208, 34.91001211],\n", " [ 34.02746584, 34.17503955, 34.19326864, ..., 34.41906863,\n", " 34.49378041, 34.54149122],\n", " ..., \n", " [ 34.26729796, 34.33198393, 34.52037656, ..., 34.26471212,\n", " 34.32199879, 34.43204531],\n", " [ 33.37651991, 33.60677572, 33.52148382, ..., 33.42863803,\n", " 33.44812737, 33.44797037],\n", " [ 33.77101123, 33.70474743, 33.57014533, ..., 33.57211048,\n", " 33.6467882 , 33.75261216]]),\n", " array([[ 33.53133289, 33.43869191, 33.37263046, ..., 33.32649401,\n", " 33.31416629, 33.19199006],\n", " [ 33.46584109, 33.39713333, 33.33327354, ..., 33.28221668,\n", " 33.15383874, 33.13431947],\n", " [ 34.41622601, 34.29761196, 34.4366854 , ..., 34.39820455,\n", " 34.52023716, 34.3539505 ],\n", " ..., \n", " [ 34.78692903, 34.73536166, 34.73454473, ..., 34.35468426,\n", " 34.27153208, 34.18379174],\n", " [ 35.01790079, 34.99299477, 34.80046662, ..., 34.59019432,\n", " 34.47643505, 34.32671027],\n", " [ 34.93577164, 34.68553218, 34.54299772, ..., 34.42529695,\n", " 34.26793524, 34.20209156]]),\n", " array([[ 34.97898179, 34.98256211, 35.07425527, ..., 35.19605749,\n", " 35.29951325, 35.34528396],\n", " [ 35.01624583, 35.10178264, 35.12680389, ..., 35.30594613,\n", " 35.35298146, 35.4299613 ],\n", " [ 34.93937399, 34.9619017 , 35.07676871, ..., 35.17815547,\n", " 35.28027676, 35.31059197],\n", " ..., \n", " [ 44.10058135, 43.8139945 , 43.50204997, ..., 42.79200923,\n", " 42.46908938, 42.18424781],\n", " [ 43.92034495, 43.61468664, 43.30103441, ..., 42.6139226 ,\n", " 42.32034584, 42.01517437],\n", " [ 44.03369297, 43.71493941, 43.41566069, ..., 42.70811157,\n", " 42.40436291, 42.15296897]]),\n", " array([[ 44.26824904, 44.22815477, 44.2189972 , ..., 44.12417068,\n", " 44.16232578, 44.12297489],\n", " [ 43.86504688, 43.81346145, 43.79542729, ..., 43.81453745,\n", " 43.80092968, 43.78132118],\n", " [ 44.17142766, 44.10927042, 44.07602426, ..., 44.01900881,\n", " 44.03224618, 44.05145594],\n", " ..., \n", " [ 34.95488639, 35.16294448, 35.49386909, ..., 35.56308703,\n", " 35.46595545, 35.52188355],\n", " [ 36.1446683 , 36.4019933 , 36.67338125, ..., 36.68118139,\n", " 36.80819138, 36.84463694],\n", " [ 35.82839891, 35.92646934, 36.05010142, ..., 36.31325315,\n", " 36.35564094, 36.41780309]])]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract predictions. \n", "# `execute_viz` function appends predictions to `predictions_800_off`.\n", "execute_viz(steps=35)\n", "predictions_800_off" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7000\n" ] }, { "data": { "text/plain": [ "[7.9386586814575164,\n", " 7.9385203217998654,\n", " 7.924249146106483,\n", " 7.9012922230048002,\n", " 7.9694966896901072,\n", " 7.9379066283830166,\n", " 7.9033436487609698,\n", " 7.9624823177768214,\n", " 7.9797023821236319,\n", " 8.0022559969116571,\n", " 8.0346843791736688,\n", " 8.0165273954102201,\n", " 8.0478567389874343,\n", " 8.0175318531137716,\n", " 8.1207363588667363,\n", " 8.3027967645395577,\n", " 8.3830578303821088,\n", " 8.433113998415509,\n", " 8.3680978432868649,\n", " 8.3471882088960587,\n", " 8.1889879868111279,\n", " 8.1863491608515524,\n", " 8.4241681316139623,\n", " 8.418357801473503,\n", " 8.5213388551832345,\n", " 8.3832348535517571,\n", " 8.1961078162144627,\n", " 8.0712254420379281,\n", " 7.8577649445467834,\n", " 7.8242291698881647,\n", " 7.8212444345901204,\n", " 7.7634359328571501,\n", " 7.9755668055243518,\n", " 8.0341178823289692,\n", " 7.8730729840682745,\n", " 7.8744687301826684,\n", " 8.053238381571342,\n", " 8.0217328098924536,\n", " 8.0288730932490946,\n", " 7.7596041420852018,\n", " 7.4272558470725887,\n", " 7.6045342781236531,\n", " 7.5541483821835058,\n", " 7.6921907134941465,\n", " 7.8355729543313348,\n", " 7.5862038765559605,\n", " 7.3265133334045185,\n", " 7.3144934353553213,\n", " 7.3500829043810105,\n", " 7.3510859878584105,\n", " 7.4282522099924249,\n", " 7.37924055474861,\n", " 7.4078716362153223,\n", " 7.6956865693848453,\n", " 7.7665983163343082,\n", " 7.7437631679078303,\n", " 7.9610193388681854,\n", " 8.0008118350990696,\n", " 7.9373151329248639,\n", " 8.0235718872491102,\n", " 7.9163579791227132,\n", " 7.8450888166196311,\n", " 7.7645800745267728,\n", " 7.8200451803263924,\n", " 7.8416342933699266,\n", " 7.8434909561987745,\n", " 7.8382321920669131,\n", " 7.8685651108740355,\n", " 7.9846856131927062,\n", " 8.0088802813229911,\n", " 7.865448180200195,\n", " 7.9267289179245122,\n", " 7.8755502361625265,\n", " 7.7186662517603013,\n", " 7.9199563662611236,\n", " 7.9782845980081945,\n", " 7.9338153744603783,\n", " 7.9077209067781506,\n", " 7.8805941466182876,\n", " 7.804253716325892,\n", " 7.8490373611580342,\n", " 7.8753824102238852,\n", " 7.8915503700812,\n", " 7.877443173859108,\n", " 7.7895429137186358,\n", " 7.7513428027436122,\n", " 7.7149487495816276,\n", " 7.5523444523503853,\n", " 7.4303808282737211,\n", " 7.0821673891687666,\n", " 5.9677691947169427,\n", " 5.1362911464119145,\n", " 5.5574575276275731,\n", " 5.2818650930534563,\n", " 5.4744499091450667,\n", " 5.3094567735870584,\n", " 5.0301794949373013,\n", " 5.1123900154976303,\n", " 5.4867000687863783,\n", " 5.2783798151050974,\n", " 5.5429067215920238,\n", " 5.2856207494813647,\n", " 5.2600922736577882,\n", " 5.3795144576904841,\n", " 5.3226781806849388,\n", " 5.3103028948361795,\n", " 5.3168439182747154,\n", " 5.3543485747309898,\n", " 5.3950525100208226,\n", " 5.345318857173547,\n", " 5.3198220678787616,\n", " 5.4133559584263899,\n", " 5.3843395565582757,\n", " 5.5139377070660638,\n", " 5.6091792949613897,\n", " 5.6306767189261206,\n", " 5.7172608253593893,\n", " 5.7317686562106136,\n", " 5.7259383971371589,\n", " 5.492856834747605,\n", " 5.4135359809230312,\n", " 5.362572896424024,\n", " 5.3979066269629259,\n", " 5.4939663284969846,\n", " 5.6319808805005911,\n", " 5.6411152173746011,\n", " 5.6758521237026303,\n", " 5.5963907615876654,\n", " 5.7466509186675312,\n", " 5.6527778014805667,\n", " 5.5911499582756194,\n", " 5.5687781331245487,\n", " 5.436830255690305,\n", " 5.4554965703535103,\n", " 5.7195278095458084,\n", " 5.7427309518459584,\n", " 5.9606798799275227,\n", " 5.9384989424349897,\n", " 5.7778385648473565,\n", " 5.6901466393148805,\n", " 5.9579184804955743,\n", " 5.8436553203737107,\n", " 6.1517305136993015,\n", " 6.1555230756912005,\n", " 6.1184355998723934,\n", " 6.0827708197957993,\n", " 5.8898273456745862,\n", " 5.8970123526576721,\n", " 5.8540476000295616,\n", " 5.8947781345973125,\n", " 5.8988450139051256,\n", " 5.9144672991265015,\n", " 5.8782232003546042,\n", " 5.751470819801737,\n", " 5.6138833941332598,\n", " 5.7077101710774851,\n", " 5.8340908464301124,\n", " 5.8308013171332744,\n", " 5.8327581835573215,\n", " 5.8519904841862331,\n", " 6.0306902932743567,\n", " 5.9651639045282563,\n", " 5.9024180741927683,\n", " 5.905254944675784,\n", " 5.8274018484276713,\n", " 5.8672542702992745,\n", " 5.7672014808651406,\n", " 5.6255380091922573,\n", " 5.6900808085978474,\n", " 5.7491740048308451,\n", " 5.7679135053569599,\n", " 5.7921074313959346,\n", " 5.7529437138169861,\n", " 5.7453901557846443,\n", " 5.7549205739837044,\n", " 5.6990868193754816,\n", " 5.8251170153492167,\n", " 5.8273091752505657,\n", " 5.7601002273888726,\n", " 5.8233125011725528,\n", " 5.7657222040117455,\n", " 5.6902374599790972,\n", " 5.7354608350877712,\n", " 5.8177104411454748,\n", " 5.7374285740025925,\n", " 5.7577836964541582,\n", " 5.9131196878942065,\n", " 6.0303952627288453,\n", " 6.0860790674585017,\n", " 6.523352100466882,\n", " 6.5176956991855022,\n", " 6.3933007815776115,\n", " 6.3835975284975151,\n", " 6.4078502003894933,\n", " 6.3637590570703271,\n", " 6.5949673261789989,\n", " 6.5455806185616092,\n", " 6.4751872040984262,\n", " 6.5195002081104771,\n", " 6.3264696997486274,\n", " 6.0807016653319117,\n", " 6.1408127499487541,\n", " 6.219018322737476,\n", " 6.1846771780336889,\n", " 6.1968487923542526,\n", " 6.1407414692183888,\n", " 6.1799911998396553,\n", " 6.2249280967765133,\n", " 6.2936809105776534,\n", " 6.4090332930535974,\n", " 6.6308038648546219,\n", " 6.5138903921171174,\n", " 6.5528890032476212,\n", " 6.4015883914550091,\n", " 6.4307525014847942,\n", " 6.6354753933126718,\n", " 6.6776841894164463,\n", " 6.6257053006111022,\n", " 6.5979277591120677,\n", " 6.5177020655583062,\n", " 6.4639621922853854,\n", " 6.5929430396185502,\n", " 6.563617827386925,\n", " 6.5303849680219948,\n", " 6.4995593769216953,\n", " 6.4649624362380536,\n", " 6.5278670522895528,\n", " 6.3057793819307069,\n", " 6.3585309273105324,\n", " 6.3898301080010222,\n", " 6.4109942891001142,\n", " 6.4160272080079075,\n", " 6.3290462648771761,\n", " 6.3437505325128685,\n", " 6.4353914645100412,\n", " 6.3846107235843457,\n", " 6.3345204796076109,\n", " 6.1894686224716153,\n", " 6.2157073895180872,\n", " 6.2486000973397662,\n", " 6.2368927411923671,\n", " 6.3432386601776685,\n", " 6.3379977975373869,\n", " 6.2523736617222125,\n", " 6.2063880601390755,\n", " 6.2004624044192527,\n", " 6.2274621198667726,\n", " 6.1435489361737572,\n", " 6.2171136176098889,\n", " 6.2762419621511194,\n", " 6.2082569735496369,\n", " 6.2434735901984277,\n", " 6.2285656669525213,\n", " 6.339001638826165,\n", " 6.2277719563607379,\n", " 6.2288520447248956,\n", " 6.2365459050280343,\n", " 6.0893816610840972,\n", " 6.0374599279207759,\n", " 6.0264675246684556,\n", " 6.1137591008762504,\n", " 6.0592710923379505,\n", " 5.9711306319655613,\n", " 5.7513733266823639,\n", " 5.5097994661055463,\n", " 5.6962746683908954,\n", " 5.6915570017391728,\n", " 5.6848440041287835,\n", " 5.6832244978989124,\n", " 5.750705474799763,\n", " 5.8113211743784543,\n", " 5.8016871915600143,\n", " 5.7972938306995045,\n", " 5.7972083706741921,\n", " 5.6453255228951784,\n", " 5.6749863348097422,\n", " 5.6996741266188975,\n", " 5.5675009534560509,\n", " 5.6021289487784047,\n", " 5.6022023704383761,\n", " 5.7929905942999023,\n", " 5.7600080508509617,\n", " 5.6803857091223806,\n", " 5.7001653286947382,\n", " 5.628053946210775,\n", " 5.7397504025018833,\n", " 5.7488611551852298,\n", " 5.7884776433347263,\n", " 5.7606480893760974,\n", " 5.7232441999062003,\n", " 5.7390025629080252,\n", " 5.6898914943350904,\n", " 5.5913404105092237,\n", " 5.6429359360509661,\n", " 5.6245308816441879,\n", " 5.521229202338322,\n", " 5.6702633627264429,\n", " 5.6416480607131669,\n", " 5.5986566920550347,\n", " 5.6172741720165718,\n", " 5.623086217458237,\n", " 5.6246064977859165,\n", " 5.6653931448466528,\n", " 5.4608227015679969,\n", " 5.3966586488185202,\n", " 5.4289511411185103,\n", " 5.2875078547393901,\n", " 5.2847054810112235,\n", " 5.3373680496133895,\n", " 5.2762810454534268,\n", " 5.2750734296384039,\n", " 5.1959823860369054,\n", " 5.2827342978803458,\n", " 5.4710139571842973,\n", " 5.3300835355799663,\n", " 5.2970530689830815,\n", " 5.2985848476817736,\n", " 5.3305227087546792,\n", " 5.3663885542906495,\n", " 5.3759541957048853,\n", " 5.4322736425101743,\n", " 5.4220898474720185,\n", " 5.3905230414398773,\n", " 5.4458845984162574,\n", " 5.4705876696812235,\n", " 5.3943082767618771,\n", " 5.4052406528858148,\n", " 5.4362040742190922,\n", " 5.4640939263392863,\n", " 5.4051135025701749,\n", " 5.4741070501629476,\n", " 5.3940804759505001,\n", " 5.2765852999039407,\n", " 5.2367939145239086,\n", " 5.3135569615141129,\n", " 5.3711115812887265,\n", " 5.3801967917752913,\n", " 5.3885632691395839,\n", " 5.3309693678326386,\n", " 5.2689932543645357,\n", " 5.3557540160890884,\n", " 5.5215502002634196,\n", " 5.6763469115788743,\n", " 5.6275036264298288,\n", " 5.5790831372201453,\n", " 5.5845116651871987,\n", " 5.5322635927423747,\n", " 5.4275658988016069,\n", " 5.55966343140968,\n", " 5.6129061682784309,\n", " 5.6316581658716416,\n", " 5.6462540778406192,\n", " 5.598136919296274,\n", " 5.6571348286246561,\n", " 5.6359001873908632,\n", " 5.7277202299609788,\n", " 5.6740846350932692,\n", " 5.6799922954066577,\n", " 5.7594643478485308,\n", " 5.7271271693549277,\n", " 5.7967246479761405,\n", " 5.6902957053480048,\n", " 5.7481933912333032,\n", " 5.776096557452461,\n", " 5.7617121849113948,\n", " 5.8393455241629351,\n", " 5.80851365580238,\n", " 5.7061651224700221,\n", " 5.7463001838894643,\n", " 5.8459095214973518,\n", " 5.8129708972445027,\n", " 5.7289537224283746,\n", " 5.7635394830243891,\n", " 5.7798753607785249,\n", " 5.760361358559452,\n", " 5.7352354078773384,\n", " 5.8116352347282767,\n", " 5.8429041999416764,\n", " 5.8151036523615378,\n", " 5.78702086082113,\n", " 5.8210950505819294,\n", " 5.8882420455009639,\n", " 5.8628804827773484,\n", " 6.0480230583435945,\n", " 6.0152743474266623,\n", " 6.0384255844887509,\n", " 6.0212276415691575,\n", " 5.9373441582168853,\n", " 5.9386898388109204,\n", " 5.7265774770612952,\n", " 5.8058124065141357,\n", " 5.8309416828753804,\n", " 5.806825128711198,\n", " 5.8609904639039865,\n", " 5.8103033501851673,\n", " 5.899075710547133,\n", " 5.8957817233608933,\n", " 5.8774063086352131,\n", " 5.8863750678935238,\n", " 5.9047815232695564,\n", " 5.8772748371652774,\n", " 5.9080492770719681,\n", " 5.9553407787211086,\n", " 5.9539213164617859,\n", " 5.9474931006010614,\n", " 5.8824304350302858,\n", " 5.9246357303227732,\n", " 5.9966512718277771,\n", " 6.1830447741650625,\n", " 6.1328495597379868,\n", " 6.1648144070294419,\n", " 6.0655478905435771,\n", " 6.1017832651817727,\n", " 6.1675802992967839,\n", " 6.31166827776266,\n", " 6.3916595515334285,\n", " 6.2929588458907384,\n", " 6.2468526458728455,\n", " 6.2573973153866271,\n", " 6.1080822368652887,\n", " 6.1801817058435908,\n", " 6.1874435542180333,\n", " 6.1350554316167294,\n", " 6.0669973296916986,\n", " 6.0475437364201925,\n", " 6.1625560989227237,\n", " 6.2144637250854933,\n", " 6.1360530433596248,\n", " 6.1616971499738726,\n", " 6.162973598717806,\n", " 6.0741678423814678,\n", " 6.0596716303603868,\n", " 6.0415228476100937,\n", " 6.0584859422238981,\n", " 6.0317058123404124,\n", " 5.9932926460257168,\n", " 6.0560413661011907,\n", " 6.0989702709130871,\n", " 6.2309670013660554,\n", " 6.2005731621493752,\n", " 6.165409758191255,\n", " 6.1311294067934936,\n", " 6.0906456841662697,\n", " 6.1555500785503412,\n", " 6.2323054704055867,\n", " 6.4881160956818604,\n", " 6.6342351373521016,\n", " 6.4570445412912933,\n", " 6.374866042053406,\n", " 6.4308433625467396,\n", " 6.3734370573236641,\n", " 6.403447253121584,\n", " 6.436265969918189,\n", " 6.3590009819059148,\n", " 6.3961207763580941,\n", " 6.1724201549414683,\n", " 6.2769197073061669,\n", " 6.2851321353926437,\n", " 6.3128169127219014,\n", " 6.3081045394587481,\n", " 6.1950091414851673,\n", " 6.1408556719668068,\n", " 6.0633621949316598,\n", " 6.0881970236622189,\n", " 6.1073369206643013,\n", " 5.9588693113440678,\n", " 6.1175907639469376,\n", " 6.1372956140145734,\n", " 6.2946030931079147,\n", " 6.3439360660854538,\n", " 6.2612379585117202,\n", " 6.2581080316719033,\n", " 6.2563896000018691,\n", " 6.2072595691211578,\n", " 6.3080575540291051,\n", " 6.3459910132352366,\n", " 6.3501889363780117,\n", " 6.3105526963978145,\n", " 6.2589070066815893,\n", " 6.2311725027310167,\n", " 6.2194414241635601,\n", " 6.2260806644232733,\n", " 6.064356694106241,\n", " 6.0569670539878011,\n", " 6.0360820200847431,\n", " 6.0306526347561622,\n", " 6.10963306558555,\n", " 6.1197242278900479,\n", " 6.0840258823582527,\n", " 6.0907413639358587,\n", " 6.1439408348711586,\n", " 6.1601605760088054,\n", " 6.0746815738915974,\n", " 5.8478758489596752,\n", " 5.9261799695037238,\n", " 5.9563496161725427,\n", " 5.9888011699820742,\n", " 5.9312195708763165,\n", " 5.9706724129626032,\n", " 5.9933024864740227,\n", " 5.9867673200914338,\n", " 5.8462362349739472,\n", " 5.9601537526648034,\n", " 5.9947582922473552,\n", " 6.003057420843751,\n", " 5.9846443000312544,\n", " 5.9730104266088659,\n", " 5.9523187593356379,\n", " 5.9463690122944595,\n", " 5.9744223995801935,\n", " 5.939786744728857,\n", " 5.9826215361874091,\n", " 5.939582759766612,\n", " 5.9888134963242665,\n", " 6.0360791469381807,\n", " 6.0211579926374652,\n", " 6.0288817551633125,\n", " 6.2414042550326423,\n", " 6.187163845104128,\n", " 6.0519093619819317,\n", " 6.0220627521113963,\n", " 6.1415191929752213,\n", " 6.2190798550543382,\n", " 6.1596585446123315,\n", " 6.3441677016418678,\n", " 6.3298115176501053,\n", " 6.4282979048325384,\n", " 6.424476408727922,\n", " 6.3926797855142894,\n", " 6.3964736095324044,\n", " 6.4309222704303508,\n", " 6.4470428619492104,\n", " 6.597800571524612,\n", " 6.5303882717602022,\n", " 6.5082277797125911,\n", " 6.4270857231766456,\n", " 6.4280481825694959,\n", " 6.4917677985204172,\n", " 6.5034166775764621,\n", " 6.5314044539772151,\n", " 6.4837296606382804,\n", " 6.454390809817399,\n", " 6.4916832355943601,\n", " 6.3007656633067493,\n", " 6.3505162371615906,\n", " 6.3777252483749614,\n", " 6.4000177307712267,\n", " 6.3744653862664533,\n", " 6.3526573477015882,\n", " 6.2204218426367976,\n", " 6.1601168553797816,\n", " 6.1357619573139441,\n", " 6.2557727237074658,\n", " 6.167742089596838,\n", " 6.2587492973828391,\n", " 6.1016104108795437,\n", " 6.1198442383635463,\n", " 6.1495833296504987,\n", " 6.2104622960501796,\n", " 6.3339111604633027,\n", " 6.2809282570745042,\n", " 6.2876242414388512,\n", " 6.2570788764030008,\n", " 6.2033487804901064,\n", " 6.2705460448924306,\n", " 6.2850656101178455,\n", " 6.2239789058183588,\n", " 6.3938717421479074,\n", " 6.5437888896406857,\n", " 6.4274379632568737,\n", " 6.4566503260158292,\n", " 6.5911292572436331,\n", " 6.5176506312491016,\n", " 6.4449942789804293,\n", " 6.5680941377072877,\n", " 6.4967225254631238,\n", " 6.5211041469949542,\n", " 6.5064621824467359,\n", " 6.480709131233116,\n", " 6.4566845587051755,\n", " 6.442262406589645,\n", " 6.4255759662780054,\n", " 6.2656812077390098,\n", " 6.3326998793779747,\n", " 6.3605331189005687,\n", " 6.4384627842288777,\n", " 6.4182529242340722,\n", " 6.3521926479634994,\n", " 6.3548838182060834,\n", " 6.2062493660098026,\n", " 6.1227534193402322,\n", " 6.1735780907244342,\n", " 6.257880580049517,\n", " 6.1715395829319775,\n", " 6.0964155135202915,\n", " 6.0253029706579264,\n", " 6.2279525671036495,\n", " 6.2832281365796092,\n", " 6.2449293342950511,\n", " 6.2961635274504477,\n", " 6.1546491347218293,\n", " 6.1829646029905909,\n", " 5.8795387296098784,\n", " 5.865635708643282,\n", " 5.9808970294014356,\n", " 6.1233726326465199,\n", " 6.1475733627792479,\n", " 6.1234137034614715,\n", " 6.1820172411545045,\n", " 6.110953603406112,\n", " 6.2301473140168921,\n", " 6.2909630759115895,\n", " 6.2296161049651513,\n", " 6.2549459330259936,\n", " 6.2373482726972096,\n", " 6.2483758660354063,\n", " 6.2136703788104803,\n", " 6.2104630252886199,\n", " 6.2273990415426388,\n", " 6.1087535952540319,\n", " 6.1529684320528553,\n", " 6.2322211056114236,\n", " 6.3655802441960807,\n", " 6.3948997516109243,\n", " 6.4151474712194867,\n", " 6.3925188418026853,\n", " 6.3981933492676948,\n", " 6.4473398997059395,\n", " 6.4744905381026641,\n", " 6.5274246800210474,\n", " 6.6117935320756445,\n", " 6.7194849132268351,\n", " 6.9065916735152806,\n", " 6.8569523133756771,\n", " 7.093649832044397,\n", " 7.1146614486597333,\n", " 6.959046564567581,\n", " 6.8971847300462166,\n", " 6.8718920640936894,\n", " 6.8892431482389771,\n", " 6.9093609232819713,\n", " 6.9342292846106615,\n", " 6.9050223003563289,\n", " 6.9568955928567116,\n", " 7.0621991213880539,\n", " 7.0144742262601563,\n", " 7.0902069086374846,\n", " 7.0928409263184173,\n", " 7.1213566373017265,\n", " 7.1094460551202339,\n", " 7.1264856050282752,\n", " 7.1652686399345962,\n", " 7.1338122136285271,\n", " 7.0767649887730579,\n", " 7.1709408285468967,\n", " 7.0153013499499597,\n", " 6.9989558882842946,\n", " 7.0219877913103499,\n", " 7.0231120950138726,\n", " 6.9636665248807326,\n", " 6.9282749508431589,\n", " 6.7439350370019371,\n", " 6.7192000359220172,\n", " 6.6714688249428402,\n", " 6.8086869327901827,\n", " 7.0141874165476148,\n", " 7.2015380502578346,\n", " 7.2104397327448781,\n", " 7.4097307244234658,\n", " 7.4994811937661714,\n", " 7.5383955652596217,\n", " 7.5257598243247159,\n", " 7.4643927526662219,\n", " 7.419925051358887,\n", " 7.4250818221390835,\n", " 7.3873811927391833,\n", " 7.2617188504588261,\n", " 7.3738386857080407,\n", " 7.4131889877389785,\n", " 7.6126550414636469,\n", " 7.5654094819681772,\n", " 7.5157908776454461,\n", " 7.4497562244839779,\n", " 7.493839352409922,\n", " 7.3213402218210568,\n", " 7.3789381935771532,\n", " 7.4106714634786703,\n", " 7.3807416312214471,\n", " 7.3334474425140224,\n", " 7.3750624522642534,\n", " 7.1372007727528706,\n", " 7.1606881584684707,\n", " 7.1803672350699816,\n", " 7.3255470613039817,\n", " 6.9943591433109242,\n", " 6.9732675095448213,\n", " 6.8783565835878377,\n", " 6.98031341771956,\n", " 7.0696330413615396,\n", " 7.1607723114095014,\n", " 7.0449926166276597,\n", " 7.0414901962793346,\n", " 6.9804239710971157,\n", " 6.9562096900860082,\n", " 7.0210273090914965,\n", " 7.09478413240039,\n", " 7.012461803934074,\n", " 7.0590005713322466,\n", " 7.0127664831919914,\n", " 6.9826575725121636,\n", " 6.7550987187868294,\n", " 6.8455421117176369,\n", " 6.8003112684943243,\n", " 6.8145724087410535,\n", " 6.7527017284933013,\n", " 6.7705005164856784,\n", " 6.7455740696794591,\n", " 6.7090450939173296,\n", " 6.8174593561024039,\n", " 6.7561050422959914,\n", " 6.7685896090459821,\n", " 6.7212441360700428,\n", " 6.708807593216064,\n", " 6.7271014922594778,\n", " 6.6292978617777898,\n", " 6.6781841107789504,\n", " 6.6371342050968041,\n", " 6.5761833234625202,\n", " 6.4605090722697485,\n", " 6.4744029638508964,\n", " 6.5284606295299801,\n", " 6.6373386089196691,\n", " 6.7138169997656982,\n", " 6.9934142385080982,\n", " 7.0033428700723244,\n", " 6.9731492025766002,\n", " 6.903985690267298,\n", " 6.7763511117355106,\n", " 6.9286200126673725,\n", " 7.1000447927499133,\n", " 7.09345535511933,\n", " 7.2090938424918161,\n", " 7.3875787563479705,\n", " 7.2690978663524817,\n", " 7.0616455045616044,\n", " 7.2840816049333386,\n", " 7.1494006615636714,\n", " 7.0909212815348575,\n", " 6.9756315987328001,\n", " 7.1271611782983575,\n", " 7.3403473742641054,\n", " 7.2331691094700741,\n", " 7.2989727139133107,\n", " 7.2774514255596436,\n", " 7.1840288370307857,\n", " 7.0735299963138605,\n", " 7.0574518530785344,\n", " 7.0548456751269599,\n", " 7.0500731962669914,\n", " 7.1972686558377195,\n", " 7.3031413984761011,\n", " 7.3132245486697238,\n", " 7.2868563605187724,\n", " 7.1813517379585132,\n", " 7.2056567321774807,\n", " 7.2221203604976587,\n", " 7.303063402287032,\n", " 7.249336357764383,\n", " 7.3215974293986239,\n", " 7.3465744795495835,\n", " 7.2623125996367914,\n", " 7.1832045239247577,\n", " 7.2110622174023407,\n", " 7.2747432344764427,\n", " 7.2988475355933025,\n", " 7.2356259413900874,\n", " 7.3840689407557019,\n", " 7.4877323004681422,\n", " 7.4430426064260899,\n", " 7.547895511610589,\n", " 7.853534332512754,\n", " 7.8830789750244366,\n", " 7.9047336433194486,\n", " 7.8181639151809526,\n", " 7.7530848964388044,\n", " 7.7092626693515918,\n", " 7.7095797684844971,\n", " 7.7309297661935092,\n", " 8.0600143476631736,\n", " 8.0258230337079368,\n", " 7.9327871394336968,\n", " 7.9057457729556697,\n", " 7.9818310553921803,\n", " 8.0143330004230258,\n", " 8.1754728516629527,\n", " 8.7407287580604791,\n", " 8.7995995090737971,\n", " 8.867927942283929,\n", " 8.6887842580518946,\n", " 8.6983989242566118,\n", " 8.6945500631580295,\n", " 8.8441087150870885,\n", " 8.7258164661630744,\n", " 8.8024823054114449,\n", " 8.7787939745095258,\n", " 9.1172342120167613,\n", " 9.2680542237316139,\n", " 9.1650955209006391,\n", " 9.1386373110298855,\n", " 9.1268413609690526,\n", " 9.1291268207320435,\n", " 8.6960030096486172,\n", " 8.4810024645889115,\n", " 8.706283715671649,\n", " 8.5742443320341302,\n", " 8.6031961396124572,\n", " 8.7541019859943603,\n", " 8.8981049343881047,\n", " 9.1199557942662679,\n", " 9.0634315212467769,\n", " 9.0170817804556229,\n", " 8.936251707707612,\n", " 8.8447979331690725,\n", " 8.8924510671958963,\n", " 8.7791685153324366,\n", " 8.8370720416319664,\n", " 8.9438054404963623,\n", " 9.0455691462537509,\n", " 8.9756613136340881,\n", " 8.9782988128879637,\n", " 8.7991923503918912,\n", " 8.8319758268649018,\n", " 8.5466183148245918,\n", " 8.4355524888700018,\n", " 8.3217873270650173,\n", " 8.2988388549950294,\n", " 8.3065803960319577,\n", " 8.4021592910978384,\n", " 8.5870749537099229,\n", " 8.6557881491832518,\n", " 9.0317099927321145,\n", " 9.3410479073250805,\n", " 9.257132790073296,\n", " 9.1141185430142784,\n", " 9.0238654242010554,\n", " 8.9053677378521812,\n", " 8.7573052001405713,\n", " 8.5919558075387883,\n", " 8.5357095650479451,\n", " 8.5705348340574652,\n", " 8.5261801217514801,\n", " 8.455678023573725,\n", " 8.5249425070290421,\n", " 8.5236222570150524,\n", " 8.503959955965918,\n", " 8.4779948267985503,\n", " 8.5056881023953892,\n", " 8.5034824896200227,\n", " 8.4185489627222019,\n", " 8.3965397334449214,\n", " 8.4227469652387406,\n", " 8.6334553104145435,\n", " 8.5475481715345403,\n", " 8.6156735357205285,\n", " 8.4874570101510827,\n", " 8.5989568750146859,\n", " 8.4999619685108208,\n", " 8.4278022041539309,\n", " 8.2926979585328304,\n", " 8.2191610967032283,\n", " 8.2553098502367348,\n", " 8.3580209656298372,\n", " 8.3849307979197505,\n", " 8.5128770984646316,\n", " 8.6936671450390151,\n", " 8.7351396771845877,\n", " 8.9359409027146697,\n", " 8.7476072646596776,\n", " 8.760362013563892,\n", " 8.7813559838988837,\n", " 8.7019480478778419,\n", " 8.5962504827029846,\n", " 8.3097775815425656,\n", " 8.314351872071196,\n", " 8.3332544217005697,\n", " 8.177403143787636,\n", " 8.0370736920569641,\n", " 7.9955316026275227,\n", " 8.1135286130677589,\n", " 8.0999295185881248,\n", " 8.1323977424668836,\n", " 8.353558473235843,\n", " 8.3627913457939798,\n", " 8.2982673496554327,\n", " 8.239889751083922,\n", " 8.2794388368821039,\n", " 8.3151318186046659,\n", " 8.2878949770880226,\n", " 8.3145224376038662,\n", " 8.3217347747334678,\n", " 8.361261606969169,\n", " 8.2482657385797076,\n", " 8.1191631477612169,\n", " 8.0100525958385624,\n", " 7.9554902189860819,\n", " 7.9742993581720665,\n", " 7.8767152934545601,\n", " 7.9164994418923085,\n", " 7.9365820129852329,\n", " 7.9045451847957189,\n", " 7.8760165254064036,\n", " 7.7042965921734918,\n", " 7.6322132401307998,\n", " 7.4676383587877524,\n", " 7.5858334540930628,\n", " 7.5291781811296907,\n", " 7.6096179559688855,\n", " 7.630509550688771,\n", " 7.6094201957988741,\n", " 7.6641815079352149,\n", " 7.6848412585378814,\n", " 7.8911170276009788,\n", " 7.8190718466675859,\n", " 7.8330305627793999,\n", " 7.9387218052772308,\n", " 8.1745324941517552,\n", " 8.384695869685924,\n", " 8.3652442732570798,\n", " 8.398681958037912,\n", " 8.2744982214506173,\n", " 8.1104570473939859,\n", " 8.0677158919087297,\n", " 7.9424607383238817,\n", " 8.0678176000176194,\n", " 8.0501612723240346,\n", " 8.1853794404798172,\n", " 8.2151225058013857,\n", " 8.246360084538626,\n", " 8.1941068591003763,\n", " 8.4321177951631796,\n", " 8.4877223086359805,\n", " 8.4042422357193338,\n", " 8.3366053381759251,\n", " 8.4219905782303037,\n", " 8.397206008853054,\n", " 8.3405830860297705,\n", " 8.3534836349673398,\n", " 8.3344084410325863,\n", " 8.3679514733665776,\n", " 8.2150060140943069,\n", " 8.2782100074905181,\n", " 8.0397544097686939,\n", " 7.8083451503724639,\n", " 7.7759904510853541,\n", " 7.7659556863017114,\n", " 7.8816910861271836,\n", " 7.8284873779591297,\n", " 7.7491053833361532,\n", " 7.7384166631877536,\n", " 7.7749151618182237,\n", " 7.6598817571314335,\n", " 7.7044720656557004,\n", " 7.802719627179008,\n", " 7.826875388505754,\n", " 7.8818001021853403,\n", " 7.8003511199652689,\n", " 7.857051034205834,\n", " 7.7864747767375251,\n", " 7.7862678309626165,\n", " 8.133128993505311,\n", " 8.2698183444256976,\n", " 8.4167558575348203,\n", " 8.383077049640633,\n", " 8.3904754222121767,\n", " 8.1992277975189083,\n", " 7.9908745958752458,\n", " 7.7943533392336741,\n", " 7.8640805782897685,\n", " 7.7894779972708088,\n", " 7.709607920105328,\n", " 7.8026737473801102,\n", " 7.777483277159015,\n", " 7.8719721434556789,\n", " 7.9582558942923693,\n", " 8.1224926189577289,\n", " 8.0170409399506521,\n", " 8.0704090637939032,\n", " 8.079237085478379,\n", " 7.8730172640258562,\n", " 7.958210582937153,\n", " 7.8145807161893641,\n", " 7.7035187304274677,\n", " 7.5795677889528887,\n", " 7.5396208640973876,\n", " 7.653805772717047,\n", " 7.3691106847887298,\n", " 7.5347701137935541,\n", " 7.6050346596434109,\n", " 7.4913792400688708,\n", " 7.5104684964167978,\n", " ...]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Put all 7-days-ahead predictions into an array\n", "predictions_800_7thday = []\n", "for array in predictions_800_off:\n", " for week_prediction in array:\n", " predictions_800_7thday.append(week_prediction[6]) \n", "print(len(predictions_800_7thday))\n", "predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Prepare dataframe for visualisation\n", "# There are 7000 predictions\n", "bp_final_predictions = bp_ftse[800+6:806+7000]\n", "bp_final_predictions.loc[:,'7d Ahead Pred'] = predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKcj/A8gycsG+fw1+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual adjusted close prices\n", "bp_final_predictions.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual prices\n", "# Only first 200 predictions\n", "bp_preds_200 = bp_final_predictions[:200]\n", "bp_preds_200.plot(y=['Adj. Close','7d Ahead Pred'], x='Date', y='Price (£)').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/3-methodology-results-conclusion-code-py2-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model but are nice for visualisations\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Oil Stocks\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", "print \"Oil stocks in DF: \", oil_stocks_in_df" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract GAIA data\n", "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and GAIA data start intersecting \n", "# i.e. date = 1999-10-29\n", "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read in FTSE100 data\n", "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "\n", "# Preview data\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort FTSE100 data by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and FTSE data start intersecting \n", "# i.e. date = 1984-04-02\n", "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Adds FTSE data to BP dataframe, joining at dates\n", "\n", "# FTSE columns we want to copy to BP dataframe\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close'] \n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the FTSE row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "bp_counter = 0\n", "ftse_counter = 0\n", "while ftse_counter < len(sorted_ftse100):\n", " bp_date = bp.loc[bp_ftse_start + bp_counter, 'Date']\n", " ftse_date = sorted_ftse100.loc[ftse_start - ftse_counter, 'Date']\n", " if bp_date == ftse_date:\n", " # Add FTSE data to BP row\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start + bp_counter, 'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start - ftse_counter,'%s' % str(col)]\n", " # FTSE counter + 1, BP counter + 1\n", " bp_counter += 1\n", " ftse_counter += 1\n", " elif bp_date < ftse_date:\n", " # Move to next BP row, same FTSE row and repeat\n", " bp_counter += 1\n", " elif bp_date > ftse_date:\n", " # Move to next FTSE row, same BP row and repeat\n", " ftse_counter += 1\n", " else:\n", " print \"Error: BP date is \", bp_date, \"; FTSE date is \", ftse_date\n", " # FTSE row + 1, BP row + 1\n", " bp_counter += 1\n", " ftse_counter += 1" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1984-04-27\n", "1984-05-02\n", "1984-05-07\n", "1984-05-29\n", "1984-08-27\n", "1984-12-26\n", "1985-04-08\n", "1985-05-06\n", "1985-08-26\n", "1985-12-26\n", "1986-03-31\n", "1986-05-05\n", "1986-08-25\n", "1986-12-26\n", "1987-04-20\n", "1987-05-04\n", "1987-08-31\n", "1987-12-28\n", "1988-04-04\n", "1988-05-02\n", "1988-08-29\n", "1988-12-27\n", "1989-03-27\n", "1989-05-01\n", "1989-08-28\n", "1989-12-26\n", "1990-04-16\n", "1990-05-07\n", "1990-08-27\n", "1990-12-26\n", "1991-04-01\n", "1991-05-06\n", "1991-08-26\n", "1991-12-26\n", "1992-04-20\n", "1992-05-04\n", "1992-08-31\n", "1992-12-28\n", "1993-04-12\n", "1993-05-03\n", "1993-08-30\n", "1993-12-27\n", "1993-12-28\n", "1994-01-03\n", "1994-04-04\n", "1994-05-02\n", "1994-08-29\n", "1994-12-27\n", "1995-04-17\n", "1995-05-08\n", "1995-08-28\n", "1995-12-26\n", "1996-04-08\n", "1996-05-06\n", "1996-08-26\n", "1996-12-26\n", "1997-03-31\n", "1997-05-05\n", "1997-08-25\n", "1997-12-26\n", "1998-04-13\n", "1998-05-04\n", "1998-08-31\n", "1998-12-28\n", "1998-12-31\n", "1999-04-05\n", "1999-05-03\n", "1999-08-30\n", "1999-12-27\n", "1999-12-28\n", "1999-12-31\n", "2000-01-03\n", "2000-04-24\n", "2000-05-01\n", "2000-08-28\n", "2000-12-26\n", "2001-04-16\n", "2001-05-07\n", "2001-08-27\n", "2001-12-26\n", "2002-04-01\n", "2002-05-06\n", "2002-06-03\n", "2002-06-04\n", "2002-08-26\n", "2002-12-26\n", "2003-04-21\n", "2003-05-05\n", "2003-08-25\n", "2003-12-26\n", "2004-04-12\n", "2004-05-03\n", "2004-08-30\n", "2004-12-27\n", "2004-12-28\n", "2005-01-03\n", "2005-03-28\n", "2005-05-02\n", "2005-08-29\n", "2005-12-27\n", "2006-04-17\n", "2006-05-01\n", "2006-08-28\n", "2006-12-26\n", "2007-04-09\n", "2007-05-07\n", "2007-08-27\n", "2007-12-26\n", "2008-03-24\n", "2008-05-05\n", "2008-08-25\n", "2008-12-26\n", "2009-03-27\n", "2009-04-13\n", "2009-05-04\n", "2009-06-25\n", "2009-08-11\n", "2009-08-31\n", "2009-09-02\n", "2009-12-28\n", "2010-04-05\n", "2010-04-19\n", "2010-04-20\n", "2010-05-03\n", "2010-05-12\n", "2010-08-30\n", "2010-12-27\n", "2010-12-28\n", "2011-01-03\n", "2011-04-25\n", "2011-04-29\n", "2011-05-02\n", "2011-08-29\n", "2011-12-27\n", "2012-04-09\n", "2012-05-07\n", "2012-06-04\n", "2012-06-05\n", "2012-08-27\n", "2012-12-26\n", "2013-04-01\n", "2013-05-06\n", "2013-08-26\n", "2013-09-23\n", "2013-12-26\n", "2014-04-21\n", "2014-05-05\n", "2014-08-25\n", "2014-12-26\n", "2015-01-02\n", "2015-04-06\n", "2015-05-04\n", "2015-08-31\n", "2015-12-17\n", "2015-12-28\n", "2016-03-28\n", "2016-05-02\n", "2016-08-29\n", "NaNs: 158\n" ] } ], "source": [ "# Count and display NaNs in FTSE data \n", "# i.e. dates where we have BP but not FTSE data\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print bp.loc[bp_ftse_start+row, 'Date']\n", " nan_counter += 1\n", "print \"NaNs: \", nan_counter" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Proxy remaining FTSE NaNs by taking the mean of the prices in the \n", "# two closest trading days where data is available \n", "# (one before, one after the day)\n", "ftse_data_to_average = ['Open', 'High', 'Low', 'Close'] \n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " if not (pd.isnull(bp.loc[bp_ftse_start+row-1, 'FTSE Date']) or pd.isnull(bp.loc[bp_ftse_start+row+1, 'FTSE Date'])):\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']\n", " else:\n", " go_back = 0\n", " go_forward = 0\n", " while pd.isnull(bp.loc[bp_ftse_start+row-1-go_back, 'FTSE Date']):\n", " go_back += 1\n", " while pd.isnull(bp.loc[bp_ftse_start+row+1+go_forward, 'FTSE Date']):\n", " go_forward += 1\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1-go_back,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1+go_forward,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs: 0\n" ] } ], "source": [ "# Check there are no more NaNs\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print bp.loc[bp_ftse_start+row, 'Date']\n", " nan_counter += 1\n", "print \"NaNs: \", nan_counter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", " print \"X.tail: \", X.tail()\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "X_train = []\n", "X_test = []\n", "y_train = []\n", "y_test = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ImportError", "evalue": "No module named multioutput", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;31m# Import MultiOutputRegressor to handle predicting multiple outputs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultioutput\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mMultiOutputRegressor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# Import metrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmean_absolute_error\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mImportError\u001b[0m: No module named multioutput" ] } ], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2)) * 100\n", "\n", "def print_metrics(test, pred):\n", " print \"Root Mean Squared Percentage Error\", rmsp(test, pred)\n", " print \"Mean Absolute Error: \", mean_absolute_error(test, pred)\n", " print \"Explained Variance Score: \", explained_variance_score(test, pred)\n", " print \"Mean Squared Error: \", mean_squared_error(test, pred)\n", " print \"R2 score: \", r2_score(test, pred))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "days = 7" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " # Lines below for debugging purposes\n", "# print \"X_train.head(): \", X_train.head()\n", "# print \"X_train.tail(): \", X_train.tail()\n", "# print \"Pred: \", pred[:5]\n", "# print \"Test: \", y_test[:5]\n", " \n", " # Print metrics\n", " print \"# Days used to predict: %s\" % str(days)\n", " print \"\\n%s-day predictions\" % str(target_days) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "def execute(steps=8, buffer_step=1000, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=days, periods=periods, buffer=buffer)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# svm.SVR() trial\n", "execute(model=svm.SVR(), steps=8)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "# Linear Regression trial\n", "execute(steps=8)\n", "\n", "# R2 scores: [0.859, 0.791, 0.606, 0.936, 0.835, 0.871, 0.623, 0.936]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n", "\n", "No change in performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Feature Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1 Adding more of the same type of features" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Considering more than 7 days' worth of prior data\n", "# 10 days' worth of prior data\n", "execute(steps=10, days=10, buffer_step = 700)\n", "\n", "# Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 14 days' worth of prior data\n", "execute(steps=15, days=14, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 21 days' worth of prior data\n", "execute(steps=15, days=21, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 30 days' worth of prior data\n", "\n", "execute(steps=15, days=30, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 100 days' worth of prior data\n", "\n", "execute(steps=15, days=100, buffer_step = 500)\n", "\n", "# Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2 Adding Oil Stock Prices (GAIA)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create dataframe with BP and GAIA data in overlapping date range\n", "# Date range: 1999-10-29 to 2014-09-30\n", "# `bp_gaia_start` etc defined in Feature Engineering section 1.2.2.2\n", "bp_gaia = bp.loc[bp_gaia_start:bp_gaia_start+bp_gaia_intersect_length-1]\n", "\n", "# Check it ends at the right date\n", "bp_gaia.tail()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "len(bp_gaia)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add GAIA data.\n", "\n", "# Potential improvement: Generalise `prepare_train_test` function instead\n", "# of copy and pasting it and making a new function.\n", "def prepare_train_test_with_gaia(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_gaia): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days`: the number of days prior we consider (the prices of)\n", " `periods`: the total number of datapoints used (training + test)\n", " \"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # GAIA cols\n", " for j in range(1,days+1):\n", " columns.append('GAIA i-%s' % str(j))\n", " columns.append('GAIA Adj. High')\n", " columns.append('GAIA Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['GAIA i-%s' % str(days-j)] = df.iloc[buffer+i+j]['GAIA %s' % str(target)]\n", " features.iloc[i]['GAIA Adj. High'] = max(df[buffer+i:buffer+i+days]['GAIA Adj. High'])\n", " features.iloc[i]['GAIA Adj. Low'] = min(df[buffer+i:buffer+i+days]['GAIA Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_gaia(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + GAIA data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_gaia(days=days, periods=periods, buffer=buffer, df=bp_gaia)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 7 days' worth of BP and GAIA data\n", "execute_with_gaia(steps=13)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 10 days' worth of BP and GAIA data\n", "execute_with_gaia(days=10, steps=13)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.3 TODO: Adding FTSE100" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Create df with BP and FTSE data\n", "bp_ftse = bp.loc[bp_ftse_start:]\n", "bp_ftse.head()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add FTSE data.\n", "def prepare_train_test_with_ftse(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_ftse, name='FTSE'): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # FTSE cols\n", " for j in range(1,days+1):\n", " columns.append('%s i-%s' % (name, str(j)))\n", " columns.append('%s High' % name)\n", " columns.append('%s Low' % name)\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['%s i-%s' % (name, str(days-j))] = df.iloc[buffer+i+j]['%s %s' % (name, 'Close')]\n", " features.iloc[i]['%s High' % name] = max(df[buffer+i:buffer+i+days]['%s High' % name])\n", " features.iloc[i]['%s Low' % name] = min(df[buffer+i:buffer+i+days]['%s Low' % name])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_ftse(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "# Consider 7 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=7, steps=15, buffer_step=450)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Consider 10 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=10, steps=15, buffer_step=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# We want an array with predictions for our model in a long date range.\n", "# We will consider the max error predictions, that is,\n", "# predictions of adjusted close prices 7 days ahead.\n", "\n", "# Initialise variable\n", "predictions_800_off = []" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Append predictions to `predictions_800_off`.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " print \"Pred: \", pred\n", " predictions_800_off.append(pred)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Pared-down execute function that runs train-test cycles and \n", "# appends the predictions to `predictions_800_off` via the function `predict()`.\n", "def execute_viz(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " predict(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract predictions. \n", "# `execute_viz` function appends predictions to `predictions_800_off`.\n", "execute_viz(steps=35)\n", "predictions_800_off" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Put all 7-days-ahead predictions into an array\n", "predictions_800_7thday = []\n", "for array in predictions_800_off:\n", " for week_prediction in array:\n", " predictions_800_7thday.append(week_prediction[6]) \n", "print len(predictions_800_7thday)\n", "predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Prepare dataframe for visualisation\n", "# There are 7000 predictions\n", "bp_final_predictions = bp_ftse[800+6:806+7000]\n", "bp_final_predictions.loc[:,'7d Ahead Pred'] = predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Plotting predictions compared with actual adjusted close prices\n", "bp_final_predictions.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Plotting predictions compared with actual prices\n", "# Only first 200 predictions\n", "bp_preds_200 = bp_final_predictions[:200]\n", "bp_preds_200.plot(y=['Adj. Close','7d Ahead Pred'], x='Date', y='Price (£)').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/3-methodology-results-conclusion-code-py3-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model but are nice for visualisations\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Oil Stocks\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", "print(\"Oil stocks in DF: \", oil_stocks_in_df)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract GAIA data\n", "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and GAIA data start intersecting \n", "# i.e. date = 1999-10-29\n", "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read in FTSE100 data\n", "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "\n", "# Preview data\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort FTSE100 data by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and FTSE data start intersecting \n", "# i.e. date = 1984-04-02\n", "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Adds FTSE data to BP dataframe, joining at dates\n", "\n", "# FTSE columns we want to copy to BP dataframe\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close'] \n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the FTSE row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "bp_counter = 0\n", "ftse_counter = 0\n", "while ftse_counter < len(sorted_ftse100):\n", " bp_date = bp.loc[bp_ftse_start + bp_counter, 'Date']\n", " ftse_date = sorted_ftse100.loc[ftse_start - ftse_counter, 'Date']\n", " if bp_date == ftse_date:\n", " # Add FTSE data to BP row\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start + bp_counter, 'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start - ftse_counter,'%s' % str(col)]\n", " # FTSE counter + 1, BP counter + 1\n", " bp_counter += 1\n", " ftse_counter += 1\n", " elif bp_date < ftse_date:\n", " # Move to next BP row, same FTSE row and repeat\n", " bp_counter += 1\n", " elif bp_date > ftse_date:\n", " # Move to next FTSE row, same BP row and repeat\n", " ftse_counter += 1\n", " else:\n", " print(\"Error: BP date is \", bp_date, \"; FTSE date is \", ftse_date)\n", " # FTSE row + 1, BP row + 1\n", " bp_counter += 1\n", " ftse_counter += 1" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1984-04-27\n", "1984-05-02\n", "1984-05-07\n", "1984-05-29\n", "1984-08-27\n", "1984-12-26\n", "1985-04-08\n", "1985-05-06\n", "1985-08-26\n", "1985-12-26\n", "1986-03-31\n", "1986-05-05\n", "1986-08-25\n", "1986-12-26\n", "1987-04-20\n", "1987-05-04\n", "1987-08-31\n", "1987-12-28\n", "1988-04-04\n", "1988-05-02\n", "1988-08-29\n", "1988-12-27\n", "1989-03-27\n", "1989-05-01\n", "1989-08-28\n", "1989-12-26\n", "1990-04-16\n", "1990-05-07\n", "1990-08-27\n", "1990-12-26\n", "1991-04-01\n", "1991-05-06\n", "1991-08-26\n", "1991-12-26\n", "1992-04-20\n", "1992-05-04\n", "1992-08-31\n", "1992-12-28\n", "1993-04-12\n", "1993-05-03\n", "1993-08-30\n", "1993-12-27\n", "1993-12-28\n", "1994-01-03\n", "1994-04-04\n", "1994-05-02\n", "1994-08-29\n", "1994-12-27\n", "1995-04-17\n", "1995-05-08\n", "1995-08-28\n", "1995-12-26\n", "1996-04-08\n", "1996-05-06\n", "1996-08-26\n", "1996-12-26\n", "1997-03-31\n", "1997-05-05\n", "1997-08-25\n", "1997-12-26\n", "1998-04-13\n", "1998-05-04\n", "1998-08-31\n", "1998-12-28\n", "1998-12-31\n", "1999-04-05\n", "1999-05-03\n", "1999-08-30\n", "1999-12-27\n", "1999-12-28\n", "1999-12-31\n", "2000-01-03\n", "2000-04-24\n", "2000-05-01\n", "2000-08-28\n", "2000-12-26\n", "2001-04-16\n", "2001-05-07\n", "2001-08-27\n", "2001-12-26\n", "2002-04-01\n", "2002-05-06\n", "2002-06-03\n", "2002-06-04\n", "2002-08-26\n", "2002-12-26\n", "2003-04-21\n", "2003-05-05\n", "2003-08-25\n", "2003-12-26\n", "2004-04-12\n", "2004-05-03\n", "2004-08-30\n", "2004-12-27\n", "2004-12-28\n", "2005-01-03\n", "2005-03-28\n", "2005-05-02\n", "2005-08-29\n", "2005-12-27\n", "2006-04-17\n", "2006-05-01\n", "2006-08-28\n", "2006-12-26\n", "2007-04-09\n", "2007-05-07\n", "2007-08-27\n", "2007-12-26\n", "2008-03-24\n", "2008-05-05\n", "2008-08-25\n", "2008-12-26\n", "2009-03-27\n", "2009-04-13\n", "2009-05-04\n", "2009-06-25\n", "2009-08-11\n", "2009-08-31\n", "2009-09-02\n", "2009-12-28\n", "2010-04-05\n", "2010-04-19\n", "2010-04-20\n", "2010-05-03\n", "2010-05-12\n", "2010-08-30\n", "2010-12-27\n", "2010-12-28\n", "2011-01-03\n", "2011-04-25\n", "2011-04-29\n", "2011-05-02\n", "2011-08-29\n", "2011-12-27\n", "2012-04-09\n", "2012-05-07\n", "2012-06-04\n", "2012-06-05\n", "2012-08-27\n", "2012-12-26\n", "2013-04-01\n", "2013-05-06\n", "2013-08-26\n", "2013-09-23\n", "2013-12-26\n", "2014-04-21\n", "2014-05-05\n", "2014-08-25\n", "2014-12-26\n", "2015-01-02\n", "2015-04-06\n", "2015-05-04\n", "2015-08-31\n", "2015-12-17\n", "2015-12-28\n", "2016-03-28\n", "2016-05-02\n", "2016-08-29\n", "NaNs: 158\n" ] } ], "source": [ "# Count and display NaNs in FTSE data \n", "# i.e. dates where we have BP but not FTSE data\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Proxy remaining FTSE NaNs by taking the mean of the prices in the \n", "# two closest trading days where data is available \n", "# (one before, one after the day)\n", "ftse_data_to_average = ['Open', 'High', 'Low', 'Close'] \n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " if not (pd.isnull(bp.loc[bp_ftse_start+row-1, 'FTSE Date']) or pd.isnull(bp.loc[bp_ftse_start+row+1, 'FTSE Date'])):\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']\n", " else:\n", " go_back = 0\n", " go_forward = 0\n", " while pd.isnull(bp.loc[bp_ftse_start+row-1-go_back, 'FTSE Date']):\n", " go_back += 1\n", " while pd.isnull(bp.loc[bp_ftse_start+row+1+go_forward, 'FTSE Date']):\n", " go_forward += 1\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1-go_back,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1+go_forward,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs: 0\n" ] } ], "source": [ "# Check there are no more NaNs\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", " print(\"X.tail: \", X.tail())\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "X_train = []\n", "X_test = []\n", "y_train = []\n", "y_test = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2)) * 100\n", "\n", "def print_metrics(test, pred):\n", " print(\"Root Mean Squared Percentage Error\", rmsp(test, pred))\n", " print(\"Mean Absolute Error: \", mean_absolute_error(test, pred))\n", " print(\"Explained Variance Score: \", explained_variance_score(test, pred))\n", " print(\"Mean Squared Error: \", mean_squared_error(test, pred))\n", " print(\"R2 score: \", r2_score(test, pred))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "days = 7" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " # Lines below for debugging purposes\n", "# print(\"X_train.head(): \", X_train.head())\n", "# print(\"X_train.tail(): \", X_train.tail())\n", "# print(\"Pred: \", pred[:5])\n", "# print(\"Test: \", y_test[:5])\n", " \n", " # Print metrics\n", " print(\"# Days used to predict: %s\" % str(days))\n", " print(\"\\n%s-day predictions\" % str(target_days)) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "def execute(steps=8, buffer_step=1000, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=days, periods=periods, buffer=buffer)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64\n", "Mean Absolute Error: 1.35177309038\n", "Explained Variance Score: -0.999897657081\n", "Mean Squared Error: 5.3988704324\n", "R2 score: -1.79018260924\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64\n", "Mean Absolute Error: 0.0968047690639\n", "Explained Variance Score: 0.631705385589\n", "Mean Squared Error: 0.0157858151181\n", "R2 score: 0.624974281171\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64\n", "Mean Absolute Error: 0.121813762853\n", "Explained Variance Score: 0.841217523638\n", "Mean Squared Error: 0.0294876156146\n", "R2 score: 0.833996914272\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64\n", "Mean Absolute Error: 0.426327931115\n", "Explained Variance Score: 0.603248858424\n", "Mean Squared Error: 0.3014216695\n", "R2 score: 0.267021281001\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64\n", "Mean Absolute Error: 2.78950172548\n", "Explained Variance Score: -3.16904684367\n", "Mean Squared Error: 12.5284487756\n", "R2 score: -9.15605753784\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64\n", "Mean Absolute Error: 0.794150514869\n", "Explained Variance Score: 0.596407090489\n", "Mean Squared Error: 1.14332478592\n", "R2 score: 0.597101359913\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64\n", "Mean Absolute Error: 4.81075475134\n", "Explained Variance Score: -1.96163694244\n", "Mean Squared Error: 33.132880399\n", "R2 score: -8.55239322845\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64\n", "Mean Absolute Error: 1.21013490927\n", "Explained Variance Score: 0.826791346825\n", "Mean Squared Error: 2.43831676478\n", "R2 score: 0.822383271832\n", "Errors: [Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64, Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64, Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64, Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64, Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64, Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64, Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64, Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64]\n", "Daily error: [[28.167307082010478, 1.4463260128939317, 1.4015691053772388, 10.765715566952402, 24.41364846412203, 2.5976792674283566, 18.495640626302091, 2.5516641001831584], [28.524924281544262, 2.1150843700255639, 1.9904192071209452, 9.9777793095670795, 24.431344729424715, 3.367362298621531, 18.32452824442602, 2.9446157412542853], [28.966326367296624, 2.5023622771613652, 2.3109755963471068, 10.480972016930716, 24.620149855164474, 3.7850136112690573, 18.233121169601173, 3.1880683026068426], [29.085697436318398, 2.8063986750089587, 2.7077120693474366, 10.557942877986475, 24.986822088443628, 4.1801925531737281, 18.358886996507305, 3.4904393628985919], [29.562881417844032, 3.021868557170595, 3.0291535073135702, 10.431970367583759, 25.272566808380592, 4.6500648454107214, 18.479669548458453, 4.1392852048533699], [29.542482156287058, 3.1522506324077977, 3.4807177473584945, 10.593414589800933, 26.220902712818216, 5.0692206066914274, 18.598393316146357, 4.6759345302063018], [29.721120149448151, 3.3063521749028761, 4.1903047240177909, 11.1043790016977, 26.731233491624817, 5.4599845932349131, 18.818122838439312, 5.1515982900107735]]\n", "Mean daily error: [11.229943778158709, 11.45950727274805, 11.76087364954717, 12.021761507460564, 12.323432532126887, 12.666664536464573, 13.060386907922041]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# svm.SVR() trial\n", "execute(model=svm.SVR(), steps=8)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64\n", "Mean Absolute Error: 0.238191228204\n", "Explained Variance Score: 0.936734586453\n", "Mean Squared Error: 0.124174009044\n", "R2 score: 0.935825805621\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64\n", "Mean Absolute Error: 0.0972692755964\n", "Explained Variance Score: 0.631714378075\n", "Mean Squared Error: 0.0158811529743\n", "R2 score: 0.622709326982\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64\n", "Mean Absolute Error: 0.107737269091\n", "Explained Variance Score: 0.871650317662\n", "Mean Squared Error: 0.0228261083752\n", "R2 score: 0.871498446163\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64\n", "Mean Absolute Error: 0.181147312912\n", "Explained Variance Score: 0.875052508652\n", "Mean Squared Error: 0.0677040810751\n", "R2 score: 0.835361370336\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64\n", "Mean Absolute Error: 0.214491478056\n", "Explained Variance Score: 0.938634248613\n", "Mean Squared Error: 0.079359261295\n", "R2 score: 0.935668234886\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64\n", "Mean Absolute Error: 0.800157764607\n", "Explained Variance Score: 0.613715850639\n", "Mean Squared Error: 1.11699089039\n", "R2 score: 0.606381217067\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64\n", "Mean Absolute Error: 0.64399497304\n", "Explained Variance Score: 0.892268550448\n", "Mean Squared Error: 0.724194775999\n", "R2 score: 0.791210628505\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64\n", "Mean Absolute Error: 1.05035951615\n", "Explained Variance Score: 0.867777620914\n", "Mean Squared Error: 1.93149720042\n", "R2 score: 0.859302032386\n", "Errors: [Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64, Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64, Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64, Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64, Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64, Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64, Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64, Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64]\n", "Daily error: [[2.3698570333111504, 1.4112606385290734, 1.3388596770845407, 1.9978731488987438, 1.0643274139994094, 2.1726600714614435, 1.2096456519754599, 1.7851545701577813], [3.5397290828630266, 2.0992094906568943, 1.8827346495576485, 2.9916658848423605, 1.5585063699310966, 3.1013013471389437, 1.8485430242142713, 2.3575578468241742], [4.4040805111224612, 2.4921560557064821, 2.1764572183007651, 3.8243303952515619, 1.9133366253171493, 3.7697615623429668, 2.3093446670878617, 2.8551593057497877], [5.1323698739556516, 2.7671208137147856, 2.5543948404668759, 4.5282824168670546, 2.2001438159343518, 4.2080025337986378, 2.6823554175829778, 3.1844563168900706], [5.7184126896356871, 2.9697212352907276, 2.8435756292022925, 5.2200020876609496, 2.4613047808963091, 4.6245858986274824, 3.0873673748688937, 3.7434820521423369], [6.3399233706097196, 3.1396242770876306, 3.0843584513004441, 5.8895164465804859, 2.661753553657308, 5.0196880611640164, 3.4767926237582256, 4.2266657488609063], [6.8622343672731771, 3.2855971145088323, 3.3444418914677345, 6.4172185016832541, 2.843053391214541, 5.462962469783192, 3.8883808398183208, 4.6139581254374233]]\n", "Mean daily error: [1.6687047756772002, 2.4224059620035518, 2.9680782926098792, 3.4071407536513005, 3.8335564685405847, 4.2297903166273416, 4.5897308376483092]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Linear Regression trial\n", "execute(steps=8)\n", "\n", "# R2 scores: [0.859, 0.791, 0.606, 0.936, 0.835, 0.871, 0.623, 0.936]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n", "\n", "No change in performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Feature Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1 Adding more of the same type of features" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-09 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-10 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "1979-10-11 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 \n", "1979-10-12 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 \n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1979-10-09 7.67689 7.59882 7.72894 8.36703 7.28654 \n", "1979-10-10 7.69042 7.67689 7.59882 8.36703 7.28654 \n", "1979-10-11 7.67689 7.69042 7.67689 8.36703 7.55926 \n", "1979-10-12 7.9111 7.67689 7.69042 8.36703 7.53428 \n", "1979-10-13 8.22338 7.9111 7.67689 8.36703 7.53428 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64\n", "Mean Absolute Error: 0.245263403626\n", "Explained Variance Score: 0.934491328873\n", "Mean Squared Error: 0.129280801098\n", "R2 score: 0.933454012643\n", "Buffer: 700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-07-15 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 5.80321 \n", "1982-07-16 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 \n", "1982-07-17 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 \n", "1982-07-18 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 \n", "1982-07-19 5.15262 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1982-07-15 5.89377 5.9073 5.77718 5.95935 5.50446 \n", "1982-07-16 5.80321 5.89377 5.9073 5.95935 5.30876 \n", "1982-07-17 5.62104 5.80321 5.89377 5.95935 5.24423 \n", "1982-07-18 5.67309 5.62104 5.80321 5.89377 5.08809 \n", "1982-07-19 5.68558 5.67309 5.62104 5.82923 5.06102 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64\n", "Mean Absolute Error: 0.173300277596\n", "Explained Variance Score: 0.888815416717\n", "Mean Squared Error: 0.0490251778494\n", "R2 score: 0.883431428434\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-04-24 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 4.6967 \n", "1985-04-25 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 \n", "1985-04-26 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 \n", "1985-04-27 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 \n", "1985-04-28 4.21578 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1985-04-24 4.72376 4.6967 4.72376 4.74874 4.50204 \n", "1985-04-25 4.6967 4.72376 4.6967 4.74874 4.44999 \n", "1985-04-26 4.71023 4.6967 4.72376 4.73625 4.35943 \n", "1985-04-27 4.6842 4.71023 4.6967 4.72376 4.26783 \n", "1985-04-28 4.6842 4.6842 4.71023 4.72376 4.21578 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64\n", "Mean Absolute Error: 0.119108631048\n", "Explained Variance Score: 0.711899830922\n", "Mean Squared Error: 0.0289413179188\n", "R2 score: 0.708651146753\n", "Buffer: 2100\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-28 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 6.23485 \n", "1988-01-29 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 \n", "1988-01-30 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 \n", "1988-01-31 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 \n", "1988-02-01 6.3015 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1988-01-28 6.31547 6.34235 6.2757 6.34235 5.93923 \n", "1988-01-29 6.23485 6.31547 6.34235 6.34235 5.93923 \n", "1988-01-30 6.1682 6.23485 6.31547 6.32945 5.93923 \n", "1988-01-31 6.11445 6.1682 6.23485 6.35525 5.93923 \n", "1988-02-01 6.10048 6.11445 6.1682 6.3961 5.93923 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64\n", "Mean Absolute Error: 0.0952769269966\n", "Explained Variance Score: 0.871507295966\n", "Mean Squared Error: 0.0159940255259\n", "R2 score: 0.870509426232\n", "Buffer: 2800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-11-07 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 6.98862 \n", "1990-11-08 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 \n", "1990-11-09 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 \n", "1990-11-10 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 \n", "1990-11-11 6.98862 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1990-11-07 6.91929 7.01658 6.86338 7.22567 6.80748 \n", "1990-11-08 6.98862 6.91929 7.01658 7.22567 6.80748 \n", "1990-11-09 7.21226 6.98862 6.91929 7.22567 6.80748 \n", "1990-11-10 7.08702 7.21226 6.98862 7.22567 6.80748 \n", "1990-11-11 6.98862 7.08702 7.21226 7.22567 6.80748 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64\n", "Mean Absolute Error: 0.144183713669\n", "Explained Variance Score: 0.723639903735\n", "Mean Squared Error: 0.0348028136176\n", "R2 score: 0.713646708273\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-11 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-12 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "1993-08-13 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 \n", "1993-08-14 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 \n", "1993-08-15 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1993-08-11 9.36866 9.29831 9.29831 9.3998 9.00997 \n", "1993-08-12 9.21296 9.36866 9.29831 9.47131 9.00997 \n", "1993-08-13 9.11146 9.21296 9.36866 9.70198 9.00997 \n", "1993-08-14 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-15 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64\n", "Mean Absolute Error: 0.175887097751\n", "Explained Variance Score: 0.887963498445\n", "Mean Squared Error: 0.0551035235759\n", "R2 score: 0.867615685704\n", "Buffer: 4200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1996-05-18 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 19.2888 \n", "1996-05-19 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 \n", "1996-05-20 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 \n", "1996-05-21 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 \n", "1996-05-22 20.0734 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1996-05-18 19.4235 19.6291 19.6008 19.7473 18.8327 \n", "1996-05-19 19.2888 19.4235 19.6291 19.9553 18.8327 \n", "1996-05-20 18.8776 19.2888 19.4235 20.3381 18.8327 \n", "1996-05-21 19.0691 18.8776 19.2888 20.6193 18.8327 \n", "1996-05-22 19.5252 19.0691 18.8776 20.6193 18.8327 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64\n", "Mean Absolute Error: 0.338537070406\n", "Explained Variance Score: 0.880567104974\n", "Mean Squared Error: 0.199301427398\n", "R2 score: 0.878296105939\n", "Buffer: 4900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-02-25 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 25.869 \n", "1999-02-26 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 \n", "1999-02-27 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 \n", "1999-02-28 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 \n", "1999-03-01 27.0567 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1999-02-25 25.6215 25.468 25.3739 27.384 24.8145 \n", "1999-02-26 25.869 25.6215 25.468 27.384 25.1907 \n", "1999-02-27 26.8889 25.869 25.6215 27.384 25.3096 \n", "1999-02-28 27.29 26.8889 25.869 27.384 25.4383 \n", "1999-03-01 26.3344 27.29 26.8889 27.384 26.0522 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64\n", "Mean Absolute Error: 0.79987099583\n", "Explained Variance Score: 0.713699257351\n", "Mean Squared Error: 1.14286865075\n", "R2 score: 0.709731902283\n", "Buffer: 5600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-12-05 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 20.6785 \n", "2001-12-06 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 \n", "2001-12-07 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 \n", "2001-12-08 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 \n", "2001-12-09 21.2375 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2001-12-05 20.6677 20.8934 20.7161 21.5437 20.4119 \n", "2001-12-06 20.6785 20.6677 20.8934 21.5437 20.4119 \n", "2001-12-07 21.4792 20.6785 20.6677 21.5437 20.4119 \n", "2001-12-08 21.3878 21.4792 20.6785 21.5437 20.4119 \n", "2001-12-09 21.2803 21.3878 21.4792 21.5437 20.4119 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64\n", "Mean Absolute Error: 0.841030573229\n", "Explained Variance Score: 0.823346393459\n", "Mean Squared Error: 1.23605771115\n", "R2 score: 0.721970087336\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2004-09-17 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 39.3459 \n", "2004-09-18 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 \n", "2004-09-19 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 \n", "2004-09-20 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 \n", "2004-09-21 39.8887 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2004-09-17 39.4294 40.4553 40.4672 41.3022 39.0358 \n", "2004-09-18 39.3459 39.4294 40.4553 41.3022 39.0358 \n", "2004-09-19 39.2684 39.3459 39.4294 41.3022 39.0358 \n", "2004-09-20 40.4374 39.2684 39.3459 41.3022 39.0358 \n", "2004-09-21 40.6223 40.4374 39.2684 41.3022 39.0358 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64\n", "Mean Absolute Error: 0.728558429454\n", "Explained Variance Score: 0.795888858571\n", "Mean Squared Error: 0.927322469233\n", "R2 score: 0.79156569031\n", "Errors: [Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64, Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64, Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64, Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64, Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64, Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64, Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64, Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64, Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64, Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64]\n", "Daily error: [[2.3633119350196083, 2.3656668815405815, 1.8068967673168335, 1.1618527298758623, 1.2445199687301822, 1.3663233859342694, 1.2306040140332253, 2.0991032810897887, 2.4324477531714686, 1.2507503445957771], [3.5547442825053919, 3.481529290249135, 2.5856310121744528, 1.6496590138637148, 1.809132425557288, 1.9964030368392935, 1.8720955368221319, 3.1280968433143097, 3.5227538429212828, 1.8321069037719084], [4.4479717498041955, 4.3049728599220547, 3.1680784232346348, 1.9720295214110184, 2.1910410000791423, 2.5121823913989516, 2.3170550743329108, 3.8585169441853613, 4.3728666842384767, 2.2386315167496664], [5.2227419733682234, 4.7215794009499099, 3.4891579548518452, 2.2414627141040615, 2.5055902203003813, 2.90970213520768, 2.6274277931002956, 4.376862471759261, 5.1061285474682583, 2.5932743630842392], [5.8260923948398808, 5.0598325984063965, 3.8226976530484578, 2.4088856925610633, 2.7730862599144057, 3.2157984690632953, 2.9342447416299611, 4.7079859138129168, 5.7969965267876038, 2.8488069806603251], [6.4375575079233638, 5.3681318110243605, 4.1111391646782698, 2.5862495537524421, 2.9855585838487566, 3.482818119821625, 3.2730794532705025, 4.9961485085103687, 6.418081003261106, 3.0338810314181326], [6.9698629698470569, 5.6450129168027123, 4.3105607363275551, 2.6921943572726881, 3.1522043963508404, 3.7153490809861225, 3.4874417668039328, 5.3341041131784843, 6.9664616392606362, 3.1588584581960775]]\n", "Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Considering more than 7 days' worth of prior data\n", "# 10 days' worth of prior data\n", "execute(steps=10, days=10, buffer_step = 700)\n", "\n", "# Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "1979-10-14 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 \n", "1979-10-15 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 \n", "1979-10-16 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 \n", "1979-10-17 7.20847 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1979-10-13 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-14 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-15 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-16 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-17 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-13 8.36703 7.28654 \n", "1979-10-14 8.36703 7.28654 \n", "1979-10-15 8.36703 7.39063 \n", "1979-10-16 8.36703 7.18245 \n", "1979-10-17 8.36703 6.92221 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64\n", "Mean Absolute Error: 0.248776074705\n", "Explained Variance Score: 0.932287153948\n", "Mean Squared Error: 0.131935951513\n", "R2 score: 0.931564117202\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-07 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 3.87748 \n", "1981-10-08 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 \n", "1981-10-09 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 \n", "1981-10-10 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 \n", "1981-10-11 3.72134 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1981-10-07 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 3.44757 \n", "1981-10-08 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 \n", "1981-10-09 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 \n", "1981-10-10 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 \n", "1981-10-11 3.64327 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 \n", "\n", " Adj. High Adj. Low \n", "1981-10-07 4.0076 3.3185 \n", "1981-10-08 4.0076 3.3185 \n", "1981-10-09 4.0076 3.3185 \n", "1981-10-10 4.0076 3.48713 \n", "1981-10-11 4.0076 3.53918 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64\n", "Mean Absolute Error: 0.139681061468\n", "Explained Variance Score: 0.695779905092\n", "Mean Squared Error: 0.0337119645641\n", "R2 score: 0.685613674393\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-30 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 4.39795 \n", "1983-10-01 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 \n", "1983-10-02 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 \n", "1983-10-03 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 \n", "1983-10-04 4.35943 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1983-09-30 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-10-01 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-10-02 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-10-03 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-10-04 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-30 4.60613 4.3459 \n", "1983-10-01 4.60613 4.3459 \n", "1983-10-02 4.56762 4.26783 \n", "1983-10-03 4.56762 4.26783 \n", "1983-10-04 4.56762 4.26783 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64\n", "Mean Absolute Error: 0.0983383277787\n", "Explained Variance Score: 0.673001905538\n", "Mean Squared Error: 0.0159582555222\n", "R2 score: 0.663777302829\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-09-20 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 5.14013 \n", "1985-09-21 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 \n", "1985-09-22 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 \n", "1985-09-23 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 \n", "1985-09-24 5.11307 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1985-09-20 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 5.20467 \n", "1985-09-21 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 \n", "1985-09-22 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 \n", "1985-09-23 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 \n", "1985-09-24 5.14013 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 \n", "\n", " Adj. High Adj. Low \n", "1985-09-20 5.26921 4.89239 \n", "1985-09-21 5.26921 4.89239 \n", "1985-09-22 5.26921 4.89239 \n", "1985-09-23 5.26921 4.90488 \n", "1985-09-24 5.26921 4.91841 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64\n", "Mean Absolute Error: 0.122285822087\n", "Explained Variance Score: 0.532878366341\n", "Mean Squared Error: 0.025722263709\n", "R2 score: 0.528611373486\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-10 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 5.67454 \n", "1987-09-11 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 \n", "1987-09-12 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 \n", "1987-09-13 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 \n", "1987-09-14 5.78111 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1987-09-10 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-11 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-12 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-13 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-14 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-10 5.84824 5.62126 \n", "1987-09-11 5.84824 5.62126 \n", "1987-09-12 5.84824 5.62126 \n", "1987-09-13 5.84824 5.62126 \n", "1987-09-14 5.84824 5.62126 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64\n", "Mean Absolute Error: 0.107345237581\n", "Explained Variance Score: 0.872175783957\n", "Mean Squared Error: 0.0226157683537\n", "R2 score: 0.872187834621\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-02 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 8.62105 \n", "1989-09-03 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 \n", "1989-09-04 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 \n", "1989-09-05 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 \n", "1989-09-06 8.74405 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1989-09-02 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 8.56614 \n", "1989-09-03 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 \n", "1989-09-04 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 \n", "1989-09-05 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 \n", "1989-09-06 8.57932 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 \n", "\n", " Adj. High Adj. Low \n", "1989-09-02 8.78578 8.35967 \n", "1989-09-03 8.78578 8.35967 \n", "1989-09-04 8.78578 8.35967 \n", "1989-09-05 8.78578 8.35967 \n", "1989-09-06 8.78578 8.35967 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64\n", "Mean Absolute Error: 0.182993141917\n", "Explained Variance Score: 0.923373254714\n", "Mean Squared Error: 0.0633763394031\n", "R2 score: 0.913263877343\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-27 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 5.01791 \n", "1991-08-28 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 \n", "1991-08-29 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 \n", "1991-08-30 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 \n", "1991-08-31 4.97595 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1991-08-27 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-28 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-29 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-30 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-31 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-27 5.27306 4.69245 \n", "1991-08-28 5.24471 4.69245 \n", "1991-08-29 5.24471 4.69245 \n", "1991-08-30 5.15966 4.69245 \n", "1991-08-31 5.14605 4.69245 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64\n", "Mean Absolute Error: 0.196205423468\n", "Explained Variance Score: 0.867530206283\n", "Mean Squared Error: 0.0757048791729\n", "R2 score: 0.806951047925\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-18 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "1993-08-19 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 \n", "1993-08-20 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 \n", "1993-08-21 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 \n", "1993-08-22 9.34213 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1993-08-18 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 9.29831 \n", "1993-08-19 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 \n", "1993-08-20 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 \n", "1993-08-21 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-22 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "\n", " Adj. High Adj. Low \n", "1993-08-18 9.83231 9.00997 \n", "1993-08-19 9.83231 9.00997 \n", "1993-08-20 9.83231 9.00997 \n", "1993-08-21 9.83231 9.00997 \n", "1993-08-22 9.83231 9.00997 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64\n", "Mean Absolute Error: 0.174147642649\n", "Explained Variance Score: 0.892678602856\n", "Mean Squared Error: 0.0544705960063\n", "R2 score: 0.872851342431\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-09 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 15.3418 \n", "1995-08-10 15.005 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 \n", "1995-08-11 15.0778 15.005 15.2984 15.5612 15.4004 15.357 15.2538 \n", "1995-08-12 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 15.357 \n", "1995-08-13 15.1071 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1995-08-09 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-08-10 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-08-11 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-12 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-13 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-08-09 15.5612 14.9311 \n", "1995-08-10 15.5612 14.9463 \n", "1995-08-11 15.5612 14.9463 \n", "1995-08-12 15.5612 14.9463 \n", "1995-08-13 15.5612 14.9463 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64\n", "Mean Absolute Error: 0.214711322421\n", "Explained Variance Score: 0.942826192476\n", "Mean Squared Error: 0.0808523509562\n", "R2 score: 0.937817635223\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-07-31 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 20.5119 \n", "1997-08-01 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 \n", "1997-08-02 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 \n", "1997-08-03 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 \n", "1997-08-04 19.7879 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1997-07-31 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 22.0346 \n", "1997-08-01 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 \n", "1997-08-02 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 \n", "1997-08-03 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 \n", "1997-08-04 20.9197 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 \n", "\n", " Adj. High Adj. Low \n", "1997-07-31 22.1407 20.1788 \n", "1997-08-01 22.1407 19.8627 \n", "1997-08-02 21.5061 19.8627 \n", "1997-08-03 21.4771 19.8482 \n", "1997-08-04 21.4771 19.6528 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64\n", "Mean Absolute Error: 0.575956001159\n", "Explained Variance Score: 0.632401065134\n", "Mean Squared Error: 0.536694556461\n", "R2 score: 0.635433823871\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-23 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 26.9688 \n", "1999-07-24 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 \n", "1999-07-25 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 \n", "1999-07-26 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 \n", "1999-07-27 27.47 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1999-07-23 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-24 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-25 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-26 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-27 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-23 27.3146 25.811 \n", "1999-07-24 28.1917 25.811 \n", "1999-07-25 28.7229 25.811 \n", "1999-07-26 28.7229 25.9664 \n", "1999-07-27 28.7229 25.9664 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64\n", "Mean Absolute Error: 0.834586135448\n", "Explained Variance Score: 0.552372347128\n", "Mean Squared Error: 1.19797116115\n", "R2 score: 0.541753682113\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-17 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 21.771 \n", "2001-07-18 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 \n", "2001-07-19 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 \n", "2001-07-20 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 \n", "2001-07-21 21.9624 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2001-07-17 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 21.7337 \n", "2001-07-18 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 \n", "2001-07-19 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 \n", "2001-07-20 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 \n", "2001-07-21 21.0584 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 \n", "\n", " Adj. High Adj. Low \n", "2001-07-17 22.6378 19.9417 \n", "2001-07-18 22.6378 19.9417 \n", "2001-07-19 22.6378 19.9417 \n", "2001-07-20 22.6378 19.9417 \n", "2001-07-21 22.6378 19.9417 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64\n", "Mean Absolute Error: 0.676312438719\n", "Explained Variance Score: 0.79312466119\n", "Mean Squared Error: 0.850174654841\n", "R2 score: 0.78753038764\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-10 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 33.5442 \n", "2003-07-11 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 \n", "2003-07-12 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 \n", "2003-07-13 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 \n", "2003-07-14 33.6131 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2003-07-10 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-11 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-12 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-13 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-14 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-10 34.3357 32.0187 \n", "2003-07-11 34.3357 32.5005 \n", "2003-07-12 34.3357 32.7585 \n", "2003-07-13 34.3357 32.7585 \n", "2003-07-14 34.3357 32.7585 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64\n", "Mean Absolute Error: 0.633855324068\n", "Explained Variance Score: 0.893339521738\n", "Mean Squared Error: 0.718058387086\n", "R2 score: 0.80969350896\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-09 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 40.2947 \n", "2005-07-10 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 \n", "2005-07-11 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 \n", "2005-07-12 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 \n", "2005-07-13 39.5982 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2005-07-09 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 39.867 \n", "2005-07-10 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 \n", "2005-07-11 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 \n", "2005-07-12 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 \n", "2005-07-13 39.7571 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 \n", "\n", " Adj. High Adj. Low \n", "2005-07-09 40.8933 38.9812 \n", "2005-07-10 40.8933 38.9812 \n", "2005-07-11 40.8933 38.8041 \n", "2005-07-12 40.6123 38.8041 \n", "2005-07-13 40.6123 38.8041 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64\n", "Mean Absolute Error: 0.813134820175\n", "Explained Variance Score: 0.629454488747\n", "Mean Squared Error: 1.11504616982\n", "R2 score: 0.634165070736\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-06 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 34.1229 \n", "2007-07-07 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 \n", "2007-07-08 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 \n", "2007-07-09 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 \n", "2007-07-10 33.2667 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2007-07-06 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-07-07 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-07-08 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-07-09 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-10 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-07-06 37.6275 32.8884 \n", "2007-07-07 37.6275 32.8884 \n", "2007-07-08 37.6275 32.0919 \n", "2007-07-09 37.6275 32.0919 \n", "2007-07-10 37.6275 32.0919 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64\n", "Mean Absolute Error: 1.15665536203\n", "Explained Variance Score: 0.868995317818\n", "Mean Squared Error: 2.51929559765\n", "R2 score: 0.848349836178\n", "Errors: [Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64, Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64, Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64, Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64, Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64, Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64, Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64, Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64, Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64, Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64, Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64, Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64, Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64, Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64, Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64]\n", "Daily error: [[2.3428046878594335, 2.5494465554647414, 1.3954581010084075, 1.9338110474345769, 1.349031388428084, 1.3082501119097614, 2.0877971918382312, 1.362629656063173, 1.0672541331288881, 1.7560891545451207, 2.2842628093726178, 2.0416633481835507, 1.1975233764939945, 1.2541140107194724, 1.9979717114798277], [3.5258552334178641, 3.7320533743630255, 2.1034184642616141, 2.6897205756015548, 1.8969039843105724, 2.0506153412586832, 3.2171984334944406, 1.9827940259871397, 1.5688995987559236, 2.6367635568182766, 3.3068351824563802, 2.8945074594428291, 1.8249088288131119, 1.7898187399932406, 2.6622184489674865], [4.420877989036649, 4.7032147476522344, 2.5136196508353961, 3.0922152789031143, 2.1796658505265682, 2.6304796746940839, 4.1915655602523731, 2.4924344110851404, 1.9105828050113176, 3.2464940581864847, 4.0444675805083419, 3.4573108599535782, 2.2800119253617375, 2.1330178906407928, 3.2434631632331032], [5.2453007591988934, 5.3658643734648832, 2.7831224905377154, 3.416748711154967, 2.5549049030530955, 3.0746731020488789, 4.9524019488849751, 2.8907889072630373, 2.1787553036935075, 3.7318496940231114, 4.5205370675953178, 3.9785266649335007, 2.6882642728569226, 2.5139768692486597, 3.8987847995297504], [5.9123764917439461, 5.9343992865756627, 2.9779283268835495, 3.749884830258206, 2.8424480771173175, 3.4493099318044464, 5.6296725435585397, 3.1974315805691531, 2.4205889442104498, 4.1528377889957317, 4.8491578280113066, 4.4437933328538719, 3.0871274223490661, 2.8212984449238308, 4.5627499655632802], [6.5253540389538474, 6.411869704769062, 3.1595872490659578, 3.9820786600745923, 3.0589602014064852, 3.6925343353850728, 6.2161677524830603, 3.4512842358405149, 2.6052006922636068, 4.4255891500298041, 5.1504375410897554, 4.8667198046540632, 3.4479777609243358, 3.1141175250353417, 5.4764165109956515], [7.0484327153638269, 6.8859112718527289, 3.3214906751109079, 4.1319603443044786, 3.2919049518842676, 3.8961844607912113, 6.645652227769677, 3.680437333538447, 2.7931310314182922, 4.6362674911036841, 5.5220713093967051, 5.2196422824700353, 3.7666650074113814, 3.3699869165228575, 6.3198328863514632]]\n", "Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 14 days' worth of prior data\n", "execute(steps=15, days=14, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-24 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 7.49473 \n", "1979-10-25 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 \n", "1979-10-26 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 \n", "1979-10-27 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 \n", "1979-10-28 7.39063 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1979-10-24 7.63838 7.58633 7.72894 ... 8.14531 8.22338 7.9111 \n", "1979-10-25 7.49473 7.63838 7.58633 ... 8.0027 8.14531 8.22338 \n", "1979-10-26 7.4687 7.49473 7.63838 ... 7.78098 8.0027 8.14531 \n", "1979-10-27 7.20847 7.4687 7.49473 ... 7.79452 7.78098 8.0027 \n", "1979-10-28 7.20847 7.20847 7.4687 ... 7.72894 7.79452 7.78098 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1979-10-24 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-10-25 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-10-26 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-10-27 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-10-28 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.47982 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64\n", "Mean Absolute Error: 0.247178558128\n", "Explained Variance Score: 0.934716071877\n", "Mean Squared Error: 0.125104935048\n", "R2 score: 0.934194798936\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-16 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 3.63078 \n", "1981-10-17 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 \n", "1981-10-18 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 \n", "1981-10-19 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 \n", "1981-10-20 4.15125 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1981-10-16 3.60371 3.59122 3.68283 ... 3.87748 3.95555 3.85146 \n", "1981-10-17 3.63078 3.60371 3.59122 ... 3.66929 3.87748 3.95555 \n", "1981-10-18 3.70781 3.63078 3.60371 ... 3.66929 3.66929 3.87748 \n", "1981-10-19 3.72134 3.70781 3.63078 ... 3.64327 3.66929 3.66929 \n", "1981-10-20 3.72134 3.72134 3.70781 ... 3.68283 3.64327 3.66929 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1981-10-16 3.69532 3.53918 3.47464 3.39553 3.44757 4.0076 3.3185 \n", "1981-10-17 3.85146 3.69532 3.53918 3.47464 3.39553 4.0076 3.3185 \n", "1981-10-18 3.95555 3.85146 3.69532 3.53918 3.47464 4.0076 3.3185 \n", "1981-10-19 3.87748 3.95555 3.85146 3.69532 3.53918 4.07213 3.48713 \n", "1981-10-20 3.66929 3.87748 3.95555 3.85146 3.69532 4.20329 3.53918 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64\n", "Mean Absolute Error: 0.14560789487\n", "Explained Variance Score: 0.697986240547\n", "Mean Squared Error: 0.0357285529497\n", "R2 score: 0.693931872833\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-11 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 4.38441 \n", "1983-10-12 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 \n", "1983-10-13 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 \n", "1983-10-14 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 \n", "1983-10-15 4.28032 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1983-10-11 4.44999 4.51557 4.55409 ... 4.39795 4.42397 4.37192 \n", "1983-10-12 4.38441 4.44999 4.51557 ... 4.44999 4.39795 4.42397 \n", "1983-10-13 4.29385 4.38441 4.44999 ... 4.37192 4.44999 4.39795 \n", "1983-10-14 4.3459 4.29385 4.38441 ... 4.47602 4.37192 4.44999 \n", "1983-10-15 4.35943 4.3459 4.29385 ... 4.55409 4.47602 4.37192 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1983-10-11 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.21578 \n", "1983-10-12 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.18976 \n", "1983-10-13 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.18976 \n", "1983-10-14 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.18976 \n", "1983-10-15 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.18976 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64\n", "Mean Absolute Error: 0.100467856093\n", "Explained Variance Score: 0.707746188515\n", "Mean Squared Error: 0.0166816164165\n", "R2 score: 0.690365934271\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-01 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 5.03604 \n", "1985-10-02 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 \n", "1985-10-03 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 \n", "1985-10-04 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 \n", "1985-10-05 5.15262 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1985-10-01 5.10058 5.23069 5.25672 ... 5.14013 5.16512 5.15262 \n", "1985-10-02 5.03604 5.10058 5.23069 ... 5.08809 5.14013 5.16512 \n", "1985-10-03 4.99648 5.03604 5.10058 ... 5.17865 5.08809 5.14013 \n", "1985-10-04 4.95693 4.99648 5.03604 ... 5.14013 5.17865 5.08809 \n", "1985-10-05 5.11307 4.95693 4.99648 ... 5.25672 5.14013 5.17865 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1985-10-01 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-02 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-03 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-04 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-05 5.08809 5.14013 5.16512 5.15262 4.98399 5.26921 4.91841 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64\n", "Mean Absolute Error: 0.118704995917\n", "Explained Variance Score: 0.599720926078\n", "Mean Squared Error: 0.0233000629812\n", "R2 score: 0.596620827484\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-22 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 5.79496 \n", "1987-09-23 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 \n", "1987-09-24 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 \n", "1987-09-25 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 \n", "1987-09-26 5.90152 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1987-09-22 5.84824 5.79496 5.70118 ... 5.67454 5.72782 5.70118 \n", "1987-09-23 5.79496 5.84824 5.79496 ... 5.74168 5.67454 5.72782 \n", "1987-09-24 5.76725 5.79496 5.84824 ... 5.72782 5.74168 5.67454 \n", "1987-09-25 5.79496 5.76725 5.79496 ... 5.6479 5.72782 5.74168 \n", "1987-09-26 5.78111 5.79496 5.76725 ... 5.70118 5.6479 5.72782 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1987-09-22 5.66069 5.79496 5.72782 5.71397 5.6479 5.86103 5.62126 \n", "1987-09-23 5.70118 5.66069 5.79496 5.72782 5.71397 5.86103 5.62126 \n", "1987-09-24 5.72782 5.70118 5.66069 5.79496 5.72782 5.86103 5.62126 \n", "1987-09-25 5.67454 5.72782 5.70118 5.66069 5.79496 5.86103 5.62126 \n", "1987-09-26 5.74168 5.67454 5.72782 5.70118 5.66069 5.90152 5.62126 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64\n", "Mean Absolute Error: 0.107246850816\n", "Explained Variance Score: 0.873418919146\n", "Mean Squared Error: 0.0223804852513\n", "R2 score: 0.873053045647\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-13 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 8.51123 \n", "1989-09-14 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 \n", "1989-09-15 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 \n", "1989-09-16 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 \n", "1989-09-17 8.66302 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1989-09-13 8.38823 8.38823 8.4695 ... 8.62105 8.71769 8.73087 \n", "1989-09-14 8.51123 8.38823 8.38823 ... 8.71769 8.62105 8.71769 \n", "1989-09-15 8.52441 8.51123 8.38823 ... 8.64851 8.71769 8.62105 \n", "1989-09-16 8.62105 8.52441 8.51123 ... 8.57932 8.64851 8.71769 \n", "1989-09-17 8.74405 8.62105 8.52441 ... 8.4695 8.57932 8.64851 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1989-09-13 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.35967 \n", "1989-09-14 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.35967 \n", "1989-09-15 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.35967 \n", "1989-09-16 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.35967 \n", "1989-09-17 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.35967 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64\n", "Mean Absolute Error: 0.183367476501\n", "Explained Variance Score: 0.923191778806\n", "Mean Squared Error: 0.062951655998\n", "R2 score: 0.914995737201\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-05 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 4.96121 \n", "1991-09-06 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 \n", "1991-09-07 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 \n", "1991-09-08 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 \n", "1991-09-09 4.86252 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1991-09-05 4.83307 4.79111 4.80585 ... 5.01791 5.03265 5.11657 \n", "1991-09-06 4.96121 4.83307 4.79111 ... 4.96121 5.01791 5.03265 \n", "1991-09-07 4.97595 4.96121 4.83307 ... 4.90451 4.96121 5.01791 \n", "1991-09-08 5.01791 4.97595 4.96121 ... 4.69245 4.90451 4.96121 \n", "1991-09-09 4.97595 5.01791 4.97595 ... 4.80585 4.69245 4.90451 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1991-09-05 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-06 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-07 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-08 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-09 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64\n", "Mean Absolute Error: 0.179845135179\n", "Explained Variance Score: 0.878379857563\n", "Mean Squared Error: 0.0637005335646\n", "R2 score: 0.832463137105\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-27 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 9.52898 \n", "1993-08-28 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 \n", "1993-08-29 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 \n", "1993-08-30 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 \n", "1993-08-31 9.35597 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1993-08-27 9.5728 9.77464 9.6743 ... 9.21296 9.2268 9.08263 \n", "1993-08-28 9.52898 9.5728 9.77464 ... 9.3133 9.21296 9.2268 \n", "1993-08-29 9.58664 9.52898 9.5728 ... 9.32829 9.3133 9.21296 \n", "1993-08-30 9.3998 9.58664 9.52898 ... 9.45747 9.32829 9.3133 \n", "1993-08-31 9.34213 9.3998 9.58664 ... 9.6743 9.45747 9.32829 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1993-08-27 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 9.00997 \n", "1993-08-28 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 9.00997 \n", "1993-08-29 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 9.00997 \n", "1993-08-30 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-31 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64\n", "Mean Absolute Error: 0.173480085165\n", "Explained Variance Score: 0.889783953988\n", "Mean Squared Error: 0.0542550164358\n", "R2 score: 0.87630032975\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-19 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 15.005 \n", "1995-08-20 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 \n", "1995-08-21 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 \n", "1995-08-22 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 \n", "1995-08-23 14.7703 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1995-08-19 15.2984 15.5612 15.4004 ... 15.3418 15.4298 15.4298 \n", "1995-08-20 15.005 15.2984 15.5612 ... 15.1071 15.3418 15.4298 \n", "1995-08-21 15.0778 15.005 15.2984 ... 15.2538 15.1071 15.3418 \n", "1995-08-22 15.1071 15.0778 15.005 ... 15.357 15.2538 15.1071 \n", "1995-08-23 15.1071 15.1071 15.0778 ... 15.4004 15.357 15.2538 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1995-08-19 15.1364 15.1071 15.3124 15.4298 15.2397 15.5612 14.6812 \n", "1995-08-20 15.4298 15.1364 15.1071 15.3124 15.4298 15.5612 14.6812 \n", "1995-08-21 15.4298 15.4298 15.1364 15.1071 15.3124 15.5612 14.6812 \n", "1995-08-22 15.3418 15.4298 15.4298 15.1364 15.1071 15.5612 14.6671 \n", "1995-08-23 15.1071 15.3418 15.4298 15.4298 15.1364 15.5612 14.6378 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64\n", "Mean Absolute Error: 0.21969484392\n", "Explained Variance Score: 0.941053178728\n", "Mean Squared Error: 0.0874448127494\n", "R2 score: 0.934717418017\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-09 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 20.0003 \n", "1997-08-10 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 \n", "1997-08-11 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 \n", "1997-08-12 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 \n", "1997-08-13 21.523 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1997-08-09 20.9486 21.4313 21.4023 ... 20.5119 20.9197 21.2069 \n", "1997-08-10 20.0003 20.9486 21.4313 ... 20.6036 20.5119 20.9197 \n", "1997-08-11 20.1788 20.0003 20.9486 ... 20.6928 20.6036 20.5119 \n", "1997-08-12 19.9689 20.1788 20.0003 ... 20.9197 20.6928 20.6036 \n", "1997-08-13 19.7879 19.9689 20.1788 ... 21.4023 20.9197 20.6928 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1997-08-09 20.8883 21.2358 20.7387 21.0403 22.0346 22.1407 19.6528 \n", "1997-08-10 21.2069 20.8883 21.2358 20.7387 21.0403 22.1407 19.6528 \n", "1997-08-11 20.9197 21.2069 20.8883 21.2358 20.7387 21.6267 19.6528 \n", "1997-08-12 20.5119 20.9197 21.2069 20.8883 21.2358 21.6267 19.6528 \n", "1997-08-13 20.6036 20.5119 20.9197 21.2069 20.8883 21.6267 19.6528 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64\n", "Mean Absolute Error: 0.587602123323\n", "Explained Variance Score: 0.597673117636\n", "Mean Squared Error: 0.562295173611\n", "R2 score: 0.599602671043\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-03 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 27.6253 \n", "1999-08-04 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 \n", "1999-08-05 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 \n", "1999-08-06 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 \n", "1999-08-07 26.0316 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1999-08-03 27.1893 26.8435 26.623 ... 26.9688 26.5628 26.1569 \n", "1999-08-04 27.6253 27.1893 26.8435 ... 26.7533 26.9688 26.5628 \n", "1999-08-05 28.4122 27.6253 27.1893 ... 26.5027 26.7533 26.9688 \n", "1999-08-06 27.3447 28.4122 27.6253 ... 26.3423 26.5027 26.7533 \n", "1999-08-07 27.47 27.3447 28.4122 ... 26.623 26.3423 26.5027 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1999-08-03 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 25.811 \n", "1999-08-04 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 25.811 \n", "1999-08-05 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 25.811 \n", "1999-08-06 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 25.9664 \n", "1999-08-07 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 25.9363 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64\n", "Mean Absolute Error: 0.80841683447\n", "Explained Variance Score: 0.55978076116\n", "Mean Squared Error: 1.12748077923\n", "R2 score: 0.551337857615\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-26 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 21.2871 \n", "2001-07-27 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 \n", "2001-07-28 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 \n", "2001-07-29 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 \n", "2001-07-30 21.3349 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2001-07-26 20.7074 19.9948 20.633 ... 21.771 22.2762 21.2179 \n", "2001-07-27 21.2871 20.7074 19.9948 ... 21.4998 21.771 22.2762 \n", "2001-07-28 21.2339 21.2871 20.7074 ... 21.1701 21.4998 21.771 \n", "2001-07-29 22.2708 21.2339 21.2871 ... 21.0584 21.1701 21.4998 \n", "2001-07-30 21.9624 22.2708 21.2339 ... 20.633 21.0584 21.1701 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2001-07-26 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.9417 \n", "2001-07-27 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.9417 \n", "2001-07-28 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.9417 \n", "2001-07-29 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.9417 \n", "2001-07-30 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.9417 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64\n", "Mean Absolute Error: 0.702921222006\n", "Explained Variance Score: 0.80646285415\n", "Mean Squared Error: 0.898869096996\n", "R2 score: 0.800649358483\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-19 33.831 33.5959 33.2632 33.6131 34.0719 34.112 33.9686 \n", "2003-07-20 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 34.112 \n", "2003-07-21 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 \n", "2003-07-22 33.917 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 \n", "2003-07-23 33.8826 33.917 33.4926 33.5729 33.831 33.5959 33.2632 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2003-07-19 34.1522 33.5959 33.0052 ... 33.5442 33.1944 33.0052 \n", "2003-07-20 33.9686 34.1522 33.5959 ... 32.8962 33.5442 33.1944 \n", "2003-07-21 34.112 33.9686 34.1522 ... 32.9937 32.8962 33.5442 \n", "2003-07-22 34.0719 34.112 33.9686 ... 33.3722 32.9937 32.8962 \n", "2003-07-23 33.6131 34.0719 34.112 ... 33.0052 33.3722 32.9937 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2003-07-19 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-07-20 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-07-21 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-07-22 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-07-23 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64\n", "Mean Absolute Error: 0.607302274291\n", "Explained Variance Score: 0.912255975134\n", "Mean Squared Error: 0.641949670141\n", "R2 score: 0.841214975617\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-20 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 39.9404 \n", "2005-07-21 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 \n", "2005-07-22 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 \n", "2005-07-23 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 \n", "2005-07-24 41.2538 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2005-07-20 40.0625 40.1969 40.4413 ... 40.2947 39.7082 39.8304 \n", "2005-07-21 39.9404 40.0625 40.1969 ... 39.8304 40.2947 39.7082 \n", "2005-07-22 38.9263 39.9404 40.0625 ... 39.7449 39.8304 40.2947 \n", "2005-07-23 39.7388 38.9263 39.9404 ... 39.7571 39.7449 39.8304 \n", "2005-07-24 39.5982 39.7388 38.9263 ... 40.4413 39.7571 39.7449 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2005-07-20 40.0442 39.6227 40.2275 40.7162 39.867 40.8933 38.8041 \n", "2005-07-21 39.8304 40.0442 39.6227 40.2275 40.7162 40.8933 38.8041 \n", "2005-07-22 39.7082 39.8304 40.0442 39.6227 40.2275 40.8933 38.8041 \n", "2005-07-23 40.2947 39.7082 39.8304 40.0442 39.6227 40.6123 38.8041 \n", "2005-07-24 39.8304 40.2947 39.7082 39.8304 40.0442 41.3454 38.8041 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64\n", "Mean Absolute Error: 0.834239650358\n", "Explained Variance Score: 0.583600781437\n", "Mean Squared Error: 1.16134570271\n", "R2 score: 0.585510921947\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-17 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 36.2071 \n", "2007-07-18 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 \n", "2007-07-19 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 \n", "2007-07-20 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 \n", "2007-07-21 26.9147 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2007-07-17 36.7314 35.5367 35.9084 ... 34.1229 34.7269 34.4681 \n", "2007-07-18 36.2071 36.7314 35.5367 ... 34.1561 34.1229 34.7269 \n", "2007-07-19 32.6162 36.2071 36.7314 ... 36.2071 34.1561 34.1229 \n", "2007-07-20 33.2999 32.6162 36.2071 ... 36.6119 36.2071 34.1561 \n", "2007-07-21 33.2667 33.2999 32.6162 ... 35.9084 36.6119 36.2071 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2007-07-17 36.3664 35.457 35.5035 34.78 36.1009 37.6275 28.4479 \n", "2007-07-18 34.4681 36.3664 35.457 35.5035 34.78 37.6275 28.4479 \n", "2007-07-19 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 28.3484 \n", "2007-07-20 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 26.5629 \n", "2007-07-21 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64\n", "Mean Absolute Error: 1.2420603359\n", "Explained Variance Score: 0.882276409115\n", "Mean Squared Error: 2.85887227574\n", "R2 score: 0.862561522356\n", "Errors: [Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64, Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64, Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64, Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64, Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64, Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64, Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64, Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64, Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64, Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64, Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64, Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64, Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64, Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64, Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64]\n", "Daily error: [[2.2932086903598066, 2.5745843677223665, 1.410938665851232, 1.8560341967801308, 1.3452118535491773, 1.2953543921120965, 2.0706240035799164, 1.3163805720674671, 1.0787215801674817, 1.7589705465567647, 2.2752138152167474, 2.0880627448808471, 1.1687399396644256, 1.2874672090863213, 2.3679740132036238], [3.5051253714594792, 3.7758939807647049, 2.1101590340760858, 2.5311938217644379, 1.8869590042388795, 2.0136643031598154, 3.0941050306484827, 1.9668400833290185, 1.5852576005774814, 2.6692218359360016, 3.2804625406152712, 3.0511678681477217, 1.7709780411099409, 1.8590066437215769, 3.2260112930119331], [4.3910769731836528, 4.73443172240734, 2.5163581244682867, 2.8921256793047787, 2.1712841603268145, 2.5715803374493698, 3.9478706366382608, 2.5025348594217718, 1.9241814438590694, 3.2905025186776364, 3.9550573049063185, 3.6441654215575263, 2.1770380803647402, 2.2190678049570254, 3.7581852465385679], [5.1361009877654604, 5.4151232904822937, 2.7996492546644527, 3.254525792271338, 2.552883694387567, 3.030218079266386, 4.6195946055962853, 2.8935016311120809, 2.2056247688212975, 3.7878186640966414, 4.3904674266100656, 4.1287784929628275, 2.544219187098574, 2.5895015720185302, 4.440659439319135], [5.7410212232012947, 6.0457890220500268, 3.0383136360900456, 3.5252188012037138, 2.826196220616342, 3.4278249217933108, 5.1806333088289245, 3.2002251370334793, 2.4562804221504946, 4.2112453125333271, 4.6795839169286628, 4.5588302590783849, 2.9100623154365133, 2.8787401524867353, 5.1795549205147617], [6.3168411174496839, 6.565847199104029, 3.2619156971270429, 3.7370190918129889, 3.0182882726444662, 3.7051905637636322, 5.6874360343827588, 3.4407560971972138, 2.6628209714516475, 4.5058494414038934, 4.9211912763832011, 5.0124273285269396, 3.2339526748757406, 3.1592652479164429, 5.8957221091782941], [6.8191565595888122, 7.0508931309669327, 3.4473160422940028, 3.964312202423975, 3.2338778357552651, 3.9255667936052023, 6.0096699233415531, 3.6545134565638175, 2.8840627731649513, 4.7448298869292778, 5.2894102436662802, 5.4030603118359393, 3.5305738678012406, 3.3828891687730129, 6.526988671729911]]\n", "Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 21 days' worth of prior data\n", "execute(steps=15, days=21, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-11-06 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 7.09084 \n", "1979-11-07 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 \n", "1979-11-08 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 \n", "1979-11-09 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 \n", "1979-11-10 6.55789 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1979-11-06 6.83061 6.87017 6.92221 ... 8.14531 8.22338 7.9111 \n", "1979-11-07 7.09084 6.83061 6.87017 ... 8.0027 8.14531 8.22338 \n", "1979-11-08 7.39063 7.09084 6.83061 ... 7.78098 8.0027 8.14531 \n", "1979-11-09 7.39063 7.39063 7.09084 ... 7.79452 7.78098 8.0027 \n", "1979-11-10 7.26052 7.39063 7.39063 ... 7.72894 7.79452 7.78098 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1979-11-06 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-11-07 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-11-08 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-11-09 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-11-10 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.46628 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64\n", "Mean Absolute Error: 0.265589379571\n", "Explained Variance Score: 0.923826112353\n", "Mean Squared Error: 0.137645958828\n", "R2 score: 0.924053762052\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-29 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 4.02009 \n", "1981-10-30 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 \n", "1981-10-31 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 \n", "1981-11-01 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 \n", "1981-11-02 4.16374 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1981-10-29 3.9035 3.65576 3.70781 ... 3.87748 3.95555 3.85146 \n", "1981-10-30 4.02009 3.9035 3.65576 ... 3.66929 3.87748 3.95555 \n", "1981-10-31 4.15125 4.02009 3.9035 ... 3.66929 3.66929 3.87748 \n", "1981-11-01 4.17623 4.15125 4.02009 ... 3.64327 3.66929 3.66929 \n", "1981-11-02 4.26783 4.17623 4.15125 ... 3.68283 3.64327 3.66929 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1981-10-29 3.69532 3.53918 3.47464 3.39553 3.44757 4.30739 3.3185 \n", "1981-10-30 3.85146 3.69532 3.53918 3.47464 3.39553 4.30739 3.3185 \n", "1981-10-31 3.95555 3.85146 3.69532 3.53918 3.47464 4.30739 3.3185 \n", "1981-11-01 3.87748 3.95555 3.85146 3.69532 3.53918 4.30739 3.48713 \n", "1981-11-02 3.66929 3.87748 3.95555 3.85146 3.69532 4.30739 3.53918 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64\n", "Mean Absolute Error: 0.147636752695\n", "Explained Variance Score: 0.723234662854\n", "Mean Squared Error: 0.0364831332012\n", "R2 score: 0.711874870251\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-22 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 4.28032 \n", "1983-10-23 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 \n", "1983-10-24 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 \n", "1983-10-25 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 \n", "1983-10-26 4.31988 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1983-10-22 4.30739 4.25534 4.25534 ... 4.39795 4.42397 4.37192 \n", "1983-10-23 4.28032 4.30739 4.25534 ... 4.44999 4.39795 4.42397 \n", "1983-10-24 4.28032 4.28032 4.30739 ... 4.37192 4.44999 4.39795 \n", "1983-10-25 4.37192 4.28032 4.28032 ... 4.47602 4.37192 4.44999 \n", "1983-10-26 4.37192 4.37192 4.28032 ... 4.55409 4.47602 4.37192 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1983-10-22 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.13771 \n", "1983-10-23 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.13771 \n", "1983-10-24 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.12418 \n", "1983-10-25 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.12418 \n", "1983-10-26 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.12418 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64\n", "Mean Absolute Error: 0.0982455236583\n", "Explained Variance Score: 0.738585897896\n", "Mean Squared Error: 0.0162113557319\n", "R2 score: 0.736956378599\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-12 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 5.04853 \n", "1985-10-13 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 \n", "1985-10-14 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 \n", "1985-10-15 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 \n", "1985-10-16 5.40037 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1985-10-12 4.99648 5.08809 5.15262 ... 5.14013 5.16512 5.15262 \n", "1985-10-13 5.04853 4.99648 5.08809 ... 5.08809 5.14013 5.16512 \n", "1985-10-14 5.15262 5.04853 4.99648 ... 5.17865 5.08809 5.14013 \n", "1985-10-15 5.24423 5.15262 5.04853 ... 5.14013 5.17865 5.08809 \n", "1985-10-16 5.20467 5.24423 5.15262 ... 5.25672 5.14013 5.17865 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1985-10-12 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-13 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-14 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-15 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-16 5.08809 5.14013 5.16512 5.15262 4.98399 5.43888 4.91841 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64\n", "Mean Absolute Error: 0.125644826003\n", "Explained Variance Score: 0.64103714916\n", "Mean Squared Error: 0.0279968462683\n", "R2 score: 0.621838958431\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-10-06 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 5.83439 \n", "1987-10-07 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 \n", "1987-10-08 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 \n", "1987-10-09 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 \n", "1987-10-10 5.71397 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1987-10-06 5.76725 5.76725 5.84824 ... 5.67454 5.72782 5.70118 \n", "1987-10-07 5.83439 5.76725 5.76725 ... 5.74168 5.67454 5.72782 \n", "1987-10-08 5.90152 5.83439 5.76725 ... 5.72782 5.74168 5.67454 \n", "1987-10-09 5.86103 5.90152 5.83439 ... 5.6479 5.72782 5.74168 \n", "1987-10-10 5.98038 5.86103 5.90152 ... 5.70118 5.6479 5.72782 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1987-10-06 5.66069 5.79496 5.72782 5.71397 5.6479 6.07416 5.62126 \n", "1987-10-07 5.70118 5.66069 5.79496 5.72782 5.71397 6.07416 5.62126 \n", "1987-10-08 5.72782 5.70118 5.66069 5.79496 5.72782 6.07416 5.62126 \n", "1987-10-09 5.67454 5.72782 5.70118 5.66069 5.79496 6.07416 5.62126 \n", "1987-10-10 5.74168 5.67454 5.72782 5.70118 5.66069 6.07416 5.62126 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64\n", "Mean Absolute Error: 0.101127508153\n", "Explained Variance Score: 0.896285604892\n", "Mean Squared Error: 0.0175440030481\n", "R2 score: 0.895446126394\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-28 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 8.73244 \n", "1989-09-29 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 \n", "1989-09-30 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 \n", "1989-10-01 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 \n", "1989-10-02 8.29169 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1989-09-28 8.84263 8.81508 8.84263 ... 8.62105 8.71769 8.73087 \n", "1989-09-29 8.73244 8.84263 8.81508 ... 8.71769 8.62105 8.71769 \n", "1989-09-30 8.66302 8.73244 8.84263 ... 8.64851 8.71769 8.62105 \n", "1989-10-01 8.52639 8.66302 8.73244 ... 8.57932 8.64851 8.71769 \n", "1989-10-02 8.44264 8.52639 8.66302 ... 8.4695 8.57932 8.64851 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1989-09-28 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.20904 \n", "1989-09-29 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.1264 \n", "1989-09-30 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.1264 \n", "1989-10-01 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.1264 \n", "1989-10-02 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.1264 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64\n", "Mean Absolute Error: 0.192674964535\n", "Explained Variance Score: 0.915662166478\n", "Mean Squared Error: 0.0693827817393\n", "R2 score: 0.904473158945\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-19 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 4.86252 \n", "1991-09-20 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 \n", "1991-09-21 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 \n", "1991-09-22 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 \n", "1991-09-23 4.96148 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1991-09-19 4.89096 4.91925 4.91925 ... 5.01791 5.03265 5.11657 \n", "1991-09-20 4.86252 4.89096 4.91925 ... 4.96121 5.01791 5.03265 \n", "1991-09-21 4.86252 4.86252 4.89096 ... 4.90451 4.96121 5.01791 \n", "1991-09-22 4.83409 4.86252 4.86252 ... 4.69245 4.90451 4.96121 \n", "1991-09-23 4.83409 4.83409 4.86252 ... 4.80585 4.69245 4.90451 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1991-09-19 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-20 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-21 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-22 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-23 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64\n", "Mean Absolute Error: 0.169117487826\n", "Explained Variance Score: 0.885949963038\n", "Mean Squared Error: 0.0583397959215\n", "R2 score: 0.84902479478\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-09-09 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 9.29831 \n", "1993-09-10 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 \n", "1993-09-11 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 \n", "1993-09-12 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 \n", "1993-09-13 9.17272 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1993-09-09 9.25563 9.24064 9.35597 ... 9.21296 9.2268 9.08263 \n", "1993-09-10 9.29831 9.25563 9.24064 ... 9.3133 9.21296 9.2268 \n", "1993-09-11 9.35597 9.29831 9.25563 ... 9.32829 9.3133 9.21296 \n", "1993-09-12 9.28827 9.35597 9.29831 ... 9.45747 9.32829 9.3133 \n", "1993-09-13 9.17272 9.28827 9.35597 ... 9.6743 9.45747 9.32829 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1993-09-09 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.86881 \n", "1993-09-10 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.86881 \n", "1993-09-11 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.86881 \n", "1993-09-12 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.86881 \n", "1993-09-13 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.86881 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64\n", "Mean Absolute Error: 0.173953716023\n", "Explained Variance Score: 0.882699120583\n", "Mean Squared Error: 0.055246949342\n", "R2 score: 0.868280591863\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-09-01 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 14.7844 \n", "1995-09-02 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 \n", "1995-09-03 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 \n", "1995-09-04 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 \n", "1995-09-05 16.2301 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1995-09-01 14.7551 14.7551 14.7551 ... 15.3418 15.4298 15.4298 \n", "1995-09-02 14.7844 14.7551 14.7551 ... 15.1071 15.3418 15.4298 \n", "1995-09-03 14.7703 14.7844 14.7551 ... 15.2538 15.1071 15.3418 \n", "1995-09-04 15.005 14.7703 14.7844 ... 15.357 15.2538 15.1071 \n", "1995-09-05 15.3265 15.005 14.7703 ... 15.4004 15.357 15.2538 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1995-09-01 15.1364 15.1071 15.3124 15.4298 15.2397 15.5764 14.6378 \n", "1995-09-02 15.4298 15.1364 15.1071 15.3124 15.4298 15.7738 14.6378 \n", "1995-09-03 15.4298 15.4298 15.1364 15.1071 15.3124 16.1125 14.6378 \n", "1995-09-04 15.3418 15.4298 15.4298 15.1364 15.1071 16.3183 14.6378 \n", "1995-09-05 15.1071 15.3418 15.4298 15.4298 15.1364 16.3183 14.6378 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64\n", "Mean Absolute Error: 0.239159740022\n", "Explained Variance Score: 0.944241221285\n", "Mean Squared Error: 0.101972988604\n", "R2 score: 0.93697372492\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-23 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 21.3565 \n", "1997-08-24 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 \n", "1997-08-25 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 \n", "1997-08-26 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 \n", "1997-08-27 22.3992 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1997-08-23 21.4771 21.0235 20.8594 ... 20.5119 20.9197 21.2069 \n", "1997-08-24 21.3565 21.4771 21.0235 ... 20.6036 20.5119 20.9197 \n", "1997-08-25 21.523 21.3565 21.4771 ... 20.6928 20.6036 20.5119 \n", "1997-08-26 21.7933 21.523 21.3565 ... 20.9197 20.6928 20.6036 \n", "1997-08-27 22.1407 21.7933 21.523 ... 21.4023 20.9197 20.6928 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1997-08-23 20.8883 21.2358 20.7387 21.0403 22.0346 22.1721 19.6528 \n", "1997-08-24 21.2069 20.8883 21.2358 20.7387 21.0403 22.1721 19.6528 \n", "1997-08-25 20.9197 21.2069 20.8883 21.2358 20.7387 22.1721 19.6528 \n", "1997-08-26 20.5119 20.9197 21.2069 20.8883 21.2358 22.1721 19.6528 \n", "1997-08-27 20.6036 20.5119 20.9197 21.2069 20.8883 22.3992 19.6528 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64\n", "Mean Absolute Error: 0.601937849493\n", "Explained Variance Score: 0.588903471007\n", "Mean Squared Error: 0.583981651008\n", "R2 score: 0.583088547014\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-14 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 26.7533 \n", "1999-08-15 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 \n", "1999-08-16 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 \n", "1999-08-17 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 \n", "1999-08-18 24.6834 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1999-08-14 27.0339 27.3146 26.9086 ... 26.9688 26.5628 26.1569 \n", "1999-08-15 26.7533 27.0339 27.3146 ... 26.7533 26.9688 26.5628 \n", "1999-08-16 26.0316 26.7533 27.0339 ... 26.5027 26.7533 26.9688 \n", "1999-08-17 26.0616 26.0316 26.7533 ... 26.3423 26.5027 26.7533 \n", "1999-08-18 25.3098 26.0616 26.0316 ... 26.623 26.3423 26.5027 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1999-08-14 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 24.964 \n", "1999-08-15 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 24.964 \n", "1999-08-16 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 24.4027 \n", "1999-08-17 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 24.4027 \n", "1999-08-18 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 24.4027 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64\n", "Mean Absolute Error: 0.794397514735\n", "Explained Variance Score: 0.589058113891\n", "Mean Squared Error: 1.06170118828\n", "R2 score: 0.586860973735\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-08-08 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 21.1594 \n", "2001-08-09 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 \n", "2001-08-10 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 \n", "2001-08-11 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 \n", "2001-08-12 19.8885 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2001-08-08 21.2445 21.2658 22.3559 ... 21.771 22.2762 21.2179 \n", "2001-08-09 21.1594 21.2445 21.2658 ... 21.4998 21.771 22.2762 \n", "2001-08-10 21.3349 21.1594 21.2445 ... 21.1701 21.4998 21.771 \n", "2001-08-11 20.9786 21.3349 21.1594 ... 21.0584 21.1701 21.4998 \n", "2001-08-12 19.5588 20.9786 21.3349 ... 20.633 21.0584 21.1701 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2001-08-08 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.2769 \n", "2001-08-09 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.2769 \n", "2001-08-10 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.2769 \n", "2001-08-11 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.2769 \n", "2001-08-12 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.2769 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64\n", "Mean Absolute Error: 0.716918405219\n", "Explained Variance Score: 0.831164391363\n", "Mean Squared Error: 0.921046477113\n", "R2 score: 0.8261118985\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-08-01 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 33.917 \n", "2003-08-02 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 \n", "2003-08-03 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 \n", "2003-08-04 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 \n", "2003-08-05 33.9973 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2003-08-01 33.4926 33.5729 33.831 ... 33.5442 33.1944 33.0052 \n", "2003-08-02 33.917 33.4926 33.5729 ... 32.8962 33.5442 33.1944 \n", "2003-08-03 33.8826 33.917 33.4926 ... 32.9937 32.8962 33.5442 \n", "2003-08-04 33.8195 33.8826 33.917 ... 33.3722 32.9937 32.8962 \n", "2003-08-05 34.112 33.8195 33.8826 ... 33.0052 33.3722 32.9937 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2003-08-01 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-08-02 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-08-03 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-08-04 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-08-05 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64\n", "Mean Absolute Error: 0.58624564363\n", "Explained Variance Score: 0.917058612472\n", "Mean Squared Error: 0.59587482901\n", "R2 score: 0.858798903078\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-08-02 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 40.3008 \n", "2005-08-03 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 \n", "2005-08-04 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 \n", "2005-08-05 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 \n", "2005-08-06 41.5776 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2005-08-02 39.751 39.0118 39.4211 ... 40.2947 39.7082 39.8304 \n", "2005-08-03 40.3008 39.751 39.0118 ... 39.8304 40.2947 39.7082 \n", "2005-08-04 41.2538 40.3008 39.751 ... 39.7449 39.8304 40.2947 \n", "2005-08-05 41.3943 41.2538 40.3008 ... 39.7571 39.7449 39.8304 \n", "2005-08-06 40.6551 41.3943 41.2538 ... 40.4413 39.7571 39.7449 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2005-08-02 40.0442 39.6227 40.2275 40.7162 39.867 41.7791 38.8041 \n", "2005-08-03 39.8304 40.0442 39.6227 40.2275 40.7162 41.8952 38.8041 \n", "2005-08-04 39.7082 39.8304 40.0442 39.6227 40.2275 42.3962 38.8041 \n", "2005-08-05 40.2947 39.7082 39.8304 40.0442 39.6227 42.4511 38.8041 \n", "2005-08-06 39.8304 40.2947 39.7082 39.8304 40.0442 42.4511 38.8041 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64\n", "Mean Absolute Error: 0.802958635558\n", "Explained Variance Score: 0.615314748251\n", "Mean Squared Error: 1.07455580184\n", "R2 score: 0.610929179905\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-28 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 27.0143 \n", "2007-07-29 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 \n", "2007-07-30 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 \n", "2007-07-31 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 \n", "2007-08-01 29.9082 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2007-07-28 29.6692 29.4834 30.2998 ... 34.1229 34.7269 34.4681 \n", "2007-07-29 27.0143 29.6692 29.4834 ... 34.1561 34.1229 34.7269 \n", "2007-07-30 26.9147 27.0143 29.6692 ... 36.2071 34.1561 34.1229 \n", "2007-07-31 30.8639 26.9147 27.0143 ... 36.6119 36.2071 34.1561 \n", "2007-08-01 31.0033 30.8639 26.9147 ... 35.9084 36.6119 36.2071 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2007-07-28 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-07-29 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-07-30 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-07-31 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-08-01 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64\n", "Mean Absolute Error: 1.34141196406\n", "Explained Variance Score: 0.8823848576\n", "Mean Squared Error: 3.23643017946\n", "R2 score: 0.870276149629\n", "Errors: [Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64, Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64, Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64, Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64, Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64, Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64, Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64, Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64, Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64, Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64, Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64, Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64, Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64, Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64, Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64]\n", "Daily error: [[2.3547309468646977, 2.6843698878562434, 1.4073060638117993, 1.8257205265526617, 1.2571302541332623, 1.3070616670286337, 1.9988507624239815, 1.2774261200573758, 1.0972884438734316, 1.7713207964022895, 2.2515787402833238, 2.1936305240618905, 1.1322810611135845, 1.2781940755820749, 2.9218559619814704], [3.6177056160450944, 3.8529029980585308, 2.0996497849323741, 2.5200941777904116, 1.7425090853194207, 2.0767602945362782, 2.9825225833769546, 1.9238545410998846, 1.6284871067250986, 2.6941111554594688, 3.193383888830593, 3.1126222980274192, 1.7023257899660558, 1.8256993808103501, 3.9248097333153922], [4.5649082663487981, 4.919654734680905, 2.5310312168153977, 2.9836384156717788, 2.0110091568888309, 2.6672760574192766, 3.7613247626665651, 2.4870650021890679, 1.9946989514581441, 3.3683432902069392, 3.8294519687663078, 3.7373617983789833, 2.080606518150474, 2.14060014177976, 4.2051556740937093], [5.4024502775560101, 5.5403781813156501, 2.8324489798600148, 3.4016521599695979, 2.3200498153968843, 3.1868909037254345, 4.4188904926330173, 2.8895466676894839, 2.3126474095813565, 3.8741601379971553, 4.2175713308860896, 4.2133650475354072, 2.4493016707758857, 2.465324887372323, 4.9642444869322437], [6.0874752741145528, 6.1238292431129455, 3.0779955606900775, 3.7679999784167957, 2.5431262388706335, 3.5929183893538976, 5.033414123710652, 3.230316091173671, 2.5966357031707243, 4.2764916616348794, 4.5333785968485394, 4.6529261285101802, 2.7891901712253597, 2.7680731557270328, 5.6452968644470065], [6.7355277492693739, 6.5918510035213815, 3.2815416890282374, 4.0959675621588527, 2.742164531970531, 3.874977862896968, 5.5623865765175768, 3.461071665532764, 2.8417667456729157, 4.5564166688903143, 4.779192398380526, 5.086101610706165, 3.0854034250811742, 3.0325416694322258, 6.1485518594275472], [7.3347922060064086, 7.025247411581879, 3.453130554000138, 4.4229639877662024, 2.8911324077574512, 4.0773842621070342, 5.9115774229114351, 3.6835908281785965, 3.0577563801686329, 4.7911542187225136, 5.0594615569728996, 5.4556849461479642, 3.3659760913065653, 3.2410121186171836, 6.7994967443732222]]\n", "Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 30 days' worth of prior data\n", "\n", "execute(steps=15, days=30, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1980-02-14 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 5.04853 \n", "1980-02-15 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 \n", "1980-02-16 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 \n", "1980-02-17 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 \n", "1980-02-18 5.20467 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1980-02-14 5.03604 4.89239 4.91841 ... 8.14531 8.22338 7.9111 \n", "1980-02-15 5.04853 5.03604 4.89239 ... 8.0027 8.14531 8.22338 \n", "1980-02-16 5.10058 5.04853 5.03604 ... 7.78098 8.0027 8.14531 \n", "1980-02-17 5.02251 5.10058 5.04853 ... 7.79452 7.78098 8.0027 \n", "1980-02-18 5.10058 5.02251 5.10058 ... 7.72894 7.79452 7.78098 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1980-02-14 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 4.6842 \n", "1980-02-15 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 4.6842 \n", "1980-02-16 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 4.6842 \n", "1980-02-17 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 4.6842 \n", "1980-02-18 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 4.6842 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64\n", "Mean Absolute Error: 0.308123611359\n", "Explained Variance Score: 0.883196210344\n", "Mean Squared Error: 0.174895557318\n", "R2 score: 0.882761749111\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-02-06 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 4.67171 \n", "1982-02-07 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 \n", "1982-02-08 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 \n", "1982-02-09 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 \n", "1982-02-10 4.91841 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1982-02-06 4.74874 4.73625 4.7883 ... 3.87748 3.95555 3.85146 \n", "1982-02-07 4.67171 4.74874 4.73625 ... 3.66929 3.87748 3.95555 \n", "1982-02-08 4.71023 4.67171 4.74874 ... 3.66929 3.66929 3.87748 \n", "1982-02-09 4.72376 4.71023 4.67171 ... 3.64327 3.66929 3.66929 \n", "1982-02-10 4.74874 4.72376 4.71023 ... 3.68283 3.64327 3.66929 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1982-02-06 3.69532 3.53918 3.47464 3.39553 3.44757 4.85284 3.3185 \n", "1982-02-07 3.85146 3.69532 3.53918 3.47464 3.39553 4.85284 3.3185 \n", "1982-02-08 3.95555 3.85146 3.69532 3.53918 3.47464 4.8799 3.3185 \n", "1982-02-09 3.87748 3.95555 3.85146 3.69532 3.53918 4.94444 3.48713 \n", "1982-02-10 3.66929 3.87748 3.95555 3.85146 3.69532 4.94444 3.53918 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64\n", "Mean Absolute Error: 0.153771584056\n", "Explained Variance Score: 0.858967690029\n", "Mean Squared Error: 0.037657109341\n", "R2 score: 0.855415148739\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1984-02-01 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 4.82785 \n", "1984-02-02 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 \n", "1984-02-03 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 \n", "1984-02-04 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 \n", "1984-02-05 4.90488 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1984-02-01 4.7883 4.7883 4.84034 ... 4.39795 4.42397 4.37192 \n", "1984-02-02 4.82785 4.7883 4.7883 ... 4.44999 4.39795 4.42397 \n", "1984-02-03 4.86637 4.82785 4.7883 ... 4.37192 4.44999 4.39795 \n", "1984-02-04 4.90488 4.86637 4.82785 ... 4.47602 4.37192 4.44999 \n", "1984-02-05 4.86637 4.90488 4.86637 ... 4.55409 4.47602 4.37192 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1984-02-01 4.35943 4.39795 4.43646 4.58011 4.56762 5.02251 4.12418 \n", "1984-02-02 4.37192 4.35943 4.39795 4.43646 4.58011 5.02251 4.12418 \n", "1984-02-03 4.42397 4.37192 4.35943 4.39795 4.43646 5.02251 4.12418 \n", "1984-02-04 4.39795 4.42397 4.37192 4.35943 4.39795 5.02251 4.12418 \n", "1984-02-05 4.44999 4.39795 4.42397 4.37192 4.35943 5.02251 4.12418 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64\n", "Mean Absolute Error: 0.101043295151\n", "Explained Variance Score: 0.769182909465\n", "Mean Squared Error: 0.0161008843587\n", "R2 score: 0.617638917329\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1986-01-22 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 7.36443 \n", "1986-01-23 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 \n", "1986-01-24 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 \n", "1986-01-25 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 \n", "1986-01-26 7.39064 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1986-01-22 7.36443 7.39064 7.48289 ... 5.14013 5.16512 5.15262 \n", "1986-01-23 7.36443 7.36443 7.39064 ... 5.08809 5.14013 5.16512 \n", "1986-01-24 7.43048 7.36443 7.36443 ... 5.17865 5.08809 5.14013 \n", "1986-01-25 7.41685 7.43048 7.36443 ... 5.14013 5.17865 5.08809 \n", "1986-01-26 7.40322 7.41685 7.43048 ... 5.25672 5.14013 5.17865 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1986-01-22 4.98399 4.99648 4.90488 5.15262 5.20467 7.5741 4.89239 \n", "1986-01-23 5.15262 4.98399 4.99648 4.90488 5.15262 7.5741 4.89239 \n", "1986-01-24 5.16512 5.15262 4.98399 4.99648 4.90488 7.5741 4.89239 \n", "1986-01-25 5.14013 5.16512 5.15262 4.98399 4.99648 7.5741 4.90488 \n", "1986-01-26 5.08809 5.14013 5.16512 5.15262 4.98399 7.5741 4.91841 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64\n", "Mean Absolute Error: 0.212433916939\n", "Explained Variance Score: 0.908541965433\n", "Mean Squared Error: 0.0861793881797\n", "R2 score: 0.881980679802\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-14 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 6.44985 \n", "1988-01-15 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 \n", "1988-01-16 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 \n", "1988-01-17 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 \n", "1988-01-18 6.23485 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1988-01-14 6.49069 6.42297 6.50359 ... 5.67454 5.72782 5.70118 \n", "1988-01-15 6.44985 6.49069 6.42297 ... 5.74168 5.67454 5.72782 \n", "1988-01-16 6.43695 6.44985 6.49069 ... 5.72782 5.74168 5.67454 \n", "1988-01-17 6.42297 6.43695 6.44985 ... 5.6479 5.72782 5.74168 \n", "1988-01-18 6.36922 6.42297 6.43695 ... 5.70118 5.6479 5.72782 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1988-01-14 5.66069 5.79496 5.72782 5.71397 5.6479 6.62399 5.62126 \n", "1988-01-15 5.70118 5.66069 5.79496 5.72782 5.71397 6.62399 5.62126 \n", "1988-01-16 5.72782 5.70118 5.66069 5.79496 5.72782 6.62399 5.62126 \n", "1988-01-17 5.67454 5.72782 5.70118 5.66069 5.79496 6.62399 5.62126 \n", "1988-01-18 5.74168 5.67454 5.72782 5.70118 5.66069 6.62399 5.62126 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64\n", "Mean Absolute Error: 0.104323850003\n", "Explained Variance Score: 0.850284924048\n", "Mean Squared Error: 0.0187007596422\n", "R2 score: 0.835576466493\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-01-05 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 8.25312 \n", "1990-01-06 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 \n", "1990-01-07 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 \n", "1990-01-08 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 \n", "1990-01-09 7.67357 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1990-01-05 8.30842 8.46105 8.41902 ... 8.62105 8.71769 8.73087 \n", "1990-01-06 8.25312 8.30842 8.46105 ... 8.71769 8.62105 8.71769 \n", "1990-01-07 8.06067 8.25312 8.30842 ... 8.64851 8.71769 8.62105 \n", "1990-01-08 7.92131 8.06067 8.25312 ... 8.57932 8.64851 8.71769 \n", "1990-01-09 7.92131 7.92131 8.06067 ... 8.4695 8.57932 8.64851 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1990-01-05 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 7.57546 \n", "1990-01-06 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 7.57546 \n", "1990-01-07 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 7.57546 \n", "1990-01-08 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 7.57546 \n", "1990-01-09 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 7.57546 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64\n", "Mean Absolute Error: 0.210351894406\n", "Explained Variance Score: 0.741325230038\n", "Mean Squared Error: 0.0765172809939\n", "R2 score: 0.70389414274\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-12-31 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 5.7994 \n", "1992-01-01 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 \n", "1992-01-02 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 \n", "1992-01-03 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 \n", "1992-01-04 6.19833 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1991-12-31 5.7994 5.75608 5.71277 ... 5.01791 5.03265 5.11657 \n", "1992-01-01 5.7994 5.7994 5.75608 ... 4.96121 5.01791 5.03265 \n", "1992-01-02 5.82675 5.7994 5.7994 ... 4.90451 4.96121 5.01791 \n", "1992-01-03 5.74241 5.82675 5.7994 ... 4.69245 4.90451 4.96121 \n", "1992-01-04 5.72759 5.74241 5.82675 ... 4.80585 4.69245 4.90451 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1991-12-31 5.11657 5.15966 5.22997 5.21636 5.18801 5.87006 4.67712 \n", "1992-01-01 5.11657 5.11657 5.15966 5.22997 5.21636 5.95555 4.67712 \n", "1992-01-02 5.03265 5.11657 5.11657 5.15966 5.22997 6.14134 4.67712 \n", "1992-01-03 5.01791 5.03265 5.11657 5.11657 5.15966 6.1687 4.67712 \n", "1992-01-04 4.96121 5.01791 5.03265 5.11657 5.11657 6.22569 4.67712 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64\n", "Mean Absolute Error: 0.183122699785\n", "Explained Variance Score: 0.66511338143\n", "Mean Squared Error: 0.0658789640265\n", "R2 score: 0.599655687338\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-12-22 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 8.78214 \n", "1993-12-23 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 \n", "1993-12-24 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 \n", "1993-12-25 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 \n", "1993-12-26 8.846 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1993-12-22 8.99938 9.09992 9.14267 ... 9.21296 9.2268 9.08263 \n", "1993-12-23 8.78214 8.99938 9.09992 ... 9.3133 9.21296 9.2268 \n", "1993-12-24 8.83992 8.78214 8.99938 ... 9.32829 9.3133 9.21296 \n", "1993-12-25 8.78214 8.83992 8.78214 ... 9.45747 9.32829 9.3133 \n", "1993-12-26 8.94161 8.78214 8.83992 ... 9.6743 9.45747 9.32829 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1993-12-22 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.65272 \n", "1993-12-23 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.65272 \n", "1993-12-24 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.65272 \n", "1993-12-25 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.65272 \n", "1993-12-26 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.65272 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64\n", "Mean Absolute Error: 0.158445846768\n", "Explained Variance Score: 0.620247529876\n", "Mean Squared Error: 0.0465380189471\n", "R2 score: 0.60132021659\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-12-13 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 15.4516 \n", "1995-12-14 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 \n", "1995-12-15 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 \n", "1995-12-16 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 \n", "1995-12-17 15.8276 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1995-12-13 15.7456 15.7738 16.0396 ... 15.3418 15.4298 15.4298 \n", "1995-12-14 15.4516 15.7456 15.7738 ... 15.1071 15.3418 15.4298 \n", "1995-12-15 15.5329 15.4516 15.7456 ... 15.2538 15.1071 15.3418 \n", "1995-12-16 15.5482 15.5329 15.4516 ... 15.357 15.2538 15.1071 \n", "1995-12-17 15.6354 15.5482 15.5329 ... 15.4004 15.357 15.2538 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1995-12-13 15.1364 15.1071 15.3124 15.4298 15.2397 17.2886 14.6378 \n", "1995-12-14 15.4298 15.1364 15.1071 15.3124 15.4298 17.2886 14.6378 \n", "1995-12-15 15.4298 15.4298 15.1364 15.1071 15.3124 17.2886 14.6378 \n", "1995-12-16 15.3418 15.4298 15.4298 15.1364 15.1071 17.2886 14.6378 \n", "1995-12-17 15.1071 15.3418 15.4298 15.4298 15.1364 17.2886 14.6378 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64\n", "Mean Absolute Error: 0.287728749471\n", "Explained Variance Score: 0.938381959646\n", "Mean Squared Error: 0.147641443939\n", "R2 score: 0.93566576996\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-12-04 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 20.2949 \n", "1997-12-05 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 \n", "1997-12-06 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 \n", "1997-12-07 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 \n", "1997-12-08 20.5831 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1997-12-04 20.462 20.6121 21.1885 ... 20.5119 20.9197 21.2069 \n", "1997-12-05 20.2949 20.462 20.6121 ... 20.6036 20.5119 20.9197 \n", "1997-12-06 20.1278 20.2949 20.462 ... 20.6928 20.6036 20.5119 \n", "1997-12-07 19.9172 20.1278 20.2949 ... 20.9197 20.6928 20.6036 \n", "1997-12-08 19.8276 19.9172 20.1278 ... 21.4023 20.9197 20.6928 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1997-12-04 20.8883 21.2358 20.7387 21.0403 22.0346 23.0966 19.4643 \n", "1997-12-05 21.2069 20.8883 21.2358 20.7387 21.0403 23.0966 19.4643 \n", "1997-12-06 20.9197 21.2069 20.8883 21.2358 20.7387 23.0966 19.4643 \n", "1997-12-07 20.5119 20.9197 21.2069 20.8883 21.2358 23.0966 19.4643 \n", "1997-12-08 20.6036 20.5119 20.9197 21.2069 20.8883 23.0966 19.4643 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64\n", "Mean Absolute Error: 0.597633444026\n", "Explained Variance Score: 0.503137515046\n", "Mean Squared Error: 0.589490186568\n", "R2 score: 0.482368816144\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-11-26 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 26.6624 \n", "1999-11-27 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 \n", "1999-11-28 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 \n", "1999-11-29 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 \n", "1999-11-30 25.0023 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1999-11-26 26.2385 26.1124 25.9862 ... 26.9688 26.5628 26.1569 \n", "1999-11-27 26.6624 26.2385 26.1124 ... 26.7533 26.9688 26.5628 \n", "1999-11-28 26.4959 26.6624 26.2385 ... 26.5027 26.7533 26.9688 \n", "1999-11-29 26.1881 26.4959 26.6624 ... 26.3423 26.5027 26.7533 \n", "1999-11-30 26.2284 26.1881 26.4959 ... 26.623 26.3423 26.5027 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1999-11-26 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 22.767 \n", "1999-11-27 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 22.767 \n", "1999-11-28 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 22.767 \n", "1999-11-29 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 22.767 \n", "1999-11-30 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 22.767 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64\n", "Mean Absolute Error: 0.701837927805\n", "Explained Variance Score: 0.61258560237\n", "Mean Squared Error: 0.807580404799\n", "R2 score: 0.6103741195\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-11-21 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 20.8021 \n", "2001-11-22 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 \n", "2001-11-23 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 \n", "2001-11-24 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 \n", "2001-11-25 20.6785 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2001-11-21 20.8719 20.8558 20.9633 ... 21.771 22.2762 21.2179 \n", "2001-11-22 20.8021 20.8719 20.8558 ... 21.4998 21.771 22.2762 \n", "2001-11-23 20.2432 20.8021 20.8719 ... 21.1701 21.4998 21.771 \n", "2001-11-24 20.2486 20.2432 20.8021 ... 21.0584 21.1701 21.4998 \n", "2001-11-25 20.399 20.2486 20.2432 ... 20.633 21.0584 21.1701 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2001-11-21 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 18.6311 \n", "2001-11-22 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 18.6311 \n", "2001-11-23 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 18.6311 \n", "2001-11-24 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 18.6311 \n", "2001-11-25 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 18.6311 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64\n", "Mean Absolute Error: 0.901971504049\n", "Explained Variance Score: 0.812150385253\n", "Mean Squared Error: 1.39923634887\n", "R2 score: 0.736584033371\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-11-14 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 34.4386 \n", "2003-11-15 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 \n", "2003-11-16 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 \n", "2003-11-17 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 \n", "2003-11-18 35.9577 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2003-11-14 34.3577 34.7736 34.6003 ... 33.5442 33.1944 33.0052 \n", "2003-11-15 34.4386 34.3577 34.7736 ... 32.8962 33.5442 33.1944 \n", "2003-11-16 34.9527 34.4386 34.3577 ... 32.9937 32.8962 33.5442 \n", "2003-11-17 35.0335 34.9527 34.4386 ... 33.3722 32.9937 32.8962 \n", "2003-11-18 34.9411 35.0335 34.9527 ... 33.0052 33.3722 32.9937 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2003-11-14 32.7585 33.0338 33.3206 32.5234 32.3628 35.8711 32.0187 \n", "2003-11-15 33.0052 32.7585 33.0338 33.3206 32.5234 35.8711 32.5005 \n", "2003-11-16 33.1944 33.0052 32.7585 33.0338 33.3206 36.0733 32.6941 \n", "2003-11-17 33.5442 33.1944 33.0052 32.7585 33.0338 36.079 32.6941 \n", "2003-11-18 32.8962 33.5442 33.1944 33.0052 32.7585 36.1079 32.6941 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64\n", "Mean Absolute Error: 0.570240576978\n", "Explained Variance Score: 0.883135670682\n", "Mean Squared Error: 0.543397166296\n", "R2 score: 0.840783709451\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-11-15 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 39.2664 \n", "2005-11-16 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 \n", "2005-11-17 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 \n", "2005-11-18 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 \n", "2005-11-19 38.755 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2005-11-15 39.2171 40.0858 40.1844 ... 40.2947 39.7082 39.8304 \n", "2005-11-16 39.2664 39.2171 40.0858 ... 39.8304 40.2947 39.7082 \n", "2005-11-17 38.7119 39.2664 39.2171 ... 39.7449 39.8304 40.2947 \n", "2005-11-18 39.1863 38.7119 39.2664 ... 39.7571 39.7449 39.8304 \n", "2005-11-19 39.1308 39.1863 38.7119 ... 40.4413 39.7571 39.7449 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2005-11-15 40.0442 39.6227 40.2275 40.7162 39.867 42.5812 37.763 \n", "2005-11-16 39.8304 40.0442 39.6227 40.2275 40.7162 42.5812 37.763 \n", "2005-11-17 39.7082 39.8304 40.0442 39.6227 40.2275 42.5812 37.763 \n", "2005-11-18 40.2947 39.7082 39.8304 40.0442 39.6227 42.5812 37.763 \n", "2005-11-19 39.8304 40.2947 39.7082 39.8304 40.0442 42.5812 37.763 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64\n", "Mean Absolute Error: 0.805184356548\n", "Explained Variance Score: 0.654726098599\n", "Mean Squared Error: 1.0911864143\n", "R2 score: 0.607901692497\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-11-08 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 28.4939 \n", "2007-11-09 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 \n", "2007-11-10 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 \n", "2007-11-11 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 \n", "2007-11-12 29.1031 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2007-11-08 27.9387 29.9291 29.4484 ... 34.1229 34.7269 34.4681 \n", "2007-11-09 28.4939 27.9387 29.9291 ... 34.1561 34.1229 34.7269 \n", "2007-11-10 28.0538 28.4939 27.9387 ... 36.2071 34.1561 34.1229 \n", "2007-11-11 27.607 28.0538 28.4939 ... 36.6119 36.2071 34.1561 \n", "2007-11-12 28.9068 27.607 28.0538 ... 35.9084 36.6119 36.2071 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2007-11-08 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-11-09 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-11-10 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-11-11 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-11-12 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64\n", "Mean Absolute Error: 1.56779790378\n", "Explained Variance Score: 0.910623053074\n", "Mean Squared Error: 4.56773993183\n", "R2 score: 0.895897673607\n", "Errors: [Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64, Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64, Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64, Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64, Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64, Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64, Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64, Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64, Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64, Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64, Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64, Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64, Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64, Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64, Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64]\n", "Daily error: [[2.6862566648548238, 2.8732187489270236, 1.3256064617379473, 2.1600519846869646, 1.2235156291439226, 1.305420663991631, 2.0685360603124372, 1.0875370689226691, 1.0580095307028299, 2.0217217081378305, 2.0537492673878845, 2.4976641398052424, 1.1175050339269137, 1.3645755070232506, 4.0144579037852735], [4.0592999976323814, 3.9678510989277207, 1.9701678416738304, 3.1636611153866219, 1.7692200297767153, 2.0939347787175921, 3.1255411549111267, 1.5935961405005887, 1.6621738433483118, 2.8422732907658617, 2.8428406166970612, 3.7016790635281951, 1.5881359065976202, 1.838708716353143, 5.2950310548423047], [5.2012518896016813, 4.8595851174817444, 2.4015165262481593, 3.9663184853702087, 2.0937319599079633, 2.725889802618255, 4.0256221884370413, 2.0881478237011293, 2.1198589394936009, 3.4394436515955458, 3.1903941017651203, 4.5898554829578231, 1.9260258581576921, 2.1713779643400297, 5.7435946634475581], [6.2376680609655004, 5.1906888229530841, 2.7333023116243766, 4.771870644055527, 2.3317264370474895, 3.2484164567711518, 4.8235413121812867, 2.44198402513774, 2.4877734757315642, 3.9035877213534098, 3.4596893962513113, 5.3691221960409514, 2.2172821574031762, 2.5155067947627172, 6.6214749061448526], [7.101348672465936, 5.5598705130212815, 2.9861408788558754, 5.5072501857210723, 2.6000741043961906, 3.7020463356701927, 5.5006034680471787, 2.7726485729779609, 2.8237001385613416, 4.2351005173762228, 3.7102018424167729, 6.1433467552325984, 2.4636478733847298, 2.8408545898388282, 7.3789947893347989], [7.9277550527409595, 5.7625298134685217, 3.2529086470869495, 6.1356457071558008, 2.8329554445052851, 4.0602549841923929, 6.1326462265073882, 3.0168250033454465, 3.1420826313227979, 4.5159739803948229, 3.93149884705644, 6.8548130816086976, 2.7183436027777019, 3.1374226069422688, 8.1094147478977305], [8.7018642223453728, 6.1191921810565226, 3.5381132656657028, 6.6786375127786863, 3.0316781856016899, 4.3423819076586243, 6.6589006154937413, 3.2298492480472585, 3.4452102937068454, 4.7210730604544686, 4.2033108503209542, 7.4993260970943192, 2.9790689586399646, 3.4016567175540446, 8.8936393091082984]]\n", "Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 100 days' worth of prior data\n", "\n", "execute(steps=15, days=100, buffer_step = 500)\n", "\n", "# Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2 Adding Oil Stock Prices (GAIA)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1932616BP2014-09-2445.8245.8845.3645.516237900.00.01.040.666021...2014-09-246.756.956.6456.942014-09-246676.086707.266651.986706.27
1932617BP2014-09-2544.9644.9943.8944.0615355000.00.01.039.902756...2014-09-256.946.946.7006.702014-09-256706.276726.406621.486639.71
1932618BP2014-09-2643.9444.5543.8144.367105500.00.01.038.997489...2014-09-266.706.746.6306.702014-09-266639.716664.006615.126649.39
1932619BP2014-09-2944.2544.7244.1444.544460900.00.01.039.272619...2014-09-296.626.696.5706.622014-09-296649.396653.946608.666646.60
1932620BP2014-09-3044.0444.2243.8043.956834500.00.01.039.086241...2014-09-306.617.416.6107.342014-09-306646.606658.916601.626622.72
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1932616 BP 2014-09-24 45.82 45.88 45.36 45.51 6237900.0 \n", "1932617 BP 2014-09-25 44.96 44.99 43.89 44.06 15355000.0 \n", "1932618 BP 2014-09-26 43.94 44.55 43.81 44.36 7105500.0 \n", "1932619 BP 2014-09-29 44.25 44.72 44.14 44.54 4460900.0 \n", "1932620 BP 2014-09-30 44.04 44.22 43.80 43.95 6834500.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open ... GAIA Date \\\n", "1932616 0.0 1.0 40.666021 ... 2014-09-24 \n", "1932617 0.0 1.0 39.902756 ... 2014-09-25 \n", "1932618 0.0 1.0 38.997489 ... 2014-09-26 \n", "1932619 0.0 1.0 39.272619 ... 2014-09-29 \n", "1932620 0.0 1.0 39.086241 ... 2014-09-30 \n", "\n", " GAIA Adj. Open GAIA Adj. High GAIA Adj. Low GAIA Adj. Close \\\n", "1932616 6.75 6.95 6.645 6.94 \n", "1932617 6.94 6.94 6.700 6.70 \n", "1932618 6.70 6.74 6.630 6.70 \n", "1932619 6.62 6.69 6.570 6.62 \n", "1932620 6.61 7.41 6.610 7.34 \n", "\n", " FTSE Date FTSE Open FTSE High FTSE Low FTSE Close \n", "1932616 2014-09-24 6676.08 6707.26 6651.98 6706.27 \n", "1932617 2014-09-25 6706.27 6726.40 6621.48 6639.71 \n", "1932618 2014-09-26 6639.71 6664.00 6615.12 6649.39 \n", "1932619 2014-09-29 6649.39 6653.94 6608.66 6646.60 \n", "1932620 2014-09-30 6646.60 6658.91 6601.62 6622.72 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create dataframe with BP and GAIA data in overlapping date range\n", "# Date range: 1999-10-29 to 2014-09-30\n", "# `bp_gaia_start` etc defined in Feature Engineering section 1.2.2.2\n", "bp_gaia = bp.loc[bp_gaia_start:bp_gaia_start+bp_gaia_intersect_length-1]\n", "\n", "# Check it ends at the right date\n", "bp_gaia.tail()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3753" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(bp_gaia)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add GAIA data.\n", "\n", "# Potential improvement: Generalise `prepare_train_test` function instead\n", "# of copy and pasting it and making a new function.\n", "def prepare_train_test_with_gaia(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_gaia): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days`: the number of days prior we consider (the prices of)\n", " `periods`: the total number of datapoints used (training + test)\n", " \"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # GAIA cols\n", " for j in range(1,days+1):\n", " columns.append('GAIA i-%s' % str(j))\n", " columns.append('GAIA Adj. High')\n", " columns.append('GAIA Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['GAIA i-%s' % str(days-j)] = df.iloc[buffer+i+j]['GAIA %s' % str(target)]\n", " features.iloc[i]['GAIA Adj. High'] = max(df[buffer+i:buffer+i+days]['GAIA Adj. High'])\n", " features.iloc[i]['GAIA Adj. Low'] = min(df[buffer+i:buffer+i+days]['GAIA Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_gaia(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + GAIA data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_gaia(days=days, periods=periods, buffer=buffer, df=bp_gaia)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64\n", "Mean Absolute Error: 0.390417267381\n", "Explained Variance Score: 0.853744159868\n", "Mean Squared Error: 0.253189951823\n", "R2 score: 0.846876833577\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64\n", "Mean Absolute Error: 0.640084309346\n", "Explained Variance Score: 0.937272372234\n", "Mean Squared Error: 0.720859692963\n", "R2 score: 0.86521356578\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64\n", "Mean Absolute Error: 0.559376996819\n", "Explained Variance Score: 0.848725761062\n", "Mean Squared Error: 0.504733717139\n", "R2 score: 0.836876888323\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64\n", "Mean Absolute Error: 0.807669964064\n", "Explained Variance Score: 0.513947367438\n", "Mean Squared Error: 1.11918208013\n", "R2 score: 0.47656012379\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64\n", "Mean Absolute Error: 0.784485223446\n", "Explained Variance Score: 0.611742357358\n", "Mean Squared Error: 1.08805000734\n", "R2 score: 0.59682736149\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64\n", "Mean Absolute Error: 0.823528275858\n", "Explained Variance Score: 0.854979604454\n", "Mean Squared Error: 1.21173657923\n", "R2 score: 0.848280893753\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64\n", "Mean Absolute Error: 1.08202656801\n", "Explained Variance Score: 0.785807434633\n", "Mean Squared Error: 2.18729500527\n", "R2 score: 0.771849063305\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64\n", "Mean Absolute Error: 1.64293719873\n", "Explained Variance Score: 0.701929531055\n", "Mean Squared Error: 4.86875519644\n", "R2 score: 0.576854711057\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64\n", "Mean Absolute Error: 1.09213527916\n", "Explained Variance Score: 0.877782414782\n", "Mean Squared Error: 1.85736866345\n", "R2 score: 0.823140444507\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64\n", "Mean Absolute Error: 1.26399823305\n", "Explained Variance Score: 0.917408689638\n", "Mean Squared Error: 3.26079876466\n", "R2 score: 0.904206507456\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64\n", "Mean Absolute Error: 0.949041466517\n", "Explained Variance Score: 0.760114297454\n", "Mean Squared Error: 1.50840397037\n", "R2 score: 0.751639652033\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64\n", "Mean Absolute Error: 0.83600905218\n", "Explained Variance Score: 0.749597354718\n", "Mean Squared Error: 1.16224774383\n", "R2 score: 0.742591965811\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64\n", "Mean Absolute Error: 0.557442173078\n", "Explained Variance Score: 0.46981043696\n", "Mean Squared Error: 0.522034902854\n", "R2 score: 0.465782842549\n", "Errors: [Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64, Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64, Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64, Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64, Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64, Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64, Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64, Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64, Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64, Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64, Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64, Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64, Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64]\n", "Daily error: [[1.3416274627176741, 1.2253222561285753, 1.0255495409576574, 1.266776829926521, 1.1982064351141712, 1.310712301821582, 1.7298817238551929, 3.8921754249906253, 1.6629575970691628, 3.0941354597945034, 2.0330820163702419, 1.7164225319161091, 1.1686884331757421], [1.7150760880207037, 1.8964172603677423, 1.4834673922912223, 1.8554594521723491, 1.6787503849419985, 1.8263483157031517, 2.3241398333250651, 5.2355080851844216, 2.3752099271864098, 4.4270718273765972, 2.9025947293955445, 2.4521487734937994, 1.5958526122466832], [2.0477430054053203, 2.3723857338154257, 1.7988798566364699, 2.2637800713580867, 2.0641570748232887, 2.1815157366804447, 2.8355986521448, 5.9932443782633227, 2.9633965226109846, 5.2083198103473851, 3.5852639670979616, 2.9819102400068132, 1.8925844623819319], [2.3097316999351953, 2.8071999746923053, 2.0500517838892773, 2.6324197507576557, 2.4726133505762671, 2.5425603577844873, 3.2307653588653578, 7.1525225718155419, 3.4134342032425726, 6.2465795890314988, 4.0172291702026053, 3.4643390217868517, 2.1742172950593774], [2.5975117870884237, 3.2335105558655264, 2.2739368989119333, 2.9489855905646274, 2.8044131318548891, 2.870944054320459, 3.7485731532447448, 8.3852639729218854, 3.8372768182949173, 7.2493788386688047, 4.3865708556257568, 3.7613389113197311, 2.3577017695179605], [2.7408301709503315, 3.6348871408243957, 2.4565607234069882, 3.2327235750256049, 3.1394000107197346, 3.1446997267702699, 4.354234736214309, 9.4347187346765544, 4.2807532074257058, 8.2875526190580011, 4.6089459172836937, 3.9769158354848391, 2.5282971175926079], [2.855423021053821, 4.0729371465412827, 2.6544296847203288, 3.4571876639216557, 3.4085147945800864, 3.3865251171130839, 4.7922194765634272, 10.64932394540064, 4.6834300530757496, 9.5173590389649085, 4.8463224597302119, 4.1659653260441791, 2.632187257416279]]\n", "Mean daily error: [1.743502924141366, 2.4436957447465919, 2.9375984239670951, 3.4241280098183839, 3.8811851029384354, 4.2938861165717714, 4.701678845009666]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of BP and GAIA data\n", "execute_with_gaia(steps=13)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64\n", "Mean Absolute Error: 0.411869432422\n", "Explained Variance Score: 0.860958167317\n", "Mean Squared Error: 0.278323948034\n", "R2 score: 0.821867759953\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64\n", "Mean Absolute Error: 0.606986183256\n", "Explained Variance Score: 0.932648097155\n", "Mean Squared Error: 0.66024635669\n", "R2 score: 0.868677365951\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64\n", "Mean Absolute Error: 0.559944807019\n", "Explained Variance Score: 0.833869148805\n", "Mean Squared Error: 0.505571476681\n", "R2 score: 0.823962424354\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64\n", "Mean Absolute Error: 0.821987533814\n", "Explained Variance Score: 0.46989388159\n", "Mean Squared Error: 1.15104795599\n", "R2 score: 0.430126472698\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64\n", "Mean Absolute Error: 0.817292176686\n", "Explained Variance Score: 0.605237375421\n", "Mean Squared Error: 1.16563063035\n", "R2 score: 0.588600663963\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64\n", "Mean Absolute Error: 0.855518357378\n", "Explained Variance Score: 0.855221593528\n", "Mean Squared Error: 1.28660241537\n", "R2 score: 0.84831538254\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64\n", "Mean Absolute Error: 1.1189552901\n", "Explained Variance Score: 0.781265137134\n", "Mean Squared Error: 2.30617202977\n", "R2 score: 0.76007064928\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64\n", "Mean Absolute Error: 1.74362867052\n", "Explained Variance Score: 0.676636001157\n", "Mean Squared Error: 5.47659375935\n", "R2 score: 0.50027082935\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64\n", "Mean Absolute Error: 1.06057828555\n", "Explained Variance Score: 0.877606203974\n", "Mean Squared Error: 1.77876224515\n", "R2 score: 0.831199539803\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64\n", "Mean Absolute Error: 1.28699529802\n", "Explained Variance Score: 0.905327333598\n", "Mean Squared Error: 3.46556542013\n", "R2 score: 0.892876435992\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64\n", "Mean Absolute Error: 0.957755739612\n", "Explained Variance Score: 0.758091797889\n", "Mean Squared Error: 1.51735582203\n", "R2 score: 0.751963233546\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64\n", "Mean Absolute Error: 0.828153458555\n", "Explained Variance Score: 0.748810119642\n", "Mean Squared Error: 1.15885573253\n", "R2 score: 0.739717381937\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64\n", "Mean Absolute Error: 0.536701478378\n", "Explained Variance Score: 0.501934925031\n", "Mean Squared Error: 0.493473147419\n", "R2 score: 0.496826916953\n", "Errors: [Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64, Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64, Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64, Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64, Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64, Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64, Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64, Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64, Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64, Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64, Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64, Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64, Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64]\n", "Daily error: [[1.3231776216477114, 1.1980342560885635, 1.0337559381524328, 1.2807686653343162, 1.2456589674532657, 1.3280813790944388, 1.7103664889037826, 3.9654429549097601, 1.6030301361552719, 3.1262859191366834, 2.0575536901156961, 1.7625814480985875, 1.122261076440187], [1.6714227116632154, 1.7937529603665612, 1.4762654529955792, 1.8988415982605655, 1.7986447274603283, 1.8411983204181284, 2.3179232847517244, 5.5067122215563318, 2.2614338115669748, 4.5366470960465399, 2.9088991347268269, 2.509250623322357, 1.5543009007901478], [2.0030655887796156, 2.2380077065815658, 1.780142194025534, 2.3358307699453613, 2.1709139424992134, 2.2349182679689812, 2.9254723250608365, 6.3890225539288785, 2.8520975853223187, 5.3572107545469327, 3.6021525960354821, 3.0062242229108511, 1.8244880060908213], [2.2800381048939928, 2.6718769676440171, 2.0485058953109236, 2.7139945310843472, 2.5292649062139549, 2.6223432174672223, 3.3576365342598042, 7.6482257503288977, 3.3136212289590303, 6.4358480297866265, 4.0176389505663028, 3.4729158251810874, 2.1141046081849635], [2.6130558930393306, 3.0947438014593844, 2.2777450341905157, 2.9928587868727545, 2.8834172521302088, 2.9595736804925212, 3.922805774129059, 8.8953440466338662, 3.7744107155179223, 7.4638214002320096, 4.3930553757686583, 3.7290523761223286, 2.3044743756514912], [2.8253797825024778, 3.4910159576111015, 2.4592393810665074, 3.2417476593438641, 3.2341045345752168, 3.2340433613195385, 4.4995984413286916, 10.009035103965697, 4.1986423675716669, 8.5729105007004449, 4.632208728692107, 3.9248259983154372, 2.4578823506143306], [3.1181366825666315, 3.9477940431715237, 2.6568415237777345, 3.4724030082407742, 3.527884207580871, 3.495192276717217, 4.925807113061305, 11.437354010217145, 4.6016137595911006, 9.8966156891001624, 4.8838613016883965, 4.0961565153048944, 2.5430114038608864]]\n", "Mean daily error: [1.7505383493485149, 2.4673302187634834, 2.9784266548997227, 3.4789241961447055, 3.9464891163261573, 4.3677410898159295, 4.8155901180675889]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of BP and GAIA data\n", "execute_with_gaia(days=10, steps=13)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.3 Adding FTSE100" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1924931BP1984-04-0245.6246.3845.5046.00209700.00.01.04.748742...NaNNaNNaNNaNNaN1984-04-021108.11108.11108.11108.1
1924932BP1984-04-0346.1246.5045.8846.38148900.00.01.04.800788...NaNNaNNaNNaNNaN1984-04-031095.41095.41095.41095.4
1924933BP1984-04-0446.6248.0046.6248.00283800.00.01.04.852835...NaNNaNNaNNaNNaN1984-04-041095.41095.41095.41095.4
1924934BP1984-04-0548.3848.3847.0047.50166400.00.01.05.036040...NaNNaNNaNNaNNaN1984-04-051102.21102.21102.21102.2
1924935BP1984-04-0647.1247.5047.0047.5081500.00.01.04.904882...NaNNaNNaNNaNNaN1984-04-061096.31096.31096.31096.3
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.50 46.00 209700.0 0.0 \n", "1924932 BP 1984-04-03 46.12 46.50 45.88 46.38 148900.0 0.0 \n", "1924933 BP 1984-04-04 46.62 48.00 46.62 48.00 283800.0 0.0 \n", "1924934 BP 1984-04-05 48.38 48.38 47.00 47.50 166400.0 0.0 \n", "1924935 BP 1984-04-06 47.12 47.50 47.00 47.50 81500.0 0.0 \n", "\n", " Split Ratio Adj. Open ... GAIA Date GAIA Adj. Open \\\n", "1924931 1.0 4.748742 ... NaN NaN \n", "1924932 1.0 4.800788 ... NaN NaN \n", "1924933 1.0 4.852835 ... NaN NaN \n", "1924934 1.0 5.036040 ... NaN NaN \n", "1924935 1.0 4.904882 ... NaN NaN \n", "\n", " GAIA Adj. High GAIA Adj. Low GAIA Adj. Close FTSE Date \\\n", "1924931 NaN NaN NaN 1984-04-02 \n", "1924932 NaN NaN NaN 1984-04-03 \n", "1924933 NaN NaN NaN 1984-04-04 \n", "1924934 NaN NaN NaN 1984-04-05 \n", "1924935 NaN NaN NaN 1984-04-06 \n", "\n", " FTSE Open FTSE High FTSE Low FTSE Close \n", "1924931 1108.1 1108.1 1108.1 1108.1 \n", "1924932 1095.4 1095.4 1095.4 1095.4 \n", "1924933 1095.4 1095.4 1095.4 1095.4 \n", "1924934 1102.2 1102.2 1102.2 1102.2 \n", "1924935 1096.3 1096.3 1096.3 1096.3 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create df with BP and FTSE data\n", "bp_ftse = bp.loc[bp_ftse_start:]\n", "bp_ftse.head()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add FTSE data.\n", "def prepare_train_test_with_ftse(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_ftse, name='FTSE'): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # FTSE cols\n", " for j in range(1,days+1):\n", " columns.append('%s i-%s' % (name, str(j)))\n", " columns.append('%s High' % name)\n", " columns.append('%s Low' % name)\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['%s i-%s' % (name, str(days-j))] = df.iloc[buffer+i+j]['%s %s' % (name, 'Close')]\n", " features.iloc[i]['%s High' % name] = max(df[buffer+i:buffer+i+days]['%s High' % name])\n", " features.iloc[i]['%s Low' % name] = min(df[buffer+i:buffer+i+days]['%s Low' % name])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_ftse(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64\n", "Mean Absolute Error: 0.211015556424\n", "Explained Variance Score: 0.899000260643\n", "Mean Squared Error: 0.101319536893\n", "R2 score: 0.896790144908\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64\n", "Mean Absolute Error: 0.103662027254\n", "Explained Variance Score: 0.810914496372\n", "Mean Squared Error: 0.0191496161364\n", "R2 score: 0.791651910968\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64\n", "Mean Absolute Error: 0.16109328452\n", "Explained Variance Score: 0.509005999538\n", "Mean Squared Error: 0.0448450594299\n", "R2 score: 0.483113556059\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64\n", "Mean Absolute Error: 0.134831719911\n", "Explained Variance Score: 0.940362863942\n", "Mean Squared Error: 0.0312949743422\n", "R2 score: 0.930443446072\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64\n", "Mean Absolute Error: 0.138033710537\n", "Explained Variance Score: 0.808072775502\n", "Mean Squared Error: 0.0334602089163\n", "R2 score: 0.796224083528\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64\n", "Mean Absolute Error: 0.283227004062\n", "Explained Variance Score: 0.94135464242\n", "Mean Squared Error: 0.148338070724\n", "R2 score: 0.940791765118\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64\n", "Mean Absolute Error: 0.592720577547\n", "Explained Variance Score: 0.590618890488\n", "Mean Squared Error: 0.561331819027\n", "R2 score: 0.591291118732\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64\n", "Mean Absolute Error: 0.806309397821\n", "Explained Variance Score: 0.691786541195\n", "Mean Squared Error: 1.15097371293\n", "R2 score: 0.680775196711\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64\n", "Mean Absolute Error: 0.555161284679\n", "Explained Variance Score: 0.783418594845\n", "Mean Squared Error: 0.535944911988\n", "R2 score: 0.778980606844\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64\n", "Mean Absolute Error: 0.601145418071\n", "Explained Variance Score: 0.928081215955\n", "Mean Squared Error: 0.703987908082\n", "R2 score: 0.867484525348\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64\n", "Mean Absolute Error: 0.728988512466\n", "Explained Variance Score: 0.810817817708\n", "Mean Squared Error: 0.896347592801\n", "R2 score: 0.805988449328\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64\n", "Mean Absolute Error: 0.922073321462\n", "Explained Variance Score: 0.85113491032\n", "Mean Squared Error: 1.46122600596\n", "R2 score: 0.850264942708\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64\n", "Mean Absolute Error: 1.17309132125\n", "Explained Variance Score: 0.799408239284\n", "Mean Squared Error: 2.27030564663\n", "R2 score: 0.796642650027\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64\n", "Mean Absolute Error: 0.843137827511\n", "Explained Variance Score: 0.832739639424\n", "Mean Squared Error: 1.16152586731\n", "R2 score: 0.800540577102\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64\n", "Mean Absolute Error: 0.631785589032\n", "Explained Variance Score: 0.609102226738\n", "Mean Squared Error: 0.685708026384\n", "R2 score: 0.61435314998\n", "Errors: [Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64, Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64, Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64, Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64, Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64, Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64, Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64, Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64, Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64, Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64, Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64, Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64, Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64, Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64, Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64]\n", "Daily error: [[2.1093203849638837, 1.0882498665812053, 1.1727221193362856, 1.412586577442704, 0.9378952735856545, 1.0300941063834617, 1.7405932434523412, 2.1849168154032079, 1.609139147394997, 1.1597121603824943, 1.2455832253947525, 1.3370203586317857, 2.8222226244345667, 1.5229049347204531, 1.4034412486597296], [3.137677932962208, 1.5142879962397864, 1.7868339361639278, 2.1822902059145175, 1.3950071506620265, 1.6581419571681995, 2.5994688610024981, 3.150312167798214, 2.2094784630369553, 1.8210669198683502, 1.7831545661313932, 1.9538476861974765, 3.8732839254645901, 2.2895125324881676, 1.9691207311038021], [3.9275897295520128, 1.8580481167789493, 2.2658084022672815, 2.6901289014995937, 1.767085268420445, 2.1449275152997287, 3.2412865657258387, 3.8620255289884353, 2.6511445367500901, 2.3681564296528759, 2.1178502784134459, 2.4027006524959704, 4.4847012689782151, 2.8754387124563219, 2.3383173887217694], [4.8109068581784316, 2.1202592771408266, 2.7240948901950901, 3.0806499448309483, 2.0219604798575306, 2.5452837022717545, 3.7324950514184696, 4.3328167447346981, 3.0359152242486602, 2.8815894798898607, 2.4314952470219375, 2.7936258809738246, 5.1413550904137146, 3.3644214225425011, 2.6694884382791546], [5.6093030750366921, 2.3865041173957149, 3.0906874855810553, 3.3625090179209156, 2.2210374912412818, 2.9087622099011363, 4.1787916887657, 4.7142020078698375, 3.307851012047319, 3.3951893092285954, 2.6908537577255762, 3.1376619968233004, 5.6210588492955305, 3.7242680240618635, 2.8336973969591983], [6.3945931299753953, 2.6514816004326791, 3.3716820089302235, 3.6483218764886902, 2.3863700872043565, 3.2013104222689206, 4.5022040533065981, 5.0931736226381776, 3.5136885049685351, 3.9347008139004784, 2.9018384802534278, 3.3989102445656725, 5.9285358715306176, 4.01961642402006, 2.9085703842103929], [7.2348796444965835, 2.8974138017887943, 3.5583384572569687, 3.9429838565291648, 2.5529337042005769, 3.4398540607220633, 4.7926283817650912, 5.5118415837853485, 3.7316462933370311, 4.4484836960925431, 3.0861939411336166, 3.64371401011475, 6.4010282408578716, 4.2815500163757605, 2.9131303105673707]]\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=7, steps=15, buffer_step=450)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64\n", "Mean Absolute Error: 0.215528703585\n", "Explained Variance Score: 0.89239332126\n", "Mean Squared Error: 0.106333053016\n", "R2 score: 0.889423358708\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64\n", "Mean Absolute Error: 0.10544394771\n", "Explained Variance Score: 0.823015071932\n", "Mean Squared Error: 0.020152560856\n", "R2 score: 0.801681477257\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64\n", "Mean Absolute Error: 0.159314434074\n", "Explained Variance Score: 0.516143726707\n", "Mean Squared Error: 0.0435129876798\n", "R2 score: 0.495386197593\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64\n", "Mean Absolute Error: 0.136614189089\n", "Explained Variance Score: 0.939952177211\n", "Mean Squared Error: 0.0322690576029\n", "R2 score: 0.928442841529\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64\n", "Mean Absolute Error: 0.140535916916\n", "Explained Variance Score: 0.809072502567\n", "Mean Squared Error: 0.0343899561873\n", "R2 score: 0.799698674935\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64\n", "Mean Absolute Error: 0.280129258983\n", "Explained Variance Score: 0.941835339241\n", "Mean Squared Error: 0.143004453044\n", "R2 score: 0.941407871428\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64\n", "Mean Absolute Error: 0.622769626763\n", "Explained Variance Score: 0.549268768233\n", "Mean Squared Error: 0.608912691972\n", "R2 score: 0.544265975032\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64\n", "Mean Absolute Error: 0.822610971931\n", "Explained Variance Score: 0.667388346685\n", "Mean Squared Error: 1.20046660692\n", "R2 score: 0.65660643821\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64\n", "Mean Absolute Error: 0.578147544172\n", "Explained Variance Score: 0.771641543361\n", "Mean Squared Error: 0.577674968314\n", "R2 score: 0.758137073698\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64\n", "Mean Absolute Error: 0.62310658889\n", "Explained Variance Score: 0.935786377244\n", "Mean Squared Error: 0.733200459648\n", "R2 score: 0.866502386196\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64\n", "Mean Absolute Error: 0.753820405372\n", "Explained Variance Score: 0.789718883382\n", "Mean Squared Error: 0.961684765187\n", "R2 score: 0.787036306482\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64\n", "Mean Absolute Error: 0.923211659748\n", "Explained Variance Score: 0.849260130266\n", "Mean Squared Error: 1.4577408598\n", "R2 score: 0.849596798634\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64\n", "Mean Absolute Error: 1.17807639875\n", "Explained Variance Score: 0.811070055435\n", "Mean Squared Error: 2.27195431925\n", "R2 score: 0.80485970809\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64\n", "Mean Absolute Error: 0.811337617748\n", "Explained Variance Score: 0.814434213769\n", "Mean Squared Error: 1.06810231014\n", "R2 score: 0.795783463702\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64\n", "Mean Absolute Error: 0.621253472644\n", "Explained Variance Score: 0.584629646453\n", "Mean Squared Error: 0.678659874536\n", "R2 score: 0.590446476591\n", "Errors: [Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64, Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64, Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64, Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64, Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64, Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64, Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64, Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64, Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64, Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64, Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64, Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64, Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64, Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64, Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64]\n", "Daily error: [[2.1917071373549142, 1.0834175849417413, 1.1790388483576231, 1.4185720767250298, 0.96921873843174433, 1.0389149513076914, 1.7978906762316238, 2.2081130786782364, 1.626428265072178, 1.1688790011372792, 1.2442918199208317, 1.3543393912886921, 2.8279137985254801, 1.4834687450605335, 1.3679706504709863], [3.2551135884486477, 1.5219113117998229, 1.7845167567514877, 2.2058091975797436, 1.4079893663844747, 1.64581116515362, 2.7233218542675242, 3.1854362480671763, 2.2185746552549848, 1.8257198705930926, 1.7965291955873381, 1.9540303097844811, 3.7968068102836212, 2.1882198067251681, 1.9383968951517652], [4.1071642717896424, 1.899441698280516, 2.2520776093061308, 2.7079657528262455, 1.7743659001210701, 2.1122985914925523, 3.356193360147429, 3.977846700859939, 2.6167864392207312, 2.3844631650635484, 2.1738537747800573, 2.383788098908028, 4.3513351771356108, 2.7333448756427385, 2.3176337055862728], [4.9069274993299832, 2.1753970232525957, 2.6855930147788434, 3.0651327146777625, 2.0068103232086885, 2.4837707641410778, 3.878115561655151, 4.5680307683121617, 2.9908780138635374, 2.9145726033700368, 2.496350569513452, 2.7916378601993737, 5.0011359073546746, 3.1891975828644781, 2.6554416096311888], [5.684571865013738, 2.4463368567295891, 3.0361268916304378, 3.3729085591425267, 2.2222876725032874, 2.8291606439532142, 4.3457001749901645, 4.9489701760890119, 3.3523269094516883, 3.484220273558515, 2.7805684594518505, 3.1350021688093856, 5.5633024838786831, 3.5779675235638311, 2.8246714585341386], [6.5457674951850882, 2.6984515540580043, 3.2977446703014217, 3.7227666232643482, 2.4311370551028717, 3.1270319944324179, 4.6977181415685774, 5.2485644247119962, 3.7005685112433282, 4.0597642961603251, 3.0202781279834614, 3.4146913692062437, 5.9173890041333834, 3.8490686937976597, 2.9228497474023731], [7.4729519181537638, 2.9691887750983366, 3.4845684255477578, 4.0859302671068836, 2.6285168571962965, 3.3663785847193122, 5.0597293035706112, 5.539855260240377, 4.0349747441790287, 4.593526881685257, 3.2322257784365647, 3.6331538446606069, 6.4351103994170922, 4.0985222258397407, 2.8998887303961443]]\n", "Mean daily error: [1.5306776509003057, 2.2298791354555303, 2.7432372747440339, 3.1872661210768669, 3.5736081411533376, 3.9102527805700995, 4.2356347997498514]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=10, steps=15, buffer_step=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# We want an array with predictions for our model in a long date range.\n", "# We will consider the max error predictions, that is,\n", "# predictions of adjusted close prices 7 days ahead.\n", "\n", "# Initialise variable\n", "predictions_800_off = []" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Append predictions to `predictions_800_off`.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " print(\"Pred: \", pred)\n", " predictions_800_off.append(pred)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Pared-down execute function that runs train-test cycles and \n", "# appends the predictions to `predictions_800_off` via the function `predict()`.\n", "def execute_viz(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " predict(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "Pred: [[ 7.83601976 7.84714155 7.85292535 ..., 7.89987737 7.91755521\n", " 7.93865868]\n", " [ 7.85539551 7.86158008 7.87498252 ..., 7.90506271 7.91740818\n", " 7.93852032]\n", " [ 7.83170231 7.84749588 7.87738729 ..., 7.89285396 7.91642424\n", " 7.92424915]\n", " ..., \n", " [ 6.36738278 6.39213824 6.39270447 ..., 6.43798347 6.45461204\n", " 6.4751872 ]\n", " [ 6.42016386 6.417325 6.42707883 ..., 6.47916005 6.50267402\n", " 6.51950021]\n", " [ 6.28080118 6.27092368 6.28282955 ..., 6.30547753 6.3252951\n", " 6.3264697 ]]\n", "Buffer: 200\n", "Pred: [[ 6.14075766 6.11117589 6.09574853 ..., 6.07217018 6.07748552\n", " 6.08070167]\n", " [ 6.21540435 6.17492322 6.17149764 ..., 6.1453285 6.13813657\n", " 6.14081275]\n", " [ 6.27753279 6.27307459 6.23843178 ..., 6.24830207 6.24374508\n", " 6.21901832]\n", " ..., \n", " [ 5.75919469 5.78334022 5.79923807 ..., 5.83008595 5.859385\n", " 5.87740631]\n", " [ 5.76238715 5.7892002 5.81412139 ..., 5.85030748 5.88508911\n", " 5.88637507]\n", " [ 5.78833298 5.81875138 5.83850427 ..., 5.88612816 5.8986934\n", " 5.90478152]]\n", "Buffer: 400\n", "Pred: [[ 5.7641509 5.79247187 5.81926042 ..., 5.84616883 5.86198088\n", " 5.87727484]\n", " [ 5.8513131 5.86385014 5.88638345 ..., 5.89063265 5.90502758\n", " 5.90804928]\n", " [ 5.9113665 5.92879268 5.93253659 ..., 5.94752817 5.95264971\n", " 5.95534078]\n", " ..., \n", " [ 6.1998076 6.19815249 6.22826773 ..., 6.25852243 6.2950688\n", " 6.28322814]\n", " [ 6.19140054 6.19932943 6.23777417 ..., 6.25145184 6.25277943\n", " 6.24492933]\n", " [ 6.22481015 6.25710477 6.27123817 ..., 6.28618561 6.29833129\n", " 6.29616353]]\n", "Buffer: 600\n", "Pred: [[ 6.1645113 6.1747009 6.17346569 ..., 6.14073882 6.13655823\n", " 6.15464913]\n", " [ 6.23869668 6.22906726 6.21064429 ..., 6.19525349 6.199533 6.1829646 ]\n", " [ 5.94298817 5.92847236 5.91129748 ..., 5.89322178 5.86434585\n", " 5.87953873]\n", " ..., \n", " [ 8.94246533 8.87626646 8.89060421 ..., 8.84848815 8.85793555\n", " 8.86792794]\n", " [ 8.78322534 8.79037462 8.72943888 ..., 8.72055999 8.7383812\n", " 8.68878426]\n", " [ 8.83433927 8.76940226 8.77364936 ..., 8.77248502 8.72566135\n", " 8.69839892]]\n", "Buffer: 800\n", "Pred: [[ 8.67603806 8.67084409 8.65130791 ..., 8.67378925 8.69676109\n", " 8.69455006]\n", " [ 8.82830315 8.8205379 8.86009166 ..., 8.87552595 8.85568772\n", " 8.84410872]\n", " [ 8.84748948 8.84911858 8.81238761 ..., 8.78189801 8.75265697\n", " 8.72581647]\n", " ..., \n", " [ 7.71616361 7.7100549 7.68435219 ..., 7.6489673 7.61926738\n", " 7.60503466]\n", " [ 7.59805829 7.59515854 7.53381661 ..., 7.5060898 7.47964638\n", " 7.49137924]\n", " [ 7.54657369 7.52483132 7.53333146 ..., 7.50714863 7.52033692\n", " 7.5104685 ]]\n", "Buffer: 1000\n", "Pred: [[ 7.46215011 7.4436282 7.43918656 ..., 7.5010726 7.48113362\n", " 7.48813435]\n", " [ 7.56216243 7.57242677 7.60962549 ..., 7.59408734 7.58687173\n", " 7.59213207]\n", " [ 7.55189234 7.58738691 7.61589834 ..., 7.60049142 7.60064947\n", " 7.60278131]\n", " ..., \n", " [ 6.19883297 6.22711546 6.24523835 ..., 6.30446123 6.33864273\n", " 6.33903875]\n", " [ 6.17836606 6.19567673 6.22059366 ..., 6.29335772 6.30085317\n", " 6.31700372]\n", " [ 6.30048133 6.33373495 6.37895762 ..., 6.41007597 6.40794933\n", " 6.42844116]]\n", "Buffer: 1200\n", "Pred: [[ 6.30754289 6.34315541 6.37136507 ..., 6.34725709 6.3533664\n", " 6.36701006]\n", " [ 6.2183139 6.22645131 6.20859811 ..., 6.19826357 6.21393204\n", " 6.22498325]\n", " [ 6.13231736 6.11064193 6.06756449 ..., 6.10864178 6.12762316\n", " 6.12009367]\n", " ..., \n", " [ 4.93362234 4.93814477 4.93428253 ..., 4.96908178 4.9916257\n", " 5.0119479 ]\n", " [ 4.94855637 4.96672313 4.9753907 ..., 5.01327007 5.04827391\n", " 5.06702398]\n", " [ 4.94109813 4.95766805 4.9861515 ..., 5.00727657 5.02994663\n", " 5.03880748]]\n", "Buffer: 1400\n", "Pred: [[ 4.99871061 5.02010571 5.014281 ..., 5.0026121 4.99747618\n", " 4.97557435]\n", " [ 5.15365698 5.15594044 5.1491617 ..., 5.09127283 5.05670229\n", " 5.06074197]\n", " [ 5.15264849 5.14912635 5.12308927 ..., 5.05939273 5.0643763\n", " 5.04887009]\n", " ..., \n", " [ 6.73631505 6.69817443 6.67661297 ..., 6.63990072 6.64029307\n", " 6.62941594]\n", " [ 6.80586543 6.78280213 6.77308604 ..., 6.73267206 6.70165677\n", " 6.68567721]\n", " [ 6.87717059 6.8713965 6.85461032 ..., 6.80891943 6.78659161\n", " 6.7676666 ]]\n", "Buffer: 1600\n", "Pred: [[ 6.88960025 6.895621 6.91178743 ..., 6.90648271 6.91037924\n", " 6.91464528]\n", " [ 6.92029213 6.93896731 6.93794831 ..., 6.94105214 6.94581302\n", " 6.93479959]\n", " [ 6.94258489 6.94132069 6.93738101 ..., 6.95109387 6.94439441\n", " 6.96149157]\n", " ..., \n", " [ 8.63303575 8.6153931 8.62242329 ..., 8.60348853 8.61375744\n", " 8.62515753]\n", " [ 8.65670167 8.66375148 8.66798893 ..., 8.65346248 8.65856181\n", " 8.64789495]\n", " [ 8.7674598 8.76709683 8.7645547 ..., 8.78059364 8.7585914\n", " 8.76297732]]\n", "Buffer: 1800\n", "Pred: [[ 8.68953042 8.68353244 8.69167093 ..., 8.69226758 8.69669531\n", " 8.70359861]\n", " [ 8.66104825 8.66338749 8.68358337 ..., 8.67084048 8.68664223\n", " 8.67802482]\n", " [ 8.67468363 8.69245015 8.66828894 ..., 8.69130084 8.67790535\n", " 8.69542446]\n", " ..., \n", " [ 10.25132895 10.26123566 10.25052647 ..., 10.2702956 10.28387785\n", " 10.29072272]\n", " [ 10.18370737 10.17290369 10.18125306 ..., 10.2112286 10.21762469\n", " 10.21706292]\n", " [ 10.22958344 10.23782323 10.24337281 ..., 10.26467471 10.25519154\n", " 10.2341133 ]]\n", "Buffer: 2000\n", "Pred: [[ 10.22064293 10.22413787 10.24471743 ..., 10.27029812 10.2744557\n", " 10.28765738]\n", " [ 10.26516025 10.27459074 10.29442757 ..., 10.31496257 10.32870539\n", " 10.33393516]\n", " [ 10.12818121 10.13767282 10.16435904 ..., 10.23174691 10.25429594\n", " 10.27571162]\n", " ..., \n", " [ 11.64694204 11.67793627 11.71878894 ..., 11.72885817 11.73598723\n", " 11.74138426]\n", " [ 11.50646666 11.55801859 11.60061623 ..., 11.59712143 11.60710104\n", " 11.62519194]\n", " [ 11.66543188 11.70375594 11.72575794 ..., 11.7634877 11.80012102\n", " 11.80921948]]\n", "Buffer: 2200\n", "Pred: [[ 11.62959737 11.64537291 11.62913452 ..., 11.63915597 11.63946331\n", " 11.67432874]\n", " [ 11.51306747 11.4921517 11.48731226 ..., 11.48843655 11.5272199\n", " 11.53575298]\n", " [ 11.4459014 11.44132033 11.44303377 ..., 11.43963244 11.4371997\n", " 11.45553989]\n", " ..., \n", " [ 16.22239336 16.21976356 16.22826391 ..., 16.21574299 16.22293648\n", " 16.26595504]\n", " [ 15.98826989 16.00674066 16.03692572 ..., 16.0496106 16.10671921\n", " 16.11635139]\n", " [ 15.79752122 15.88073774 15.95919399 ..., 16.04615273 16.04535607\n", " 16.03367065]]\n", "Buffer: 2400\n", "Pred: [[ 16.04780654 16.10427504 16.15325971 ..., 16.21640137 16.23310984\n", " 16.24580039]\n", " [ 15.93923871 15.96865021 16.01241045 ..., 16.04899501 16.0097939\n", " 16.01058251]\n", " [ 15.95002904 15.99504448 16.00543129 ..., 16.08477758 16.0724383\n", " 16.01255977]\n", " ..., \n", " [ 20.43621626 20.48574881 20.53403285 ..., 20.5853136 20.65182418\n", " 20.70740506]\n", " [ 21.01478432 21.0377329 21.06384251 ..., 21.11292127 21.16689338\n", " 21.25102393]\n", " [ 20.80946572 20.84214892 20.83450899 ..., 20.87816108 20.94758599\n", " 20.97840243]]\n", "Buffer: 2600\n", "Pred: [[ 20.79530755 20.70031722 20.67570255 ..., 20.67175512 20.75003016\n", " 20.7424359 ]\n", " [ 20.51491535 20.51195086 20.47751748 ..., 20.61619501 20.61899275\n", " 20.71100874]\n", " [ 20.88903686 20.83145557 20.76382639 ..., 20.84093447 20.95482155\n", " 20.93470293]\n", " ..., \n", " [ 21.35898088 21.44310834 21.58442593 ..., 21.67728542 21.63729079\n", " 21.76718696]\n", " [ 21.02670418 21.22586046 21.36227848 ..., 21.31522747 21.4562707\n", " 21.61980196]\n", " [ 21.08453035 21.20775213 21.19865266 ..., 21.28921609 21.44822081\n", " 21.56667633]]\n", "Buffer: 2800\n", "Pred: [[ 20.44161666 20.44133304 20.50606671 ..., 20.78067392 20.83525299\n", " 20.88356921]\n", " [ 20.47831642 20.55669655 20.6800365 ..., 20.94345539 21.0255306\n", " 21.09250263]\n", " [ 20.0543866 20.24467179 20.42056851 ..., 20.71879315 20.80801567\n", " 20.8139791 ]\n", " ..., \n", " [ 25.55444964 25.73089496 25.78688107 ..., 25.83001772 25.87363941\n", " 25.94209486]\n", " [ 26.10683785 26.13568262 26.21882171 ..., 26.1706635 26.17482513\n", " 25.99067047]\n", " [ 25.78641012 25.93842086 25.87267253 ..., 26.02785251 25.8333293\n", " 25.74114593]]\n", "Buffer: 3000\n", "Pred: [[ 26.09202122 26.16659026 26.28513376 ..., 26.27827853 26.19880974\n", " 26.29279004]\n", " [ 27.09296713 27.16525979 27.07816223 ..., 26.79828223 26.82462005\n", " 26.80115994]\n", " [ 27.37426618 27.26991991 27.08514753 ..., 26.99525355 27.0364177\n", " 27.06762629]\n", " ..., \n", " [ 25.74252888 25.81395317 25.96051853 ..., 26.19018399 26.25012269\n", " 26.22686022]\n", " [ 24.28942298 24.55436301 24.86490981 ..., 25.19589939 25.32405251\n", " 25.35862108]\n", " [ 24.10812922 24.39599208 24.70467848 ..., 25.0249339 25.12917584\n", " 25.13941702]]\n", "Buffer: 3200\n", "Pred: [[ 23.89936317 24.16238987 24.37814933 ..., 24.6867283 24.73517262\n", " 24.9000166 ]\n", " [ 22.796028 23.03957929 23.36191281 ..., 23.95134918 24.05807653\n", " 24.32577573]\n", " [ 23.98201714 24.24346901 24.60352667 ..., 24.83600538 25.01300299\n", " 25.28700399]\n", " ..., \n", " [ 25.88867191 25.80319669 25.80762619 ..., 25.73744858 25.58444691\n", " 25.6317368 ]\n", " [ 25.74242634 25.69379746 25.73573117 ..., 25.64464014 25.67333293\n", " 25.64796163]\n", " [ 25.3468584 25.36760481 25.38439543 ..., 25.45652486 25.45199294\n", " 25.37327864]]\n", "Buffer: 3400\n", "Pred: [[ 25.98449668 25.98521208 25.95242912 ..., 25.89368463 25.88045388\n", " 25.93171006]\n", " [ 25.76105977 25.70375977 25.63967045 ..., 25.59240848 25.66132277\n", " 25.66463929]\n", " [ 25.23810548 25.19061044 25.23695191 ..., 25.46131797 25.38041014\n", " 25.40377967]\n", " ..., \n", " [ 26.24824289 26.17127915 26.07623138 ..., 25.84710184 25.78029758\n", " 25.70586174]\n", " [ 26.19759651 26.09744315 25.92235382 ..., 25.63588018 25.63291115\n", " 25.59553912]\n", " [ 25.77531313 25.60455853 25.42752481 ..., 25.30530249 25.33317719\n", " 25.22147558]]\n", "Buffer: 3600\n", "Pred: [[ 25.40656908 25.27074144 25.21409378 ..., 25.28521185 25.22632841\n", " 25.16945681]\n", " [ 25.18921491 25.07334629 25.05299874 ..., 24.94128607 24.95502997\n", " 24.95791613]\n", " [ 24.81985555 24.80298349 24.7612829 ..., 24.59692495 24.58690609\n", " 24.58263133]\n", " ..., \n", " [ 26.0389708 25.93263093 25.87256265 ..., 25.77298706 25.6439993\n", " 25.58368641]\n", " [ 26.56849541 26.50595118 26.36715477 ..., 26.37166457 26.3312083\n", " 26.14700985]\n", " [ 26.80613189 26.67530444 26.66849488 ..., 26.59946944 26.42169587\n", " 26.33018949]]\n", "Buffer: 3800\n", "Pred: [[ 26.06044987 26.12046614 26.05471894 ..., 25.93053422 25.96502619\n", " 25.96056563]\n", " [ 26.03326405 25.99975566 25.8123115 ..., 25.6606701 25.76405528\n", " 25.65340638]\n", " [ 26.56229083 26.42947167 26.36848794 ..., 26.51685341 26.46719925\n", " 26.41071161]\n", " ..., \n", " [ 21.28992895 21.33566945 21.43008967 ..., 21.71406469 21.85169081\n", " 21.92897556]\n", " [ 21.21583534 21.37312981 21.57666978 ..., 21.84861172 21.88918311\n", " 21.93881172]\n", " [ 21.1126037 21.34119817 21.47466187 ..., 21.63830162 21.80664827\n", " 21.87502314]]\n", "Buffer: 4000\n", "Pred: [[ 21.24389337 21.37252773 21.35683562 ..., 21.48408902 21.48832578\n", " 21.4263668 ]\n", " [ 21.22127677 21.24046477 21.34895607 ..., 21.41706179 21.37656328\n", " 21.35550317]\n", " [ 21.43282338 21.46888922 21.493978 ..., 21.51923313 21.50631784\n", " 21.53775008]\n", " ..., \n", " [ 26.79653366 26.64113656 26.49911428 ..., 26.25092122 26.10219452\n", " 25.9559183 ]\n", " [ 26.50290012 26.38396506 26.21567803 ..., 26.05643976 25.92729177\n", " 25.75297956]\n", " [ 26.49228551 26.2948515 26.14185587 ..., 25.91011466 25.7620661\n", " 25.60436813]]\n", "Buffer: 4200\n", "Pred: [[ 26.59862697 26.53265571 26.46607521 ..., 26.31185187 26.22269463\n", " 26.15406759]\n", " [ 26.55732047 26.49355051 26.42777149 ..., 26.2624713 26.21316348\n", " 26.13021364]\n", " [ 26.38850061 26.32645169 26.21572275 ..., 26.15394371 26.11911926\n", " 25.99641195]\n", " ..., \n", " [ 34.39713553 34.08620781 33.9011808 ..., 33.34027792 33.04665311\n", " 32.89668644]\n", " [ 33.98517109 33.82119053 33.5508494 ..., 33.05718995 32.86762085\n", " 32.58866132]\n", " [ 33.8906325 33.64126562 33.39516092 ..., 32.95667114 32.6643352\n", " 32.42929969]]\n", "Buffer: 4400\n", "Pred: [[ 34.41874727 34.43546507 34.39947704 ..., 34.34448666 34.32896368\n", " 34.34120397]\n", " [ 34.46582211 34.4089387 34.43652649 ..., 34.3424298 34.30309225\n", " 34.3895445 ]\n", " [ 34.59749054 34.58828052 34.57559093 ..., 34.53213034 34.55857317\n", " 34.6258566 ]\n", " ..., \n", " [ 39.55704137 39.59838257 39.602544 ..., 39.60300783 39.63200396\n", " 39.69585152]\n", " [ 40.46611222 40.43535902 40.40883545 ..., 40.43070392 40.44180509\n", " 40.54478546]\n", " [ 41.35119597 41.342732 41.31906462 ..., 41.47767905 41.55588714\n", " 41.5559466 ]]\n", "Buffer: 4600\n", "Pred: [[ 41.24501714 41.30563545 41.33906701 ..., 41.41231404 41.36247167\n", " 41.32137465]\n", " [ 41.55176282 41.61250172 41.6040215 ..., 41.5859052 41.4933257\n", " 41.49596777]\n", " [ 41.11082905 41.21096532 41.24008778 ..., 41.10885342 41.11014781\n", " 41.19066485]\n", " ..., \n", " [ 40.40333667 40.57757536 40.7444689 ..., 40.55767817 40.62361813\n", " 40.7688445 ]\n", " [ 39.63679228 39.85222014 39.7001448 ..., 39.82137182 39.90308844\n", " 39.89175773]\n", " [ 40.03398294 39.90566847 39.92936408 ..., 40.00273409 39.99056338\n", " 40.13290444]]\n", "Buffer: 4800\n", "Pred: [[ 40.57613285 40.36745876 40.34832271 ..., 40.14127925 40.25699571\n", " 40.17561628]\n", " [ 39.98152946 40.00012052 39.84018882 ..., 39.76283388 39.68356018\n", " 39.62743014]\n", " [ 40.65448136 40.47656975 40.40428358 ..., 40.32405542 40.34608955\n", " 40.51020122]\n", " ..., \n", " [ 40.70973214 40.82156695 40.94997294 ..., 41.05915738 41.2009332\n", " 41.24048475]\n", " [ 40.74221266 40.91247665 40.94516366 ..., 41.11094752 41.12695732\n", " 41.2238754 ]\n", " [ 40.51848579 40.63794176 40.6930074 ..., 40.83603721 40.96158001\n", " 41.20000058]]\n", "Buffer: 5000\n", "Pred: [[ 41.02840608 40.97742881 41.04879639 ..., 41.08703686 41.13259893\n", " 41.13751978]\n", " [ 41.06644308 41.14932577 41.14604797 ..., 41.28572476 41.31572252\n", " 41.31868877]\n", " [ 42.00121108 41.91105222 41.98860594 ..., 42.05340097 42.0514623\n", " 42.07459136]\n", " ..., \n", " [ 41.61889522 41.77265455 42.134165 ..., 42.26888054 42.27023834\n", " 42.27099558]\n", " [ 39.61382401 39.3572463 38.99373902 ..., 39.08954502 39.72855523\n", " 40.20378919]\n", " [ 39.26326568 38.77189241 38.68857487 ..., 38.98425831 39.33537682\n", " 39.83910962]]\n", "Buffer: 5200\n", "Pred: [[ 40.47205982 40.6031967 40.7555591 ..., 41.30306999 41.58849567\n", " 42.20678238]\n", " [ 40.53496451 40.74019047 40.91134542 ..., 41.1356297 41.85741949\n", " 42.23975788]\n", " [ 40.68819248 40.89227875 40.86005788 ..., 41.29318408 41.69474886\n", " 41.93568032]\n", " ..., \n", " [ 32.58236996 32.68722674 32.94694616 ..., 33.68935864 34.40763451\n", " 35.0411307 ]\n", " [ 34.11827593 34.29691869 34.56631295 ..., 35.77380712 36.1406701\n", " 36.65944805]\n", " [ 32.53922298 32.93070035 33.1267649 ..., 33.88362425 34.34724461\n", " 35.05498163]]\n", "Buffer: 5400\n", "Pred: [[ 31.52461716 31.57967856 31.70310795 ..., 31.60969549 31.97998058\n", " 31.76583509]\n", " [ 32.56237362 32.44398294 32.30184175 ..., 32.87763302 32.50008364\n", " 32.21124309]\n", " [ 32.08373777 32.0604223 32.18122015 ..., 32.3427488 31.88531891\n", " 32.15190584]\n", " ..., \n", " [ 36.47434384 36.56338542 36.61949077 ..., 36.48991746 36.31746724\n", " 36.40344402]\n", " [ 37.24605504 37.18514913 37.20037653 ..., 36.99259881 36.96397396\n", " 36.84186326]\n", " [ 37.03819783 37.07523111 37.0042887 ..., 36.83422073 36.62528101\n", " 36.64031558]]\n", "Buffer: 5600\n", "Pred: [[ 37.15097768 37.16165774 37.0631008 ..., 36.92139965 36.90713708\n", " 36.99238524]\n", " [ 36.81621957 36.81704608 36.83068939 ..., 36.76175825 36.76190017\n", " 36.74666901]\n", " [ 37.09933134 37.1138151 37.12286448 ..., 37.17231345 37.17322168\n", " 37.11568705]\n", " ..., \n", " [ 25.7344187 26.06591327 26.15460221 ..., 27.08788596 27.12449494\n", " 27.39248972]\n", " [ 22.49560126 22.71537861 22.34032905 ..., 22.91827229 22.94172241\n", " 24.24507425]\n", " [ 24.54302106 24.12607841 24.37067691 ..., 24.36400232 25.51053396\n", " 26.15846606]]\n", "Buffer: 5800\n", "Pred: [[ 24.79977904 24.69590721 24.0883611 ..., 24.91928808 25.20504994\n", " 25.25962951]\n", " [ 23.1419501 22.66726302 21.87925864 ..., 23.11620493 22.89603025\n", " 23.68080167]\n", " [ 23.12996329 22.22263254 23.34052642 ..., 23.00870146 23.76270941\n", " 23.85789826]\n", " ..., \n", " [ 35.2820164 35.36034423 35.48074954 ..., 35.78691612 35.82649512\n", " 35.96429514]\n", " [ 35.47454644 35.55712141 35.53895006 ..., 35.77111792 35.8272775\n", " 36.00105157]\n", " [ 35.59562223 35.77160935 35.9847767 ..., 36.14101777 36.22937931\n", " 36.35845682]]\n", "Buffer: 6000\n", "Pred: [[ 34.87543571 35.05866248 34.96081266 ..., 34.91188916 34.8865196\n", " 35.09534966]\n", " [ 34.07850517 34.09411023 33.94862945 ..., 33.7652154 33.70499976\n", " 34.01118595]\n", " [ 33.74560074 33.59630762 33.55275587 ..., 33.25894686 33.44248384\n", " 33.64523254]\n", " ..., \n", " [ 34.37043957 34.49072721 34.46713889 ..., 34.61641291 34.6316781\n", " 34.65009482]\n", " [ 34.34755901 34.44125379 34.69034084 ..., 34.58201637 34.64234545\n", " 34.57663455]\n", " [ 34.57448406 34.80322892 34.60662199 ..., 34.71353755 34.54698945\n", " 34.75533398]]\n", "Buffer: 6200\n", "Pred: [[ 34.48058576 34.46931947 34.39645689 ..., 34.56175966 34.60120682\n", " 34.6889119 ]\n", " [ 34.42459542 34.4041518 34.59273011 ..., 34.71655572 34.77569208\n", " 34.91001211]\n", " [ 34.02746584 34.17503955 34.19326864 ..., 34.41906863 34.49378041\n", " 34.54149122]\n", " ..., \n", " [ 34.26729796 34.33198393 34.52037656 ..., 34.26471212 34.32199879\n", " 34.43204531]\n", " [ 33.37651991 33.60677572 33.52148382 ..., 33.42863803 33.44812737\n", " 33.44797037]\n", " [ 33.77101123 33.70474743 33.57014533 ..., 33.57211048 33.6467882\n", " 33.75261216]]\n", "Buffer: 6400\n", "Pred: [[ 33.53133289 33.43869191 33.37263046 ..., 33.32649401 33.31416629\n", " 33.19199006]\n", " [ 33.46584109 33.39713333 33.33327354 ..., 33.28221668 33.15383874\n", " 33.13431947]\n", " [ 34.41622601 34.29761196 34.4366854 ..., 34.39820455 34.52023716\n", " 34.3539505 ]\n", " ..., \n", " [ 34.78692903 34.73536166 34.73454473 ..., 34.35468426 34.27153208\n", " 34.18379174]\n", " [ 35.01790079 34.99299477 34.80046662 ..., 34.59019432 34.47643505\n", " 34.32671027]\n", " [ 34.93577164 34.68553218 34.54299772 ..., 34.42529695 34.26793524\n", " 34.20209156]]\n", "Buffer: 6600\n", "Pred: [[ 34.97898179 34.98256211 35.07425527 ..., 35.19605749 35.29951325\n", " 35.34528396]\n", " [ 35.01624583 35.10178264 35.12680389 ..., 35.30594613 35.35298146\n", " 35.4299613 ]\n", " [ 34.93937399 34.9619017 35.07676871 ..., 35.17815547 35.28027676\n", " 35.31059197]\n", " ..., \n", " [ 44.10058135 43.8139945 43.50204997 ..., 42.79200923 42.46908938\n", " 42.18424781]\n", " [ 43.92034495 43.61468664 43.30103441 ..., 42.6139226 42.32034584\n", " 42.01517437]\n", " [ 44.03369297 43.71493941 43.41566069 ..., 42.70811157 42.40436291\n", " 42.15296897]]\n", "Buffer: 6800\n", "Pred: [[ 44.26824904 44.22815477 44.2189972 ..., 44.12417068 44.16232578\n", " 44.12297489]\n", " [ 43.86504688 43.81346145 43.79542729 ..., 43.81453745 43.80092968\n", " 43.78132118]\n", " [ 44.17142766 44.10927042 44.07602426 ..., 44.01900881 44.03224618\n", " 44.05145594]\n", " ..., \n", " [ 34.95488639 35.16294448 35.49386909 ..., 35.56308703 35.46595545\n", " 35.52188355]\n", " [ 36.1446683 36.4019933 36.67338125 ..., 36.68118139 36.80819138\n", " 36.84463694]\n", " [ 35.82839891 35.92646934 36.05010142 ..., 36.31325315 36.35564094\n", " 36.41780309]]\n" ] }, { "data": { "text/plain": [ "[array([[ 7.83601976, 7.84714155, 7.85292535, ..., 7.89987737,\n", " 7.91755521, 7.93865868],\n", " [ 7.85539551, 7.86158008, 7.87498252, ..., 7.90506271,\n", " 7.91740818, 7.93852032],\n", " [ 7.83170231, 7.84749588, 7.87738729, ..., 7.89285396,\n", " 7.91642424, 7.92424915],\n", " ..., \n", " [ 6.36738278, 6.39213824, 6.39270447, ..., 6.43798347,\n", " 6.45461204, 6.4751872 ],\n", " [ 6.42016386, 6.417325 , 6.42707883, ..., 6.47916005,\n", " 6.50267402, 6.51950021],\n", " [ 6.28080118, 6.27092368, 6.28282955, ..., 6.30547753,\n", " 6.3252951 , 6.3264697 ]]),\n", " array([[ 6.14075766, 6.11117589, 6.09574853, ..., 6.07217018,\n", " 6.07748552, 6.08070167],\n", " [ 6.21540435, 6.17492322, 6.17149764, ..., 6.1453285 ,\n", " 6.13813657, 6.14081275],\n", " [ 6.27753279, 6.27307459, 6.23843178, ..., 6.24830207,\n", " 6.24374508, 6.21901832],\n", " ..., \n", " [ 5.75919469, 5.78334022, 5.79923807, ..., 5.83008595,\n", " 5.859385 , 5.87740631],\n", " [ 5.76238715, 5.7892002 , 5.81412139, ..., 5.85030748,\n", " 5.88508911, 5.88637507],\n", " [ 5.78833298, 5.81875138, 5.83850427, ..., 5.88612816,\n", " 5.8986934 , 5.90478152]]),\n", " array([[ 5.7641509 , 5.79247187, 5.81926042, ..., 5.84616883,\n", " 5.86198088, 5.87727484],\n", " [ 5.8513131 , 5.86385014, 5.88638345, ..., 5.89063265,\n", " 5.90502758, 5.90804928],\n", " [ 5.9113665 , 5.92879268, 5.93253659, ..., 5.94752817,\n", " 5.95264971, 5.95534078],\n", " ..., \n", " [ 6.1998076 , 6.19815249, 6.22826773, ..., 6.25852243,\n", " 6.2950688 , 6.28322814],\n", " [ 6.19140054, 6.19932943, 6.23777417, ..., 6.25145184,\n", " 6.25277943, 6.24492933],\n", " [ 6.22481015, 6.25710477, 6.27123817, ..., 6.28618561,\n", " 6.29833129, 6.29616353]]),\n", " array([[ 6.1645113 , 6.1747009 , 6.17346569, ..., 6.14073882,\n", " 6.13655823, 6.15464913],\n", " [ 6.23869668, 6.22906726, 6.21064429, ..., 6.19525349,\n", " 6.199533 , 6.1829646 ],\n", " [ 5.94298817, 5.92847236, 5.91129748, ..., 5.89322178,\n", " 5.86434585, 5.87953873],\n", " ..., \n", " [ 8.94246533, 8.87626646, 8.89060421, ..., 8.84848815,\n", " 8.85793555, 8.86792794],\n", " [ 8.78322534, 8.79037462, 8.72943888, ..., 8.72055999,\n", " 8.7383812 , 8.68878426],\n", " [ 8.83433927, 8.76940226, 8.77364936, ..., 8.77248502,\n", " 8.72566135, 8.69839892]]),\n", " array([[ 8.67603806, 8.67084409, 8.65130791, ..., 8.67378925,\n", " 8.69676109, 8.69455006],\n", " [ 8.82830315, 8.8205379 , 8.86009166, ..., 8.87552595,\n", " 8.85568772, 8.84410872],\n", " [ 8.84748948, 8.84911858, 8.81238761, ..., 8.78189801,\n", " 8.75265697, 8.72581647],\n", " ..., \n", " [ 7.71616361, 7.7100549 , 7.68435219, ..., 7.6489673 ,\n", " 7.61926738, 7.60503466],\n", " [ 7.59805829, 7.59515854, 7.53381661, ..., 7.5060898 ,\n", " 7.47964638, 7.49137924],\n", " [ 7.54657369, 7.52483132, 7.53333146, ..., 7.50714863,\n", " 7.52033692, 7.5104685 ]]),\n", " array([[ 7.46215011, 7.4436282 , 7.43918656, ..., 7.5010726 ,\n", " 7.48113362, 7.48813435],\n", " [ 7.56216243, 7.57242677, 7.60962549, ..., 7.59408734,\n", " 7.58687173, 7.59213207],\n", " [ 7.55189234, 7.58738691, 7.61589834, ..., 7.60049142,\n", " 7.60064947, 7.60278131],\n", " ..., \n", " [ 6.19883297, 6.22711546, 6.24523835, ..., 6.30446123,\n", " 6.33864273, 6.33903875],\n", " [ 6.17836606, 6.19567673, 6.22059366, ..., 6.29335772,\n", " 6.30085317, 6.31700372],\n", " [ 6.30048133, 6.33373495, 6.37895762, ..., 6.41007597,\n", " 6.40794933, 6.42844116]]),\n", " array([[ 6.30754289, 6.34315541, 6.37136507, ..., 6.34725709,\n", " 6.3533664 , 6.36701006],\n", " [ 6.2183139 , 6.22645131, 6.20859811, ..., 6.19826357,\n", " 6.21393204, 6.22498325],\n", " [ 6.13231736, 6.11064193, 6.06756449, ..., 6.10864178,\n", " 6.12762316, 6.12009367],\n", " ..., \n", " [ 4.93362234, 4.93814477, 4.93428253, ..., 4.96908178,\n", " 4.9916257 , 5.0119479 ],\n", " [ 4.94855637, 4.96672313, 4.9753907 , ..., 5.01327007,\n", " 5.04827391, 5.06702398],\n", " [ 4.94109813, 4.95766805, 4.9861515 , ..., 5.00727657,\n", " 5.02994663, 5.03880748]]),\n", " array([[ 4.99871061, 5.02010571, 5.014281 , ..., 5.0026121 ,\n", " 4.99747618, 4.97557435],\n", " [ 5.15365698, 5.15594044, 5.1491617 , ..., 5.09127283,\n", " 5.05670229, 5.06074197],\n", " [ 5.15264849, 5.14912635, 5.12308927, ..., 5.05939273,\n", " 5.0643763 , 5.04887009],\n", " ..., \n", " [ 6.73631505, 6.69817443, 6.67661297, ..., 6.63990072,\n", " 6.64029307, 6.62941594],\n", " [ 6.80586543, 6.78280213, 6.77308604, ..., 6.73267206,\n", " 6.70165677, 6.68567721],\n", " [ 6.87717059, 6.8713965 , 6.85461032, ..., 6.80891943,\n", " 6.78659161, 6.7676666 ]]),\n", " array([[ 6.88960025, 6.895621 , 6.91178743, ..., 6.90648271,\n", " 6.91037924, 6.91464528],\n", " [ 6.92029213, 6.93896731, 6.93794831, ..., 6.94105214,\n", " 6.94581302, 6.93479959],\n", " [ 6.94258489, 6.94132069, 6.93738101, ..., 6.95109387,\n", " 6.94439441, 6.96149157],\n", " ..., \n", " [ 8.63303575, 8.6153931 , 8.62242329, ..., 8.60348853,\n", " 8.61375744, 8.62515753],\n", " [ 8.65670167, 8.66375148, 8.66798893, ..., 8.65346248,\n", " 8.65856181, 8.64789495],\n", " [ 8.7674598 , 8.76709683, 8.7645547 , ..., 8.78059364,\n", " 8.7585914 , 8.76297732]]),\n", " array([[ 8.68953042, 8.68353244, 8.69167093, ..., 8.69226758,\n", " 8.69669531, 8.70359861],\n", " [ 8.66104825, 8.66338749, 8.68358337, ..., 8.67084048,\n", " 8.68664223, 8.67802482],\n", " [ 8.67468363, 8.69245015, 8.66828894, ..., 8.69130084,\n", " 8.67790535, 8.69542446],\n", " ..., \n", " [ 10.25132895, 10.26123566, 10.25052647, ..., 10.2702956 ,\n", " 10.28387785, 10.29072272],\n", " [ 10.18370737, 10.17290369, 10.18125306, ..., 10.2112286 ,\n", " 10.21762469, 10.21706292],\n", " [ 10.22958344, 10.23782323, 10.24337281, ..., 10.26467471,\n", " 10.25519154, 10.2341133 ]]),\n", " array([[ 10.22064293, 10.22413787, 10.24471743, ..., 10.27029812,\n", " 10.2744557 , 10.28765738],\n", " [ 10.26516025, 10.27459074, 10.29442757, ..., 10.31496257,\n", " 10.32870539, 10.33393516],\n", " [ 10.12818121, 10.13767282, 10.16435904, ..., 10.23174691,\n", " 10.25429594, 10.27571162],\n", " ..., \n", " [ 11.64694204, 11.67793627, 11.71878894, ..., 11.72885817,\n", " 11.73598723, 11.74138426],\n", " [ 11.50646666, 11.55801859, 11.60061623, ..., 11.59712143,\n", " 11.60710104, 11.62519194],\n", " [ 11.66543188, 11.70375594, 11.72575794, ..., 11.7634877 ,\n", " 11.80012102, 11.80921948]]),\n", " array([[ 11.62959737, 11.64537291, 11.62913452, ..., 11.63915597,\n", " 11.63946331, 11.67432874],\n", " [ 11.51306747, 11.4921517 , 11.48731226, ..., 11.48843655,\n", " 11.5272199 , 11.53575298],\n", " [ 11.4459014 , 11.44132033, 11.44303377, ..., 11.43963244,\n", " 11.4371997 , 11.45553989],\n", " ..., \n", " [ 16.22239336, 16.21976356, 16.22826391, ..., 16.21574299,\n", " 16.22293648, 16.26595504],\n", " [ 15.98826989, 16.00674066, 16.03692572, ..., 16.0496106 ,\n", " 16.10671921, 16.11635139],\n", " [ 15.79752122, 15.88073774, 15.95919399, ..., 16.04615273,\n", " 16.04535607, 16.03367065]]),\n", " array([[ 16.04780654, 16.10427504, 16.15325971, ..., 16.21640137,\n", " 16.23310984, 16.24580039],\n", " [ 15.93923871, 15.96865021, 16.01241045, ..., 16.04899501,\n", " 16.0097939 , 16.01058251],\n", " [ 15.95002904, 15.99504448, 16.00543129, ..., 16.08477758,\n", " 16.0724383 , 16.01255977],\n", " ..., \n", " [ 20.43621626, 20.48574881, 20.53403285, ..., 20.5853136 ,\n", " 20.65182418, 20.70740506],\n", " [ 21.01478432, 21.0377329 , 21.06384251, ..., 21.11292127,\n", " 21.16689338, 21.25102393],\n", " [ 20.80946572, 20.84214892, 20.83450899, ..., 20.87816108,\n", " 20.94758599, 20.97840243]]),\n", " array([[ 20.79530755, 20.70031722, 20.67570255, ..., 20.67175512,\n", " 20.75003016, 20.7424359 ],\n", " [ 20.51491535, 20.51195086, 20.47751748, ..., 20.61619501,\n", " 20.61899275, 20.71100874],\n", " [ 20.88903686, 20.83145557, 20.76382639, ..., 20.84093447,\n", " 20.95482155, 20.93470293],\n", " ..., \n", " [ 21.35898088, 21.44310834, 21.58442593, ..., 21.67728542,\n", " 21.63729079, 21.76718696],\n", " [ 21.02670418, 21.22586046, 21.36227848, ..., 21.31522747,\n", " 21.4562707 , 21.61980196],\n", " [ 21.08453035, 21.20775213, 21.19865266, ..., 21.28921609,\n", " 21.44822081, 21.56667633]]),\n", " array([[ 20.44161666, 20.44133304, 20.50606671, ..., 20.78067392,\n", " 20.83525299, 20.88356921],\n", " [ 20.47831642, 20.55669655, 20.6800365 , ..., 20.94345539,\n", " 21.0255306 , 21.09250263],\n", " [ 20.0543866 , 20.24467179, 20.42056851, ..., 20.71879315,\n", " 20.80801567, 20.8139791 ],\n", " ..., \n", " [ 25.55444964, 25.73089496, 25.78688107, ..., 25.83001772,\n", " 25.87363941, 25.94209486],\n", " [ 26.10683785, 26.13568262, 26.21882171, ..., 26.1706635 ,\n", " 26.17482513, 25.99067047],\n", " [ 25.78641012, 25.93842086, 25.87267253, ..., 26.02785251,\n", " 25.8333293 , 25.74114593]]),\n", " array([[ 26.09202122, 26.16659026, 26.28513376, ..., 26.27827853,\n", " 26.19880974, 26.29279004],\n", " [ 27.09296713, 27.16525979, 27.07816223, ..., 26.79828223,\n", " 26.82462005, 26.80115994],\n", " [ 27.37426618, 27.26991991, 27.08514753, ..., 26.99525355,\n", " 27.0364177 , 27.06762629],\n", " ..., \n", " [ 25.74252888, 25.81395317, 25.96051853, ..., 26.19018399,\n", " 26.25012269, 26.22686022],\n", " [ 24.28942298, 24.55436301, 24.86490981, ..., 25.19589939,\n", " 25.32405251, 25.35862108],\n", " [ 24.10812922, 24.39599208, 24.70467848, ..., 25.0249339 ,\n", " 25.12917584, 25.13941702]]),\n", " array([[ 23.89936317, 24.16238987, 24.37814933, ..., 24.6867283 ,\n", " 24.73517262, 24.9000166 ],\n", " [ 22.796028 , 23.03957929, 23.36191281, ..., 23.95134918,\n", " 24.05807653, 24.32577573],\n", " [ 23.98201714, 24.24346901, 24.60352667, ..., 24.83600538,\n", " 25.01300299, 25.28700399],\n", " ..., \n", " [ 25.88867191, 25.80319669, 25.80762619, ..., 25.73744858,\n", " 25.58444691, 25.6317368 ],\n", " [ 25.74242634, 25.69379746, 25.73573117, ..., 25.64464014,\n", " 25.67333293, 25.64796163],\n", " [ 25.3468584 , 25.36760481, 25.38439543, ..., 25.45652486,\n", " 25.45199294, 25.37327864]]),\n", " array([[ 25.98449668, 25.98521208, 25.95242912, ..., 25.89368463,\n", " 25.88045388, 25.93171006],\n", " [ 25.76105977, 25.70375977, 25.63967045, ..., 25.59240848,\n", " 25.66132277, 25.66463929],\n", " [ 25.23810548, 25.19061044, 25.23695191, ..., 25.46131797,\n", " 25.38041014, 25.40377967],\n", " ..., \n", " [ 26.24824289, 26.17127915, 26.07623138, ..., 25.84710184,\n", " 25.78029758, 25.70586174],\n", " [ 26.19759651, 26.09744315, 25.92235382, ..., 25.63588018,\n", " 25.63291115, 25.59553912],\n", " [ 25.77531313, 25.60455853, 25.42752481, ..., 25.30530249,\n", " 25.33317719, 25.22147558]]),\n", " array([[ 25.40656908, 25.27074144, 25.21409378, ..., 25.28521185,\n", " 25.22632841, 25.16945681],\n", " [ 25.18921491, 25.07334629, 25.05299874, ..., 24.94128607,\n", " 24.95502997, 24.95791613],\n", " [ 24.81985555, 24.80298349, 24.7612829 , ..., 24.59692495,\n", " 24.58690609, 24.58263133],\n", " ..., \n", " [ 26.0389708 , 25.93263093, 25.87256265, ..., 25.77298706,\n", " 25.6439993 , 25.58368641],\n", " [ 26.56849541, 26.50595118, 26.36715477, ..., 26.37166457,\n", " 26.3312083 , 26.14700985],\n", " [ 26.80613189, 26.67530444, 26.66849488, ..., 26.59946944,\n", " 26.42169587, 26.33018949]]),\n", " array([[ 26.06044987, 26.12046614, 26.05471894, ..., 25.93053422,\n", " 25.96502619, 25.96056563],\n", " [ 26.03326405, 25.99975566, 25.8123115 , ..., 25.6606701 ,\n", " 25.76405528, 25.65340638],\n", " [ 26.56229083, 26.42947167, 26.36848794, ..., 26.51685341,\n", " 26.46719925, 26.41071161],\n", " ..., \n", " [ 21.28992895, 21.33566945, 21.43008967, ..., 21.71406469,\n", " 21.85169081, 21.92897556],\n", " [ 21.21583534, 21.37312981, 21.57666978, ..., 21.84861172,\n", " 21.88918311, 21.93881172],\n", " [ 21.1126037 , 21.34119817, 21.47466187, ..., 21.63830162,\n", " 21.80664827, 21.87502314]]),\n", " array([[ 21.24389337, 21.37252773, 21.35683562, ..., 21.48408902,\n", " 21.48832578, 21.4263668 ],\n", " [ 21.22127677, 21.24046477, 21.34895607, ..., 21.41706179,\n", " 21.37656328, 21.35550317],\n", " [ 21.43282338, 21.46888922, 21.493978 , ..., 21.51923313,\n", " 21.50631784, 21.53775008],\n", " ..., \n", " [ 26.79653366, 26.64113656, 26.49911428, ..., 26.25092122,\n", " 26.10219452, 25.9559183 ],\n", " [ 26.50290012, 26.38396506, 26.21567803, ..., 26.05643976,\n", " 25.92729177, 25.75297956],\n", " [ 26.49228551, 26.2948515 , 26.14185587, ..., 25.91011466,\n", " 25.7620661 , 25.60436813]]),\n", " array([[ 26.59862697, 26.53265571, 26.46607521, ..., 26.31185187,\n", " 26.22269463, 26.15406759],\n", " [ 26.55732047, 26.49355051, 26.42777149, ..., 26.2624713 ,\n", " 26.21316348, 26.13021364],\n", " [ 26.38850061, 26.32645169, 26.21572275, ..., 26.15394371,\n", " 26.11911926, 25.99641195],\n", " ..., \n", " [ 34.39713553, 34.08620781, 33.9011808 , ..., 33.34027792,\n", " 33.04665311, 32.89668644],\n", " [ 33.98517109, 33.82119053, 33.5508494 , ..., 33.05718995,\n", " 32.86762085, 32.58866132],\n", " [ 33.8906325 , 33.64126562, 33.39516092, ..., 32.95667114,\n", " 32.6643352 , 32.42929969]]),\n", " array([[ 34.41874727, 34.43546507, 34.39947704, ..., 34.34448666,\n", " 34.32896368, 34.34120397],\n", " [ 34.46582211, 34.4089387 , 34.43652649, ..., 34.3424298 ,\n", " 34.30309225, 34.3895445 ],\n", " [ 34.59749054, 34.58828052, 34.57559093, ..., 34.53213034,\n", " 34.55857317, 34.6258566 ],\n", " ..., \n", " [ 39.55704137, 39.59838257, 39.602544 , ..., 39.60300783,\n", " 39.63200396, 39.69585152],\n", " [ 40.46611222, 40.43535902, 40.40883545, ..., 40.43070392,\n", " 40.44180509, 40.54478546],\n", " [ 41.35119597, 41.342732 , 41.31906462, ..., 41.47767905,\n", " 41.55588714, 41.5559466 ]]),\n", " array([[ 41.24501714, 41.30563545, 41.33906701, ..., 41.41231404,\n", " 41.36247167, 41.32137465],\n", " [ 41.55176282, 41.61250172, 41.6040215 , ..., 41.5859052 ,\n", " 41.4933257 , 41.49596777],\n", " [ 41.11082905, 41.21096532, 41.24008778, ..., 41.10885342,\n", " 41.11014781, 41.19066485],\n", " ..., \n", " [ 40.40333667, 40.57757536, 40.7444689 , ..., 40.55767817,\n", " 40.62361813, 40.7688445 ],\n", " [ 39.63679228, 39.85222014, 39.7001448 , ..., 39.82137182,\n", " 39.90308844, 39.89175773],\n", " [ 40.03398294, 39.90566847, 39.92936408, ..., 40.00273409,\n", " 39.99056338, 40.13290444]]),\n", " array([[ 40.57613285, 40.36745876, 40.34832271, ..., 40.14127925,\n", " 40.25699571, 40.17561628],\n", " [ 39.98152946, 40.00012052, 39.84018882, ..., 39.76283388,\n", " 39.68356018, 39.62743014],\n", " [ 40.65448136, 40.47656975, 40.40428358, ..., 40.32405542,\n", " 40.34608955, 40.51020122],\n", " ..., \n", " [ 40.70973214, 40.82156695, 40.94997294, ..., 41.05915738,\n", " 41.2009332 , 41.24048475],\n", " [ 40.74221266, 40.91247665, 40.94516366, ..., 41.11094752,\n", " 41.12695732, 41.2238754 ],\n", " [ 40.51848579, 40.63794176, 40.6930074 , ..., 40.83603721,\n", " 40.96158001, 41.20000058]]),\n", " array([[ 41.02840608, 40.97742881, 41.04879639, ..., 41.08703686,\n", " 41.13259893, 41.13751978],\n", " [ 41.06644308, 41.14932577, 41.14604797, ..., 41.28572476,\n", " 41.31572252, 41.31868877],\n", " [ 42.00121108, 41.91105222, 41.98860594, ..., 42.05340097,\n", " 42.0514623 , 42.07459136],\n", " ..., \n", " [ 41.61889522, 41.77265455, 42.134165 , ..., 42.26888054,\n", " 42.27023834, 42.27099558],\n", " [ 39.61382401, 39.3572463 , 38.99373902, ..., 39.08954502,\n", " 39.72855523, 40.20378919],\n", " [ 39.26326568, 38.77189241, 38.68857487, ..., 38.98425831,\n", " 39.33537682, 39.83910962]]),\n", " array([[ 40.47205982, 40.6031967 , 40.7555591 , ..., 41.30306999,\n", " 41.58849567, 42.20678238],\n", " [ 40.53496451, 40.74019047, 40.91134542, ..., 41.1356297 ,\n", " 41.85741949, 42.23975788],\n", " [ 40.68819248, 40.89227875, 40.86005788, ..., 41.29318408,\n", " 41.69474886, 41.93568032],\n", " ..., \n", " [ 32.58236996, 32.68722674, 32.94694616, ..., 33.68935864,\n", " 34.40763451, 35.0411307 ],\n", " [ 34.11827593, 34.29691869, 34.56631295, ..., 35.77380712,\n", " 36.1406701 , 36.65944805],\n", " [ 32.53922298, 32.93070035, 33.1267649 , ..., 33.88362425,\n", " 34.34724461, 35.05498163]]),\n", " array([[ 31.52461716, 31.57967856, 31.70310795, ..., 31.60969549,\n", " 31.97998058, 31.76583509],\n", " [ 32.56237362, 32.44398294, 32.30184175, ..., 32.87763302,\n", " 32.50008364, 32.21124309],\n", " [ 32.08373777, 32.0604223 , 32.18122015, ..., 32.3427488 ,\n", " 31.88531891, 32.15190584],\n", " ..., \n", " [ 36.47434384, 36.56338542, 36.61949077, ..., 36.48991746,\n", " 36.31746724, 36.40344402],\n", " [ 37.24605504, 37.18514913, 37.20037653, ..., 36.99259881,\n", " 36.96397396, 36.84186326],\n", " [ 37.03819783, 37.07523111, 37.0042887 , ..., 36.83422073,\n", " 36.62528101, 36.64031558]]),\n", " array([[ 37.15097768, 37.16165774, 37.0631008 , ..., 36.92139965,\n", " 36.90713708, 36.99238524],\n", " [ 36.81621957, 36.81704608, 36.83068939, ..., 36.76175825,\n", " 36.76190017, 36.74666901],\n", " [ 37.09933134, 37.1138151 , 37.12286448, ..., 37.17231345,\n", " 37.17322168, 37.11568705],\n", " ..., \n", " [ 25.7344187 , 26.06591327, 26.15460221, ..., 27.08788596,\n", " 27.12449494, 27.39248972],\n", " [ 22.49560126, 22.71537861, 22.34032905, ..., 22.91827229,\n", " 22.94172241, 24.24507425],\n", " [ 24.54302106, 24.12607841, 24.37067691, ..., 24.36400232,\n", " 25.51053396, 26.15846606]]),\n", " array([[ 24.79977904, 24.69590721, 24.0883611 , ..., 24.91928808,\n", " 25.20504994, 25.25962951],\n", " [ 23.1419501 , 22.66726302, 21.87925864, ..., 23.11620493,\n", " 22.89603025, 23.68080167],\n", " [ 23.12996329, 22.22263254, 23.34052642, ..., 23.00870146,\n", " 23.76270941, 23.85789826],\n", " ..., \n", " [ 35.2820164 , 35.36034423, 35.48074954, ..., 35.78691612,\n", " 35.82649512, 35.96429514],\n", " [ 35.47454644, 35.55712141, 35.53895006, ..., 35.77111792,\n", " 35.8272775 , 36.00105157],\n", " [ 35.59562223, 35.77160935, 35.9847767 , ..., 36.14101777,\n", " 36.22937931, 36.35845682]]),\n", " array([[ 34.87543571, 35.05866248, 34.96081266, ..., 34.91188916,\n", " 34.8865196 , 35.09534966],\n", " [ 34.07850517, 34.09411023, 33.94862945, ..., 33.7652154 ,\n", " 33.70499976, 34.01118595],\n", " [ 33.74560074, 33.59630762, 33.55275587, ..., 33.25894686,\n", " 33.44248384, 33.64523254],\n", " ..., \n", " [ 34.37043957, 34.49072721, 34.46713889, ..., 34.61641291,\n", " 34.6316781 , 34.65009482],\n", " [ 34.34755901, 34.44125379, 34.69034084, ..., 34.58201637,\n", " 34.64234545, 34.57663455],\n", " [ 34.57448406, 34.80322892, 34.60662199, ..., 34.71353755,\n", " 34.54698945, 34.75533398]]),\n", " array([[ 34.48058576, 34.46931947, 34.39645689, ..., 34.56175966,\n", " 34.60120682, 34.6889119 ],\n", " [ 34.42459542, 34.4041518 , 34.59273011, ..., 34.71655572,\n", " 34.77569208, 34.91001211],\n", " [ 34.02746584, 34.17503955, 34.19326864, ..., 34.41906863,\n", " 34.49378041, 34.54149122],\n", " ..., \n", " [ 34.26729796, 34.33198393, 34.52037656, ..., 34.26471212,\n", " 34.32199879, 34.43204531],\n", " [ 33.37651991, 33.60677572, 33.52148382, ..., 33.42863803,\n", " 33.44812737, 33.44797037],\n", " [ 33.77101123, 33.70474743, 33.57014533, ..., 33.57211048,\n", " 33.6467882 , 33.75261216]]),\n", " array([[ 33.53133289, 33.43869191, 33.37263046, ..., 33.32649401,\n", " 33.31416629, 33.19199006],\n", " [ 33.46584109, 33.39713333, 33.33327354, ..., 33.28221668,\n", " 33.15383874, 33.13431947],\n", " [ 34.41622601, 34.29761196, 34.4366854 , ..., 34.39820455,\n", " 34.52023716, 34.3539505 ],\n", " ..., \n", " [ 34.78692903, 34.73536166, 34.73454473, ..., 34.35468426,\n", " 34.27153208, 34.18379174],\n", " [ 35.01790079, 34.99299477, 34.80046662, ..., 34.59019432,\n", " 34.47643505, 34.32671027],\n", " [ 34.93577164, 34.68553218, 34.54299772, ..., 34.42529695,\n", " 34.26793524, 34.20209156]]),\n", " array([[ 34.97898179, 34.98256211, 35.07425527, ..., 35.19605749,\n", " 35.29951325, 35.34528396],\n", " [ 35.01624583, 35.10178264, 35.12680389, ..., 35.30594613,\n", " 35.35298146, 35.4299613 ],\n", " [ 34.93937399, 34.9619017 , 35.07676871, ..., 35.17815547,\n", " 35.28027676, 35.31059197],\n", " ..., \n", " [ 44.10058135, 43.8139945 , 43.50204997, ..., 42.79200923,\n", " 42.46908938, 42.18424781],\n", " [ 43.92034495, 43.61468664, 43.30103441, ..., 42.6139226 ,\n", " 42.32034584, 42.01517437],\n", " [ 44.03369297, 43.71493941, 43.41566069, ..., 42.70811157,\n", " 42.40436291, 42.15296897]]),\n", " array([[ 44.26824904, 44.22815477, 44.2189972 , ..., 44.12417068,\n", " 44.16232578, 44.12297489],\n", " [ 43.86504688, 43.81346145, 43.79542729, ..., 43.81453745,\n", " 43.80092968, 43.78132118],\n", " [ 44.17142766, 44.10927042, 44.07602426, ..., 44.01900881,\n", " 44.03224618, 44.05145594],\n", " ..., \n", " [ 34.95488639, 35.16294448, 35.49386909, ..., 35.56308703,\n", " 35.46595545, 35.52188355],\n", " [ 36.1446683 , 36.4019933 , 36.67338125, ..., 36.68118139,\n", " 36.80819138, 36.84463694],\n", " [ 35.82839891, 35.92646934, 36.05010142, ..., 36.31325315,\n", " 36.35564094, 36.41780309]])]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract predictions. \n", "# `execute_viz` function appends predictions to `predictions_800_off`.\n", "execute_viz(steps=35)\n", "predictions_800_off" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7000\n" ] }, { "data": { "text/plain": [ "[7.9386586814575164,\n", " 7.9385203217998654,\n", " 7.924249146106483,\n", " 7.9012922230048002,\n", " 7.9694966896901072,\n", " 7.9379066283830166,\n", " 7.9033436487609698,\n", " 7.9624823177768214,\n", " 7.9797023821236319,\n", " 8.0022559969116571,\n", " 8.0346843791736688,\n", " 8.0165273954102201,\n", " 8.0478567389874343,\n", " 8.0175318531137716,\n", " 8.1207363588667363,\n", " 8.3027967645395577,\n", " 8.3830578303821088,\n", " 8.433113998415509,\n", " 8.3680978432868649,\n", " 8.3471882088960587,\n", " 8.1889879868111279,\n", " 8.1863491608515524,\n", " 8.4241681316139623,\n", " 8.418357801473503,\n", " 8.5213388551832345,\n", " 8.3832348535517571,\n", " 8.1961078162144627,\n", " 8.0712254420379281,\n", " 7.8577649445467834,\n", " 7.8242291698881647,\n", " 7.8212444345901204,\n", " 7.7634359328571501,\n", " 7.9755668055243518,\n", " 8.0341178823289692,\n", " 7.8730729840682745,\n", " 7.8744687301826684,\n", " 8.053238381571342,\n", " 8.0217328098924536,\n", " 8.0288730932490946,\n", " 7.7596041420852018,\n", " 7.4272558470725887,\n", " 7.6045342781236531,\n", " 7.5541483821835058,\n", " 7.6921907134941465,\n", " 7.8355729543313348,\n", " 7.5862038765559605,\n", " 7.3265133334045185,\n", " 7.3144934353553213,\n", " 7.3500829043810105,\n", " 7.3510859878584105,\n", " 7.4282522099924249,\n", " 7.37924055474861,\n", " 7.4078716362153223,\n", " 7.6956865693848453,\n", " 7.7665983163343082,\n", " 7.7437631679078303,\n", " 7.9610193388681854,\n", " 8.0008118350990696,\n", " 7.9373151329248639,\n", " 8.0235718872491102,\n", " 7.9163579791227132,\n", " 7.8450888166196311,\n", " 7.7645800745267728,\n", " 7.8200451803263924,\n", " 7.8416342933699266,\n", " 7.8434909561987745,\n", " 7.8382321920669131,\n", " 7.8685651108740355,\n", " 7.9846856131927062,\n", " 8.0088802813229911,\n", " 7.865448180200195,\n", " 7.9267289179245122,\n", " 7.8755502361625265,\n", " 7.7186662517603013,\n", " 7.9199563662611236,\n", " 7.9782845980081945,\n", " 7.9338153744603783,\n", " 7.9077209067781506,\n", " 7.8805941466182876,\n", " 7.804253716325892,\n", " 7.8490373611580342,\n", " 7.8753824102238852,\n", " 7.8915503700812,\n", " 7.877443173859108,\n", " 7.7895429137186358,\n", " 7.7513428027436122,\n", " 7.7149487495816276,\n", " 7.5523444523503853,\n", " 7.4303808282737211,\n", " 7.0821673891687666,\n", " 5.9677691947169427,\n", " 5.1362911464119145,\n", " 5.5574575276275731,\n", " 5.2818650930534563,\n", " 5.4744499091450667,\n", " 5.3094567735870584,\n", " 5.0301794949373013,\n", " 5.1123900154976303,\n", " 5.4867000687863783,\n", " 5.2783798151050974,\n", " 5.5429067215920238,\n", " 5.2856207494813647,\n", " 5.2600922736577882,\n", " 5.3795144576904841,\n", " 5.3226781806849388,\n", " 5.3103028948361795,\n", " 5.3168439182747154,\n", " 5.3543485747309898,\n", " 5.3950525100208226,\n", " 5.345318857173547,\n", " 5.3198220678787616,\n", " 5.4133559584263899,\n", " 5.3843395565582757,\n", " 5.5139377070660638,\n", " 5.6091792949613897,\n", " 5.6306767189261206,\n", " 5.7172608253593893,\n", " 5.7317686562106136,\n", " 5.7259383971371589,\n", " 5.492856834747605,\n", " 5.4135359809230312,\n", " 5.362572896424024,\n", " 5.3979066269629259,\n", " 5.4939663284969846,\n", " 5.6319808805005911,\n", " 5.6411152173746011,\n", " 5.6758521237026303,\n", " 5.5963907615876654,\n", " 5.7466509186675312,\n", " 5.6527778014805667,\n", " 5.5911499582756194,\n", " 5.5687781331245487,\n", " 5.436830255690305,\n", " 5.4554965703535103,\n", " 5.7195278095458084,\n", " 5.7427309518459584,\n", " 5.9606798799275227,\n", " 5.9384989424349897,\n", " 5.7778385648473565,\n", " 5.6901466393148805,\n", " 5.9579184804955743,\n", " 5.8436553203737107,\n", " 6.1517305136993015,\n", " 6.1555230756912005,\n", " 6.1184355998723934,\n", " 6.0827708197957993,\n", " 5.8898273456745862,\n", " 5.8970123526576721,\n", " 5.8540476000295616,\n", " 5.8947781345973125,\n", " 5.8988450139051256,\n", " 5.9144672991265015,\n", " 5.8782232003546042,\n", " 5.751470819801737,\n", " 5.6138833941332598,\n", " 5.7077101710774851,\n", " 5.8340908464301124,\n", " 5.8308013171332744,\n", " 5.8327581835573215,\n", " 5.8519904841862331,\n", " 6.0306902932743567,\n", " 5.9651639045282563,\n", " 5.9024180741927683,\n", " 5.905254944675784,\n", " 5.8274018484276713,\n", " 5.8672542702992745,\n", " 5.7672014808651406,\n", " 5.6255380091922573,\n", " 5.6900808085978474,\n", " 5.7491740048308451,\n", " 5.7679135053569599,\n", " 5.7921074313959346,\n", " 5.7529437138169861,\n", " 5.7453901557846443,\n", " 5.7549205739837044,\n", " 5.6990868193754816,\n", " 5.8251170153492167,\n", " 5.8273091752505657,\n", " 5.7601002273888726,\n", " 5.8233125011725528,\n", " 5.7657222040117455,\n", " 5.6902374599790972,\n", " 5.7354608350877712,\n", " 5.8177104411454748,\n", " 5.7374285740025925,\n", " 5.7577836964541582,\n", " 5.9131196878942065,\n", " 6.0303952627288453,\n", " 6.0860790674585017,\n", " 6.523352100466882,\n", " 6.5176956991855022,\n", " 6.3933007815776115,\n", " 6.3835975284975151,\n", " 6.4078502003894933,\n", " 6.3637590570703271,\n", " 6.5949673261789989,\n", " 6.5455806185616092,\n", " 6.4751872040984262,\n", " 6.5195002081104771,\n", " 6.3264696997486274,\n", " 6.0807016653319117,\n", " 6.1408127499487541,\n", " 6.219018322737476,\n", " 6.1846771780336889,\n", " 6.1968487923542526,\n", " 6.1407414692183888,\n", " 6.1799911998396553,\n", " 6.2249280967765133,\n", " 6.2936809105776534,\n", " 6.4090332930535974,\n", " 6.6308038648546219,\n", " 6.5138903921171174,\n", " 6.5528890032476212,\n", " 6.4015883914550091,\n", " 6.4307525014847942,\n", " 6.6354753933126718,\n", " 6.6776841894164463,\n", " 6.6257053006111022,\n", " 6.5979277591120677,\n", " 6.5177020655583062,\n", " 6.4639621922853854,\n", " 6.5929430396185502,\n", " 6.563617827386925,\n", " 6.5303849680219948,\n", " 6.4995593769216953,\n", " 6.4649624362380536,\n", " 6.5278670522895528,\n", " 6.3057793819307069,\n", " 6.3585309273105324,\n", " 6.3898301080010222,\n", " 6.4109942891001142,\n", " 6.4160272080079075,\n", " 6.3290462648771761,\n", " 6.3437505325128685,\n", " 6.4353914645100412,\n", " 6.3846107235843457,\n", " 6.3345204796076109,\n", " 6.1894686224716153,\n", " 6.2157073895180872,\n", " 6.2486000973397662,\n", " 6.2368927411923671,\n", " 6.3432386601776685,\n", " 6.3379977975373869,\n", " 6.2523736617222125,\n", " 6.2063880601390755,\n", " 6.2004624044192527,\n", " 6.2274621198667726,\n", " 6.1435489361737572,\n", " 6.2171136176098889,\n", " 6.2762419621511194,\n", " 6.2082569735496369,\n", " 6.2434735901984277,\n", " 6.2285656669525213,\n", " 6.339001638826165,\n", " 6.2277719563607379,\n", " 6.2288520447248956,\n", " 6.2365459050280343,\n", " 6.0893816610840972,\n", " 6.0374599279207759,\n", " 6.0264675246684556,\n", " 6.1137591008762504,\n", " 6.0592710923379505,\n", " 5.9711306319655613,\n", " 5.7513733266823639,\n", " 5.5097994661055463,\n", " 5.6962746683908954,\n", " 5.6915570017391728,\n", " 5.6848440041287835,\n", " 5.6832244978989124,\n", " 5.750705474799763,\n", " 5.8113211743784543,\n", " 5.8016871915600143,\n", " 5.7972938306995045,\n", " 5.7972083706741921,\n", " 5.6453255228951784,\n", " 5.6749863348097422,\n", " 5.6996741266188975,\n", " 5.5675009534560509,\n", " 5.6021289487784047,\n", " 5.6022023704383761,\n", " 5.7929905942999023,\n", " 5.7600080508509617,\n", " 5.6803857091223806,\n", " 5.7001653286947382,\n", " 5.628053946210775,\n", " 5.7397504025018833,\n", " 5.7488611551852298,\n", " 5.7884776433347263,\n", " 5.7606480893760974,\n", " 5.7232441999062003,\n", " 5.7390025629080252,\n", " 5.6898914943350904,\n", " 5.5913404105092237,\n", " 5.6429359360509661,\n", " 5.6245308816441879,\n", " 5.521229202338322,\n", " 5.6702633627264429,\n", " 5.6416480607131669,\n", " 5.5986566920550347,\n", " 5.6172741720165718,\n", " 5.623086217458237,\n", " 5.6246064977859165,\n", " 5.6653931448466528,\n", " 5.4608227015679969,\n", " 5.3966586488185202,\n", " 5.4289511411185103,\n", " 5.2875078547393901,\n", " 5.2847054810112235,\n", " 5.3373680496133895,\n", " 5.2762810454534268,\n", " 5.2750734296384039,\n", " 5.1959823860369054,\n", " 5.2827342978803458,\n", " 5.4710139571842973,\n", " 5.3300835355799663,\n", " 5.2970530689830815,\n", " 5.2985848476817736,\n", " 5.3305227087546792,\n", " 5.3663885542906495,\n", " 5.3759541957048853,\n", " 5.4322736425101743,\n", " 5.4220898474720185,\n", " 5.3905230414398773,\n", " 5.4458845984162574,\n", " 5.4705876696812235,\n", " 5.3943082767618771,\n", " 5.4052406528858148,\n", " 5.4362040742190922,\n", " 5.4640939263392863,\n", " 5.4051135025701749,\n", " 5.4741070501629476,\n", " 5.3940804759505001,\n", " 5.2765852999039407,\n", " 5.2367939145239086,\n", " 5.3135569615141129,\n", " 5.3711115812887265,\n", " 5.3801967917752913,\n", " 5.3885632691395839,\n", " 5.3309693678326386,\n", " 5.2689932543645357,\n", " 5.3557540160890884,\n", " 5.5215502002634196,\n", " 5.6763469115788743,\n", " 5.6275036264298288,\n", " 5.5790831372201453,\n", " 5.5845116651871987,\n", " 5.5322635927423747,\n", " 5.4275658988016069,\n", " 5.55966343140968,\n", " 5.6129061682784309,\n", " 5.6316581658716416,\n", " 5.6462540778406192,\n", " 5.598136919296274,\n", " 5.6571348286246561,\n", " 5.6359001873908632,\n", " 5.7277202299609788,\n", " 5.6740846350932692,\n", " 5.6799922954066577,\n", " 5.7594643478485308,\n", " 5.7271271693549277,\n", " 5.7967246479761405,\n", " 5.6902957053480048,\n", " 5.7481933912333032,\n", " 5.776096557452461,\n", " 5.7617121849113948,\n", " 5.8393455241629351,\n", " 5.80851365580238,\n", " 5.7061651224700221,\n", " 5.7463001838894643,\n", " 5.8459095214973518,\n", " 5.8129708972445027,\n", " 5.7289537224283746,\n", " 5.7635394830243891,\n", " 5.7798753607785249,\n", " 5.760361358559452,\n", " 5.7352354078773384,\n", " 5.8116352347282767,\n", " 5.8429041999416764,\n", " 5.8151036523615378,\n", " 5.78702086082113,\n", " 5.8210950505819294,\n", " 5.8882420455009639,\n", " 5.8628804827773484,\n", " 6.0480230583435945,\n", " 6.0152743474266623,\n", " 6.0384255844887509,\n", " 6.0212276415691575,\n", " 5.9373441582168853,\n", " 5.9386898388109204,\n", " 5.7265774770612952,\n", " 5.8058124065141357,\n", " 5.8309416828753804,\n", " 5.806825128711198,\n", " 5.8609904639039865,\n", " 5.8103033501851673,\n", " 5.899075710547133,\n", " 5.8957817233608933,\n", " 5.8774063086352131,\n", " 5.8863750678935238,\n", " 5.9047815232695564,\n", " 5.8772748371652774,\n", " 5.9080492770719681,\n", " 5.9553407787211086,\n", " 5.9539213164617859,\n", " 5.9474931006010614,\n", " 5.8824304350302858,\n", " 5.9246357303227732,\n", " 5.9966512718277771,\n", " 6.1830447741650625,\n", " 6.1328495597379868,\n", " 6.1648144070294419,\n", " 6.0655478905435771,\n", " 6.1017832651817727,\n", " 6.1675802992967839,\n", " 6.31166827776266,\n", " 6.3916595515334285,\n", " 6.2929588458907384,\n", " 6.2468526458728455,\n", " 6.2573973153866271,\n", " 6.1080822368652887,\n", " 6.1801817058435908,\n", " 6.1874435542180333,\n", " 6.1350554316167294,\n", " 6.0669973296916986,\n", " 6.0475437364201925,\n", " 6.1625560989227237,\n", " 6.2144637250854933,\n", " 6.1360530433596248,\n", " 6.1616971499738726,\n", " 6.162973598717806,\n", " 6.0741678423814678,\n", " 6.0596716303603868,\n", " 6.0415228476100937,\n", " 6.0584859422238981,\n", " 6.0317058123404124,\n", " 5.9932926460257168,\n", " 6.0560413661011907,\n", " 6.0989702709130871,\n", " 6.2309670013660554,\n", " 6.2005731621493752,\n", " 6.165409758191255,\n", " 6.1311294067934936,\n", " 6.0906456841662697,\n", " 6.1555500785503412,\n", " 6.2323054704055867,\n", " 6.4881160956818604,\n", " 6.6342351373521016,\n", " 6.4570445412912933,\n", " 6.374866042053406,\n", " 6.4308433625467396,\n", " 6.3734370573236641,\n", " 6.403447253121584,\n", " 6.436265969918189,\n", " 6.3590009819059148,\n", " 6.3961207763580941,\n", " 6.1724201549414683,\n", " 6.2769197073061669,\n", " 6.2851321353926437,\n", " 6.3128169127219014,\n", " 6.3081045394587481,\n", " 6.1950091414851673,\n", " 6.1408556719668068,\n", " 6.0633621949316598,\n", " 6.0881970236622189,\n", " 6.1073369206643013,\n", " 5.9588693113440678,\n", " 6.1175907639469376,\n", " 6.1372956140145734,\n", " 6.2946030931079147,\n", " 6.3439360660854538,\n", " 6.2612379585117202,\n", " 6.2581080316719033,\n", " 6.2563896000018691,\n", " 6.2072595691211578,\n", " 6.3080575540291051,\n", " 6.3459910132352366,\n", " 6.3501889363780117,\n", " 6.3105526963978145,\n", " 6.2589070066815893,\n", " 6.2311725027310167,\n", " 6.2194414241635601,\n", " 6.2260806644232733,\n", " 6.064356694106241,\n", " 6.0569670539878011,\n", " 6.0360820200847431,\n", " 6.0306526347561622,\n", " 6.10963306558555,\n", " 6.1197242278900479,\n", " 6.0840258823582527,\n", " 6.0907413639358587,\n", " 6.1439408348711586,\n", " 6.1601605760088054,\n", " 6.0746815738915974,\n", " 5.8478758489596752,\n", " 5.9261799695037238,\n", " 5.9563496161725427,\n", " 5.9888011699820742,\n", " 5.9312195708763165,\n", " 5.9706724129626032,\n", " 5.9933024864740227,\n", " 5.9867673200914338,\n", " 5.8462362349739472,\n", " 5.9601537526648034,\n", " 5.9947582922473552,\n", " 6.003057420843751,\n", " 5.9846443000312544,\n", " 5.9730104266088659,\n", " 5.9523187593356379,\n", " 5.9463690122944595,\n", " 5.9744223995801935,\n", " 5.939786744728857,\n", " 5.9826215361874091,\n", " 5.939582759766612,\n", " 5.9888134963242665,\n", " 6.0360791469381807,\n", " 6.0211579926374652,\n", " 6.0288817551633125,\n", " 6.2414042550326423,\n", " 6.187163845104128,\n", " 6.0519093619819317,\n", " 6.0220627521113963,\n", " 6.1415191929752213,\n", " 6.2190798550543382,\n", " 6.1596585446123315,\n", " 6.3441677016418678,\n", " 6.3298115176501053,\n", " 6.4282979048325384,\n", " 6.424476408727922,\n", " 6.3926797855142894,\n", " 6.3964736095324044,\n", " 6.4309222704303508,\n", " 6.4470428619492104,\n", " 6.597800571524612,\n", " 6.5303882717602022,\n", " 6.5082277797125911,\n", " 6.4270857231766456,\n", " 6.4280481825694959,\n", " 6.4917677985204172,\n", " 6.5034166775764621,\n", " 6.5314044539772151,\n", " 6.4837296606382804,\n", " 6.454390809817399,\n", " 6.4916832355943601,\n", " 6.3007656633067493,\n", " 6.3505162371615906,\n", " 6.3777252483749614,\n", " 6.4000177307712267,\n", " 6.3744653862664533,\n", " 6.3526573477015882,\n", " 6.2204218426367976,\n", " 6.1601168553797816,\n", " 6.1357619573139441,\n", " 6.2557727237074658,\n", " 6.167742089596838,\n", " 6.2587492973828391,\n", " 6.1016104108795437,\n", " 6.1198442383635463,\n", " 6.1495833296504987,\n", " 6.2104622960501796,\n", " 6.3339111604633027,\n", " 6.2809282570745042,\n", " 6.2876242414388512,\n", " 6.2570788764030008,\n", " 6.2033487804901064,\n", " 6.2705460448924306,\n", " 6.2850656101178455,\n", " 6.2239789058183588,\n", " 6.3938717421479074,\n", " 6.5437888896406857,\n", " 6.4274379632568737,\n", " 6.4566503260158292,\n", " 6.5911292572436331,\n", " 6.5176506312491016,\n", " 6.4449942789804293,\n", " 6.5680941377072877,\n", " 6.4967225254631238,\n", " 6.5211041469949542,\n", " 6.5064621824467359,\n", " 6.480709131233116,\n", " 6.4566845587051755,\n", " 6.442262406589645,\n", " 6.4255759662780054,\n", " 6.2656812077390098,\n", " 6.3326998793779747,\n", " 6.3605331189005687,\n", " 6.4384627842288777,\n", " 6.4182529242340722,\n", " 6.3521926479634994,\n", " 6.3548838182060834,\n", " 6.2062493660098026,\n", " 6.1227534193402322,\n", " 6.1735780907244342,\n", " 6.257880580049517,\n", " 6.1715395829319775,\n", " 6.0964155135202915,\n", " 6.0253029706579264,\n", " 6.2279525671036495,\n", " 6.2832281365796092,\n", " 6.2449293342950511,\n", " 6.2961635274504477,\n", " 6.1546491347218293,\n", " 6.1829646029905909,\n", " 5.8795387296098784,\n", " 5.865635708643282,\n", " 5.9808970294014356,\n", " 6.1233726326465199,\n", " 6.1475733627792479,\n", " 6.1234137034614715,\n", " 6.1820172411545045,\n", " 6.110953603406112,\n", " 6.2301473140168921,\n", " 6.2909630759115895,\n", " 6.2296161049651513,\n", " 6.2549459330259936,\n", " 6.2373482726972096,\n", " 6.2483758660354063,\n", " 6.2136703788104803,\n", " 6.2104630252886199,\n", " 6.2273990415426388,\n", " 6.1087535952540319,\n", " 6.1529684320528553,\n", " 6.2322211056114236,\n", " 6.3655802441960807,\n", " 6.3948997516109243,\n", " 6.4151474712194867,\n", " 6.3925188418026853,\n", " 6.3981933492676948,\n", " 6.4473398997059395,\n", " 6.4744905381026641,\n", " 6.5274246800210474,\n", " 6.6117935320756445,\n", " 6.7194849132268351,\n", " 6.9065916735152806,\n", " 6.8569523133756771,\n", " 7.093649832044397,\n", " 7.1146614486597333,\n", " 6.959046564567581,\n", " 6.8971847300462166,\n", " 6.8718920640936894,\n", " 6.8892431482389771,\n", " 6.9093609232819713,\n", " 6.9342292846106615,\n", " 6.9050223003563289,\n", " 6.9568955928567116,\n", " 7.0621991213880539,\n", " 7.0144742262601563,\n", " 7.0902069086374846,\n", " 7.0928409263184173,\n", " 7.1213566373017265,\n", " 7.1094460551202339,\n", " 7.1264856050282752,\n", " 7.1652686399345962,\n", " 7.1338122136285271,\n", " 7.0767649887730579,\n", " 7.1709408285468967,\n", " 7.0153013499499597,\n", " 6.9989558882842946,\n", " 7.0219877913103499,\n", " 7.0231120950138726,\n", " 6.9636665248807326,\n", " 6.9282749508431589,\n", " 6.7439350370019371,\n", " 6.7192000359220172,\n", " 6.6714688249428402,\n", " 6.8086869327901827,\n", " 7.0141874165476148,\n", " 7.2015380502578346,\n", " 7.2104397327448781,\n", " 7.4097307244234658,\n", " 7.4994811937661714,\n", " 7.5383955652596217,\n", " 7.5257598243247159,\n", " 7.4643927526662219,\n", " 7.419925051358887,\n", " 7.4250818221390835,\n", " 7.3873811927391833,\n", " 7.2617188504588261,\n", " 7.3738386857080407,\n", " 7.4131889877389785,\n", " 7.6126550414636469,\n", " 7.5654094819681772,\n", " 7.5157908776454461,\n", " 7.4497562244839779,\n", " 7.493839352409922,\n", " 7.3213402218210568,\n", " 7.3789381935771532,\n", " 7.4106714634786703,\n", " 7.3807416312214471,\n", " 7.3334474425140224,\n", " 7.3750624522642534,\n", " 7.1372007727528706,\n", " 7.1606881584684707,\n", " 7.1803672350699816,\n", " 7.3255470613039817,\n", " 6.9943591433109242,\n", " 6.9732675095448213,\n", " 6.8783565835878377,\n", " 6.98031341771956,\n", " 7.0696330413615396,\n", " 7.1607723114095014,\n", " 7.0449926166276597,\n", " 7.0414901962793346,\n", " 6.9804239710971157,\n", " 6.9562096900860082,\n", " 7.0210273090914965,\n", " 7.09478413240039,\n", " 7.012461803934074,\n", " 7.0590005713322466,\n", " 7.0127664831919914,\n", " 6.9826575725121636,\n", " 6.7550987187868294,\n", " 6.8455421117176369,\n", " 6.8003112684943243,\n", " 6.8145724087410535,\n", " 6.7527017284933013,\n", " 6.7705005164856784,\n", " 6.7455740696794591,\n", " 6.7090450939173296,\n", " 6.8174593561024039,\n", " 6.7561050422959914,\n", " 6.7685896090459821,\n", " 6.7212441360700428,\n", " 6.708807593216064,\n", " 6.7271014922594778,\n", " 6.6292978617777898,\n", " 6.6781841107789504,\n", " 6.6371342050968041,\n", " 6.5761833234625202,\n", " 6.4605090722697485,\n", " 6.4744029638508964,\n", " 6.5284606295299801,\n", " 6.6373386089196691,\n", " 6.7138169997656982,\n", " 6.9934142385080982,\n", " 7.0033428700723244,\n", " 6.9731492025766002,\n", " 6.903985690267298,\n", " 6.7763511117355106,\n", " 6.9286200126673725,\n", " 7.1000447927499133,\n", " 7.09345535511933,\n", " 7.2090938424918161,\n", " 7.3875787563479705,\n", " 7.2690978663524817,\n", " 7.0616455045616044,\n", " 7.2840816049333386,\n", " 7.1494006615636714,\n", " 7.0909212815348575,\n", " 6.9756315987328001,\n", " 7.1271611782983575,\n", " 7.3403473742641054,\n", " 7.2331691094700741,\n", " 7.2989727139133107,\n", " 7.2774514255596436,\n", " 7.1840288370307857,\n", " 7.0735299963138605,\n", " 7.0574518530785344,\n", " 7.0548456751269599,\n", " 7.0500731962669914,\n", " 7.1972686558377195,\n", " 7.3031413984761011,\n", " 7.3132245486697238,\n", " 7.2868563605187724,\n", " 7.1813517379585132,\n", " 7.2056567321774807,\n", " 7.2221203604976587,\n", " 7.303063402287032,\n", " 7.249336357764383,\n", " 7.3215974293986239,\n", " 7.3465744795495835,\n", " 7.2623125996367914,\n", " 7.1832045239247577,\n", " 7.2110622174023407,\n", " 7.2747432344764427,\n", " 7.2988475355933025,\n", " 7.2356259413900874,\n", " 7.3840689407557019,\n", " 7.4877323004681422,\n", " 7.4430426064260899,\n", " 7.547895511610589,\n", " 7.853534332512754,\n", " 7.8830789750244366,\n", " 7.9047336433194486,\n", " 7.8181639151809526,\n", " 7.7530848964388044,\n", " 7.7092626693515918,\n", " 7.7095797684844971,\n", " 7.7309297661935092,\n", " 8.0600143476631736,\n", " 8.0258230337079368,\n", " 7.9327871394336968,\n", " 7.9057457729556697,\n", " 7.9818310553921803,\n", " 8.0143330004230258,\n", " 8.1754728516629527,\n", " 8.7407287580604791,\n", " 8.7995995090737971,\n", " 8.867927942283929,\n", " 8.6887842580518946,\n", " 8.6983989242566118,\n", " 8.6945500631580295,\n", " 8.8441087150870885,\n", " 8.7258164661630744,\n", " 8.8024823054114449,\n", " 8.7787939745095258,\n", " 9.1172342120167613,\n", " 9.2680542237316139,\n", " 9.1650955209006391,\n", " 9.1386373110298855,\n", " 9.1268413609690526,\n", " 9.1291268207320435,\n", " 8.6960030096486172,\n", " 8.4810024645889115,\n", " 8.706283715671649,\n", " 8.5742443320341302,\n", " 8.6031961396124572,\n", " 8.7541019859943603,\n", " 8.8981049343881047,\n", " 9.1199557942662679,\n", " 9.0634315212467769,\n", " 9.0170817804556229,\n", " 8.936251707707612,\n", " 8.8447979331690725,\n", " 8.8924510671958963,\n", " 8.7791685153324366,\n", " 8.8370720416319664,\n", " 8.9438054404963623,\n", " 9.0455691462537509,\n", " 8.9756613136340881,\n", " 8.9782988128879637,\n", " 8.7991923503918912,\n", " 8.8319758268649018,\n", " 8.5466183148245918,\n", " 8.4355524888700018,\n", " 8.3217873270650173,\n", " 8.2988388549950294,\n", " 8.3065803960319577,\n", " 8.4021592910978384,\n", " 8.5870749537099229,\n", " 8.6557881491832518,\n", " 9.0317099927321145,\n", " 9.3410479073250805,\n", " 9.257132790073296,\n", " 9.1141185430142784,\n", " 9.0238654242010554,\n", " 8.9053677378521812,\n", " 8.7573052001405713,\n", " 8.5919558075387883,\n", " 8.5357095650479451,\n", " 8.5705348340574652,\n", " 8.5261801217514801,\n", " 8.455678023573725,\n", " 8.5249425070290421,\n", " 8.5236222570150524,\n", " 8.503959955965918,\n", " 8.4779948267985503,\n", " 8.5056881023953892,\n", " 8.5034824896200227,\n", " 8.4185489627222019,\n", " 8.3965397334449214,\n", " 8.4227469652387406,\n", " 8.6334553104145435,\n", " 8.5475481715345403,\n", " 8.6156735357205285,\n", " 8.4874570101510827,\n", " 8.5989568750146859,\n", " 8.4999619685108208,\n", " 8.4278022041539309,\n", " 8.2926979585328304,\n", " 8.2191610967032283,\n", " 8.2553098502367348,\n", " 8.3580209656298372,\n", " 8.3849307979197505,\n", " 8.5128770984646316,\n", " 8.6936671450390151,\n", " 8.7351396771845877,\n", " 8.9359409027146697,\n", " 8.7476072646596776,\n", " 8.760362013563892,\n", " 8.7813559838988837,\n", " 8.7019480478778419,\n", " 8.5962504827029846,\n", " 8.3097775815425656,\n", " 8.314351872071196,\n", " 8.3332544217005697,\n", " 8.177403143787636,\n", " 8.0370736920569641,\n", " 7.9955316026275227,\n", " 8.1135286130677589,\n", " 8.0999295185881248,\n", " 8.1323977424668836,\n", " 8.353558473235843,\n", " 8.3627913457939798,\n", " 8.2982673496554327,\n", " 8.239889751083922,\n", " 8.2794388368821039,\n", " 8.3151318186046659,\n", " 8.2878949770880226,\n", " 8.3145224376038662,\n", " 8.3217347747334678,\n", " 8.361261606969169,\n", " 8.2482657385797076,\n", " 8.1191631477612169,\n", " 8.0100525958385624,\n", " 7.9554902189860819,\n", " 7.9742993581720665,\n", " 7.8767152934545601,\n", " 7.9164994418923085,\n", " 7.9365820129852329,\n", " 7.9045451847957189,\n", " 7.8760165254064036,\n", " 7.7042965921734918,\n", " 7.6322132401307998,\n", " 7.4676383587877524,\n", " 7.5858334540930628,\n", " 7.5291781811296907,\n", " 7.6096179559688855,\n", " 7.630509550688771,\n", " 7.6094201957988741,\n", " 7.6641815079352149,\n", " 7.6848412585378814,\n", " 7.8911170276009788,\n", " 7.8190718466675859,\n", " 7.8330305627793999,\n", " 7.9387218052772308,\n", " 8.1745324941517552,\n", " 8.384695869685924,\n", " 8.3652442732570798,\n", " 8.398681958037912,\n", " 8.2744982214506173,\n", " 8.1104570473939859,\n", " 8.0677158919087297,\n", " 7.9424607383238817,\n", " 8.0678176000176194,\n", " 8.0501612723240346,\n", " 8.1853794404798172,\n", " 8.2151225058013857,\n", " 8.246360084538626,\n", " 8.1941068591003763,\n", " 8.4321177951631796,\n", " 8.4877223086359805,\n", " 8.4042422357193338,\n", " 8.3366053381759251,\n", " 8.4219905782303037,\n", " 8.397206008853054,\n", " 8.3405830860297705,\n", " 8.3534836349673398,\n", " 8.3344084410325863,\n", " 8.3679514733665776,\n", " 8.2150060140943069,\n", " 8.2782100074905181,\n", " 8.0397544097686939,\n", " 7.8083451503724639,\n", " 7.7759904510853541,\n", " 7.7659556863017114,\n", " 7.8816910861271836,\n", " 7.8284873779591297,\n", " 7.7491053833361532,\n", " 7.7384166631877536,\n", " 7.7749151618182237,\n", " 7.6598817571314335,\n", " 7.7044720656557004,\n", " 7.802719627179008,\n", " 7.826875388505754,\n", " 7.8818001021853403,\n", " 7.8003511199652689,\n", " 7.857051034205834,\n", " 7.7864747767375251,\n", " 7.7862678309626165,\n", " 8.133128993505311,\n", " 8.2698183444256976,\n", " 8.4167558575348203,\n", " 8.383077049640633,\n", " 8.3904754222121767,\n", " 8.1992277975189083,\n", " 7.9908745958752458,\n", " 7.7943533392336741,\n", " 7.8640805782897685,\n", " 7.7894779972708088,\n", " 7.709607920105328,\n", " 7.8026737473801102,\n", " 7.777483277159015,\n", " 7.8719721434556789,\n", " 7.9582558942923693,\n", " 8.1224926189577289,\n", " 8.0170409399506521,\n", " 8.0704090637939032,\n", " 8.079237085478379,\n", " 7.8730172640258562,\n", " 7.958210582937153,\n", " 7.8145807161893641,\n", " 7.7035187304274677,\n", " 7.5795677889528887,\n", " 7.5396208640973876,\n", " 7.653805772717047,\n", " 7.3691106847887298,\n", " 7.5347701137935541,\n", " 7.6050346596434109,\n", " 7.4913792400688708,\n", " 7.5104684964167978,\n", " ...]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Put all 7-days-ahead predictions into an array\n", "predictions_800_7thday = []\n", "for array in predictions_800_off:\n", " for week_prediction in array:\n", " predictions_800_7thday.append(week_prediction[6]) \n", "print(len(predictions_800_7thday))\n", "predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Prepare dataframe for visualisation\n", "# There are 7000 predictions\n", "bp_final_predictions = bp_ftse[800+6:806+7000]\n", "bp_final_predictions.loc[:,'7d Ahead Pred'] = predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKcj/A8gycsG+fw1+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual adjusted close prices\n", "bp_final_predictions.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual prices\n", "# Only first 200 predictions\n", "bp_preds_200 = bp_final_predictions[:200]\n", "bp_preds_200.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/Discarded Notes-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Discarded Notes\n", "\n", "The conversations online talk about how rubbish algorithms like KNN are when KNN was the example using in the ML for Trading class.\n", "\n", "'Unless you model the **Implied Volatility** of the stock, you cannot predict price. The stock price is function a various factors which are mostly known except the Implied volatility. You can model the implied vol using algorithms like **SVM** but not KNN.'[Source: Anoop Vasant Kumar](https://www.quora.com/How-effective-is-the-k-Nearest-Neighbor-algorithm-for-stock-price-prediction).\n", "\n", "THe class also discusses **Reinforcement Learning**, but since your actions don't change the environment...I guess you can model your rewards to be the amount of profit you make. And then it would kind of make sense.\n", "\n", "\n", "'The only machine-learning algorithms that I have found to actually work in trading are linear algorithms such as various incarnations of regressions. Everything else tend to overfit to noise. Remember, unlike in fields such as image or speech recognition, financial time series has very low signal-to-noise ratio, and more problematically, probability distributions in finance are often non-stationary. You can read more about this subject in my book Quantitative Trading.' [Source: Ernest Chan, author of Algorithmic Trading](https://www.quora.com/How-can-I-get-started-applying-machine-learning-to-algorithmic-trading).\n", "\n", "- Logistic Regression\n", "- Random Forests (DTs)\n", "\n", "\n", "logistic regression (fastest) and random forests (most accurate usually). There are others, such as support vector machines, boosted decision trees,\n", "3-layer neural networks, but these don't offer as good accuracy as random forests (and often slower as \n", "well) or as much speed as logistic regression. In my opinion, the best choice would simply be" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/delete-checkpoint.ipynb ================================================ { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/lse-list-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LSE list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### For (1) Finding the stocks that are relevant to BP and (2) Finding out more about BP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Contextual Information\n", "I also supplemented this information with a **list of Companies and Securities from the London Stock Exchange** (spreadsheet `list-of-all-securites-ex-debt` from [this page](http://www.londonstockexchange.com/statistics/companies-and-issuers/companies-and-issuers.htm). The spreadsheet includes the following attributes for all securities (excluding debt) that were listed on the LSE as of the end of August 2016:\n", "* Security Start Date, \n", "* Company Name, \n", "* Country of Incorporation, \n", "* LSE Market\t(UK Main Market, International Main Market, AIM (Alternative Investment Market)...), \n", "* FCA Listing Category (Standard Shares, Standard Debt...) (FCA stands for Financial Conduct Authority), \n", "* ISIN (International Securities Identification Number), \n", "* Security Name (code, e.g. PELS'90' 20/11/17(WORLD BASKET P/WT)GBP1 for Barclays Bank PLC),\n", "* TIDM (stock symbol: Tradable Instrument Display Mnemonic), \n", "* Mkt Cap £m, \t\n", "* Shares in Issue, \n", "* Industry, \n", "* Supersector, \n", "* Sector, \n", "* Subsector, \n", "* Group (a number, e.g. 8355 for banks), \n", "* MarketSegmentCode, \n", "* MarketSectorCode, and \n", "* Trading Currency (GBX, USD, EUR).\n", "\n", "Not every column of every row of this spreadsheet is filled. There are some blank cells.\n", "\n", "I converted the spreadsheet to a CSV and imported it below:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
02-Aug-061PM PLCGBAIMNaNGB00BCDBXK43ORD GBP0.1OPM33.88472952,534,463.00FinancialsFinancial ServicesFinancial ServicesSpecialty Finance8775AIMAIMGBX
12-Feb-091SPATIAL PLCGBAIMNaNGB00B09LQS34ORD GBP0.01SPA32.293431738,135,558.00IndustrialsIndustrial Goods & ServicesSupport ServicesBusiness Support Services2791AIMAIMGBX
215-Apr-0521ST CENTURY TECHNOLOGY PLCGBAIMNaNGB0008866310ORD GBP0.065C211.74824593,239,755.00IndustrialsIndustrial Goods & ServicesSupport ServicesBusiness Support Services2791AIMAIMGBX
323-Sep-0532REDGIAIMNaNGI000A0F56M0ORD GBP0.002TTR108.90199683,690,295.00Consumer ServicesTravel & LeisureTravel & LeisureGambling5752AMSMASM6GBX
421-Aug-15365 AGILE GROUP PLCGBAIMNaNGB00BYY8NN14ORD GBP0.303655.01222918,914,073.00IndustrialsIndustrial Goods & ServicesElectronic & Electrical EquipmentElectrical Components & Equipment2733ASQ1AMQ1GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "0 2-Aug-06 1PM PLC \n", "1 2-Feb-09 1SPATIAL PLC \n", "2 15-Apr-05 21ST CENTURY TECHNOLOGY PLC \n", "3 23-Sep-05 32RED \n", "4 21-Aug-15 365 AGILE GROUP PLC \n", "\n", " Country of Incorporation LSE Market FCA Listing Category ISIN \\\n", "0 GB AIM NaN GB00BCDBXK43 \n", "1 GB AIM NaN GB00B09LQS34 \n", "2 GB AIM NaN GB0008866310 \n", "3 GI AIM NaN GI000A0F56M0 \n", "4 GB AIM NaN GB00BYY8NN14 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "0 ORD GBP0.1 OPM 33.884729 \n", "1 ORD GBP0.01 SPA 32.293431 \n", "2 ORD GBP0.065 C21 1.748245 \n", "3 ORD GBP0.002 TTR 108.901996 \n", "4 ORD GBP0.30 365 5.012229 \n", "\n", " Shares in Issue Industry Supersector \\\n", "0 52,534,463.00 Financials Financial Services \n", "1 738,135,558.00 Industrials Industrial Goods & Services \n", "2 93,239,755.00 Industrials Industrial Goods & Services \n", "3 83,690,295.00 Consumer Services Travel & Leisure \n", "4 18,914,073.00 Industrials Industrial Goods & Services \n", "\n", " Sector Subsector \\\n", "0 Financial Services Specialty Finance \n", "1 Support Services Business Support Services \n", "2 Support Services Business Support Services \n", "3 Travel & Leisure Gambling \n", "4 Electronic & Electrical Equipment Electrical Components & Equipment \n", "\n", " Group MarketSegmentCode MarketSectorCode Trading Currency \n", "0 8775 AIM AIM GBX \n", "1 2791 AIM AIM GBX \n", "2 2791 AIM AIM GBX \n", "3 5752 AMSM ASM6 GBX \n", "4 2733 ASQ1 AMQ1 GBX " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lse_list = pd.read_csv(\"list-of-all-securities-ex-debt.csv\")\n", "# Delete extra columns of NaNs\n", "for i in range(18,36):\n", " del lse_list['Unnamed: %s' % str(i)]\n", "lse_list.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
36820-Dec-54BPGBUK Main MarketStandard SharesGB00013854749% CUM 2ND PRF GBP1BP.B80288.5319935,473,414.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
36920-Dec-54BPGBUK Main MarketStandard SharesGB00013852508% CUM 1ST PRF GBP1BP.A80288.5319937,232,838.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
37020-Dec-54BPGBUK Main MarketPremium Equity Commercial CompaniesGB0007980591ORD USD0.25BP.80288.53199318,758,751,584.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "368 20-Dec-54 BP \n", "369 20-Dec-54 BP \n", "370 20-Dec-54 BP \n", "\n", " Country of Incorporation LSE Market \\\n", "368 GB UK Main Market \n", "369 GB UK Main Market \n", "370 GB UK Main Market \n", "\n", " FCA Listing Category ISIN \\\n", "368 Standard Shares GB0001385474 \n", "369 Standard Shares GB0001385250 \n", "370 Premium Equity Commercial Companies GB0007980591 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "368 9% CUM 2ND PRF GBP1 BP.B 80288.531993 \n", "369 8% CUM 1ST PRF GBP1 BP.A 80288.531993 \n", "370 ORD USD0.25 BP. 80288.531993 \n", "\n", " Shares in Issue Industry Supersector Sector \\\n", "368 5,473,414.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "369 7,232,838.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "370 18,758,751,584.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "\n", " Subsector Group MarketSegmentCode MarketSectorCode \\\n", "368 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "369 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "370 Integrated Oil & Gas 537 SET0 FE00 \n", "\n", " Trading Currency \n", "368 GBX \n", "369 GBX \n", "370 GBX " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lse_list[368:371]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And let's look at all the stocks that are in that group:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of companies: 27\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
36820-Dec-54BPGBUK Main MarketStandard SharesGB00013854749% CUM 2ND PRF GBP1BP.B80288.5319935,473,414.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
36920-Dec-54BPGBUK Main MarketStandard SharesGB00013852508% CUM 1ST PRF GBP1BP.A80288.5319937,232,838.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
37020-Dec-54BPGBUK Main MarketPremium Equity Commercial CompaniesGB0007980591ORD USD0.25BP.80288.53199318,758,751,584.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
49918-Oct-00CHINA PETROLEUM & CHEMICAL CORPCNInternational Main MarketStandard GDRsUS16941R1086ADS EACH REP 100'H'SHS CNY1SNP8820.761210192,975,620.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLUUSD
99615-Nov-99GAIL(INDIA)INPSMStandard GDRsUS36268T1079GDR EACH REP 6 ORD INR10 144AGAIA0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINPEUSD
99715-Nov-99GAIL(INDIA)INPSMStandard GDRsUS36268T2069GDR EACH REP 6 ORD INR10 REG'S'GAID0.00000025,833,333.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEIPHEUSD
100912-Jun-06GAZPROM NEFT PJSCRUTrading OnlyNaNUS36829G1076LEVEL 1 ADR EACH REPR 5 ORD SHSGAZ0.00000020,348,882.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEINHEUSD
101028-Oct-96GAZPROM OAORUInternational Main MarketStandard GDRsUS3682871088ADS EACH REP 10 ORD REGD 144A81JK36475.6963090.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
101128-Oct-96GAZPROM OAORUInternational Main MarketStandard GDRsUS3682872078ADS EACH REPR 2 ORD SHSOGZD36475.69630911,836,756,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
108327-Oct-14GREEN DRAGON GAS LTDKYInternational Main MarketStandard SharesKYG409381053ORD USD0.0001 (DI)GDG359.348630142,316,289.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSMUSMEWGBX
116430-Jun-98HELLENIC PETROLEUM SAGRInternational Main MarketStandard GDRsUS4233231046GDS EACH REPR 1 ORD SH'144A'98LQ0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
116530-Jun-98HELLENIC PETROLEUM SAGRInternational Main MarketStandard GDRsUS4233232036GDS EACH REPR 1 ORD REG'S'HLPD0.00000023,215,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLNUSD
15627-May-97LUKOIL PJSCRUInternational Main MarketStandard GDRsUS69343P2048GDR EACH REPR 1 ORD RUB0.025 SPON 144ALKOE58934.5838413,450,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
15637-May-97LUKOIL PJSCRUInternational Main MarketStandard GDRsUS69343P1057ADR EACH REPR 1 ORD RUB0.025 SPONLKOD58934.583841850,563,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
15647-May-97LUKOIL PJSCRUInternational Main MarketStandard SharesRU0009024277RUB0.025LKOH58934.583841850,563,255.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSX4SXSNUSD
158227-Sep-04MAGYAR OLAJ-ES GAZIPARE RESZVENYTARHUTrading OnlyNaNUS6084642023ADR EACH REP 0.50 ORD SHS(REG'S')MOLD0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBUINLNUSD
16012-Jun-95MANDO MACHINERY CORPKRInternational Main MarketStandard GDRsUSY576241019GDR EACH REP 1/2 ORDMNMD0.000000806,234.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLNUSD
16022-Jun-95MANDO MACHINERY CORPKRInternational Main MarketStandard GDRsUS5626651096GDR EACH REPR 1/2 SHARE(144A)05IS0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
217719-Jul-06ROSNEFT OIL CORUInternational Main MarketStandard GDRsUS67812M1080GDR EACH REPR 1 ORD '144A'40XT38202.6640970.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
217819-Jul-06ROSNEFT OIL CORUInternational Main MarketStandard GDRsUS67812M2070GDR EACH REPR 1 ORD 'REGS'ROSN38202.6640979,597,430,705.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
220420-Jul-05ROYAL DUTCH SHELLGBUK Main MarketPremium Equity Commercial CompaniesGB00B03MLX29'A'ORD EUR0.07RDSA153220.7153974,325,899,655.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
220520-Jul-05ROYAL DUTCH SHELLGBUK Main MarketPremium Equity Commercial CompaniesGB00B03MM408ORD EUR0.07 BRDSB153220.7153973,745,486,731.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
22228-Apr-11SACOIL HLDGS LTDZAAIMNaNZAE000127460NPV(DI)SAC30.3526943,195,020,413.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537ASQ1AMQ1GBX
247027-Sep-04SURGUTNEFTEGAZRUTrading OnlyNaNUS8688612048ADR EACH REPR 10 ORDSGGD0.000000340,597,744.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEINHEUSD
250413-Dec-96TATNEFT PJSCRUInternational Main MarketStandard GDRsUS8766292051ADR EACH REP 6 ORD SHS REGSATAD8160.571386363,116,666.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
256426-Sep-73TOTAL SAFRInternational Main MarketStandard SharesFR0000120271EUR2.5TTA88787.0792862,444,133,158.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSMUSMEUEUR
279718-Jun-14ZOLTAV RESOURCES INCKYAIMNaNKYG9895N1198ORD USD0.2 (DI)ZOL31.883712141,705,386.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537ASQ1AMQ1GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "368 20-Dec-54 BP \n", "369 20-Dec-54 BP \n", "370 20-Dec-54 BP \n", "499 18-Oct-00 CHINA PETROLEUM & CHEMICAL CORP \n", "996 15-Nov-99 GAIL(INDIA) \n", "997 15-Nov-99 GAIL(INDIA) \n", "1009 12-Jun-06 GAZPROM NEFT PJSC \n", "1010 28-Oct-96 GAZPROM OAO \n", "1011 28-Oct-96 GAZPROM OAO \n", "1083 27-Oct-14 GREEN DRAGON GAS LTD \n", "1164 30-Jun-98 HELLENIC PETROLEUM SA \n", "1165 30-Jun-98 HELLENIC PETROLEUM SA \n", "1562 7-May-97 LUKOIL PJSC \n", "1563 7-May-97 LUKOIL PJSC \n", "1564 7-May-97 LUKOIL PJSC \n", "1582 27-Sep-04 MAGYAR OLAJ-ES GAZIPARE RESZVENYTAR \n", "1601 2-Jun-95 MANDO MACHINERY CORP \n", "1602 2-Jun-95 MANDO MACHINERY CORP \n", "2177 19-Jul-06 ROSNEFT OIL CO \n", "2178 19-Jul-06 ROSNEFT OIL CO \n", "2204 20-Jul-05 ROYAL DUTCH SHELL \n", "2205 20-Jul-05 ROYAL DUTCH SHELL \n", "2222 8-Apr-11 SACOIL HLDGS LTD \n", "2470 27-Sep-04 SURGUTNEFTEGAZ \n", "2504 13-Dec-96 TATNEFT PJSC \n", "2564 26-Sep-73 TOTAL SA \n", "2797 18-Jun-14 ZOLTAV RESOURCES INC \n", "\n", " Country of Incorporation LSE Market \\\n", "368 GB UK Main Market \n", "369 GB UK Main Market \n", "370 GB UK Main Market \n", "499 CN International Main Market \n", "996 IN PSM \n", "997 IN PSM \n", "1009 RU Trading Only \n", "1010 RU International Main Market \n", "1011 RU International Main Market \n", "1083 KY International Main Market \n", "1164 GR International Main Market \n", "1165 GR International Main Market \n", "1562 RU International Main Market \n", "1563 RU International Main Market \n", "1564 RU International Main Market \n", "1582 HU Trading Only \n", "1601 KR International Main Market \n", "1602 KR International Main Market \n", "2177 RU International Main Market \n", "2178 RU International Main Market \n", "2204 GB UK Main Market \n", "2205 GB UK Main Market \n", "2222 ZA AIM \n", "2470 RU Trading Only \n", "2504 RU International Main Market \n", "2564 FR International Main Market \n", "2797 KY AIM \n", "\n", " FCA Listing Category ISIN \\\n", "368 Standard Shares GB0001385474 \n", "369 Standard Shares GB0001385250 \n", "370 Premium Equity Commercial Companies GB0007980591 \n", "499 Standard GDRs US16941R1086 \n", "996 Standard GDRs US36268T1079 \n", "997 Standard GDRs US36268T2069 \n", "1009 NaN US36829G1076 \n", "1010 Standard GDRs US3682871088 \n", "1011 Standard GDRs US3682872078 \n", "1083 Standard Shares KYG409381053 \n", "1164 Standard GDRs US4233231046 \n", "1165 Standard GDRs US4233232036 \n", "1562 Standard GDRs US69343P2048 \n", "1563 Standard GDRs US69343P1057 \n", "1564 Standard Shares RU0009024277 \n", "1582 NaN US6084642023 \n", "1601 Standard GDRs USY576241019 \n", "1602 Standard GDRs US5626651096 \n", "2177 Standard GDRs US67812M1080 \n", "2178 Standard GDRs US67812M2070 \n", "2204 Premium Equity Commercial Companies GB00B03MLX29 \n", "2205 Premium Equity Commercial Companies GB00B03MM408 \n", "2222 NaN ZAE000127460 \n", "2470 NaN US8688612048 \n", "2504 Standard GDRs US8766292051 \n", "2564 Standard Shares FR0000120271 \n", "2797 NaN KYG9895N1198 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "368 9% CUM 2ND PRF GBP1 BP.B 80288.531993 \n", "369 8% CUM 1ST PRF GBP1 BP.A 80288.531993 \n", "370 ORD USD0.25 BP. 80288.531993 \n", "499 ADS EACH REP 100'H'SHS CNY1 SNP 8820.761210 \n", "996 GDR EACH REP 6 ORD INR10 144A GAIA 0.000000 \n", "997 GDR EACH REP 6 ORD INR10 REG'S' GAID 0.000000 \n", "1009 LEVEL 1 ADR EACH REPR 5 ORD SHS GAZ 0.000000 \n", "1010 ADS EACH REP 10 ORD REGD 144A 81JK 36475.696309 \n", "1011 ADS EACH REPR 2 ORD SHS OGZD 36475.696309 \n", "1083 ORD USD0.0001 (DI) GDG 359.348630 \n", "1164 GDS EACH REPR 1 ORD SH'144A' 98LQ 0.000000 \n", "1165 GDS EACH REPR 1 ORD REG'S' HLPD 0.000000 \n", "1562 GDR EACH REPR 1 ORD RUB0.025 SPON 144A LKOE 58934.583841 \n", "1563 ADR EACH REPR 1 ORD RUB0.025 SPON LKOD 58934.583841 \n", "1564 RUB0.025 LKOH 58934.583841 \n", "1582 ADR EACH REP 0.50 ORD SHS(REG'S') MOLD 0.000000 \n", "1601 GDR EACH REP 1/2 ORD MNMD 0.000000 \n", "1602 GDR EACH REPR 1/2 SHARE(144A) 05IS 0.000000 \n", "2177 GDR EACH REPR 1 ORD '144A' 40XT 38202.664097 \n", "2178 GDR EACH REPR 1 ORD 'REGS' ROSN 38202.664097 \n", "2204 'A'ORD EUR0.07 RDSA 153220.715397 \n", "2205 ORD EUR0.07 B RDSB 153220.715397 \n", "2222 NPV(DI) SAC 30.352694 \n", "2470 ADR EACH REPR 10 ORD SGGD 0.000000 \n", "2504 ADR EACH REP 6 ORD SHS REGS ATAD 8160.571386 \n", "2564 EUR2.5 TTA 88787.079286 \n", "2797 ORD USD0.2 (DI) ZOL 31.883712 \n", "\n", " Shares in Issue Industry Supersector Sector \\\n", "368 5,473,414.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "369 7,232,838.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "370 18,758,751,584.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "499 192,975,620.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "996 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "997 25,833,333.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1009 20,348,882.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1010 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1011 11,836,756,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1083 142,316,289.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1164 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1165 23,215,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1562 3,450,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1563 850,563,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1564 850,563,255.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1582 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1601 806,234.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1602 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2177 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2178 9,597,430,705.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2204 4,325,899,655.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2205 3,745,486,731.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2222 3,195,020,413.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2470 340,597,744.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2504 363,116,666.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2564 2,444,133,158.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2797 141,705,386.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "\n", " Subsector Group MarketSegmentCode MarketSectorCode \\\n", "368 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "369 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "370 Integrated Oil & Gas 537 SET0 FE00 \n", "499 Integrated Oil & Gas 537 IOBU LLLU \n", "996 Integrated Oil & Gas 537 MISC INPE \n", "997 Integrated Oil & Gas 537 IOBE IPHE \n", "1009 Integrated Oil & Gas 537 IOBE INHE \n", "1010 Integrated Oil & Gas 537 MISC INTM \n", "1011 Integrated Oil & Gas 537 IOBE LLHE \n", "1083 Integrated Oil & Gas 537 SSMU SMEW \n", "1164 Integrated Oil & Gas 537 MISC INTM \n", "1165 Integrated Oil & Gas 537 IOBU LLLN \n", "1562 Integrated Oil & Gas 537 MISC INTM \n", "1563 Integrated Oil & Gas 537 IOBE LLHE \n", "1564 Integrated Oil & Gas 537 SSX4 SXSN \n", "1582 Integrated Oil & Gas 537 IOBU INLN \n", "1601 Integrated Oil & Gas 537 IOBU LLLN \n", "1602 Integrated Oil & Gas 537 MISC INTM \n", "2177 Integrated Oil & Gas 537 MISC INTM \n", "2178 Integrated Oil & Gas 537 IOBE LLHE \n", "2204 Integrated Oil & Gas 537 SET0 FE00 \n", "2205 Integrated Oil & Gas 537 SET0 FE00 \n", "2222 Integrated Oil & Gas 537 ASQ1 AMQ1 \n", "2470 Integrated Oil & Gas 537 IOBE INHE \n", "2504 Integrated Oil & Gas 537 IOBE LLHE \n", "2564 Integrated Oil & Gas 537 SSMU SMEU \n", "2797 Integrated Oil & Gas 537 ASQ1 AMQ1 \n", "\n", " Trading Currency \n", "368 GBX \n", "369 GBX \n", "370 GBX \n", "499 USD \n", "996 USD \n", "997 USD \n", "1009 USD \n", "1010 USD \n", "1011 USD \n", "1083 GBX \n", "1164 USD \n", "1165 USD \n", "1562 USD \n", "1563 USD \n", "1564 USD \n", "1582 USD \n", "1601 USD \n", "1602 USD \n", "2177 USD \n", "2178 USD \n", "2204 GBX \n", "2205 GBX \n", "2222 GBX \n", "2470 USD \n", "2504 USD \n", "2564 EUR \n", "2797 GBX " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Number of companies: \", len(lse_list[lse_list['Group'] == 537]))\n", "lse_list[lse_list['Group'] == 537]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['BP ',\n", " 'CHINA PETROLEUM & CHEMICAL CORP ',\n", " 'GAIL(INDIA) ',\n", " 'GAZPROM NEFT PJSC ',\n", " 'GAZPROM OAO ',\n", " 'GREEN DRAGON GAS LTD ',\n", " 'HELLENIC PETROLEUM SA ',\n", " 'LUKOIL PJSC ',\n", " 'MAGYAR OLAJ-ES GAZIPARE RESZVENYTAR',\n", " 'MANDO MACHINERY CORP ',\n", " 'ROSNEFT OIL CO ',\n", " 'ROYAL DUTCH SHELL ',\n", " 'SACOIL HLDGS LTD ',\n", " 'SURGUTNEFTEGAZ ',\n", " 'TATNEFT PJSC ',\n", " 'TOTAL SA ',\n", " 'ZOLTAV RESOURCES INC '], dtype=object)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Print only company names\n", "lse_list[lse_list['Group'] == 537]['Company Name'].unique()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'df' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcompanies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Symbol'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mcompanies\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'df' is not defined" ] } ], "source": [ "companies = df['Symbol'].unique()\n", "companies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OMG do I have to compile the freaking FTSE100 myself??" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tickernamepremium_codefree_code
0ADNAberdeen Asset ManagementNaNGOOG/LON_ADN
1ADMAdmiral GroupEOD/ADMGOOG/LON_ADM
2AGKAggrekoNaNGOOG/LON_AGK
3AMECAMECNaNGOOG/LON_AMEC
4AALAnglo American plcEOD/AALGOOG/LON_AAL
5ANTOAntofagastaNaNGOOG/LON_ANTO
6ARMARM HoldingsNaNGOOG/LON_ARM
7ABFAssociated British FoodsNaNGOOG/LON_ABF
8AZNAstraZenecaEOD/AZNGOOG/LON_AZN
9AVAvivaEOD/AVNaN
10BABBabcock InternationalEOD/BABGOOG/LON_BAB
11BABAE SystemsEOD/BANaN
12BARCBarclaysNaNGOOG/LON_BARC
13BGBG GroupEOD/BGNaN
14BLTBHP BillitonEOD/BLTGOOG/LON_BLT
15BPBPEOD/BPNaN
16BTIBritish American TobaccoEOD/BTINaN
17BLNDBritish Land CoNaNGOOG/LON_BLND
18BSYBSkyBNaNGOOG/LON_BSY
19BT_ABT GroupNaNGOOG/LON_BT_A
20BNZLBunzlNaNGOOG/LON_BNZL
21BRBYBurberry GroupNaNGOOG/LON_BRBY
22CPICapitaEOD/CPIGOOG/LON_CPI
23CUKCarnival plcEOD/CUKGOOG/LON_CUK
24CNACentricaEOD/CNAGOOG/LON_CNA
25CCHCoca-Cola HBC AGNaNNaN
26CPGCompass GroupEOD/CPGGOOG/LON_CPG
27CRHCRH plcEOD/CRHGOOG/LON_CRH
28CRDACroda InternationalNaNGOOG/LON_CRDA
29DGEDiageoNaNGOOG/LON_DGE
...............
68RIORio Tinto GroupEOD/RIOGOOG/LON_RIO
69RRRolls-Royce GroupNaNNaN
70RBSRoyal Bank of Scotland GroupEOD/RBSGOOG/LON_RBS
71RDSARoyal Dutch ShellNaNGOOG/LON_RDSA
72RSARSA Insurance GroupNaNGOOG/LON_RSA
73SABSABMillerNaNGOOG/LON_SAB
74SGESage GroupNaNGOOG/LON_SGE
75SDRSchrodersEOD/SDRGOOG/LON_SDR
76SRPSercoNaNGOOG/LON_SRP
77SVTSevern TrentEOD/SVTGOOG/LON_SVT
78SHPGShire plcEOD/SHPGNaN
79SNNSmith & NephewEOD/SNNNaN
80SMINSmiths GroupNaNGOOG/LON_SMIN
81SSESSE plcEOD/SSEGOOG/LON_SSE
82STANStandard CharteredNaNGOOG/LON_STAN
83SLStandard LifeNaNNaN
84TATETate & LyleNaNGOOG/LON_TATE
85TSCOTescoEOD/TSCOGOOG/LON_TSCO
86TTTUI TravelNaNNaN
87TLWTullow OilNaNGOOG/LON_TLW
88ULVRUnileverNaNGOOG/LON_ULVR
89UUUnited UtilitiesNaNNaN
90VEDVedanta ResourcesNaNGOOG/LON_VED
91VODVodafone GroupEOD/VODGOOG/LON_VOD
92WEIRWeir GroupNaNGOOG/LON_WEIR
93WTBWhitbreadNaNGOOG/LON_WTB
94WOSWolseley plcNaNGOOG/LON_WOS
95WG_Wood GroupNaNGOOG/LON_WG_
96WPPWPP plcEOD/WPPGOOG/LON_WPP
97XTAXstrataNaNGOOG/LON_XTA
\n", "

98 rows × 4 columns

\n", "
" ], "text/plain": [ " ticker name premium_code free_code\n", "0 ADN Aberdeen Asset Management NaN GOOG/LON_ADN\n", "1 ADM Admiral Group EOD/ADM GOOG/LON_ADM\n", "2 AGK Aggreko NaN GOOG/LON_AGK\n", "3 AMEC AMEC NaN GOOG/LON_AMEC\n", "4 AAL Anglo American plc EOD/AAL GOOG/LON_AAL\n", "5 ANTO Antofagasta NaN GOOG/LON_ANTO\n", "6 ARM ARM Holdings NaN GOOG/LON_ARM\n", "7 ABF Associated British Foods NaN GOOG/LON_ABF\n", "8 AZN AstraZeneca EOD/AZN GOOG/LON_AZN\n", "9 AV Aviva EOD/AV NaN\n", "10 BAB Babcock International EOD/BAB GOOG/LON_BAB\n", "11 BA BAE Systems EOD/BA NaN\n", "12 BARC Barclays NaN GOOG/LON_BARC\n", "13 BG BG Group EOD/BG NaN\n", "14 BLT BHP Billiton EOD/BLT GOOG/LON_BLT\n", "15 BP BP EOD/BP NaN\n", "16 BTI British American Tobacco EOD/BTI NaN\n", "17 BLND British Land Co NaN GOOG/LON_BLND\n", "18 BSY BSkyB NaN GOOG/LON_BSY\n", "19 BT_A BT Group NaN GOOG/LON_BT_A\n", "20 BNZL Bunzl NaN GOOG/LON_BNZL\n", "21 BRBY Burberry Group NaN GOOG/LON_BRBY\n", "22 CPI Capita EOD/CPI GOOG/LON_CPI\n", "23 CUK Carnival plc EOD/CUK GOOG/LON_CUK\n", "24 CNA Centrica EOD/CNA GOOG/LON_CNA\n", "25 CCH Coca-Cola HBC AG NaN NaN\n", "26 CPG Compass Group EOD/CPG GOOG/LON_CPG\n", "27 CRH CRH plc EOD/CRH GOOG/LON_CRH\n", "28 CRDA Croda International NaN GOOG/LON_CRDA\n", "29 DGE Diageo NaN GOOG/LON_DGE\n", ".. ... ... ... ...\n", "68 RIO Rio Tinto Group EOD/RIO GOOG/LON_RIO\n", "69 RR Rolls-Royce Group NaN NaN\n", "70 RBS Royal Bank of Scotland Group EOD/RBS GOOG/LON_RBS\n", "71 RDSA Royal Dutch Shell NaN GOOG/LON_RDSA\n", "72 RSA RSA Insurance Group NaN GOOG/LON_RSA\n", "73 SAB SABMiller NaN GOOG/LON_SAB\n", "74 SGE Sage Group NaN GOOG/LON_SGE\n", "75 SDR Schroders EOD/SDR GOOG/LON_SDR\n", "76 SRP Serco NaN GOOG/LON_SRP\n", "77 SVT Severn Trent EOD/SVT GOOG/LON_SVT\n", "78 SHPG Shire plc EOD/SHPG NaN\n", "79 SNN Smith & Nephew EOD/SNN NaN\n", "80 SMIN Smiths Group NaN GOOG/LON_SMIN\n", "81 SSE SSE plc EOD/SSE GOOG/LON_SSE\n", "82 STAN Standard Chartered NaN GOOG/LON_STAN\n", "83 SL Standard Life NaN NaN\n", "84 TATE Tate & Lyle NaN GOOG/LON_TATE\n", "85 TSCO Tesco EOD/TSCO GOOG/LON_TSCO\n", "86 TT TUI Travel NaN NaN\n", "87 TLW Tullow Oil NaN GOOG/LON_TLW\n", "88 ULVR Unilever NaN GOOG/LON_ULVR\n", "89 UU United Utilities NaN NaN\n", "90 VED Vedanta Resources NaN GOOG/LON_VED\n", "91 VOD Vodafone Group EOD/VOD GOOG/LON_VOD\n", "92 WEIR Weir Group NaN GOOG/LON_WEIR\n", "93 WTB Whitbread NaN GOOG/LON_WTB\n", "94 WOS Wolseley plc NaN GOOG/LON_WOS\n", "95 WG_ Wood Group NaN GOOG/LON_WG_\n", "96 WPP WPP plc EOD/WPP GOOG/LON_WPP\n", "97 XTA Xstrata NaN GOOG/LON_XTA\n", "\n", "[98 rows x 4 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-list.csv\")\n", "ftse100_csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Why are there only 98 rows?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'ADN'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100 = ftse100_csv['ticker'].unique()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
0DateOpenHighLowClose
12016-09-096858.76862.386762.36776.95
22016-09-086846.586889.646819.826858.7
32016-09-076826.056856.126814.876846.58
42016-09-066879.426887.926818.966826.05
52016-09-056894.66910.666867.086879.42
62016-09-026745.976928.256745.976894.6
72016-09-016781.516826.226723.216745.97
82016-08-316820.796832.896779.546781.51
92016-08-306838.056851.836808.076820.79
102016-08-266816.96857.296798.826838.05
112016-08-256835.786836.226779.156816.9
122016-08-246868.516868.516825.226835.78
132016-08-236828.546885.396828.546868.51
142016-08-226858.956884.616812.076828.54
152016-08-196868.966871.486840.946858.95
162016-08-186859.156893.356850.616868.96
172016-08-176893.926920.766849.96859.15
182016-08-166941.196941.196893.926893.92
192016-08-156916.026955.346907.176941.19
202016-08-126914.716931.046896.046916.02
212016-08-116866.426914.716812.736914.71
222016-08-106851.36866.426820.046866.42
232016-08-096809.136863.16807.766851.3
242016-08-086793.476829.476781.476809.13
252016-08-056740.166802.416738.576793.47
262016-08-046634.46749.676615.836740.16
272016-08-036645.46673.636621.426634.4
282016-08-026693.956694.146630.766645.4
292016-08-016724.436769.416678.456693.95
302016-07-296721.066740.476691.136724.43
312016-07-286750.436762.726718.96721.06
322016-07-276724.036780.056723.716750.43
332016-07-266710.136744.86708.586724.03
342016-07-256730.486756.136691.036710.13
352016-07-226699.896735.946663.726730.48
362016-07-216728.996732.076694.526699.89
372016-07-206697.376736.576694.366728.99
382016-07-196695.426711.696660.876697.37
392016-07-186669.246715.586653.676695.42
402016-07-156654.476669.246616.516669.24
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 Date Open High Low Close\n", "1 2016-09-09 6858.7 6862.38 6762.3 6776.95\n", "2 2016-09-08 6846.58 6889.64 6819.82 6858.7\n", "3 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "4 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "5 2016-09-05 6894.6 6910.66 6867.08 6879.42\n", "6 2016-09-02 6745.97 6928.25 6745.97 6894.6\n", "7 2016-09-01 6781.51 6826.22 6723.21 6745.97\n", "8 2016-08-31 6820.79 6832.89 6779.54 6781.51\n", "9 2016-08-30 6838.05 6851.83 6808.07 6820.79\n", "10 2016-08-26 6816.9 6857.29 6798.82 6838.05\n", "11 2016-08-25 6835.78 6836.22 6779.15 6816.9\n", "12 2016-08-24 6868.51 6868.51 6825.22 6835.78\n", "13 2016-08-23 6828.54 6885.39 6828.54 6868.51\n", "14 2016-08-22 6858.95 6884.61 6812.07 6828.54\n", "15 2016-08-19 6868.96 6871.48 6840.94 6858.95\n", "16 2016-08-18 6859.15 6893.35 6850.61 6868.96\n", "17 2016-08-17 6893.92 6920.76 6849.9 6859.15\n", "18 2016-08-16 6941.19 6941.19 6893.92 6893.92\n", "19 2016-08-15 6916.02 6955.34 6907.17 6941.19\n", "20 2016-08-12 6914.71 6931.04 6896.04 6916.02\n", "21 2016-08-11 6866.42 6914.71 6812.73 6914.71\n", "22 2016-08-10 6851.3 6866.42 6820.04 6866.42\n", "23 2016-08-09 6809.13 6863.1 6807.76 6851.3\n", "24 2016-08-08 6793.47 6829.47 6781.47 6809.13\n", "25 2016-08-05 6740.16 6802.41 6738.57 6793.47\n", "26 2016-08-04 6634.4 6749.67 6615.83 6740.16\n", "27 2016-08-03 6645.4 6673.63 6621.42 6634.4\n", "28 2016-08-02 6693.95 6694.14 6630.76 6645.4\n", "29 2016-08-01 6724.43 6769.41 6678.45 6693.95\n", "30 2016-07-29 6721.06 6740.47 6691.13 6724.43\n", "31 2016-07-28 6750.43 6762.72 6718.9 6721.06\n", "32 2016-07-27 6724.03 6780.05 6723.71 6750.43\n", "33 2016-07-26 6710.13 6744.8 6708.58 6724.03\n", "34 2016-07-25 6730.48 6756.13 6691.03 6710.13\n", "35 2016-07-22 6699.89 6735.94 6663.72 6730.48\n", "36 2016-07-21 6728.99 6732.07 6694.52 6699.89\n", "37 2016-07-20 6697.37 6736.57 6694.36 6728.99\n", "38 2016-07-19 6695.42 6711.69 6660.87 6697.37\n", "39 2016-07-18 6669.24 6715.58 6653.67 6695.42\n", "40 2016-07-15 6654.47 6669.24 6616.51 6669.24" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "ftse100_csv" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/p5.1-definition-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## I. Definition\n", "_(approx. 1-2 pages)_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Project Overview\n", "\n", "### Introduction\n", "People have used machine learning in trading for decades. People use all sorts of strategies. \n", "\n", "### Scope of this project\n", "We will investigate **using machine learning in trading equities**, specifically to **predict equity prices for a 7-day period**. Equities are stocks - shares of companies like Apple and Google that are publically listed on the stock exchange. That means any licensed stock broker can trade those stocks. By trading, we mean buying and selling these shares on the stock exchange.\n", "\n", "We will only tackle trading equities and not other more complex financial products because calculating returns for those products is more complex and equities are sufficiently interesting.\n", "\n", "### Why trading is an interesting domain for machine learning\n", "This is an interesting domain: \n", "1. Firstly, there are many non-engineered features. If we include only equities, we already have over 10,000 equities globally. That makes for at least 10,000 potential non-engineered features. \n", "\n", "2. Secondly, there are many datapoints. Even access to only daily trading information gives us 30 years * 365 days = over 10,000 datapoints. If we were to look at intraday figures, there's even more data: in January 2009, an average of 881,609 trades were made per day in equities on the London Stock Exchange [(Source: LSE Group)](http://www.lseg.com/media-centre/news/corporate-press-releases/185-million-electronic-equity-trades-across-london-stock-exchange-group-order-books-january).\n", "\n", "3. It is also interesting because research in machine learning and statistics has affected how markets behave. There is no strategy or algorithm that will solve this problem or remain forever 'optimal' - if a profitable strategy is found, it may be copied by other people and so be priced in or it may be fought against or taken advantage of. This is more relevant to high-frequency trading than daily trading but nonetheless has an impact. \n", "\n", "### Aim of this project\n", "\n", "The aim of this exploratory study is to get a feel for what types of features are involved in predicting stock prices and how different models perform in this setting. The challenges will be discussed in more detail in the Problem Statement.\n", "\n", "Predicting stock prices accurately is difficult: there are many factors that influence stock prices and a lot of noise.\n", "\n", "This exploratory study does not aim to produce a state-of-the-art, better-than-benchmark-buy-and-hold (transaction costs included) trading strategy - that is extremely difficult and is a challenge even for top trading firms. \n", "\n", "### Data used in this project\n", "\n", "There is one primary dataset for this project and one supplementary dataset.\n", "\n", "* The primary dataset is a CSV with all the daily stock prices from 1977 for stocks listed on the the London Stock Exchange. This dataset was downloaded from Quandl. \n", "* The supplementary dataset is a spreadsheet listing the stocks currently listed on the London Stock Exchange with information such as what each listed company's stock symbol is and which sector they belong to. This spreadsheet was downloaded from the London Stock Exchange website.\n", "\n", "The features and characteristics of the dataset will be discussed more thoroughly in Section II: Data Exploration." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Interesting but not important:\n", "\n", "For example, in May 2010 the US S&P 500 dropped 5-6% in value within minutes. This was suspected to be because of bots. This was called the Flash Crash. [People have theorised](https://en.wikipedia.org/wiki/2010_Flash_Crash#Early_theories) that the Flash Crash was exacerbated by high-frequency traders, although this seems to have been disproved. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "# Problem Statement\n", "\n", "### Problem\n", "\n", "Build a stock price predictor that satifies:\n", "\n", "\n", "\n", "\n", "\n", "
CategoryDetails
InputDaily trade data over a `start_date - end_date`. Daily trade data consists of adjusted and unadjusted Open, High, Low, Close figures for a set of stocks S.
Output
  • Projected estimates of Adjusted Close prices for query dates for pre-chosen stock BP in S.
  • Results satisfy predicted stock value 7 days out is within +/- 5% of actual value, on average.
Optional OutputSuggested trades
\n", "\n", "Glossary:\n", "* **Adjusted prices** are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open.\n", "* **BP** is the stock symbol for British Petroleum, an energy company.\n", "\n", "### Interesting characteristics of this problem\n", "There are a few interesting characteristics of this problem compared to previous projects in the Machine Learning Engineer Nanodegree.\n", "\n", "1. Predicting multiple outputs: We will predict the adjusted close prices for 7 days after the last input date.\n", "\n", "### Challenges\n", "1. The model has to be run for dates not within the training set for the model to be 'fair'. But given there may be big shifts in how people view the markets from year to year, it may be hard for the model to generalise from one year to the next.\n", "2. Energy companies' stock prices are volatile so they may be harder to predict.\n", "\n", "### Analysis of Problem\n", "\n", "This is a regression problem (as opposed to a classification problem) because we are predicting daily Adjusted Close prices for a stock. These prices are continuous.\n", "\n", "A related problem: If this were high-frequency trading and we were trying to predict the stock price in the next nanosecond we could tackle price prediction as a binary classificaiton problem (does the price go up or down?).\n", "\n", "It's not immediately obvious what kind of model will be best.\n", "\n", "Characteristic of problem: \n", "- Time-series data.\n", "- Noisy data\n", "- Datapoints (prices of different stocks) are not independent of each other -> Naive Bayes is not appropriate\n", "- Many features. (Daily open, high, low, adjusted close for many stocks)\n", "- Regression problem (continuous output).\n", "- Training cost or time: it is not critical to keep this lower than 12 hours because we are predicting daily prices based on stats from prior days' trading. \n", "- Prediction time: Again not critical to keep this low. Anything within an hour would do.\n", "\n", "### Strategy\n", "I intend to do the following:\n", "\n", "\n", "1. Explore the data\n", "- Come up with a basic model with which I can predict the next day's prices and then the next 7 days' prices as a benchmark\n", "- Try adding different features and using different algorithms\n", " - Features include x-day moving averages of BP stocks, stocks in the oil industry, and indices such as the FTSE 100. \n", "- Assess which model is best.\n", "\n", "### Expected Solution\n", "\n", "The solution will be 7 predicted prices for each day within 7 days after the last date in the input date range. We will then compare the (up to) 5 out of 7 predicted prices that land on trading days with the actual adjusted close prices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wrong?\n", "\n", "```I expect the solution to correlate with other stocks in the same industry to some extent. Competitors should correlate with each other when there is industry-positive or industry-negative information, and not correlate positively with each other when there is firm-specific information.\n", "\n", "I expect it to correlate with but be more volatile than the FTSE indices.```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Metrics\n", "e.g. We will measure performance as the squared deviation between the stock's actual and predicted Adjusted Close prices.\n", "\n", "We will not consider transaction costs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Metrics\n", "In this section, you will need to clearly define the metrics or calculations you will use to measure performance of a model or result in your project. These calculations and metrics should be justified based on the characteristics of the problem and problem domain. Questions to ask yourself when writing this section:\n", "- _Are the metrics you’ve chosen to measure the performance of your models clearly discussed and defined?_\n", "- _Have you provided reasonable justification for the metrics chosen based on the problem and solution?_" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/p5.2-4-code-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analysis, Methodology, Results" ] }, { "cell_type": "code", "execution_count": 219, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# LSE daily data: Description and exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Data Used\n", "The data used is daily stock data for stocks on the London Stock Exchange (LSE). The date range for stock data varies depending on when the stock went public. The furthest date was **YEAR**. The most recent date in the dataset was 9 September 2016. The data was taken from Quandl.\n", "\n", "All the data is in one CSV, with each row being one datapoint. Unless otherwise indicated, the column values are all floats. Each row includes:\n", "* Stock symbol (string)\n", "* Date (YYYY-MM-DD) \n", "* Open (given to 2 decimal places)\n", "* High (to 2 d.p.)\n", "* Low (to 2 d.p.)\n", "* Close (to 2 d.p.)\n", "* Volume (to 1 d.p.)\n", "* Ex-Dividend (to 1 d.p.)\n", "* Split Ratio (to 1 d.p.)\n", "* Adjusted Open (to 6 d.p.)\n", "* Adjusted High (to 6 d.p.)\n", "* Adjusted Low (to 6 d.p.)\n", "* Adjusted Close (to 6 d.p.)\n", "* Adjusted Volume (to 1 d.p.)\n", "\n", "That means we have 12 features for each stock on every trading day since the year when the stock was tradable.\n", "\n", "**Data Preprocessing**\n", "On opening the CSV and sampling it with `df.head()`, I realised the CSV had no header. I added a header to the CSV:\n", "```python\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)\n", "```\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Defining Characteristics about Stock Data\n", "1. Limit Down Circuit Breakers" ] }, { "cell_type": "code", "execution_count": 220, "metadata": { "collapsed": false }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 221, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 222, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
0A1999-11-1845.5050.0040.0044.0044739900.00.01.043.47181047.77121938.21697542.03867344739900.0
1A1999-11-1942.9443.0039.8140.3810897100.00.01.041.02592341.08324938.03544538.58003710897100.0
2A1999-11-2241.3144.0040.0644.004705200.00.01.039.46858142.03867338.27430142.0386734705200.0
3A1999-11-2342.5043.6340.2540.254274400.00.01.040.60553641.68516638.45583238.4558324274400.0
4A1999-11-2440.1341.9440.0041.063464400.00.01.038.34118140.07049938.21697539.2297253464400.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "0 A 1999-11-18 45.50 50.00 40.00 44.00 44739900.0 0.0 \n", "1 A 1999-11-19 42.94 43.00 39.81 40.38 10897100.0 0.0 \n", "2 A 1999-11-22 41.31 44.00 40.06 44.00 4705200.0 0.0 \n", "3 A 1999-11-23 42.50 43.63 40.25 40.25 4274400.0 0.0 \n", "4 A 1999-11-24 40.13 41.94 40.00 41.06 3464400.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "0 1.0 43.471810 47.771219 38.216975 42.038673 44739900.0 \n", "1 1.0 41.025923 41.083249 38.035445 38.580037 10897100.0 \n", "2 1.0 39.468581 42.038673 38.274301 42.038673 4705200.0 \n", "3 1.0 40.605536 41.685166 38.455832 38.455832 4274400.0 \n", "4 1.0 38.341181 40.070499 38.216975 39.229725 3464400.0 " ] }, "execution_count": 222, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 276, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.01.00
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.00.75
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.01.00
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.01.12
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.01.00
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.00.88
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.01.13
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.00.63
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.01.00
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.00.50
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.00.75
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.00.50
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.01.25
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.00.88
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.01.00
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.01.26
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.00.50
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.00.88
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.00.75
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.01.13
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.00.63
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.00.50
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.00.50
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.00.75
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.01.50
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.00.50
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.01.25
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.00.50
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.00.75
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.00.88
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.02.87
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.02.25
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.00.75
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.01.12
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.00.38
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.00.62
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.01.63
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.01.75
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.01.25
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.00.88
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.02.25
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.03.00
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.03.50
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.01.75
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.00.50
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.01.38
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.01.13
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.01.25
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.00.62
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.00.63
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 \n", "\n", " Daily Variation \n", "1923200 1.00 \n", "1923201 0.75 \n", "1923202 1.00 \n", "1923203 1.12 \n", "1923204 1.00 \n", "1923205 0.88 \n", "1923206 1.13 \n", "1923207 0.63 \n", "1923208 1.00 \n", "1923209 0.50 \n", "1923210 0.75 \n", "1923211 0.50 \n", "1923212 1.25 \n", "1923213 0.88 \n", "1923214 1.00 \n", "1923215 1.26 \n", "1923216 0.50 \n", "1923217 0.88 \n", "1923218 0.75 \n", "1923219 1.13 \n", "1923220 0.63 \n", "1923221 0.50 \n", "1923222 0.50 \n", "1923223 0.75 \n", "1923224 1.50 \n", "1923225 0.50 \n", "1923226 1.25 \n", "1923227 0.50 \n", "1923228 0.75 \n", "1923229 0.88 \n", "1923230 2.87 \n", "1923231 2.25 \n", "1923232 0.75 \n", "1923233 1.12 \n", "1923234 0.38 \n", "1923235 0.62 \n", "1923236 1.63 \n", "1923237 1.75 \n", "1923238 1.25 \n", "1923239 0.88 \n", "1923240 2.25 \n", "1923241 3.00 \n", "1923242 3.50 \n", "1923243 1.75 \n", "1923244 0.50 \n", "1923245 1.38 \n", "1923246 1.13 \n", "1923247 1.25 \n", "1923248 0.62 \n", "1923249 0.63 " ] }, "execution_count": 276, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 223, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 223, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 224, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%1.180000e+011.200000e+011.156000e+011.180000e+013.420000e+040.000000e+001.000000e+006.213272e+006.328367e+006.096837e+006.214642e+004.410000e+04
50%2.288000e+012.321000e+012.250000e+012.288000e+011.712000e+050.000000e+001.000000e+001.355680e+011.378368e+011.332000e+011.355915e+012.230000e+05
75%3.833000e+013.885000e+013.782000e+013.835000e+016.686000e+050.000000e+001.000000e+002.689342e+012.730000e+012.646493e+012.689551e+018.800000e+05
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% 1.180000e+01 1.200000e+01 1.156000e+01 1.180000e+01 3.420000e+04 \n", "50% 2.288000e+01 2.321000e+01 2.250000e+01 2.288000e+01 1.712000e+05 \n", "75% 3.833000e+01 3.885000e+01 3.782000e+01 3.835000e+01 6.686000e+05 \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% 0.000000e+00 1.000000e+00 6.213272e+00 6.328367e+00 6.096837e+00 \n", "50% 0.000000e+00 1.000000e+00 1.355680e+01 1.378368e+01 1.332000e+01 \n", "75% 0.000000e+00 1.000000e+00 2.689342e+01 2.730000e+01 2.646493e+01 \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% 6.214642e+00 4.410000e+04 \n", "50% 1.355915e+01 2.230000e+05 \n", "75% 2.689551e+01 8.800000e+05 \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 224, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 245, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 281, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 243, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 284, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:461: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " s._data = s._data.setitem(indexer=pi, value=v)\n" ] } ], "source": [ "bp.loc[:,'Daily Variation'] = 0" ] }, { "cell_type": "code", "execution_count": 239, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.0
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.0
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.0
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.0
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 " ] }, "execution_count": 239, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 277, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.0
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.0
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.0
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.0
Daily Variation000.000.0000.0000.000.00.00.00.000.0000.0000.000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "Daily Variation 0 0 0.00 0.000 0.000 0.00 0.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "1933105 0.0 1.0 34.55 34.760 34.380 \n", "1933106 0.0 1.0 34.78 34.910 34.650 \n", "1933107 0.0 1.0 34.89 35.175 34.660 \n", "1933108 0.0 1.0 34.63 34.700 34.235 \n", "Daily Variation 0.0 0.0 0.00 0.000 0.000 \n", "\n", " Adj. Close Adj. Volume \n", "1933105 34.69 4090421.0 \n", "1933106 34.76 3902827.0 \n", "1933107 35.08 5161379.0 \n", "1933108 34.35 5434710.0 \n", "Daily Variation 0.00 0.0 " ] }, "execution_count": 277, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 235, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
count10011.00000010011.00000010011.00000010011.0000001.001100e+0410011.00000010011.00000010011.00000010011.00000010011.00000010011.0000001.001100e+0410011.0
mean59.42249759.90223858.93792159.4401992.815801e+060.0046261.00030018.70349818.85336318.54572418.7054893.407934e+060.0
std20.59691520.68452020.52070620.6060387.216936e+060.0482680.02234714.12820514.22932814.01249914.1231417.531797e+060.0
min0.0000000.0000000.0000000.0000000.000000e+000.0000000.0000000.0000000.0000000.0000000.0000000.000000e+000.0
25%44.75000045.15000044.25000044.7600001.831000e+050.0000001.0000005.4245545.4923725.3733025.4407577.536000e+050.0
50%53.94000054.34000053.50000053.9400006.351000e+050.0000001.00000015.07776715.15051515.03317915.0918471.903800e+060.0
75%69.75000070.23000069.32500069.7900003.784450e+060.0000001.00000031.84844332.20594831.52331031.8893864.051150e+060.0
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+080.0
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10011.000000 10011.000000 10011.000000 10011.000000 1.001100e+04 \n", "mean 59.422497 59.902238 58.937921 59.440199 2.815801e+06 \n", "std 20.596915 20.684520 20.520706 20.606038 7.216936e+06 \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000e+00 \n", "25% 44.750000 45.150000 44.250000 44.760000 1.831000e+05 \n", "50% 53.940000 54.340000 53.500000 53.940000 6.351000e+05 \n", "75% 69.750000 70.230000 69.325000 69.790000 3.784450e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10011.000000 10011.000000 10011.000000 10011.000000 10011.000000 \n", "mean 0.004626 1.000300 18.703498 18.853363 18.545724 \n", "std 0.048268 0.022347 14.128205 14.229328 14.012499 \n", "min 0.000000 0.000000 0.000000 0.000000 0.000000 \n", "25% 0.000000 1.000000 5.424554 5.492372 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.150515 15.033179 \n", "75% 0.000000 1.000000 31.848443 32.205948 31.523310 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation \n", "count 10011.000000 1.001100e+04 10011.0 \n", "mean 18.705489 3.407934e+06 0.0 \n", "std 14.123141 7.531797e+06 0.0 \n", "min 0.000000 0.000000e+00 0.0 \n", "25% 5.440757 7.536000e+05 0.0 \n", "50% 15.091847 1.903800e+06 0.0 \n", "75% 31.889386 4.051150e+06 0.0 \n", "max 50.533702 2.408085e+08 0.0 " ] }, "execution_count": 235, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "code", "execution_count": 231, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:284: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = value\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:461: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " s._data = s._data.setitem(indexer=pi, value=v)\n" ] } ], "source": [ "bp.loc[:,'Daily Variation'] = bp.loc[:,'High'] - bp.loc[:,'Low']" ] }, { "cell_type": "code", "execution_count": 190, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " app.launch_new_instance()\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:6: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" ] } ], "source": [ "# Create additional features\n", "# These features are not used in the current model\n", "bp['Daily Variation'] = bp['High'] - bp['Low']\n", "bp['Percentage Variation'] = bp['Daily Variation'] / bp['Open'] * 100\n", "bp['Adj. Daily Variation'] = bp['Adj. High'] - bp['Adj. Low']\n", "bp['Adj. Percentage Variation'] = bp['Adj. Daily Variation'] / bp['Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 191, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 191, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "bp.plot(x='Date', y='Open')\n", "bp.plot(x='Date', y='Adj. Open')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is extraordinary: the adjusted open and the open are radically different for BP, whereas with stock 'A' in the first few rows of the df, Adj. Open and Open had similar values. We are predicting the Adjusted Close - my guess is that the Adjusted figures will be more useful in predicting the adjusted price. The non-adjusted figures may be good for predicting momentum though.\n", "\n", "The stock price looks volatile. From the descriptive statistics, the mean daily percentage variation is 1.72% and the maximum daily percentage variation is 16.0%." ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 192, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nGQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bp.plot(x='Date', y='Percentage Variation')\n", "bp.plot(x='Date', y='Adj. Percentage Variation')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Adjusted Percentage Variation and Percentage Variation look similar, however." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Engineering\n", "x-day running averages\n" ] }, { "cell_type": "code", "execution_count": 217, "metadata": { "collapsed": true }, "outputs": [ { "ename": "IndexingError", "evalue": "(slice(None, None, None), '30-day Moving Average')", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_get_setitem_indexer\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 117\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 118\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_convert_to_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mis_setter\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 119\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mTypeError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_convert_to_indexer\u001b[0;34m(self, obj, axis, is_setter)\u001b[0m\n\u001b[1;32m 1199\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1200\u001b[0;31m \u001b[0mlevel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1201\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/indexes/base.py\u001b[0m in \u001b[0;36mget_indexer\u001b[0;34m(self, target, method, limit, tolerance)\u001b[0m\n\u001b[1;32m 2027\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2028\u001b[0;31m \u001b[0;32mdef\u001b[0m \u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlimit\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2029\u001b[0m \"\"\"\n", "\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_indexer (pandas/index.c:5888)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/hashtable.pyx\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.lookup (pandas/hashtable.c:13317)\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'slice'", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mIndexingError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmoving_average\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbp\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mm_average\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0mmoving_average\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Adj. Close'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mmoving_average\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mbp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m'%s-day Moving Average'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmoving_average\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mm_average\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m__setitem__\u001b[0;34m(self, key, value)\u001b[0m\n\u001b[1;32m 125\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 127\u001b[0;31m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 128\u001b[0m \u001b[0mkey\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtuple\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_apply_if_callable\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mx\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 129\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py\u001b[0m in \u001b[0;36m_get_setitem_indexer\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 122\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'cannot do'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[0;32mraise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 124\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mIndexingError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 125\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 126\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setitem__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mIndexingError\u001b[0m: (slice(None, None, None), '30-day Moving Average')" ] } ], "source": [ "# N-day running averages\n", "moving_average = 30\n", "\n", "# 3-day, 7-day, 10-day, 14-day moving averages.\n", "# Use a function\n", "\n", "for i in range(moving_average, len(bp)):\n", " m_average = sum(bp.iloc[i-moving_average:i]['Adj. Close'])/moving_average\n", " bp.iloc[i].loc[:,'%s-day Moving Average' % str(moving_average)] = m_average" ] }, { "cell_type": "code", "execution_count": 216, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 216, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding the stocks that are relevant to BP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feat: FTSE 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I scraped data from Google Finance." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "ftse100_csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Raw cells because I've done this above." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Create additional features\n", "# These features are not used in the current model\n", "bp['Daily Variation'] = bp['High'] - bp['Low']\n", "bp['Percentage Variation'] = bp['Daily Variation'] / bp['Open'] * 100\n", "bp['Adj. Daily Variation'] = bp['Adj. High'] - bp['Adj. Low']\n", "bp['Adj. Percentage Variation'] = bp['Adj. Daily Variation'] / bp['Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build training and test sets" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['i-1', 'i-2', 'i-3', 'i-4', 'i-5', 'i-6', 'i-7', 'Adj. High', 'Adj. Low']\n", "Start date: 1977-01-12\n", " i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1977-01-12 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 2.01993 \n", "1977-01-13 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 \n", "1977-01-14 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 \n", "1977-01-15 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 \n", "1977-01-16 1.95826 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 \n", "\n", " Adj. High Adj. Low \n", "1977-01-12 2.02982 1.93874 \n", "1977-01-13 2.02982 1.91272 \n", "1977-01-14 2.0038 1.91272 \n", "1977-01-15 1.98766 1.91272 \n", "1977-01-16 1.98766 1.91272 \n", " Target\n", "1977-01-12 1.93223\n", "1977-01-13 1.97777\n", "1977-01-14 1.95175\n", "1977-01-15 1.95826\n", "1977-01-16 1.94863\n" ] } ], "source": [ "# Initialise variables\n", "# Number of days prior that we consider\n", "days = 7\n", "# Number of train and test examples combined\n", "periods = 9000\n", "\n", "# Columns\n", "columns = []\n", "for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", "columns.append('Adj. High')\n", "columns.append('Adj. Low')\n", "print(columns)\n", "\n", "# Index\n", "start_date = bp.iloc[days][\"Date\"]\n", "print(\"Start date: \", start_date)\n", "index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", "# Create empty dataframes for features and prices\n", "features = pd.DataFrame(index=index, columns=columns)\n", "prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", "\n", "# Prepare test and training sets\n", "for i in range(periods):\n", " prices.iloc[i]['Target'] = bp.iloc[i+days]['Adj. Close']\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(7-j)] = bp.iloc[i+j]['Adj. Close']\n", " features.iloc[i]['Adj. High'] = max(bp[i:i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[i:i+days]['Adj. Low'])\n", "print(features.head())\n", "print(prices.head())" ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateAdj. Close
19230991977-01-032.019933
19231001977-01-042.003798
19231011977-01-051.938740
19231021977-01-061.954874
19231031977-01-071.954874
19231041977-01-101.967886
19231051977-01-111.951752
19231061977-01-121.932234
19231071977-01-131.977775
19231081977-01-141.951752
19231091977-01-171.958257
19231101977-01-181.948629
19231111977-01-192.010304
19231121977-01-201.977775
19231131977-01-211.967886
19231141977-01-241.990787
19231151977-01-251.993909
19231161977-01-262.003798
19231171977-01-272.000676
19231181977-01-282.003798
\n", "
" ], "text/plain": [ " Date Adj. Close\n", "1923099 1977-01-03 2.019933\n", "1923100 1977-01-04 2.003798\n", "1923101 1977-01-05 1.938740\n", "1923102 1977-01-06 1.954874\n", "1923103 1977-01-07 1.954874\n", "1923104 1977-01-10 1.967886\n", "1923105 1977-01-11 1.951752\n", "1923106 1977-01-12 1.932234\n", "1923107 1977-01-13 1.977775\n", "1923108 1977-01-14 1.951752\n", "1923109 1977-01-17 1.958257\n", "1923110 1977-01-18 1.948629\n", "1923111 1977-01-19 2.010304\n", "1923112 1977-01-20 1.977775\n", "1923113 1977-01-21 1.967886\n", "1923114 1977-01-24 1.990787\n", "1923115 1977-01-25 1.993909\n", "1923116 1977-01-26 2.003798\n", "1923117 1977-01-27 2.000676\n", "1923118 1977-01-28 2.003798" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.iloc[:20][['Date', 'Adj. Close']]" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Day 0Day 1Day 2Day 3Day 4Day 5Day 6
1977-01-121.932231.977771.951751.958261.948632.01031.97777
1977-01-131.977771.951751.958261.948632.01031.977771.96789
1977-01-141.951751.958261.948632.01031.977771.967891.99079
1977-01-151.958261.948632.01031.977771.967891.990791.99391
1977-01-161.948632.01031.977771.967891.990791.993912.0038
1977-01-172.01031.977771.967891.990791.993912.00382.00068
1977-01-181.977771.967891.990791.993912.00382.000682.0038
1977-01-191.967891.990791.993912.00382.000682.00381.99079
1977-01-201.990791.993912.00382.000682.00381.990791.99729
1977-01-211.993912.00382.000682.00381.990791.997291.99729
1977-01-222.00382.000682.00381.990791.997291.997291.99391
1977-01-232.000682.00381.990791.997291.997291.993912.00692
1977-01-242.00381.990791.997291.997291.993912.006922.03633
1977-01-251.990791.997291.997291.993912.006922.036332.10139
1977-01-261.997291.997291.993912.006922.036332.101392.17295
1977-01-271.997291.993912.006922.036332.101392.172952.19247
1977-01-281.993912.006922.036332.101392.172952.192472.19247
1977-01-292.006922.036332.101392.172952.192472.192472.17946
1977-01-302.036332.101392.172952.192472.192472.179462.18596
1977-01-312.101392.172952.192472.192472.179462.185962.16644
1977-02-012.172952.192472.192472.179462.185962.166442.12741
1977-02-022.192472.192472.179462.185962.166442.127412.12741
1977-02-032.192472.179462.185962.166442.127412.127412.1144
1977-02-042.179462.185962.166442.127412.127412.11442.1144
1977-02-052.185962.166442.127412.127412.11442.11442.08837
1977-02-062.166442.127412.127412.11442.11442.088372.09176
1977-02-072.127412.127412.11442.11442.088372.091762.09488
1977-02-082.127412.11442.11442.088372.091762.094882.1209
1977-02-092.11442.11442.088372.091762.094882.12092.1438
1977-02-102.11442.088372.091762.094882.12092.14382.16306
........................
2001-08-0431.741131.939931.780832.6432.9933.809433.9844
2001-08-0531.939931.780832.6432.9933.809433.984433.9683
2001-08-0631.780832.6432.9933.809433.984433.968334.1131
2001-08-0732.6432.9933.809433.984433.968334.113133.8637
2001-08-0832.9933.809433.984433.968334.113133.863733.9361
2001-08-0933.809433.984433.968334.113133.863733.936134.1453
2001-08-1033.984433.968334.113133.863733.936134.145334.3947
2001-08-1133.968334.113133.863733.936134.145334.394734.3706
2001-08-1234.113133.863733.936134.145334.394734.370634.3465
2001-08-1333.863733.936134.145334.394734.370634.346534.1131
2001-08-1433.936134.145334.394734.370634.346534.113134.3062
2001-08-1534.145334.394734.370634.346534.113134.306233.9925
2001-08-1634.394734.370634.346534.113134.306233.992533.9442
2001-08-1734.370634.346534.113134.306233.992533.944233.9522
2001-08-1834.346534.113134.306233.992533.944233.952233.9361
2001-08-1934.113134.306233.992533.944233.952233.936133.7672
2001-08-2034.306233.992533.944233.952233.936133.767233.7189
2001-08-2133.992533.944233.952233.936133.767233.718933.8396
2001-08-2233.944233.952233.936133.767233.718933.839633.4936
2001-08-2333.952233.936133.767233.718933.839633.493632.4719
2001-08-2433.936133.767233.718933.839633.493632.471933.1316
2001-08-2533.767233.718933.839633.493632.471933.131633.735
2001-08-2633.718933.839633.493632.471933.131633.73533.8235
2001-08-2733.839633.493632.471933.131633.73533.823534.2499
2001-08-2833.493632.471933.131633.73533.823534.249934.258
2001-08-2932.471933.131633.73533.823534.249934.25835.0947
2001-08-3033.131633.73533.823534.249934.25835.094735.2878
2001-08-3133.73533.823534.249934.25835.094735.287834.8131
2001-09-0133.823534.249934.25835.094735.287834.813134.4913
2001-09-0234.249934.25835.094735.287834.813134.491334.6683
\n", "

9000 rows × 7 columns

\n", "
" ], "text/plain": [ " Day 0 Day 1 Day 2 Day 3 Day 4 Day 5 Day 6\n", "1977-01-12 1.93223 1.97777 1.95175 1.95826 1.94863 2.0103 1.97777\n", "1977-01-13 1.97777 1.95175 1.95826 1.94863 2.0103 1.97777 1.96789\n", "1977-01-14 1.95175 1.95826 1.94863 2.0103 1.97777 1.96789 1.99079\n", "1977-01-15 1.95826 1.94863 2.0103 1.97777 1.96789 1.99079 1.99391\n", "1977-01-16 1.94863 2.0103 1.97777 1.96789 1.99079 1.99391 2.0038\n", "1977-01-17 2.0103 1.97777 1.96789 1.99079 1.99391 2.0038 2.00068\n", "1977-01-18 1.97777 1.96789 1.99079 1.99391 2.0038 2.00068 2.0038\n", "1977-01-19 1.96789 1.99079 1.99391 2.0038 2.00068 2.0038 1.99079\n", "1977-01-20 1.99079 1.99391 2.0038 2.00068 2.0038 1.99079 1.99729\n", "1977-01-21 1.99391 2.0038 2.00068 2.0038 1.99079 1.99729 1.99729\n", "1977-01-22 2.0038 2.00068 2.0038 1.99079 1.99729 1.99729 1.99391\n", "1977-01-23 2.00068 2.0038 1.99079 1.99729 1.99729 1.99391 2.00692\n", "1977-01-24 2.0038 1.99079 1.99729 1.99729 1.99391 2.00692 2.03633\n", "1977-01-25 1.99079 1.99729 1.99729 1.99391 2.00692 2.03633 2.10139\n", "1977-01-26 1.99729 1.99729 1.99391 2.00692 2.03633 2.10139 2.17295\n", "1977-01-27 1.99729 1.99391 2.00692 2.03633 2.10139 2.17295 2.19247\n", "1977-01-28 1.99391 2.00692 2.03633 2.10139 2.17295 2.19247 2.19247\n", "1977-01-29 2.00692 2.03633 2.10139 2.17295 2.19247 2.19247 2.17946\n", "1977-01-30 2.03633 2.10139 2.17295 2.19247 2.19247 2.17946 2.18596\n", "1977-01-31 2.10139 2.17295 2.19247 2.19247 2.17946 2.18596 2.16644\n", "1977-02-01 2.17295 2.19247 2.19247 2.17946 2.18596 2.16644 2.12741\n", "1977-02-02 2.19247 2.19247 2.17946 2.18596 2.16644 2.12741 2.12741\n", "1977-02-03 2.19247 2.17946 2.18596 2.16644 2.12741 2.12741 2.1144\n", "1977-02-04 2.17946 2.18596 2.16644 2.12741 2.12741 2.1144 2.1144\n", "1977-02-05 2.18596 2.16644 2.12741 2.12741 2.1144 2.1144 2.08837\n", "1977-02-06 2.16644 2.12741 2.12741 2.1144 2.1144 2.08837 2.09176\n", "1977-02-07 2.12741 2.12741 2.1144 2.1144 2.08837 2.09176 2.09488\n", "1977-02-08 2.12741 2.1144 2.1144 2.08837 2.09176 2.09488 2.1209\n", "1977-02-09 2.1144 2.1144 2.08837 2.09176 2.09488 2.1209 2.1438\n", "1977-02-10 2.1144 2.08837 2.09176 2.09488 2.1209 2.1438 2.16306\n", "... ... ... ... ... ... ... ...\n", "2001-08-04 31.7411 31.9399 31.7808 32.64 32.99 33.8094 33.9844\n", "2001-08-05 31.9399 31.7808 32.64 32.99 33.8094 33.9844 33.9683\n", "2001-08-06 31.7808 32.64 32.99 33.8094 33.9844 33.9683 34.1131\n", "2001-08-07 32.64 32.99 33.8094 33.9844 33.9683 34.1131 33.8637\n", "2001-08-08 32.99 33.8094 33.9844 33.9683 34.1131 33.8637 33.9361\n", "2001-08-09 33.8094 33.9844 33.9683 34.1131 33.8637 33.9361 34.1453\n", "2001-08-10 33.9844 33.9683 34.1131 33.8637 33.9361 34.1453 34.3947\n", "2001-08-11 33.9683 34.1131 33.8637 33.9361 34.1453 34.3947 34.3706\n", "2001-08-12 34.1131 33.8637 33.9361 34.1453 34.3947 34.3706 34.3465\n", "2001-08-13 33.8637 33.9361 34.1453 34.3947 34.3706 34.3465 34.1131\n", "2001-08-14 33.9361 34.1453 34.3947 34.3706 34.3465 34.1131 34.3062\n", "2001-08-15 34.1453 34.3947 34.3706 34.3465 34.1131 34.3062 33.9925\n", "2001-08-16 34.3947 34.3706 34.3465 34.1131 34.3062 33.9925 33.9442\n", "2001-08-17 34.3706 34.3465 34.1131 34.3062 33.9925 33.9442 33.9522\n", "2001-08-18 34.3465 34.1131 34.3062 33.9925 33.9442 33.9522 33.9361\n", "2001-08-19 34.1131 34.3062 33.9925 33.9442 33.9522 33.9361 33.7672\n", "2001-08-20 34.3062 33.9925 33.9442 33.9522 33.9361 33.7672 33.7189\n", "2001-08-21 33.9925 33.9442 33.9522 33.9361 33.7672 33.7189 33.8396\n", "2001-08-22 33.9442 33.9522 33.9361 33.7672 33.7189 33.8396 33.4936\n", "2001-08-23 33.9522 33.9361 33.7672 33.7189 33.8396 33.4936 32.4719\n", "2001-08-24 33.9361 33.7672 33.7189 33.8396 33.4936 32.4719 33.1316\n", "2001-08-25 33.7672 33.7189 33.8396 33.4936 32.4719 33.1316 33.735\n", "2001-08-26 33.7189 33.8396 33.4936 32.4719 33.1316 33.735 33.8235\n", "2001-08-27 33.8396 33.4936 32.4719 33.1316 33.735 33.8235 34.2499\n", "2001-08-28 33.4936 32.4719 33.1316 33.735 33.8235 34.2499 34.258\n", "2001-08-29 32.4719 33.1316 33.735 33.8235 34.2499 34.258 35.0947\n", "2001-08-30 33.1316 33.735 33.8235 34.2499 34.258 35.0947 35.2878\n", "2001-08-31 33.735 33.8235 34.2499 34.258 35.0947 35.2878 34.8131\n", "2001-09-01 33.8235 34.2499 34.258 35.0947 35.2878 34.8131 34.4913\n", "2001-09-02 34.2499 34.258 35.0947 35.2878 34.8131 34.4913 34.6683\n", "\n", "[9000 rows x 7 columns]" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# N-day prices target\n", "\n", "# Initialise variables\n", "target_days = 7\n", "\n", "# Create target dataframe\n", "nday_columns = []\n", "for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", "# Fill target dataframe\n", "for i in range(periods):\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[i+days+j]['Adj. Close']\n", "nday_prices" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (X,y): (7200, 9) (7200, 1)\n", "Test shapes (X,y): (1800, 9) (1800, 1)\n" ] } ], "source": [ "# Train-test split\n", "from sklearn.cross_validation import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(train, prices, test_size=0.2, random_state=0)\n", "\n", "print(\"Train shapes (X,y): \", X_train.shape, y_train.shape)\n", "print(\"Test shapes (X,y): \", X_test.shape, y_test.shape)" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (Xnd,ynd): (7200, 9) (7200, 7)\n", "Test shapes (Xnd,ynd): (1800, 9) (1800, 7)\n" ] } ], "source": [ "# Train-test split\n", "\n", "Xnd_train, Xnd_test, ynd_train, ynd_test = train_test_split(train, nday_prices, test_size=0.2, random_state=0)\n", "\n", "print(\"Train shapes (Xnd,ynd): \", Xnd_train.shape, ynd_train.shape)\n", "print(\"Test shapes (Xnd,ynd): \", Xnd_test.shape, ynd_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Classifier" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": true }, "outputs": [ { "ename": "ImportError", "evalue": "cannot import name 'parallel_helper'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# clf = svm.SVR()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultioutput\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mMultiOutputRegressor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mclf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMultiOutputRegressor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSVR\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrandom_state\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/multioutput.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRegressorMixin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mClassifierMixin\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck_X_y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfixes\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mparallel_helper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcheck_is_fitted\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhas_fit_parameter\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mexternals\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoblib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdelayed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mImportError\u001b[0m: cannot import name 'parallel_helper'" ] } ], "source": [ "# Classifier\n", "\n", "from sklearn import svm\n", "# clf = svm.SVR()\n", "\n", "from sklearn.multioutput import MultiOutputRegressor\n", "clf = MultiOutputRegressor(svm.SVR(random_state=0))\n", "\n", "clf.fit(Xnd_train, ynd_train)\n", "pred = clf.predict(Xnd_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Metrics" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Metrics\n", "\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error\n", "\n", "print(\"Mean Absolute Error: \", mean_absolute_error(y_test, pred))\n", "print(\"Explained Variance Score: \", explained_variance_score(y_test, pred))\n", "print(\"Mean Squared Error: \", mean_squared_error(y_test, pred))\n", "print(\"R2 score: \", r2_score(y_test, pred))\n", "print(\"Median Absolute Error: \", median_absolute_error(y_test, pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Issues\n", "If `train_test_split` shuffles, we may have seen some data in the test set before." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/p5.2-4-report-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis\n", "\n", "## Data Exploration\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Description of Primary Dataset\n", "The primary dataset used is daily stock data for stocks on the London Stock Exchange (LSE). The date range for stock data varies depending on when the stock went public. The furthest date was in the year 1954. The most recent date in the dataset was 9 September 2016. The data was taken from Quandl's free access database.\n", "\n", "All the data is in one comma-separated value file (CSV), with each row being one datapoint. There are over 14 million datapoints in the dataset. \n", "\n", "Each row has 14 columns. That means we have 14 features for each stock on every trading day since the year when the stock was tradable (from 1954 onwards). Unless otherwise indicated, the column values are all floats.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
ColumnFormat or accuracy if floatMeaning
Stock symbolstringHow the stock is represented on the London Stock Exchange. E.g. GOOGLE's stock symbol is GOOGL.
DateYYYY-MM-DD
Opengiven to 2 decimal places (2 d.p.)Price of stock when the market opened on that day in GBP £.
High2 d.p.Maximum price of the stock during the trading day in GBP £.
Low2 d.p.Minimum price of the stock during the trading day in GBP £.
Close2 d.p.Price of stock when the market closed on that day in GBP £.
Volume1 d.p.The number of shares of that stock traded on that day.
Ex-Dividend1 d.p.The value of the declared or upcoming dividend that will belong to the seller of the stock share rather than the buyer. Dividend is profits distributed to shareholders. If the upcoming dividend will be given to the buyer, Ex-Dividend = 0.
Split Ratio1 d.p.A company may choose to split their stock. E.g. a 2.0 (2:1) split ratio means shareholders get two new shares for every share they hold. This halves the price to preserve the market capitalisation (total value) of the company.
Adjusted Open6 d.p.Adjusted opening price (price of stock when the market opened on that day). Adjusted prices are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open.
Adjusted High6 d.p.See Adjusted Open and High.
Adjusted Low6 d.p.See Adjusted Open and Low.
Adjusted Close6 d.p.See Adjusted Open and Close.
Adjusted Volume1 d.p.See Adjusted Open and Volume.
\n", "\n", "Reference: [Definition of Ex-Dividend (Investopedia)](http://www.investopedia.com/terms/e/ex-dividend.asp)\n", "\n", "#### Data sample\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
0A1999-11-1845.5050.0040.0044.0044739900.00.01.043.47181047.77121938.21697542.03867344739900.0
1A1999-11-1942.9443.0039.8140.3810897100.00.01.041.02592341.08324938.03544538.58003710897100.0
2A1999-11-2241.3144.0040.0644.004705200.00.01.039.46858142.03867338.27430142.0386734705200.0
3A1999-11-2342.5043.6340.2540.254274400.00.01.040.60553641.68516638.45583238.4558324274400.0
4A1999-11-2440.1341.9440.0041.063464400.00.01.038.34118140.07049938.21697539.2297253464400.0
\n", "*Obtained using `df.head()`*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Description of supplementary dataset (FTSE100)\n", "\n", "I wanted to add features that corresponded to the general market trend and thought the FTSE100 would be a good representation. The FTSE100 as a single index was not included in my primary dataset, so I obtained the data by scraping Google Finance with a python script (see `google-finance-scraper.py`).\n", "\n", "The supplementary dataset has Open, High, Low, Close data in the date range April 1, 1984 - September 9, 2016." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining Characteristics about Stock Data\n", "1. Limit Down Circuit Breakers" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dataset Statistics \n", "\n", "The summary statistics for the dataset are not too meaningful, but it gives us an idea of the **variance within the dataset**. The standard deviation of the adjusted close price is of magnitude 10^3 ($1000), and the standard deviation of adjusted volume is of magnitude 10^6 (1,000,000 shares). \n", "\n", "The summary statistics suggest that the data is **positively skewed**. \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "\n", "I have checked the count is constant across all columns, i.e. that there are no missing values.\n", "\n", "### Interesting observations: Abnormalities in dataset\n", "The minimum Open, High, Low and Close are all zero. If a stock trades at a price of zero, it kind of doesn't exist. I will examine this in the Data Preprocessing section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BP Statistics\n", "\n", "More meaningful than the summary statistics for all 3,000+ stocks is the summary statistics for one stock. Since one of the stocks we are hoping to predict is that of BP (British Petroleum), let's examine the corresponding summary statistics.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.0
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.0
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.0
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.0
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+060.0
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+080.0
\n", "\n", "I have checked the count is 10010 across all columns, i.e. that there are no missing values.\n", "\n", "This is much better understood with a visualisation of the BP data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploratory Visualisations\n", "\n", "### Open and Adjusted Open Prices\n", "Let's first get an idea of the open and adjusted open prices. This is equivalent to visualising the the close and adjusted close prices - the variable we want to predict - shifted by one day.\n", "\n", "\n", "\n", "\n", "*Prices are in GBP £.*\n", "\n", "#### Observations\n", "1. **Adjusted vs non-adjusted figures** It is extraordinary: the adjusted open and the open are radically different for BP, whereas with stock 'A' in the first few rows of the df, Adj. Open and Open had similar values. This makes sense because some stocks that have few corporate actions e.g. stocks that don't have stock splits or give out dividends will require little value adjustment.\n", " - Since we are predicting the Adjusted Close, my guess is that the Adjusted figures (Open, High, Low, Volume) will be more useful in predicting the adjusted price. The non-adjusted figures (specifically Volume) may still useful in predicting momentum.\n", "\n", "2. **Trend** The non-adjusted prices do not show an upward trend. The adjusted open prices show somewhat of an upward trend but it has been too volatile in recent years to draw any conclusions.\n", "\n", "3. **Volatility** The stock price looks volatile, which is expected for an oil stock. From the descriptive statistics, the mean daily percentage variation is 1.72% and the maximum daily percentage variation is 16.0%." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Volatility: Percentage Variation\n", "\n", "To examine the volatility of BP stock, I constructed the features Percentage Variation and Adj. Percentage Variation, where\n", "\n", "`Percentage Variation = (High - Low)/Open * 100`.\n", "\n", "\n", "\n", "\n", "#### Observations\n", "The Adjusted Percentage Variation and Percentage Variation look similar. There does not seem to be marked trends. It is of note that the stocks are consistently volatile with typical percentage variation of 0-4% in recent years, punctuated with spikes of extremely volatile periods of up to 16% variation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithms and techniques\n", "\n", "\n", "### Algorithm\n", "\n", "I intend to use **linear regression**. \n", "\n", "#### Algorithm Description\n", "\n", "Linear Regression is a way of modelling data by observing data and constructing an equation that minimises error. This regression is linear because the equation takes the form\n", "$$\\hat y = \\sum \\beta_i x_i$$\n", "\n", "where $y$ is what we want to predict (stock prices) and $x_i$s are features such as the date. The hat on top of $y$ indicates it is an estimate.\n", "\n", "That is, this regression is linear because the $x_i$s all have degree 1.\n", "\n", "\n", "#### Algorithm Justification\n", "1. I am using a **linear algorithm** because the the **signal-to-noise ratio in trading is low** and more complicated models seem like they would overfit.\n", "2. A linear regression is appropriate because this is a **regression problem** - that is, the output are continuous. \n", " - Note that *regression* in linear regression does not mean the same thing as *regression* in a regression problem.\n", "\n", "#### Algorithm Parameters\n", "There are only four parameters for `LinearRegression`:\n", "- `fit_intercept` is set to True by default; setting it to false assumes the data is centered and will not produce better results.\n", "- `normalize` normalizes the regressors X before regression. It is set to `False` by default.\n", "- `copy_X` alters whether or not X may be overwritten, which does not affect the result.\n", "- `n_jobs` can provide a speedup if the problem is large and you ask the algorithm to use more CPUs, but it will not change error measures.\n", "\n", "Within these, there is only one parameter that it may be useful to adjust (`normalize`) to improve the error of the result.\n", "\n", "### Techniques\n", "\n", "1. **Time-series train-test split**\n", " - We will train our model on what we'll call the **training set**, a subset of the data that we have.\n", " - To make sure our model generalises, we need to test it on some data it has not seen before and evaluate how well it does predicting on that data. \n", " - To do this, we need to set aside data for testing our model - the **test set**.\n", " - Because our data is time series data (there is some ordering to it and the ordering influences prices), we cannot shuffle the data.\n", " - If the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating.\n", " - So we cannot use sklearn's `train_test_split` function which automatically shuffles the data. Instead, I will write my own function.\n", "2. **Time-series cross-validation**\n", " - But testing on only one test set and training on only one training set isn't robust enough. What if the test or training sets we choose have special characteristics that aren't common to other datasets?\n", " - To make our evaluation more robust so we choose the best model, it's better if we can run multiple train-test cycles. \n", " - To do this, I wrote the function `execute()`. \n", " \n", "\n", "#### TODO: Add detail." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Benchmark\n", "\n", "The benchmark given in the project outline was +/- 5% of the stock price 7 days out. That seems reasonable to start.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## III. Methodology\n", "_(approx. 3-5 pages)_\n", "\n", "### Data Preprocessing\n", "In this section, all of your preprocessing steps will need to be clearly documented, if any were necessary. From the previous section, any of the abnormalities or characteristics that you identified about the dataset will be addressed and corrected here. Questions to ask yourself when writing this section:\n", "- _If the algorithms chosen require preprocessing steps like feature selection or feature transformations, have they been properly documented?_\n", "- _Based on the **Data Exploration** section, if there were abnormalities or characteristics that needed to be addressed, have they been properly corrected?_\n", "- _If no preprocessing is needed, has it been made clear why?_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology\n", "\n", "## Data Preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Minor edits\n", "1. On opening the CSV and sampling it with `df.head()`, I realised the CSV had no header. I added a header to the CSV:\n", "```python\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)\n", "```\n", "where `header_names` was an slightly edited header I'd obtained from downloading the data for an individual stock from Quandl." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Examining Abnormalities\n", "\n", "I noted above that there were datapoints with opening price, high, low and closing price of 0.0. Were these mistakes? On investigating the data, it is plausble these were not mistakes.\n", "\n", "\n", "\n", "\n", "\n", "\n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I've included three examples in the table above. The third example shows that the figures may not actually be zero but may be zero to one or two decimal places: the open and low prices were 0.0, but the high and close prices were 0.01.\n", "\n", "I assembled a list of stocks where the open or close was equal to 0 and will examine individual stocks on the list if they end up as features I'd like to use in my model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Daily and Percentage Variation\n", "\n", "Reasoning: This is an indicator of how volatile prices have been. If the daily variation has been higher recently, that may mean there is a lot of uncertainty and that we can expect more fluctuations or that we shouldn't take big one-day changes too seriously when considering long-term predictions. \n", "\n", "I calculated the daily absolute and percentage variation (adjusted and unadjusted) for the entire data frame.\n", "\n", "### 2. Prices of related stocks (Oil stocks)\n", "\n", "Reasoning: BP's stock price is affected by how people feel about oil in general. Thus prices of oil stocks may correlate positively or negatively (if they are direct competitors) with BP's prices.\n", "\n", "I obtained a list of oil companies listed on the LSE by searching for stocks with the same group code (537 for oil) in `list-of-all-securities-ex-debt.csv`.\n", "\n", "Unfortunately there was only one other oil stock on my list that I found in this database (`GAIA`), so instead of creating an aggregated dataframe, I only included `GAIA`'s data in my additional set of features.\n", "\n", "Improvement for future studies: Collect data from another data source to come up with a more informative feature.\n", "\n", "#### Adding GAIA Features\n", "The GAIA trading dates started on 1999-10-29 whereas the BP trading dates started much earlier, so that cut out a large portion of the dataset. Data had to be taken out because it did not make sense to create proxy values for 20+ years' of volatile price data.\n", "\n", "**Complications** There was also a discrepancy in the trading dates. We have data for BP and GAIA on every trading day from 1999-10-29 to 2014-10-02, but beyond that the data for GAIA is incomplete. There was no information on GAIA trading on the second, fourth or fifth of October 2014 (whereas there was for BP). Thus our dataset is pared down even further to a size of 3754 as opposed to 10010 for BP. This is a huge cut.\n", "\n", "### 3. Prices of FTSE100\n", "\n", "Reasoning: Stock prices are also affected by how people feel about the market in general. The FTSE100 is fairly representative of the performance of the market in general, so including it as a feature can help us account for that aspect.\n", "\n", "**Complications** There were 158 dates for which we had BP trading data but not FTSE trading data. (This is unexpected because the FTSE should have values on all trading days. The discrepancy is likely due to problems with the data source. This is unexpected because the data source for FTSE prices was Google Finance, which should be reliable.) \n", "\n", "But because there were only 158 NaNs and they were spread thinly over 8000 datapoints, it made it impossible to truncate a large section with no NaNs that would be large enough to do multiple rounds of meaningful training and testing on. \n", "\n", "I thus proxied the missing prices by taking the means of the the FTSE prices from the trading day before and the trading day after. If those were also NaNs, I moved either one day forward or one day backward. (See `# Proxy remaining NaNs` in 1.2.2.3.) Since the FTSE does not usually fluctuate wildly, I considered the mean to be a reasonable proxy.\n", "\n", "As with prices of oil stocks, an improvement would be to consult another data source to fill in the gaps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial implementation\n", "I initially implemented the Linear Regression algorithm with the following basic features:\n", "* Adjusted Close prices on each of the 7 days prior to the first prediction date\n", "* Max Adjusted High and Min Adjusted Low for that 7-day period prior to the first prediction date.\n", "\n", "### Process:\n", "1. Construct dataframe `X` containing initial features and dataframe `y` with 'Adjusted Close' prices.\n", " - This required some setting up to extract the relevant features from the dataset and put them in an appropriately formatted dataframe. This is in the first half of `prepare_train_test()` function in part 2.1 of `III. Methodology - Code.ipynb`.\n", " - The `y` target `nday_prices` had prices for the next `n` days.\n", "2. Split `X` and `y` into training and test datasets.\n", " - I wrote my own function to do this (initially in `train_test_split_noshuffle` before I absorbed it into `prepare_train_test()`) instead of using sklearn's `train_test_split`. This was because sklearn's function automatically shuffles the data. Shuffling the data is okay and desired for situations in which data is not ordered, but is not okay for time-series data. \n", " - If the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating.\n", "3. Train model on training data.\n", " - Because there were multiple outputs to predict in `nday_prices` (the model had to forecast prices for each of the 7 trading days after the last date it was given), I wrapped `MultiOutputRegressor` from sklearn's `multioutput` module around my classifier.\n", " - This is in the first half of the function `classify_and_metrics` in `2.2 Classifier` in `III. Methodology - Code.ipynb`.\n", "4. Ask model to predict prices on test features.\n", "5. Print metrics\n", " - I included this in `classify_and_metrics()` using my helper functions `rmsp()` (root mean squared percentage error) and `print_metrics()`. See Section `2.2 Classifier` in `III. Methodology - Code.ipynb`.\n", "\n", "#### Refactoring\n", "I refactored the code so that I could run a full (1) train-test split, (2) train classifier, (3) test classifier and print metrics cycle using only one line. To do this, I wrapped all the functions those processes with the `execute()` function.\n", "\n", "### Initial Results\n", "The results are shown below. I also tried using an SVM regression for comparison. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Linear Regression\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
11.669
22.422
32.968
43.407
53.834
64.230
74.590
\n", "\n", "Mean R2 score: 0.807. Ranged from 0.606 to 0.936.\n", "\n", "#### SVM.SVR\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
111.230
211.460
311.761
412.022
512.323
612.667
713.060
\n", "Mean R2 score: -2.044. Ranged from -9.156 to 0.822." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Linear Regression did surprisingly well, with a mean R2 score above 0.807 overall for 7-day predictions and a mean RMS percentage error of under 5% for forecasts 7 days away. \n", "\n", "The SVM regression did horribly - it had a negative mean R2 score (-2.044) and negative median R2 score, which means it was worse than guessing randomly. It had a mean RMS percentage error of over 24% for all number-of-days ahead predicted.\n", "\n", "It is impressive that the Linear Regression model did so well with such basic features." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TODO: Insert plot of predictions vs actual prices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Refinement\n", "\n", "### 1. Adjusting parameters\n", "\n", "As discussed in Analysis: Algorithm Parameters, there is only one parameter that it may be useful to adjust (`normalize`).\n", "\n", "I ran the algorithm with `normalize=True` to see if it produced better results. The metrics returned were exactly the same as when, by default, `normalize=False`.\n", "\n", "### 2. Add features (Feature Selection)\n", "\n", "I then experimented with adding the features I'd engineered earlier. (See *Data Preprocessing: Feature Engineering* for more details on how these features came about.)\n", "\n", "#### 2.1 Adding more of the same type of features:\n", "\n", "In the first implementation, I only used prices from the 7 days running up to the first prediction day. I then tried using prices from 10, 14, 21 and 30 days running up to the first prediction day. \n", "\n", "Reasoning: If we have more data, it makes sense to use it if we are confident it will give us better results.\n", "\n", "To do this, I changed the value of the parameter `days` in the function `execute`, which trains and tests the classifier and prints metrics. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Mean Daily Error across 15 trials\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (used)10d14d21d30d100d
11.6691.7321.7291.7461.7841.924
22.4222.5432.5262.5552.5932.768
32.9683.1383.1033.1133.1523.370
43.4073.5793.5863.5863.6333.890
53.8343.9394.0023.9914.0484.355
64.2304.2694.3724.3424.3924.769
74.5904.5434.7024.6584.7055.163
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that mean RMS percentage error is slightly smaller in one instance (using 10d instead of 7d to predict precisely 7 days ahead),but otherwise that mean RMS percentage error is greater as the number of days of data given increases.\n", "\n", "This is because more days' of data in this case means more features (e.g. for 100 days' of data we have 102 features). This increases the risk of overfitting." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 Adding GAIA (Oil Stock) Prices\n", "\n", "\n", "There were far fewer datapoints to work with because because of date inconsistencies (3753 datapoints vs 10010 for the BP-only model), so I decreased the step length (the difference between start dates) between consecutive trials to 200 from 500. This does not affect individual trial performance, but reduces the variety of data used for trials. We should bear this in mind when comparing performance of adding GAIA prices as features and not adding GAIA prices as features. \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (no GAIA)7d (GAIA)10d (no GAIA)10d (GAIA)
11.6691.7441.7321.751
22.4222.4442.5432.467
32.9682.9383.1382.978
43.4073.4243.5793.479
53.8343.8813.9393.946
64.2304.2944.2694.368
74.5904.7024.5434.816
\n", "\n", "*Trial information: (1) Not GAIA: Mean over 15 trials, buffer step = 500. \n", "(2) GAIA: Mean over 13 trials, buffer step = 200. 1000 periods used (800 to train, 200 to test) per trial*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When considering 7 days' worth of data, adding GAIA features produces predictions with a similar mean RMS percentage error. The mean error is higher for 6 out of 7 days-ahead (the exception being 3 days ahead).\n", "\n", "When considering 10 days' worth of data, adding GAIA features performs slightly better for 2-4 days-ahead (0.08%, 0.16%, 0.1% improved) and slightly worse for all other days-ahead (0.02%, 0.01%, 0.1%, 0.27% worse). But these mean RMS percentage errors are all larger than the 7-day no-GAIA mean RMS percentage errors.\n", "\n", "**Action**: I conclude that adding GAIA features in this way does not reliably produce better results, likely because additional features increase the risk of overfitting.\n", "\n", "**Interpretation**: It makes sense because BP prices would not correlate perfectly in one direction or the other with GAIA prices: oil companies' stock prices incorporate sentiment about oil but companies are also often in different regions and compete against each other, muddying correlations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 Adding related features: FTSE100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The timespan used for no-FTSE and with-FTSE trials was similar (since we had over 8000 FTSE datapoints), so we can compare the two more readily than we could compare the no-GAIA and with-GAIA figures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (no FTSE)7d (FTSE)10d (no FTSE)10d (FTSE)
11.6691.5181.7321.531
22.4222.2222.5432.230
32.9682.7333.1382.743
43.4073.1793.5793.187
53.8343.5453.9393.574
64.2303.8574.2693.910
74.5904.1624.5434.236
\n", "\n", "\n", "*Trial information: (1) Not FTSE: Mean over 15 trials, buffer step = 500. \n", "(2) FTSE: Mean over 15 trials, buffer step = 450. 1000 periods used (800 to train, 200 to test) per trial*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally something that performs better than the initial model!\n", "\n", "Adding FTSE features makes the model perform better than not adding FTSE features when considering 7 days' or 10 days' worth of data. Using 7 days' worth of data is better than using 10 days' worth of data (reduces overfitting), but it's worth noting that adding FTSE features and using 10 days' worth of data is better than using 7 days' of data but not including FTSE data. \n", "\n", "This is a significant improvement. Note that the percentage error reduction increases the further away the prediction is (0.4% reduction for 6-7 days ahead vs 0.15% reduction for 1 day ahead)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Improvement (Implementation): Generalise functions `prepare_train_test_with_ftse()` so I don't have to write a function for each dataframe join." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# IV. Results\n", "\n", "## Model Evaluation and Validation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model Choice\n", "\n", "The final model is \n", "- Features:\n", " - BP Adjusted Close, max BP Adjusted High, min BP Adjusted Low\n", " - FTSE Close, max FTSE High and min FTSE Low \n", "for 7 days prior to the first prediction date.\n", "- Classifier:\n", " - Default Linear Regression\n", "\n", "This model had the **lowest mean root mean squared percentage error** across over 10 trials (across timespans of around 30 years) out of all the models I tried.\n", "\n", "Insight: Most of the improvements I tried to make only made the model worse. This goes to show that added complexity doesn't necessarily make a model better, especially when that complexity contains much noise." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generalisability\n", "When we evaluated the model in the previous section, each iteration of the model was run on 13-15 training and test sets. We then looked at the mean daily root mean squared percentage error. This **variation of input data** is to ensure that the model can generalise well and does not only perform well on one set of data.\n", "\n", "There are two types of metrics we need to look at: mean performance and variance of performance. Both are encapsulated in mean daily RMS percentage error because (1) it measures the performance (error) and (2) it penalises larger errors more because we sum the squared percentage errors before taking the square root. Additionally, by observation, the error of our chosen model does not vary significantly from trial to trial.\n", "\n", "#### Performance Metrics\n", "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predictMean root mean squared percentage error across 15 trials
11.518
22.222
32.733
43.179
53.545
63.857
74.162
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Justification (Comparison with expectations)\n", "\n", "Overall, this model aligns with solution expectations and on average performs slightly better than the benchmark of predicting within +/- 5% of the stock's adjusted closing price 7 days after the last training date. The model has mean performance of 4.162% error predicting adjusted closing price 7 days ahead. \n", "\n", "The solution gives a reasonably accurate predictions but it **is not significant enough** to reliably give advice on trades because a 5% error is significant in trading. There are also transaction costs with every trade, which would cut into profits.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/.ipynb_checkpoints/p5.5-conclusion-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# V. Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## V. Conclusion\n", "_(approx. 1-2 pages)_\n", "\n", "### Free-Form Visualization\n", "In this section, you will need to provide some form of visualization that emphasizes an important quality about the project. It is much more free-form, but should reasonably support a significant result or characteristic about the problem that you want to discuss. Questions to ask yourself when writing this section:\n", "- _Have you visualized a relevant or important quality about the problem, dataset, input data, or results?_\n", "- _Is the visualization thoroughly analyzed and discussed?_\n", "- _If a plot is provided, are the axes, title, and datum clearly defined?_" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Free-Form Visualisation\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# Visualisation 1: Plotting predictions against actual prices\n", "# Plot predictions\n", "\"Model Predictions against BP Actual Adjusted Close Prices\"\n", "\n", "# Plot actual adjusted close prices\n", "bp.plot('Adjusted Close')\n", "\n", "# Visualisation 2: Plotting error for each day on different axes against \n", "# adjusted close prices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualisation 1: Plotting predictions compared with actual prices\n", "\n", "This graph visualises the 7th-day predictions compared with the actual adjusted close prices.\n", "By 7th-day predictions, I am referring to the price predicted for e.g. Sept 7 if we are given training data up till Aug 30th. The purpose is to see how predictions vary with actual prices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualisation 2: Plotting error for each day compared with percentage variation\n", "\n", "This graph visualises the 7th-day predictions compared with day-on-day percentage variation. The purpose is to see if predictions are less accurte when day-on-day percentage variation is greater.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reflection\n", "\n", "### Summary\n", "\n", "In this project, we predicted BP's stock price. Initially we used a linear regression only on BP stock prices from the past 7 days, which produced impressive results, with 7-day predictions having a root mean squared percentage error of 5.4%.\n", "\n", "We then WHAT DID I DO LOL\n", "\n", "### Interesting Aspects of the Project\n", "1. I scraped FTSE data from Google Finance. \n", "\n", "### Difficult Aspects of the Project\n", "1. It was hard **selecting the algorithm** to use for this problem. \n", " - It seemed as though any regression algorithm could work - and there are so many of them! I dealt with this by (1) first implementing an SVM regression to get the code to implement the algorithm down on the page so things would feel more concrete. Then I (2) chose the simplest algorithm that seemed to fit the problem and tried that.\n", " - I was also conflicted as to whether or not I should use reinforcement learning. On the one hand there are profits that can act as rewards, but on the other hand trading would not impact the environment.\n", "2. **Putting different features together** in a dataframe took effort. \n", " - Pandas `.iloc` kept throwing errors at me. \n", " - Different stocks or indices had data for different dates (e.g. some had data for 1984-04-20, some didn't). I had to find these differences and decide what to do with missing data. \n", "3. There were **many possible features**. \n", " - The project just got longer and longer and I hadn't even looked through half of the features I wanted to investigate or tried different algorithms. I decided to test out only a few features in this exploratory study and leave the rest for another study." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Improvements\n", "\n", "\n", "\n", "\n", "\n", "\n", "
ImprovementExpected Change
1. Try a wider selection of features.\n", " - Stocks from other stock markets (e.g. NYSE)\n", " - Company-specific figures such as P/E ratiosMore accurate model
2. Obtain and combine data from different data sources to minimise missing data\n", " - e.g. FTSE100 prices because they must exist somewhere.Increase number of datapoints with accurate data and so improve predictive range and capabilities
3. Add measure of confidence for predictions (Probabilities)Better idea of how reliable each prediction is so we can then recommend trades for high-confidence, postive-profit predictions.
\n", "\n", "### Things to Explore\n", "1. Try more algorithms (different classes).\n", " - Different types of regressions\n", " - Reinforcement Learning\n", " - Deep Learning, EnsemblesGenerically \n", "\n", "2. It would also be interesting to try this as a binary classification problem (predicting whether the price would go up or down) as opposed to predicting the exact price.\n", "\n", "### A Better Solution?\n", "Given the openness of this problem and the large universe it is contained in, I am confident that better solutions exist. That is a beautiful characteristic of this problem - than many things (even things which are beyond the scope of financial figures and stock prices, such as Wikipedia page views) can be used as features or proxies for stock prices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Before submitting, ask yourself. . .**\n", "\n", "- Does the project report you’ve written follow a well-organized structure similar to that of the project template?\n", "- Is each section (particularly **Analysis** and **Methodology**) written in a clear, concise and specific fashion? Are there any ambiguous terms or phrases that need clarification?\n", "- Would the intended audience of your project be able to understand your analysis, methods, and results?\n", "- Have you properly proof-read your project report to assure there are minimal grammatical and spelling mistakes?\n", "- Are all the resources used for this project correctly cited and referenced?\n", "- Is the code that implements your solution easily readable and properly commented?\n", "- Does the code execute without error and produce results similar to those reported?\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/2-analysis-code-py2.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis - Code" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LSE daily data: Exploratory" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The data has no header, so I'm going to add one.\n", "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Quick feature engineering for exploratory purposes\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.000000
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.9644131.7202680.3076701.720268
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.6783251.2085420.3255291.208542
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0000000.0000000.0000000.000000
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.5100000.9481260.0770290.948126
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.7600001.3981100.1956961.398110
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+061.1700002.1221970.4472942.122197
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+0812.12000016.0482924.08111016.048292
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation Percentage Variation \\\n", "count 10010.000000 1.001000e+04 10010.000000 10010.000000 \n", "mean 18.707358 3.408274e+06 0.964413 1.720268 \n", "std 14.122609 7.532096e+06 0.678325 1.208542 \n", "min 1.522366 0.000000e+00 0.000000 0.000000 \n", "25% 5.442764 7.536000e+05 0.510000 0.948126 \n", "50% 15.099474 1.904100e+06 0.760000 1.398110 \n", "75% 31.889513 4.051675e+06 1.170000 2.122197 \n", "max 50.533702 2.408085e+08 12.120000 16.048292 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "count 10010.000000 10010.000000 \n", "mean 0.307670 1.720268 \n", "std 0.325529 1.208542 \n", "min 0.000000 0.000000 \n", "25% 0.077029 0.948126 \n", "50% 0.195696 1.398110 \n", "75% 0.447294 2.122197 \n", "max 4.081110 16.048292 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nmjRpQteuXbnxxhvZvHlzRUSuNZhyMQyjWrJo0SKmTJlCnTp1ePnll3N2nz/84Q88+uijjB07lrVr\n1/Laa6/x9ttvM3CgRbBKhikXwzCqJWPGjOHggw9m2LBh/POf/4zLW7VqFaeccgotWrSgb9++LFiw\nIC6/Tp06fPPNNynv8fXXX/Pwww8zfvx4DjroIOrUqUPPnj157rnneP311ykpKQHg/PPP5/e//z39\n+/enefPmHHnkkSxevHh7OXPnzqV///60bt2anj178uyzz27PO//887n88ss56aSTaN68OQcffDAL\nF1b/hWpNuRiGUS0ZM2YMQ4YM4ZxzzmHSpEmsXLlye96ll15K48aNKS0t5bHHHuPxxx+PuzZoIkvG\n22+/TefOnenTp09ceqdOnejbty9vvvnm9rTx48czYsQIfvzxR3r37s3gwYMB2LBhA/3792fIkCH8\n8MMPPPXUU1x66aXMnTt3+7VPP/00N998M6tXr6Z79+7cdNNNGddHoWHKxTCMCiGSnU9FmDJlCosX\nL2bgwIHsv//+7LrrrowfPx6AsrIynn/+eW699VYaNmxIr169GDp0aNz16U4O/eGHH2jfvn1kXvv2\n7fnhhx+2H5944okccsgh1KtXj9tvv51p06bx3Xff8corr7DLLrtw3nnnISL07t2b008/Pa73ctpp\np9GnTx/q1KnD4MGDmTlzZqZVUnCYcjEMo0KoZudTEcaMGUP//v1p2dKtnD5o0CBGjx4NwMqVK9m2\nbRudOnXafn6XLl0qdJ82bdqwbNmyyLxly5bRpk2b7cedO3fevt+kSRNatmzJ999/z6JFi5g2bRqt\nWrWiVatWtGzZkvHjx1NaWrr9/Hbt2m3fb9y4MevWrauQvIWExRYzDKNasWnTJp555hnKysq29yo2\nb97M6tWrmTNnDr169aKoqIglS5bQo4dbszA4/pEJRx11FJdddhnTp0/ngAMO2J6+ZMkSpk2bxogR\nI+LSfNatW8dPP/1Ehw4d6Ny5M8XFxUyaNKlCMlRXrOdiGEa14oUXXqCoqIgvv/ySWbNmMWvWLL78\n8ksOPfRQxowZQ506dTjttNMYOXIkGzdu5Isvvtjeq8mU3XbbjUsuuYTBgwfz4YcfUlZWxueff84Z\nZ5xB//79OfLII7efO3HiRKZOncrmzZv5n//5H/r27UvHjh056aSTmD9/PmPHjmXr1q1s2bKF6dOn\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nuugiOnXqRNeuXbn11lvr3Q4ePJj999+fq6++mi233JJ+/foB8Pjjj7P99tvTunVrdtxxRyZOdEey\nf/vtt5x88slsvfXWbLvttjz44IP14ffr14/TTjuN3r1707p1a3baaSc+/fRTAM4991zmzZvHMccc\nQ+vWrRkwYAAAp556Kh07dqRdu3ZUV1czbdq0ev+WLVvGMcccQ5s2bdhnn3249dZbOeCAA+rtZ8yY\nweGHH84WW2zBdtttxwsvvBAYL/vuuy+dO3fmpZeix9zX1dUxdOjQ+hbNJ598wm9+8xvatWtH586d\nufLKK9m4MXrUeFVVFQ8//DC9evWiV69e9WazZ88G4M0332T33XenTZs2dO/evT4eAQ466CAA2rZt\nS+vWrfn4448ZPHhwzLuMHTuWvffem3bt2rHPPvvwv//9r97u4IMP5q9//Sv7778/rVu35sgjj2TZ\nsmXBicAwDEexd/IM2NlTg0hkXir06NFD33vvPVVVnTdvnu6www7ap08fVVU9/vjj9bLLLtO1a9fq\n999/r/vss48+9thjqqr65JNPapMmTfShhx7S2tpaXbdunT7//PPapUsXnTBhgqqqzpo1S+fNm6d1\ndXW6xx57aP/+/XXjxo06Z84c3XbbbXXkyJGqqtq3b1/ddNNNdcSIEVpXV6c33XST7rvvvjEyjho1\nKkbuQYMG6Y8//qjr16/Xq666Snfdddd6u9NOO03POOMMXbdunU6bNk27du2qBxxwgKqq/vjjj9q1\na1cdPHiw1tXV6cSJE3WrrbbS6dOnB8bP7bffrr/97W/r70eMGKFbb721bty4UVVVJ0yYoB9//LHW\n1dXp3Llzdfvtt9cHHnig3r2I6OGHH67Lly/XdevWqapqVVWVzpo1S1VV33//fZ06daqqqk6ZMkU7\ndOigr732mqqqfv3111pVVaV1dXX1/j355JP177Js2TJt166dPvPMM1pbW6vDhg3Tdu3a6bJly1RV\ntbq6Wn/+85/rV199pevWrdPq6mq96aabAt+z1NOpUbl4aa/oZXjkV3QBGgiUg3KBcH7Z0KNHD23V\nqpW2a9dOe/TooX/4wx903bp1unjxYm3evHl9gaiqOmzYMD344INV1RVy3bt3j/HriCOO0H/84x8N\nwvj4448buL3zzjv1ggsuUFWnXA477LB6u2nTpmnLli1jZIwowCCWL1+uIqIrV67U2tpabdq0qc6c\nObPe/pZbbqkvkJ977jk98MADY56/9NJL9W9/+1ug3/PmzdNmzZrpwoULVVX1rLPO0j//+c8JZbn/\n/vv1xBNPrL8XEa2pqYlxIyL1yiWeP//5z3r11VeralS51NbW1tv7lcvTTz+t++yzT8zzv/71r3Xw\n4MGq6pTL7bffXm/38MMP61FHHRUYrikXo1iUmnIpm+1f0kGL3KX+2muvcfDBB8eYzZ07lw0bNtCx\nY0cgqsy7detW76Zr164xz8yfP59tt922gf9z585l4cKFtG/fvt6vuro6DjzwwHo3HTp0qL9u2bIl\n69ato66ujqqqhj2gdXV1/OUvf+HFF19kyZIliAgiwpIlS1izZg21tbV06dIlUM65c+fy0UcfxchS\nW1vLOeecExg3Xbt25YADDmDIkCFcccUVvPrqq4wZM6befubMmVx99dWMHz+etWvXsnHjRvbYY48Y\nP/yyxPPxxx9z0003MXXqVNavX8/69es55ZRTErr3880339C9e/cYs+7du7Nw4cL6+/h4Xb16dVp+\nG0ZjxcZcQkQDtFvXrl1p0aIFS5cuZdmyZSxfvpwVK1YwefLkejci0uCZWbNmBfrVs2dPli1bVu/X\nDz/8wPDhw9OSLz6coUOHMnz4cEaNGsWKFSv4+uuv65XfVlttRZMmTViwYEG9+/nz58fIUl1dHSPL\nypUreeihhxKG37t3b5566ileeuklevbsya677lpvd9lll7Hddtsxa9YsVqxYwe23394gPuPl93PW\nWWdx/PHHs3DhQlasWMGll15a/3yy5wA6derUYErzvHnz6Ny5c9LnDMNIjCmXPNOhQwcOP/xwrrrq\nKlatWoWqMnv2bD744IOEz1x00UUMGDCgfjB+1qxZzJ8/n7333ptWrVpx9913s27dOmpra/n8888Z\nP358Qr/8BXSHDh3qB8DBTeVt3rw57dq148cff+Smm26qL4irqqo48cQT6du3L2vXrmXGjBk89dRT\n9c/+7ne/48svv2TIkCFs3LiRDRs2MH78eGbMmJFQlpNOOol58+bRp0+fBlOTV61aRevWrWnZsiUz\nZszgkUceSehPEKtXr6Zdu3Y0bdqUcePGMXTo0Hq7rbbaiqqqqkCFDXD00Uczc+ZMnn32WWpra3nu\nueeYPn06xxxzTEYyGIYRJS/KRUQGishiEZkcZ36liEwXkSki8vd8hF0sktWOn3rqKdavX8/2229P\n+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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nRESLTSbDMIxiR0TQIhrQL5kt93feeWfmzMl2t3vDKB86d+7M7NmzCy2GYQRSMi0XTysXQCLDKE4s\nTxh+iq3lYmMuhmEYRuiYcjEMwzBCx5SLYRiGETqmXArEoEGDOOKII2rvW7RoYYOzRcq8efNo2bJl\nxuMbd999NxdfbGuGjYaFKZeQqayspG3btmzcuDGpW5G6sbdVq1ax8847pxRGRUUFLVq0oGXLlnTq\n1Inrr7++6AZ2KyoqmDlzZt7DPeGEE6iqqqpn/vrrr7PddttRU1OTtp+dOnVi5cqVUd8rHqNGjaJT\np05RZrfccguPP/542uEaRiljyiVE5syZw+jRo6moqGDYsGE5C0dEmDhxIitXruT9999n6NChPPHE\nE2n7s3nz5hxI50ilIM4Fffr0YciQ+oeCDhkyhF69elFRkV6STzeOVLVg724YxYQplxAZPHgwhxxy\nCOeffz5PP/10lN2yZcs4+eSTadWqFQcffDAzZsyIsk+npu/fqK5r164cccQRTJ48GYCFCxdy+umn\ns80227Drrrvy8MMP1z7Xv39/zjjjDHr16kXr1q0ZNGgQNTU13HXXXey22260atWKAw44gAUL3Dlu\n33zzDcceeyzt2rWjW7duvPTSS7V+XXDBBVx55ZX8+te/pmXLlhxyyCHMmuUO5DzqqKNQVbp3707L\nli156aWXWLFiBSeddBLbbLMN7dq146STTuLbb7+t9W/27NkcddRRtGrVimOPPZYrr7ySXr161dp/\n+umnHHbYYbRp04Z9992XUaNGBcbNqaeeytKlSxk9enSt2YoVK/jPf/5D7969AXjzzTfp0aMHrVq1\nonPnzvTv37/W7Zw5c6ioqOCpp56ic+fOHHPMMbVmkVbP008/zR577EHLli3Zbbfdalsla9as4cQT\nT+Tbb7+tbVkuWrSI/v37R73LsGHD+NnPfkbbtm05+uij+eabb2rtdtllF+677z723ntv2rRpQ8+e\nPdmwYUPyRGEYxUahd/IM2NlTg4hnXkzstttu+uijj+oXX3yhTZo00e+++67W7qyzztKzzjpL165d\nq5MnT9YddthBjzjiiFr7iooKnTFjRkrhiEit26+++ko7duyoAwcO1JqaGt1vv/30jjvu0E2bNums\nWbN011131REjRqiqalVVlTZt2lSHDRumqqrr1q3TAQMGaPfu3XX69Omqqjpx4kRdtmyZ/vjjj9qp\nUycdNGiQ1tTU6Pjx47V9+/Y6ZcoUVVU9//zztX379jp27FjdvHmznnvuudqzZ88oGWfOnFl7v3Tp\nUn3llVd03bp1unr1aj3zzDP11FNPrbU/5JBD9MYbb9SNGzfq6NGjtWXLltqrVy9VVZ0/f762a9dO\n3377bVVVfe+997Rdu3a6ZMmSwPi56KKL9KKLLqq9f/TRR3XfffetvR81apROnjxZVVUnTZqkHTt2\n1Ndff11VVWfPnq0ion369NE1a9bounXrdPbs2VpRUaGbN29WVdU333xTZ82apaqqH374oW611VY6\nbtw4VVWtrq7WTp06RclTVVVV+y5Tp07VrbfeWt9//33dtGmTDhgwQHfbbTfduHGjqqruvPPOetBB\nB+miRYt0+fLl2q1bN33ssccC37MU8oSRP7z0UPAyPPIruAD1BMpCuUA4v0z46KOPtGnTprps2TJV\nVe3WrZs+8MADqqq6efNmbdKkiU6bNq3W/R//+Mco5eJXGMkQEW3VqpW2bdtWd9ttN/3zn/+sqqqf\nffaZdu7cOcrt3XffrX379lVVV8gdddRRUfa77767Dh8+vF4YL7zwgh555JFRZpdcconefvvtquqU\ni78Af/PNN7Vbt24pv8+4ceO0bdu2qqo6Z84cbdKkia5du7bW/rzzzqstkO+55x7t3bt31PPHHXec\nDh48ONDv0aNHa+vWrXX9+vWqqnrYYYfVfosgfv/73+t1112nqlqrSGbPnl1rH6tcYjn11FP1oYce\nUtXkyuUvf/mLnnXWWbV2NTU1usMOO+ioUaNU1SmXoUOH1trfeOONetlllwWGa8rF8FNsyqVktn9J\nBS3gmPbgwYM59thjadOmDQA9e/Zk0KBBXHPNNXz//fds3ryZHXfcsdZ9586d+eijjzIOb9y4ceyy\nyy5RZnPmzGHBggW0bdsWcBWHmpoajjzyyFo3sYPN8+bNo0uXLvX8nzNnDp9++mmUX5s3b67tWgLo\n2LFj7fVWW23F6tWr48q7du1afv/73/POO++wYsUKVJXVq1ejqixcuJC2bdvSrFmzKDnnz59fK8uL\nL77I8OHDa2XZtGkTRx99dGBYhx12GB06dOC1115j//33Z8yYMbz66qu19p9//jk333wzkydPZsOG\nDWzYsIEzzjgjyg//t4rlrbfe4vbbb2fatGnU1NSwdu1aunfvHte9n2+//ZbOnTvX3osInTp1qu2K\nBNh2221rr7faaisWLlyYkt+GUUyUlXIpFOvWrePFF1+kpqaG7bbbDoANGzawYsUKJk2axJ577knj\nxo2ZN28eXbt2BWDu3LlZhakBmrRTp0506dKFqVOnxn0udrB5p512YsaMGeyxxx71/KqsrOSdd97J\nSs4I9913H9OnT2fMmDF06NCBCRMm0KNHD1SV7bbbjmXLlrFu3bpaBTNv3rxaWTt16kTv3r157LHH\nUg6vV69eDBo0iG+++YbjjjuODh061Nqdc845XH311bzzzjs0adKEa6+9lqVLl0Y9H29QfsOGDZx+\n+ukMGTKEU045hYqKCk477bTa75FsMH/77bevHR+LMG/evITKzDBKERvQD4FXX32Vxo0bM2XKFCZM\nmMCECROYMmUKhx9+OIMHD64tgKqqqli7di1ff/01gwYNCl2OAw88kBYtWjBgwADWrVvH5s2b+eqr\nrxg7dmzcZy688EJuu+02/ve//wEwadIkli9fzq9//WumTZvGkCFD2LRpExs3bmTs2LEJFZefjh07\nRk1QWLVqFVtuuSUtW7Zk2bJlUdOFd9ppJ/bff3+qqqrYuHEjn3zySW0rBeC8885j+PDhjBgxgpqa\nGtatW8eoUaOiJgTE0rt3b9577z3+9a9/0adPnyi71atX06ZNG5o0acLnn3/O0KFDo+yDFHfELNLS\nad++PRUVFbz11luMGDGi1t22227L0qVLWblyZaBcZ555Jm+88QYjR45k06ZN3HvvvTRr1oxDDjkk\n7rsYRimSE+UiIk+KyGIRmRhjfpWITBGRSSLy11yEXQgGDx5M37592WGHHdhmm21qf1deeSXPPvss\nNTU1/P3vf2fVqlVst9129O3bl759+8b17+677+ZXv/pVXPt4teOKigr+85//MH78eHbZZRe22WYb\nLrroorgFHcB1113HmWeeybHHHkurVq343e9+x9q1a2nevDkjRozg+eefZ/vtt2f77bfn5ptvZv36\n9SnFSVVVFb1796Zt27a8/PLLXHvttaxZs4b27dtz6KGHcuKJJ0a5f/bZZ/n4449p3749f/7znzn7\n7LPZYostANdF9frrr3PXXXfRoUMHOnfuzL333ptwzUrnzp059NBDWbNmDSeffHKU3T//+U9uu+02\nWrVqxR133MFZZ50VZR8UvxGz5s2b89BDD3HGGWfQtm1bnn/+eU455ZRad7vvvjs9e/akS5cutG3b\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Percentage Variation\n", "\n", "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] } ], "metadata": { "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/2-analysis-code-py2.ipynb.bak ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis - Code" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LSE daily data: Exploratory" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The data has no header, so I'm going to add one.\n", "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Quick feature engineering for exploratory purposes\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.000000
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.9644131.7202680.3076701.720268
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.6783251.2085420.3255291.208542
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0000000.0000000.0000000.000000
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.5100000.9481260.0770290.948126
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.7600001.3981100.1956961.398110
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+061.1700002.1221970.4472942.122197
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+0812.12000016.0482924.08111016.048292
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation Percentage Variation \\\n", "count 10010.000000 1.001000e+04 10010.000000 10010.000000 \n", "mean 18.707358 3.408274e+06 0.964413 1.720268 \n", "std 14.122609 7.532096e+06 0.678325 1.208542 \n", "min 1.522366 0.000000e+00 0.000000 0.000000 \n", "25% 5.442764 7.536000e+05 0.510000 0.948126 \n", "50% 15.099474 1.904100e+06 0.760000 1.398110 \n", "75% 31.889513 4.051675e+06 1.170000 2.122197 \n", "max 50.533702 2.408085e+08 12.120000 16.048292 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "count 10010.000000 10010.000000 \n", "mean 0.307670 1.720268 \n", "std 0.325529 1.208542 \n", "min 0.000000 0.000000 \n", "25% 0.077029 0.948126 \n", "50% 0.195696 1.398110 \n", "75% 0.447294 2.122197 \n", "max 4.081110 16.048292 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nyww8ifgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nWjvRWwMHAmcBB2EJke7+XsjLyw068PS02hXita8WMXb4uW7X9iypESrNmjVyuzdmwjK/6ajysjEs\nJycz6DR6+tnKy8tl8vyNVFZWMeDI2grZ+OlrwOHgjLxct7JokpvlM47MzHS3Zz3LMKdxls9yrUt5\nxwJn+uI9nU5at25CTnZG9e8tBaXVf3vLQzD58nwm0Due9/eVuQ+gnnhvdq02Eu+0bNGYvNaNfd4P\nqn6k4KZ25LXOJTU1PoRKotRvX0RLgOwA/hSRCmCZMWafMaa1iGz39UJ+fvCeb32N1DzDePubRTX3\ntgc3yegMw9uxt3v2BK+xeAqg/Pwinh0zG4BDD2wOwOYdJWzIL6Fv9za89tkfAJzRv7NbPoqLS/FF\nWVmF27Oe+S8pKfVZrnUp71iQn19EXl5u3KfTyfbtxTTKqmlOu3fXzMt5y0Mw+XJ9Jpiy8LxfWlbb\nJJYo5elk585i0h2+l8IHkx9PUZG/vShu3KCE+z1iLYCiZcKaApwOYIzZH8jBEiox4+UvFtbtBS8y\nKtJ17sE3ZzLyq0UU+BES/ifRI5seJXLESf+U9IyZIFz99ES+m7E2+Je03USMqAgQEfkWmGeM+R34\nGrhZRBLmsy1evZP3vl8aVhh1yWykJ0+daB+mJDvOlY6f/bIyxilpmETNG6+I3BetsKPN8I/ne72+\nZefekMNUtyJKfRNJd+dl5ZWkpaWQlpqQW8eC5uspq9mYX8zN5x8W66QkBAnpzn3rTu/7PqKNt5Ve\nwfLcR96FEgTQVsJQIxJG5UsCkt2ceOPwX2mRm8XwW46LdVLqTK1Nnjjw1bC+tjcMVzkccTNPEs8k\n93Aiprj3KLESeooSKXYV+Zmri2vqLgh2FKjFIBhUgESJiI1Iw9mJrjRokqF6uGbB72ITP4SiSLzx\nzWKK6rDqsqGiAiSB8ewfyiuq+OH3dTX3k6EHSRjqVtY6J1Z3dhSGKEBCeGfVpkK+UW8SAVEB4oHn\n5qtEYtLcDUnnYK6isiopBeE73/0Z9TjKK/QUQm8EW53KorQ60pW5y/K59cXfyN/te4FOQXEpv87f\n6HVvWqxRAeLBF79GxnOuv0+93U9lqUUdhk9bdoW+Sixeuf65X/j3f2fHOhkB8fe9vZ0JU7wnOEeA\n4TDmB4l6HAlBHM+Fv/71Ikr2VfDr/E0+nxn+8Xze+174/c+t9Ziy4IgbAbJuaxEvfPIHhSWxtTv+\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Percentage Variation\n", "\n", "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/2-analysis-code-py3.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis - Code" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LSE daily data: Exploratory" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# The data has no header, so I'm going to add one.\n", "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Quick feature engineering for exploratory purposes\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00.5901.7226280.5901.722628
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00.3801.0998550.3801.099855
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00.2600.7475560.2600.747556
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00.5151.4760680.5151.476068
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00.4651.3427660.4651.342766
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1933104 6896283.0 0.590 1.722628 \n", "1933105 4090421.0 0.380 1.099855 \n", "1933106 3902827.0 0.260 0.747556 \n", "1933107 5161379.0 0.515 1.476068 \n", "1933108 5434710.0 0.465 1.342766 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1933104 0.590 1.722628 \n", "1933105 0.380 1.099855 \n", "1933106 0.260 0.747556 \n", "1933107 0.515 1.476068 \n", "1933108 0.465 1.342766 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.000000
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.9644131.7202680.3076701.720268
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.6783251.2085420.3255291.208542
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0000000.0000000.0000000.000000
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.5100000.9481260.0770290.948126
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.7600001.3981100.1956961.398110
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+061.1700002.1221970.4472942.122197
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+0812.12000016.0482924.08111016.048292
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation Percentage Variation \\\n", "count 10010.000000 1.001000e+04 10010.000000 10010.000000 \n", "mean 18.707358 3.408274e+06 0.964413 1.720268 \n", "std 14.122609 7.532096e+06 0.678325 1.208542 \n", "min 1.522366 0.000000e+00 0.000000 0.000000 \n", "25% 5.442764 7.536000e+05 0.510000 0.948126 \n", "50% 15.099474 1.904100e+06 0.760000 1.398110 \n", "75% 31.889513 4.051675e+06 1.170000 2.122197 \n", "max 50.533702 2.408085e+08 12.120000 16.048292 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "count 10010.000000 10010.000000 \n", "mean 0.307670 1.720268 \n", "std 0.325529 1.208542 \n", "min 0.000000 0.000000 \n", "25% 0.077029 0.948126 \n", "50% 0.195696 1.398110 \n", "75% 0.447294 2.122197 \n", "max 4.081110 16.048292 " ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nyww8ifgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEZCAYAAAC5AHPcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnWeYVEXWgN/Jw8AQZ0AERSQUKCKKiGICFXP2M6/urmmN\nuCrmuOuaxYABxYCKu+YIiqICSpYoQTnknIY0CZjY3497e6a7p9N0mA5z3ufhYfqGSreqTp1TVadS\nHA4HiqIoilJfUmOdAEVRFCUxUQGiKIqihIQKEEVRFCUkVIAoiqIoIaECRFEURQkJFSCKoihKSKTH\nOgHxiDGmE7ACWACkAGlAKXCniEzzuI/9DMBwERnlJbzVwB77H0AG8KOI3BGtPASDMeYhYL6IjIly\nPBOAH0TkaY/rdwLHich59QjrX8AyEfnAzzPNgS9F5CT791xgoIgUhZQB97D3A94C2mENwJ4TkfcD\nvPMI0EZEhoQbv0e4/wZaOsM1xmQCLwODgGJgjIg8at87FHgVaA4UAQ+JyERjzJXAHYBzPX9LoAPQ\nUUQKvMR5F3C5/TMN+AG4X0QqwsjHD8BlIrLD47rP/Hg8lwI8DZwBVAHLgH+IyHZjTB7wPtDJvvcP\nEZnu8f4oYKGIPO9y7SbgGiAbmAtcHU4ekxXVQHyzW0QOF5HDRKQ38Dzwrpf7h4vIYcCZwDBjTC8v\nYTmAy53PA4cBR9mVNJaciCXMos2rwN+9XL8Wq4MIGhF5xJ/wsGkN9HN55/BICA+bV4CxItIHOBl4\n2Rizb4TCDgpjTAdjzKdYHb8r9wP7AQeLSF9gX5c69hUw0q7LFwIjjDFtRWS0XccPB44ENgM3+xAe\n/wecB/S36/wRQA/gkTCzNNjHdX/5ceVqrDbVR0QOxRrcDbPvvQr8KiIHA1cCnxpjsu389DDG/Axc\n5BqYMeYC4GbgRPu9bOD2cDKYrKgGEjx5wEZfN0VkozFmGdAdWOTlkRSXZyuNMZOxGh/GmAHAU0AO\nUA08KiLfGWP+ijUKagrsEpGTjDH3AVcBFVgjrb+JSLEx5mrgJjue7cAtIrLUHl0VAYdgNcY/gUuB\nv2F1AM8aY6qAP7AaW1NgX2A+cImIlBtjzrDTVwn8jtVxHiMia73Ee6uIiEfevwJeNMYcIyJT7Tyf\nYJfFz/YI8gWgP5Brh3WtiEy3098aOBAYC+yDPVq0474eSwi2Bp4SkTeAd4AcW/M4wk53nojssLWu\nS+3yW2qX01ZjzERgOnAMsD8wWUSu8vKdz7XTC9aotoJazTIgxpijsEbLmUB7LE30Olur/Rn4zi6H\nVsADIvKpl2CuAX7F+matXK73BT5yGSl/BQw1xnyM9e1H23nYYoxZAJyGNTp3ci+wRUTe8pH89lha\nR1Og3K4bNwNt7bxl2Hk73n5uHjBEREqMMauAL4HjgBbAMBF5wxjzjh32RGPMGSKyIVB+gNc80rUI\nuEtEKu3fs4GbjDFpwFlY9RMR+d1uo6fZYd2MVVfWeIR3pZ2+Qvv3jTTMQCvhUA3ENznGmLnGmHm2\nCeoF4ElfDxtjjga6ADMDBWyPWM8GJhhjWmJV4r+IyBHAucDrxpiO9uMHAcfbwuMcLOHR3x5JrgJu\nMcYcD/wVONYeqT2L1VidHA6cAvTEMk9cJCKvYTW0oSLyNXAd8K6IHAN0w+qwzzTGtMbqZC63R6kT\nsQQMPuL9wjO/IlIFvImlcTi5jtqOoD/QXkSOFpFednz3ujzbREQOEZH7XMqwKVZHerod96V2/GBp\nO04NsRrbPGOM+TtwKtDX1iAWA++5xHOgiJyAJWxPdAo5L/lx2AJnKvCWiOz09pwPbsUyHx0NHAyc\na4w5zBk/ME5E+tv5f9ZbACLybxF5GWuw4cpM4BJjTFPb/HM5VrluB1ZifSuMMQdideTtnS8aY9pg\naTS3+Un7e0AhsNkYM80Y8xzQSURm2/fvBSpE5AhbQ9mENfBw0kRE+mGZpB4zxhwsIlfb9wZ6CA+f\n+fFSHjNFZL6dj1bAw8AnWIO+FDv/TtYDHe33bhWR/+IyuLPpDrQzxowzxszH0rB2+SmXRotqIL7Z\nbXeYQI2AGGfbkqF2hJuCVY4FWJ2sZyNw8l9jzB6skVk5ljnhK2PM6ViN4iuXkW0V0Nv+e4GIlNp/\nnwR86jTHiMhQO21PYwmvaS5htLSFE8D3ztGZMWYh1mjdifP5e4DBto27u52mZlijycUissiO831j\nzEv2O2f6ildEPBvcSGCx3fFnYQm0G+0wZxhjHjLG3GCHNxBLa3IyxbMwRaTUGHM2cJYxphvQB2tk\n7I/TgFEistf+/RJwvzHG2Q7G2GGXGGOWe5STZ/yD7E73J2PMnyLynq9nPfgbcIatSfYAmmCV8w6s\nUf04+7m5uGsXwfA08DiWJrUD+BhLGII1MHnOGHM7lhY5FqseOrke+EpE1voK3K53pxpjDsASAgOB\nscaY12zhfhbQwhhziv1KBrDFJYhX7XA2GGO+x6oDi+17np14oPzUwRjTBWvg9KuIjDDG1BE2NlW+\nwnBJ98nAOUAZ1oDmceqaDBs9KkCCxDanCJad+Dc8BEwQXC4i87xcTwP+sEekANgVfyvwF6DE5dlK\naic7Mca0wJr0TANGe4zQ9xWRXcYYcDexOPDeWD/C0kg/wepc9refq6SupupMg7d4O3gRHojIZmPM\nj8BlWB39ZyJSbL9zJvAi8ByWaWEJcIXL6yUewWGM6YDVsbwBTAY+wxJo/vDMRxpWG3CWR8ByMsZc\niLUgoESsSdqvsDS891yeyQTOE5FP7EspWKYusIThPOB7rLLu7xKPa4fu6zv5ozXwvIjcbafjYmC5\nfS8VONvWyDDGfAd84/LuJVjakWte51H7ra/FGsBMEWsSehQwyhhzDDAOuA+rPG8TkR/s93Ow5g+c\nVLr8nUrgjtxfftwwxgzCqsNPicgL9uWt9r0WLuaoDlhaiD82Yi3CKLXf/wB4KMA7jRI1YfnGrfEa\nY7pjmXbmertf3/BcmAF0M8YcZ8fTB2tuw9vE7E/ABcaYZvbvR7Em934ALjPG7GOHcROWPT0QldTa\ndgcD/7Zt7ilYHVsalpmmm7EXB9gdaAusjmW8l3h/8hPfCCzBcBX2aNTmZOAbe/5iDtZEbVqAtB8B\nbBWRx0XkRyyToHNFTqXH+86y/wH4u92xAQwBfpH6ra65EbjFjqsF1sh+gsczDqzOtbP9+3Bgha0R\nHg7cIyJfYZlSurqk1bOO1LeOnYMlULHryB2Ac8HBSOB8+94ALPPZT/bvlnY6prkGJvbkuv1vLtYc\n3ZO2mchJT2rbxA9YJtUMY0wq8DbuZt+r7Pj2x6pv39nXXethoPz81/MhOz9fAFe6CA+n6fRb4B/2\nc73t9E7yEpcrnwEXGWOy7fp0HjArwDuNEtVAfJNtm6jAasgpwHUissKe8KyPG2Ofz4rINrtTftZY\nq0NSgCtEZJ2tPbg+O84Y0xPLZOTAUv+vs805TwM/GmtCvAi7s/ASt+vvMVhmjUysFS9fGWO2A7ux\nGllXEdlpjLkcGG2HPQerwe8WkfF+4vWW119ss882EVnscut14H+2vbkKa4L4Qh/BONP/A3C1rRWW\nYGmFBVgd4QpgnjHmD+BYl3fexuq0f7M7huVYWl6gcnLlr8BIY8xl9jMj7Tkk13xWGGOuB7411kTu\nfOAdEdlrjHnSTts2YBuWRtIVa44i2DT44h3gSGPMIqzB4UgRcc6FXQe8bYx5GKu8zhURp8bVFdho\nd7j++DfW95lmjKnGEnyzgIvt+49hzdvMs+OfD9zp8n5nY8xsLK3kVhFxahNfAlOMMeeKyB8B8lNn\njg1rIAXwlF0fAVaKyIVYE+VvGWu5cjXWXGOxx/ue5fwalvlwjh3vXNR85ZUUdeeu+MMYkws8CDxi\nd4CHYS1j7RDjpCkJhLFWYV1oazJKkhARDcQY0x/L9jjINsGMwF4mKSLX+n9biWfEWiJcDsw2xlRg\n2ekvCvCaoniiI9UkJGwNxF61cyVQIiIDjDFfAG+IyA/25NOHIvJtBNKqKIqixBGRmERfjrvdex6Q\nZ9uYc6ldfaIoiqIkEWELEHuSznV53jJgONYEb1sCr3hQFEVREpBorMJ6CcvNxRJ7Wefz2MsefeFw\nOBwpKfVdsagoitLoiWnHGQ0Bsh3LcyZYG3IGBHohJSWFggLPlXWNk/z8XC0LGy2LWrQsatGyqCU/\nPzem8UdDgFwHfOyyYue6KMShKIqixJiICBARWYOtaYjlbfXYSISrKIqixC/qykRRFEUJCRUgiqIo\nSkioAFEURVFCQgWIoiiKEhIqQBRFUZSQUAGiKIpf5s2bw9lnn8KQITcwZMgN3HDD1Xz++ccNFv/K\nlcv5/XdvZ7GFxy23XM/cubPdrr300jDGjv3axxvuvPzy82zdusXn/d9/n8fKlZbH+gcfvDv0hMYx\nKkAURQlI3779GD78dYYPf52XX36Djz76L6WldQ6KjAqTJk1g1aqVEQ/3nHMu4Pvva/28VlZWMm3a\nZAYPPjWo92+99Q7atm3n8/63335DQUEBAP/5zzPhJTZO0QOlFCWB+GTCcmYt2RrRMPv1aMvFJ3b1\n+4yr1+7S0lLS0tJIS0tnxYrlvPTScwA0b96C++9/GJEljBjxMpmZmZxzzvk0a5bLqFEjAejevQd3\n3XU/8+bN4c03R5CWlkaHDh0ZOvQ+fvzxe6ZPn8revXvZuHEDV1xxFf369WfcuLFkZGTQo0dPNm/e\nxJgxX7B3bzkpKSk88cSzNG/egmHDnkbkT1q3bs2mTRt5+ukXSU1N4ZlnHqe8vJysrCzuvvsB8vPb\n1uRj4MATGTnyVcrKysjKymLy5En063cUWVnZzJ8/l1Gj3sThcLBnz24eeeRx0tPTufvuf9KyZSuO\nOmoA06dP5a677qdJkyY899yTVFRUsH37Nq677kby89sxc+Y0li4VDjigM9df/1e+/voHli5dwosv\nPkdaWhqZmVncc88DVFdX8+ijD9CuXTvWr19Pz54HM3TovRH9xtFCBYiiKAGZO3c2Q4bcQEpKCunp\nGdx++91kZ2fzzDOPc//9j9Cp0wGMHfs1H3zwHv369aeiopyRI9+lqqqKSy89n7feep8WLVryv/+N\nZvPmzTzzzOOMGPEOLVu25K23XmfcuLGkp6dTWlrKsGHDWb9+Hffcczunn34Wp59+Fm3a5NGjx0HM\nmvUbb775JkVF5Tz77BPMnDmdJk2aUFRUyMiR77Jr1y4uu+wCAF599UUuuugy+vc/mjlzZjFixMs8\n/PBjNXnKzMzkuOMG8uuvExk8+DS++24M119/MwCrV6/k4Ycfo02bPEaPHsXEiT8xePBp7Ny5k1Gj\n/kdaWhozZlgnAK9Zs5rLLruSPn0OZ9GiBbzzzkief/4V+vcfwODBp9Ku3T44XVY988wT3Hffw3Tp\n0pUpU35h+PDnueWWf7J+/VpefPE1MjMzufjic9m5cwetWrVu2I8cAipAFCWBuPjErgG1hWjQt28/\nHn308TrX16xZxbBhTwGWCahjx/0A2H//TgAUFu4iN7c5LVq0BODyy69k586dbN++nYcfvheHw0F5\neTn9+vWnQ4eOdOvWHYC2bdtRXl73JIhWrVpyzz33kJKSzrp1a+jVqzerV6+iV6/eALRs2ZJOnQ4A\nYMWKFYwePYr//vc9HA4H6el1u7uzzz6XV18dzmGH9aWkpLgm/ry8fF544VlycnIoKNhK7959AGjf\nfl/S0qwj7J1aWZs2ebz33ts1cyeVlbXOyT2PW9q2rYAuXazvd+ihh/P6668C0KHDfmRnZ9fEXVZW\n7u0zxB0qQBRFCZn99z+ABx/8F23btmPhwt/ZsWM7ACkp1vRqq1atKSkppri4mNzcXF588TlOPfV0\n2rZtx1NPDSMnpylTpvxKTk4OW7Zsxt0rt9X7pqam4nBUU1pawttvj2Ty5F/ZurWI22+3tIUDD+zK\nDz98x0UXXUpRURHr1q0B4IADDuDSS6+kV69DWLt2NfPn152IP/DAruzeXcqnn37EmWeeU3P96acf\n55NPvqZJkyY8/vijNcLCm9fwt94awTnnXED//kfz3XdjGDdubM2z1dXVbnnJz89nxYrldOnSlXnz\n5rDffvvXCS+RjhlXAaIoSsjceee9PPbYw1RVVZGamsq99z5EQUHtHE1KSgp33nkvd911G2lpaXTr\nZujZ82Buu+0Ohg69DYejmqZNm/Hgg/9my5bNHqFbnbUxPXjtteF06tSZ3r0P5eKLL8bhgNzcFmzb\nVsDpp5/FjBlTufHGa2jdujVZWdmkp6dz00238dxzT1FeXkZ5eTm33TbUax7OPPMcRowYzuef106o\nn3rqGdx00zU0aZJD69at2batoCY/rnkDGDToZF555QVGjx5F27btKCzcBcBBB/Xi9ddfoX37fWvy\ncvfdD/DCC8/UaET33vuQz3ATgbCPtI0QDnXPbKGuqmvRsqhFy6IWz7JYu3Y1y5Yt5aSTTqGoqJAr\nr7yEzz8f69VklWzk5+cm3XkgiqIoDUbbtvswYsTLfPLJh1RXV3PTTUMahfCIB7SUFUVJaLKzs3ny\nyWGxTkajRDcSKoqiKCGhAkRRFEUJiYiYsIwx/YGnRGSQMSYfeBNoCaQBV4nIqkjEoyiKosQPYWsg\nxpi7sARGln3pGeADERkIPAT0CDcORVGUcKmq2ZOhRIpImLCWA+e7/D4G6GiM+RG4HJgUgTgURVFC\n5oPxwnXPTKJkT93d7UrohG3CEpEvjTGdXC4dAOwQkcHGmIeAe4FHAoWTn58bblKSBi2LWrQsatGy\nqKW+ZTFh7gYAivZW0Xn/+PcxlShEYxnvdmCM/fcY4D/BvKSbpCx0w1gtWha1aFnUEk5Z7CrcnVTl\nGOtBRTRWYU0GzrD/Ph5YHIU4FEVRlBgTDQ1kKPCWMeZGoBBrHkRRFEVJMiIiQERkDTDA/nstcEok\nwlUURVHiF91IqCiKooSEChBFURQlJFSAKIqiKCGhAkRRFEUJCRUgiqIoSkioAFEURVFCQgWIoiiK\nEhIqQBRFaTQ4Yp2AJEMFiKIoihISKkCUuOFfo2Yx7OP5sU6GoihBEg1fWIoSEmu2JI+XVEVpDKgG\noigNhMOhFngluVABoigNwLCP5nH/yBmxTkajJyXWCUgy1ISlKA3A4tU7Y50ERYk4qoEoiqIoIaEC\nRFEURQmJiAgQY0x/Y8xEj2uXG2OmRSJ8RVEUJf4Iew7EGHMXcCVQ4nLtMODqcMNWFEVR4pdIaCDL\ngfOdP4wxbYD/ALdFIGxFURQlTglbgIjIl0AlgDEmFXgLuAMoRVfNKYqiJC2RXsZ7ONAVGAE0AXoa\nY54XkTsCvZifnxvhpCQujb0sXPOfbGURTn6SrSzCIdSyaNGiiZZjBImkAEkRkdnAIQDGmE7Ah8EI\nD4CCAnVjAVbDaOxl4cx/MpZFqPlJxrIIlXDKYlfhnqQqx1gLw0gu41U/DYqiKI2IiGggIrIGGBDo\nmqIoipI86EZCRVEUJSRUgCiKoighoQJEURRFCQkVIIqiJAzzl23jlmcnULKnItZJUVABoihKAjH8\n8wWs2VzM9EWbQ3pfdzZHFhUgCURZRVWsk6AoilKDCpAEYeYfW7hx2C/M/GNLrJOiKLFHVYm4QAVI\ngjBx3gYAfpm/IcYpURRFsVABoihKwqEKSHygAkRRlEaD+luKLCpAFEVJOFJSVAeJB1SAJBgOHUIp\nihInqABJEHS8pShKvKECRFEURQkJFSCKoihKSKgAURRFUUJCBYiiKAmHLsKKDyJyIqExpj/wlIgM\nMsb0AYYDlUAZcJWIFEQiHkVRFCV+CFsDMcbcBbwJZNmXXgRuFpETgS+Be8ONQ1EUxRVVQOKDSJiw\nlgPnu/y+REQW2n+nA3siEIeiKIoSZ4QtQETkSyxzlfP3FgBjzADgZuCFcONQatF9hIpCyJMgqrlE\nlojMgXhijLkEuA84Q0S2B/NOfn5uNJKSkHgri8xM61NlZKQlfVm55i/Z8hpOfpKtLMIht1lWSOXR\nskWOlmMEibgAMcb8BbgeGCgiu4J9r6CgONJJSUjy83O9lkVFRaX9f1XSl5Uzf77KIpEJNT+hlsWa\nzcVkZ6XRrlVOSPHGK8UlZSGVx87C3UlVp2ItDCO6jNcYkwq8BDQDvjTGTDDGPBLJOBRFCZ5/vTuL\n+96YEetkRBw1RcUHEdFARGQNMMD+2SYSYSo+UG+KiqLECbqRUFGUhGNncVmsk6CgAiTx0C24isKY\naatjnQQFFSCKojQitu3SbWmRRAWIoiiNhu9mrIl1EpKKqOwDUSLH7r0VvPDJ76zYWGRd0El0RVHi\nBNVA4pypCzfXCg9FUZQ4QgWIoiiKEhIqQBRFaTSk6BbEiKICRFGURoND3ZFGFBUgiqIoSkioAFEU\nRVFCQgWIoiiKEhIqQBQlClRXO3jn2z/5Y/WOWCdFcUEn0SOLCpAEQ6cAE4Nl63cxZeEmnvtofqyT\noihRQwWIokSBqmoV9UryowJEURRFCQkVIIqiKEpIRMSZojGmP/CUiAwyxnQB3gWqgUUicnMk4lAU\nRVHii7A1EGPMXcCbQJZ96XngfhE5AUg1xpwbbhyKoigRQRdhRZRImLCWA+e7/O4rIpPtv8cBJ0cg\nDkVRFCXOCFuAiMiXQKXLJVcZXwy0CDcORUk0dKAbp+jiuIgSjQOlql3+zgV2BfNSfn5uFJKSmLiW\nRbNmWW73MjLSkr6sXPOXqHnduHNvzd+Ryk+s3o1XQslTWlpqUpZFrIiGAJlrjDleRH4FTgcmBPNS\nQUFxFJKSeOTn57qVRUlJmdv98oqqpC8rZ/48yyKR2FW4u+Zv1zyEmp9wyyJRy9EfoeSpqro6qcoi\n1sIwGgJkKPCmMSYD+BP4LApxKIqi1B81YUWUiAgQEVkDDLD/XgYMjES4iUK1w8Fj782m94FtOP/4\nA2OdHCUO0DkQpTGgGwkjwN6yKtZsLmbMtNWxToqiKEqDoQIk0VAVXFGUOEEFiKIoihISKkASDTWu\nK0roaPuJKCpAFEVRlJBQARImVdXVpDTkqEbnQBQlZFQBiSwqQMJg9eYirntmEj/NWR/rpCiKojQ4\nKkDC4Lc/tgLw5a8rY5wSRVGCoWDX3sAPKUGjAkRRlEZDtUNtwJFEBUgYOGIwIRGLOJUQaNCJMUWJ\nDSpA4h3thxITHekqjYBGL0BK9lSwvTA0u2iD9BHaDymKVxwqpGNONLzxJhRDXrIOT+xr8sltksFV\np/WIcYr8kxKmSuJwOEhR84qiKBGg0WsgTuZIAZPmb4x1MgLinAMpq6iq97urNxdxzdMTmbu0INLJ\nUjxRIa00AlSABOCtsX/wr1GzYp0MNybOXc+Nw35h4crt9Xrvx1nrAPh4wrJoJEtxJQ7MK2riUaJN\nQguQtVuKufbpify+fFvU4pi2aDNrtsTwBDMvA9nvf1sLwIzFm0MKUvsVRVEiQUILkPGz1lHtcPDf\nH5fGOinRw09nX385oGaVBkNNWEojICqT6MaYdOA94ACgErhORJK2l0+hARdLOVwm0lWTUPyQ7NXD\nQXBDoqLS8mgnpdESLQ3kDCBNRI4BHgOeiEYkaoqpHzooVhojz340L9ZJSFqiJUCWAunGmBSgBaBD\ngEgSoiCYtsiaM9kW4r4XRUlENhSUxjoJSUu09oGUAJ2BJUAb4KzoRNPwKsjcpQW0b5ND+zZNGyZC\n1RoURYlToiVAbge+F5EHjDEdgInGmF4i4lMTyc/PrXckWdkZAKSnp4b0/uw/twSdjtatm7KnvIpX\nvlgIwJhh55LdxIo/JaXWnBZKOvyloVnTLLd76RlppJVbe0Ays9JDji8S6YwWrmmL53T6Y5OLlhep\n/NT33arq2gFWopajP/LzcklNrf8IKxnLIlZES4DsACrsv3fZ8aT5e6GgoP5LZffutaKoqqoO6v25\nSwsYN3MNd17Sh+zMdMZNreuG3Vc4E39bQ6d9ct2eKyouA8ClnXLtf8Zz8/mH0LFts/pkpYb8/Fy3\nNJSUlLndr6yoorqqGrDyH0q5QWjl3VA40+ZZFonErl17av52zYO//FRXO9i8Yzft2+TU8RYQSllU\nu1TMRC1HfxRsKyY1hIm9ZCqLWAvDaM2BvAj0Ncb8CvwE3CciewK8EzLBuvd45YuFrNhQxLyl9d83\n4toYnazfWlLn2pade/h44vJ6h18vknw2fNR3f8Y6CVHD3+a+TyYu58G3ZjJrydYGTFF8UrBrT8CN\nst7apNKwREWAiEipiFwiIseLyNEi8nE04gmVUF2i12n7yd2Px4zJCzbFOglR45qnJ/Lr795d5jg3\nhi5ZuysicSWy6/97Xp/OC5/8TvFu3+tv1CVP7EnojYShEvXlv5GMwENIJW6XoDh5d9wSv/d/mb+h\ngVIS//jz+VZWXn9/cEpkSWwB0sC96faiGCx/9chjRWU1W3bsbvh0KPUiFOXU+al1f1OQqAUg5iS2\nAHFSz4oU6rGW8zxUZl/RRrP9r3OZd3Fm4+MJy3j+4/lRjFVJRJJCECVDHpKYhD4PJOS6FcKL8VyP\nf/htXayToHgQz/VFUSJFUmgg9dVkI9W4tZNQIklSaAxKUGzZuZsdsTCJR5iEFiChnncQ8jkJsbC5\n+olT+5v4Rc3zij/ue2MGQ1+bFutkhE1CC5AaGmBfhLcYGqSTUCnRaEjy7T0h4a/6h3u8sxI+ySFA\n6kmwffLaEA+SajBThNo8kgr9nEqikfQCZEfR3robjuyG6ukuwu0Rh4NHPY6y1RGPkkgkg0DSFhff\nJL0Aeejt33jli4Vubkf0rGglUqzdUsxvXpxyKpHBX0tN5J32yUJCL+N14m+UsqesEoAiF5cIoVS7\nmFVVnUSPa5xa6qFd8sjK9OsvVIkwoThSVCJL0msg3lAFRIk0VXHp2K82TZW2B2dFiSQJLUDqIwhc\nH422CSui4fvX4RUlKO4akfhLRpX4I6EFiJP6arKh9rvBxhMpb6qhMkcK+OfLU5Jio5ISGQpLEvNU\naR0jxTcJLUAa0pWJp+xYs7mYZesLA74XC9PBq18upKi0nCkLk9ctuqIosSchBcjSdbu489WpbNpW\nGtL7KzfOaR/JAAAgAElEQVQVAf73eXjKmHUeh0f9691ZBGL91hKuf3YSY6etrm8Sa9FJ9IQklPnd\nSJtWk2GuLxrT5LoKM3IkpAAZNW4JO4vL2FAfAeJSZ2b+YS27dK7QCoavpqwKPi6bifa5Dl/8Wvfo\nXCW58BQY4fZRb439I+hnF6/e4fV0zGTAXzF+PCHKJ38qAYmaADHG3GuMmWaMmWWM+Xu04gHYtN37\n+RixHGk4HA4mzo3AwUB+shAwfzrQSlimLdoc9LPDPprPw+/8FsXUxCcleyqCek4X+0aPqAgQY8wJ\nwNEiMgAYCOwXjXgCsXSd/8nsaPavY6aujmLoSjLi7/S9UNDxg42e6hk1oqWBnAosMsZ8BXwDjI1S\nPDXMXrK1zrXde32bqCbOXR/VlSk/ztYzOhozocyBVFZFt2tbZc/9NTbUBVH0iNZO9Dxgf+As4EAs\nIdLD3wv5+blBB56eVrdCvPbVIsYMO9ft2u4/aoVKixZN3O6NHr/UbzqqvWwMy8nJDDqNnn628vNz\nmTx/A1VV1QzsW1chGzd9NTgcnJ6f61YWzXKzfMaRmZnu9qxnGeY0zfJZrvUp71jgTF+8p9NJXl4z\ncrIzan5vLiyr+dtbHoLJl+czgd7xvL+33H0A9dh7s+u0kXindaum5Oc19Xk/qPqRgpvakZ+XS2pq\nfAiVRKnfvoiWANkO/CkilcBSY8xeY0yeiGzz9UJBQfCeb32N1DzDePubRbX3tgU3yegMw9uxt7t3\nB6+xeAqggoJinhk9G4CD928JwKbtpawvKKVfj7a89tnvAJw+oLNbPkpKyvBFeXml27Oe+S8tLfNZ\nrvUp71hQUFBMfn5u3KfTybZtJTTJqm1Ou3bVzst5y0Mw+XJ9Jpiy8LxfVl7XJJYo5elkx44S0h2+\nl8IHkx9PUVGwrThu3KCE+z1iLYCiZcKaApwGYIzZF8jBEiox4+UvFtbvBS8yKtJ17oE3ZzLiq0UU\n+hES/ifRI5seJXLESf+U9IweL1z91AS+m7Em+Je03USMqAgQEfkWmGeM+Q34GrhJRBLmsy1etYP3\nvl8SVhj1yWykJ0+daB+mJDvOlY6fTVoR45Q0TqLmjVdE7o1W2NFm2MfzvV7fvGNPyGGqWxGloYmk\nu/PyiirS0lJIS03IrWNB8/WUVWwoKOGm8w+JdVISgoR0575lh/d9H9HG20qvYHn2I+9CCQJoK2Go\nEQmj8iUByW5OvGHYL7TKzWLYzcfEOin1ps4mTxz4alhf2xuGqx2OuJkniWeSezgRU9x7lFgJPUWJ\nFDuL/czVxTX1FwTbC9ViEAwqQKJExEak4exEVxo1yVA9XLPgd7GJH0JRJN74ZjHF9Vh12VhRAZLA\nePYPFZXV/PDb2tr7ydCDJAz1K2udE6s/24tCFCAhvLNyYxHfqDeJgKgA8cBz81UiMXHu+qRzMFdZ\nVZ2UgvCd7/6MehwVlXoKoTeCrU7lUVod6crcpQXc+uKvFOzyvUCnsKSMX+Zv8Lo3LdaoAPHgi18i\n4znX36fe5qey1KEew6fNO0NfJRavXP/sJP7z/uxYJyMg/r63tzNhSnYH5wgwHEb/IFGPIyGI47nw\n179eROneSn6Zv9HnM8M+ns973wu//bmlAVMWHHEjQNZuKeaFT36nqDS2dsef5qyPehz3vznD/UKI\nA4sFK9z3Zk6a5+79Ny6P6Q6BVZsSa/e0J0Nfi81xsgtX1d27u2pTEZ9OXB6Xo9lAhLos2dMX1q0v\nTeaD8YGFa7yU0PoC69iKeFzEEDcC5KXPFrBw5fawDl8aOWYxsnZn5BIVBuVe3Eg4qZfTvDBq8dhp\nq3X1VwPhrz/2OiiK0aj4sfdmM27mWpasiY92EgvKyquYEMxRCw0gQeojx+PRKWTcCBCnvbYqjJHR\njMVbePp/8yKVpLCIVN0L9zCqhStj6kFG8UFDKAD+OpzyigSZH4kXNUDxStwIkBoaYYVxzfLe8kq3\nSeNAbk78Tb4BpKXF3ydW3HE4HCxSQR89Qhy4R3Invy8Sfa9i3PQuvgpy7ZbioE8eSwYuuu9b3q/H\n5Gego0wTvYI2Bm5/eQrPf/J7xMONlo+1RCOem0AomuiMPzbzzdT6H7EdDeJGgHijeHc5j46axf0j\nZwR+2IXnffiyilc8K7i/FRnJyPjf1jZqZ3hFDbAiqw7x3Kv6IkSFIORBVANaQ4JJ4ycTrSX6I7/5\ng68mqwAJiFPzqK8GsmjVjmgkJ6K4roIJp54mg8XvownL6+eOOw75bnr90h/rRVCJKD+U+CMuBcjM\nP7awenNyH7953TMTGyQe7Sgahu9/W8vWXXsY+c3ikF1uKP4JVebuKfO3IjJBFhPEKXEnQCqqqnnj\nm8X8+9343zwWDrEegYaDvx3Oe8srmbeswOuRwMnOW2P+YMYfW/hkYuM1x0Wa8bPWsXtvdEx842au\n4fpnJ7F2i/d9Ro2vBtefuBEgzpGya8fjea54VXU1fwa5fj3Y5+KBaLrq8CzDcJm8YCP/eG4Si7xs\nUgN457slvPz5Qn5d0LjmcQD22G5wou0CY/mGwrA33CbK4oqJ8zYwevzSqIT9qS3o5y3zftJ2PG7c\nizeiKkCMMW2NMWuNMd0jEd64GWt59sPg9nl88YuOAqPBdzMsZ41TFmzyev/P1db804atpQ2Wprih\nXuOA0AYNu0rKeGL0HO4bOT2k951sSSC3N5u325thG1glWLZ+V51rDeUrz+FwJIQWHzUBYoxJB14H\nIrYVWtbV/aDJwMqNCTTf04C2t2A1s1WbimLuAqe+hFqKTh9a/uz6wfDhT8u8dpBKLZ7Vb+Lc9dz0\n/K/MX+5dY4kkT3wwh5ue/yXq8YRLNDWQ54ARQOOzZdSTt7+NvmfWSBPINNYQm7AASvdW8Nh7s7l7\nRMP4m1q6bhfvfb/E++gwQcxCTlbFaOCyaXsp1z0zkTlSEJP4PfE1UPG8PH625SdvxuLNUUmH61zP\nig1FlCeAN+WoCBBjzN+ArSLyI/VsVq4frbQRbSBMFAKJhUjPuQRi91573qGyYdy+P/Xfufwyf6P3\nObaGkJkJJqS8MWHOBqqqHbw7LviB0xzZyoI43a0/Y/HmOo5M68u309dwy4uT48aXX7BE60z0vwPV\nxpjBQB/gfWPMOSLi81Dx1FRLlmVl1ybJdXdufn4umRlpQSdgRSKZhbyQn58b1HPNmzfxfz8322tY\nwYbvidM1SlZWep0wqqodNXt2srMzQo7DmT5XgeArrKrU2jFQOSl0DCPO+tC0WVadNKWl19bhli1z\n/L6flpYasHw87y/fXOzmYdnzfkZ2Ji1zswIlvYamzay6UbKngrTUFJpkBe4OwvmmTpo0yQAgNTUl\nqPAyMlJ59ctFUUtbs6Z1v6WFw+16epolvbOy3Ov2yDETALjolB4hxe/K0o3FHNt3/5rfnuly/R2J\nbxEuUREgInKC829jzETgH/6EB9RurNvrosbtKaudsCooKG6QA17ihYKC4FyYFxb6nwwtLtnrNayt\nW4tYsnYXndvnkp0ZfDWostfNl5VV1gnXdTf5nr0VQeVhnQ9XLAUFxeTlNXP77Y0lLptGCwpKyGqg\nEfquwj110lRlmxz+XLWDVRsK/b5fVVkdsHxc72c2yeSJd2f5vA/w5LszGXrpYQHT7qTUrhtXP2V1\ngO/ce2LAd4Ktl0627trD3rJK9m9X29ntsQcZ1dWOoMIL9mCs+qbNSenucq/vVjvcw3R60S4r8163\nQ4m/ysMUunt3mVs4nmF63ou1EGmIZbzxv5SgETJ/+Tae/XAer3+9OKT3vfXTs5Zs8XvfG4+881vQ\ncc5fto373phOocuE+Wz/45KYsLO4jE3bI+tGf6+f4wGcRDrOSHDv69N5dNSswA/6I8o9SDydeBko\nKU5hHy9EXYCIyIkiEvxC7vj5lkmN85Aaz0OpAhLk9wnmsdIAG8Q8G9PwzxewZecepi7c5POZBkPr\naYOxxsdGv0jxzdTV/LE6sPujWEw/xbvVJW42EtaQBJOEDcnKTf5NJQ1JfQ+8ufXFyRGINTF78nhI\n9UcTlsc6CTU4HI6YagLPfeTdAetmlwPZYpG68bPW+bwXD5pT/AkQH2VSWFLG4gRwkhhJ5gRhnhln\nb+zzha9OPRZy+qvJK5m9JLImJ7c2FIVMleyp4NkP57FgxTY2bIvc5sj6NP6SPRWMnRLewWLxhLcl\n3s99NJ/bX5kaXrhhdqjezhyvryfwSOPvQLlAZwE1BNFahVVvnG3fVxUIt3IlIsGsPAmEr1W1UxZ6\n30kefMD1e7za4eCbqauB4CZr44UJc9fz55qddZbteusEIz0eXLZ+F4Ul5bz2VXD1YGdxGSV7Kmhm\nr3JKJJzlW15RVa/Vlq5MXbiZY3u3DzkNgeYD48044jkBHwviTgOJB7WsMbA1RFcWfjcIxqCFRaq2\n7C2v5NkP59XRcn25k1hfUMq8pe4b4SJ98NmHPy0LKDw8D40a8lIkzIKxY3Q9DlPz5J3vrH0lDocj\nqodpzV0aHxsg44G4ECCrXVxRNDYzVTLRUPLDLZ4ISZAZf2zhzzU7GRbkYWRf/rqSl79Y6H4xwoOf\n1ZsDTx4n26mDi4OYzA7ES58t4MZhv7BuawkbI2B2/Hb6arfflVWOqJmPEm38HBcmrFufqz0bo3Rv\nwzgra4zktchmW+HegM/9vnwbm7bv5rT++wd81ieeDaGeDWPczDVUN6RK4yN99WrQsXBxG8MO59/v\nzqLTPrn89bTAG+gcDkdQXgoi4cnAubKwPkvE/fH5Lys5pZ97W9gdB/1UPAibuNBAlLrEcvneS58t\n4JOJy91OTfTEWzOPZH3+dOIKPp9Yu0rI20j7q8kr3eZywup6YmTgdt0sm2is3lwc9PHLY6etrnPN\nm7AIt2NO5PKsL3EgP1SAxCu+ziioL842uq1wT0Dto9rh4PMAbvCLfZzfPWPx5pDnVYLhxmF1PZM6\nJ+WdRKNB1SfMUDwCF4c5b1K8u26cm7YHb7YJxRTjcDh4+9s/6vXOxCB9RYVrknNddhtJGkq5bCgn\npJFCBUic8sY3oe0Q98XdIwKfH7FkzU6+dT3b20tddu6Idrp1cDJ6fOiTn6EQ6Qlr30SnQW/avtsS\nOGHYIZZvKOSht+uaaR54cyaTgzzQ6+XPFwZ+yIOCXXuYurCuR9oVGwv5YLx4XXjgLZcleyoCbiat\nL4+9l9wnmboRBzYsFSBJTjCb+9ZuKeajn5fVMR88Muo3nwd41fcs6UiPrN4eW3cE/JaXa8ESCwvW\nP1+ewlhXgV1PPvxpmc97o75bElQY6wu8+yJzJViz0OPvz2HC3A18/qsXLdbH5x/5TejfrKEJpIXc\n/MKvXjXC+jJuRuh1oqFRAdIICGTSeHTULMbPWse8Ze7LEzcUlPo8GjjQWQXRHht56/jWbgncGfrC\nl6+paA/yfJ3sGAyrNkXe4/TuvRWMHi9sczFtTZi73v2hAD2pt82tzmIsr6hy85S9wovTyURwaV6y\nt6LOsc57yipZGK7LeQd8Oim401Rjr3/EySosJbr4ctPgSVlF8FrF4lU7mLpwE8ccYm3cqs8JeTuK\n9tK6eXbQz9chJfTGs25rCcs3FDLosA5u1z+OI7cesWTMtNVMnLuB5esLadM8m2N7t69TL0LR1pzz\nQ69/vZg1AZYnP/2/4I6tbkg8tbBhdpt68KojIhpPfer1lh2x34muGkiSU15ZFfTkbn03SP08Z33g\nh7zwsBe7fX0o2V0RtItvTx555zdG/yBs2RncZOu3YZiYEhHnMvp1W0uYv3wbr3judSE8c5/ncbCJ\nMml82/ApXq9vLwq8LD5avPd9cGbKaKICJMn5LEh12B+BVmYFg6spaHeYSy3HzVzrczWYv6XHrpQF\n4R69KAL27KTEQ4I4HI6QO7Nwz3ZvSOLNXb4vLwkNiQqQJKd0b2XYdvxvp6+p96R5rAjGLXewVFXF\nvoE2OAGy7M1TxIZtpXX2gzwxeg7DP1sQVJSharLxwFeTI+zksh5VLtyBWCRQAdIICHZUHirxtGqk\n3MNev76ghCc+mMPWIE1WYC1HbawEcrI57OP5/Panu0dlbyPh5RsK65irfPHfH4M/Lije8NRK6nuk\ngSc/ey5YiHNUgChh43XViMPBdzPWcPVTE7w6+BsRpIfZcHl77J8sX1/IRz97nyT35rzz8ffnUFFZ\nzY+zfZ/F0JhZ73EMcSgbKJXkICqrsIwx6cA7wAFAJvC4iIyJRlxKw+BNiVm9udjnZHTJngom2WYN\nb5v+ZkX4XBBfOCdpvQmKqupqbnjuF47s2bbOvZ/nrOf7mf7PWmks1HFD4jHIlnW7ggpHy9Oi4TbB\nRp9oaSB/AbaJyPHA6cArUYpHaTAcXvcdvDfO++TprhiNSl/5YqGbB1bn3pDfV2ynsKTM7dmSPZVU\nVTuYvrjuQULbg3A6mWzsLC4L/BAga90FRrAr1T6ZqEulAZ7+39xYJyFiREuAfAI85BJH8ojcRsq2\nwr1e3UQsWet99OlpCW5IrwvOcyE8535cXbX/78el/PCbnxFxvJ0e1AB8PMH3znZXghU0inc2FETu\nZMtYExUTlojsBjDG5AKfAg9EIx6l4XjgzZlhvd+QSw6dcW3zcBS43qXhLl1fyNL1vifLG6H8qDM5\nrkSG8ooqPp20gkGHdWDfvKaxTk5EidpOdGPMfsAXwCsi8nG04lHiE4eHu4sbn6/rTTdarN5czKQF\nm3jf1kRCoUlOZgRTpDQWisoqyc/Pdbv2+hcL+HnOeuZIAaP/dVqMUhYdojWJ3g74AbhZRCYGel5J\nPipifFJeOMIDYEyk1/crjYKPf1zKqX07MkcKaNuqCa1ys/h26ioAdpWUUVAQ+JTJRCJaGsh9QEvg\nIWPMw1jbY04XETWeNhJKfOwUV5RkZ+Q3i5nxh7Uw47QjwzjVMwGI1hzIP4F/RiNsJTGIpY8gRYkl\nTuEB8L2/hRpJgG4kVBQloRicwKP66YvqHsSVyKgAURQloRjQe99YJyFk3gzj0LN4RAWIoiiNgstO\n6hbrJCQdKkAUJY7IaxHGQVuKX5rlZMQ6CUmHCpAI8o9zDo51EpQEp9M+uYEfauR482sWDKmBDjVX\n6o0KEJs3hp4Q0nsH2A2+d5c25LdsEskkKY0Q7eSihxZt5GnUAsS1PmWkp9G+TU69w3AdDHVur6NH\nJTzS0yLfJF/553ERDzNeeOivR3DtWT2DejZFJUjEadQCxJNQGm+PTi0B6NqhhVZQJWzS0yJfh3Ky\nMxhxxwl0zG8W8bBjQV7LJgz5v95cdZqhc/vmDOjVnt5d2gR8Lyc7ap6bGi2NWoCcNeAAn/cOObC2\nQr56+/E1fw+/7ThyXSbjLji+C3dcciin9Xdfm37/lX0jl1Cl0ZAWBQ0EICszjYGHJe7yVyd3XtqH\nzvu2oE/XPAb26VBz/cTDO/h5y6Ln/q2imbRGSaMWIOcffyB/Pc1wz+WHuV0/rFseh3XPq/ndJKt2\n5NKsSQZ3X354ze+M9FR6dW5TR3vZr20zrhjcnRP67EuH/Mh74Dz64H3IzkyLeLhKbMlIS2XQYYE7\nw1A4+IDWUQm3oeiQ19RnHoKZV09NTeHYQ9oHFVe8Lfm96bxeDL8t/kyRjUqAuGoJzgpyQp8OGG8j\nEy8VslVuFuDf1fdj1/bn1gsPISsjjZP6duSvp/XgnGM6h5Nsn3Ru3zwq4Sqxo0/XNlx5quHWCw6J\nSHj5LWuXBaelJraJdcj/9fZ5r/t+LYMK44pTugd85qG/HsHgfvsFna6GIC01hWZN4m8ZcqMSILk5\nGbwxdCBv3zMoYAXp2rEFAMf2tkYsI+8ayLM3DgD8r+bokNeUw7rlu13z1m4j4WTtxvN61bnWspnl\nhjxao1glegy7+Rh62iPsfUJY0OGNtNTaJt6mRTYnHt6Bq04z/O30HhEJP7g0hC643rn3xJq//a1y\nbJKVzrnHBh6oZWUE1tqdA7OG2pNz8aCuAZ9xjmdPPTK+BFvSzCr17NSKP9fsrHP9isHd+e+PSwFL\nzc1I9y0zXdXgjvnNeGnIsTVS39VE5byWG+TGpEO75tG3ez4DD+/AsI+sU/EGHrZv2I7WPEckD151\nBJ3b57K9cC8bt5cycd6GsMJXGo6H/npEjYYL7p3XSX07kpGZTsucDD762fupgWcc1YlVm4rqtAFX\nRTolJYW/nGJqfr/r4zjiYBlyYW+Gf74g4HPHHNKeotJy5i/fFnTYhxzYhisGW1aCm87r5VY2vjj3\n2M58PWVV0HE4uem8XhzWPY9dxeVumw0fuLIvX09dzSS7HbVvk8OAXvvw+S+Rc/X/6u3H0yQrnZ6d\nWvHJxOVe+zBXLjmxGz/OWl/ntM1YkdAayIUnHMgRJp+8FtncdH7taNx19D3osA41lS8nq37yMjcn\n0+vKqtycTP519ZE8cf1RQYWTnpbKzRcc4ma/zUgPb/7CmxaUlppCSkoKeS2b+LUJX3/2QWHFHQtu\nODfxNmk2zU4nLTWFDvlNuezkbvzr6iO9zoddc2bPOubIjPQ03r5nEO/ceyJXDO7Ozf93KKf024/j\nD/Vuw2/Xqgm3XngIF55woPsNPxXhmF77cP7xB3Lz+XU1WYC2rfzva/K37P2FW4+t+Xuf1jkMtNvk\necd25oQ+gSfzb7/4UNq2ssI/okdbunRoEfAdgBeHHMs1Z7ov633x1mN57qYBNb8vO6mb26bfI3q0\nJS01lTYtst00lBbNsrjqVMM7957IW3cP4vHrjiLT5f4dlxwaVJr84RyYdton1+t3cK7Ka+qyguxf\n1xwJUFOmsSRhNZCLBnXh9P6dvN7r2alVzeg7NTWFuy8/jCkLNtWYo3wTvFTfr21oSyLvurQPyzYU\n1hlR5bXIZlvhXs4f2JUp89dTsKvWHXpOVjq7yyrdnncKo7+c0p0PxlsaVqAG76R3l7zAD8WQOy45\nlIlzN3BU730Z8fkCmjXJoGl2/Nl/XbnmzJ4cc0h7thXu4e4R0wF46bbjwGHVQSePXdOf2Uu28tpX\ni7h4UFdSU1M4xsfErrfBy5WnGk7ptz8/z13PxLlWHb94UFeOOaQ9qakpnHn0ATUj5DbNs/yaqq45\nq3Yg8fI/j2PN5mLeHbeEbYV7a0xH/3huEhWV1XXevWJwd/K91Lczj+7Eig2FtGiayQ3nHsynE1dw\n6pH7kZKSwotDjiXX1pp/mb8RgOMP3ZdTj9zP7cjkJlmhD66a52RyzCHtGTNtNVt3WkcaN2/qfrqk\n03z9xjeLgw7X+Q2P7NmOD3+ytMBenQMvHQ6Eq0UkJzuDt+4ZxLVP157B99g1/Vm0aofbHE+HvKZu\npr1YkrACxNuO3VsuOITZS7Zy4L7uo7l2rXK48IQuQYcdzf0cPQ9oXWPndmXfvKY8c+MA8vNzOfuo\n/amudrBo1Xa6dWzJhm2lPDF6DmDZyXeVlNXsgD/x8I41yxldOyr/eXBw1WmG97+XyGUsgvTq3IZe\nnduQn59Lv26WsFu1qcjrs64N6eqnJjRI+pz8/YwejPpuCWkuQiCvRW2nmpqS4nXFxRE92vLm3QPd\n5ieCJS01lX3zmvJ/J3Rh5YYiTjhsX7flrGAtdU1PTfG+OMQHTbMzOOiA1jx1w9FurkIe/ls/fpm/\ngYsGdmXFhkKe+XAeV55qarT8q04ztGyWxfDPLFOWazs7smc7juzZruZ3c5djgq8/5yAmzN3AFYO7\nkZGexh0XH0puTmbEXLn845yDeey92dx92WE+nznvuM5uaQqGFk0zefCqI2rmGj05+uB2NM3OoG2r\nJvzvp1pzY7MmGZTscT9kzZs26tqvPXZtf9q1zqFd68jMh0WDuBMg5xxzAKs3F7NgxfY69847rjPd\nO7ZkzLTVHOfFpfPh3fM5vLs1gX16//3r1YBijadATE1N8aoptMrNqqO9pHqZpAw0bzmwTwcG9unQ\n4J2uN+68tA9L1+6irKKKC44/0Osznds3J79lNp3bN+eCE7owc/FmTugTGRX+xSHH8s/hU+r1jlMA\ntM7NrmPKefmfx1FeUXfU7koowsOVJlnpPPL3fl7vhbNc1xJ6tZWnQ15TLj/ZWrnUo1Mr3hg60G3U\n7BRep/Tbr87AzR9HHbQPRx20T83vXgeGP5p3pXP75gFH6aGujnTN53nHdaaotByAU47cn7b2RH91\ntYNqBzVzVs/fcgxL1+3iOXsOFODBK4/wG0+b5oHnfWJNtM5ETwFeAw4F9gLXiojPmaf0tFT2aZ3D\nBSccSJ+ueewsLuPLX1eyaXspfU1bTj6iI5u376ajbTbq0SmwYLgoiJUNsaZpdjqley3T1BE98n0+\nt1/bZjTNTueU+qzc8hAg7dvksGn7bqA+hjp3rjvroJrzDC4e1JV985qS1yKbffOasmJjIeUV1bzx\n9SKK6nGcrbORB9PpPX1DrR37bC+N//6/9KVkbwXfz1jD0vWFbveuPqMn1Q4HvTq3Zuhr02qu9+7S\nhuY5mbwxdCC//r6xZsGFN0beNZDrn50E1AqAgzvXTXfT7AyaJqlTXV+LUC6Ns30TDYUvIZSamsIp\n/fbjhEP3ZU95JelpqRx0QGvevmcQ19gmqqwA+7hS/G4YiA+ipYGcB2SJyABjTH/gefuaV7585my3\nw+Zb5WZxtcdEWMcQ5xzimZeGHAcpsLOojDZ+lgxmZaTx8j+P93nfG61y3cM7wrRlzLTVAKR7Gf2e\nPeAAjjq4HR/+vIxFK3fUXD/nmAP4ZupqcnMy6N21dpR43KHt3eYluuxrTXK+OMTa7OTUbE4/an/G\nzWiYYz2dS6/7dPU/xzPyroFs3rGbfVrn1CwxzUhP5aS+HWsEiFOwVVRW84/nJgHWQOff1xxZY8dX\nlEBkZaa5CYqUlBSGXNi7zryMV+JffkRNgBwLfA8gIjONMf51tTihoRfGOU1P/oRHqHTIa8rRB+9D\ntcNBj/1bMqBXe5pkpdO+TY5bhX719uNxOGr9BN1xcZ+ae9UOB6kpKZx3XK1Z6a17BlFV5fC7HBpq\nl1aSKSgAAAu9SURBVFSedfQBHN4tny8nr+TSk7pRvLuC7YV76daxRcAwokV6WmrQfqEy0lN56oaj\nqaqyTFLJ4k9KiR19ugW3iCUB5EfUBEhzwNWGUGmMSRUR/4bhGNOiaSYbCkrjcsdnKFznsVzX018X\nuLtp8cTbQoXUlBRS0wNX7XOP7VyzsatLhxYMvdT3ZGY88dKQY6msch9KtFU3/UoMSATnrCmhHs7i\nD2PMMGC6iHxm/14rIuFvvVYURVHihmjZEKYCZwAYY44CFkYpHkVRFCVGRMuE9SUw2Bgz1f799yjF\noyiKosSIqJiwFEVRlOQnoX1hKYqiKLFDBYiiKIoSEipAFEVRlJAIahLd3k3+lIgMMsYcDozAclEy\nX0RuM8YcCryItRcvBTgKOBc4DDjNvt4KaCci+3qEnQ18ALQFioC/ish2+14a8BHwpoiM95Gul4AK\n4EcR+bd9/XHgJKAauE9Efgm+SMIrC/uZO4HLgCrgSRH5yuX9HsAMoK2IlPuI43zg/0TkCpdrgcri\nJOAxoBzYClwlInuNMS8CxwDFwL0i8lvYhVAbZzBlcQ9wKda+oGdF5FtjTHOsb94cyADuFJEZPuJw\nKwtf3zzIshiGtcm1ChgqItM83w2hDNKBd4ADgEzgceAP4F2s+rdIRG62n70OuN5O++N2Wfis/y5x\neH3GGHMK8BRQAnwvIk8keFk0x6rjzbDq0V9EZGukysJ+v047MsZ8BbSx07JHRM5syLKwn88HpgCH\niEi5MSYVy4NHXyALeFREvguyLE4GnrTz85OIPOwlfb7qxd+AG7CUi69F5HF/+QyogRhj7gLetDMB\n8AYwREROAAqNMZeLyO8iMkhETgReBT4TkfEi8rTL9fXAlV6iuBFYICLHA6OBh+x4DwR+AfztYn8d\nuFREjgP6G2MONcb0AY4UkaOwOvGXAuUxWAKURZEx5nJjTAtgCNAfOBVLsDrfzwWew2ocvuJ4Eauy\npbhcC6YsXgHOEZGBwHLgWmPMmUB3EekHXIT1bSJCMPXCGNMLS3gciVUW/7Yr/R1YFXsg1go9r+ny\nVhZ4+eZeXvVWFr2Bo0WkP3AVMDzkzLvzF2CbXX9Ps+N+HrjfLotUY8y5xph2wK3A0fZzTxpjMvBR\n/z2o84ztb+5N4Hz7ek9jzAAv7yZSWfzNJZ+fAHd7iSPksvDTjrqJyHEicmIkhIdNUGVhp+sU4Aeg\nncv7VwLpdj0/D/Dm3M9X3XkGS/gOAAYZY7wdpuOtXhwI/AM4Aav/yrQFrk+CMWEtB853+d1RRJzO\n+6dhjWIAMMbkAP8CbnMNwBhzAbBDRH72En6N2xNgHHCy/Xcz4Bpgopd3nJ1xpoisti/9AJwsIvOx\nOiuwpL//I77qh7+ymIqVl1JgNZCLlYcql+dHAvcBu/3EMRWrYrjSFD9lYTNQRJxHvqVjCamDsMoF\ne1RbZYxp6yeM+hCoXhwH9AQmiUiFiJQBy4DeWA3pDfvZDGCPjzjcysLXN/fynrey2ADsNsZkAS2w\nRl6R4BNqG24aUAkcLiKT7WvjgMFYQnSKiFSKSBFWWRyK7/rviuczJwF5wE4RWWNfd9Y/TxKlLHpj\n7Rdzurpt7iNd4ZRFnXZkt4eWxphvjDG/2oOuSBBMWTi/dZWdjx0u758KbDTGjMXqN8Z4icNbWQDM\nBfKMMZlANu59kBNv9eJkYA7wPjAJmCoi3t6tIaAAEZEvsTLvZIUx5jj777OxPoqTa4BPRMS1IADu\nxRIs3nB1e1Js/0ZEFoiI4NslTHMstc1JMVZjQESqjTH/Ab4BRvl4v97UoyzWY6mrs7FHd8aYR4Gx\nIrIQP25uRORTL9cWBigLRGSLHc8FwECsSjAfOM0Yk26PLg7C/XuFTBBlkYPVIRxvjGlqjGkDDACa\nikiRiJQZY/bBGjnd6yMOz7Lw+c093vNWFpVYptQlwHgsTTBsRGS3iJTawu1T4AHcv5OzTufi7t6n\nxE676/Wa+u+BZxtpISIFQBNjTHd7lHgGXr5tgpXFduAUY8xiYCjwtpdowikLb+0oEyv/5wEXAi8Y\nY8I+cS3IsnD2Vz+LyE6P+3lAFxE5C0ujeNdLNHXKwv57ETAWWAysFZE6Zxf7qBd5WAO/vwP/B7xs\nmxV9EspGwquBl2wb32TczTFXYH2EGowxPbFGByvt312At7Aq8AdYBeA8RSYX2OUrYmPMzVgZc2Cp\nu66Zc3tXRB40xjwJzDTGTBaR+h+WHBhvZXE6sA/QCatCjDfGTMMqm3XGmGvt++ONMddQWxajRSRo\nYedRFleIyCZjzD+xyv9UseZXfjTG9MMacS3GGl3UPWglMtQpCxFZYox5FWuUtBZr7mebnf5DgP9h\nzX9M8agXvsqiCC/fPJiyMMb8A9gkIoPtRjHVGDNDRDaGm3FjzH7AF8ArIvKRMeYZzzT6SPtO+7pb\n/beF/dsEbiNXYZn09mJ1GtsSuCx2AY8AT4vIm3b9+MJYc2ARKwsvSd4MvCGWn74CY8w8wGDX03AI\nsixccd2Utx1LCCAivxpjugVTL2wT+n1ATxHZbIx52hgzFEvLD1QvtmNZDHZjaah/At2xBsJeCUWA\nnAlcLiI7jTHDge8A7IqYKSIbPJ4/GUu9wi6MFcAg529jTEusEcNs+//J+EBEXsXFXm6MKTPGdMYy\nGZ0KPGqMGQRcKCK3YKnA5ViTVtHAW1mUYE3EVdhp3IU1Sqo5MMEYswoYbD8zyEu4AfFSFg9gLVo4\n2TYXYYzpBqwTkeOMMR2B92yTQTSoUxb2SC7Xjr85lslpkTHmICwV/2JbI6tTL7whIsXevrmIzCJA\nWWB11iX236VYHU3Y2phtz/8BuFlEnKaRecaY40XkV6wBxQRgFvC4bVZoAvTA6uim4VH/7cFWMG3k\nVOAUEak0xnwBjBKRPxO4LHZQO6IuwKo7ESsLH5yMNR9zpjGmGXAw8GeoZeCSzmDLwhVXDWQKVv6+\nNNY839ogy2IPljZSaj+2CcgTkecIXC+mAjfZ3yUDywS93F8+QxEgy4AJxphSYKKIOG1w3bEatSfd\ngR/9hDcCeM8YMxkoAy73uO9vq/wNWKPYVGC8iMwy1uqFi4wxU+zrr7rYRiON17Iwxsw2xszAsj1O\nEZGfPN5zrlarL17LwrbjPoylYXxvjHEAH2OpvU8aY27Cqlg3e3s/Qvgqi57GmN+wvu1QEXEYY57A\nmnx/yVgToLtE5HyfIbtT55u73vRTFiOBY4zlXicV+K+ILCN87gNaYk3mPoz1jW7DUv8zsDqjz+x8\nD8fqGFKwJlPLjTGB6j/4biMbgVnGmN12ftw6vgQsi4eBt2zNIR24NlJl4UFNOxKR740xpxhjpmO1\n1/u8mOBDIaiy8JUurEUBI+x0gVXvPalTFnY53ollfdiDpeX8zfUlX/VCRN4wxryNNagB+LeI+LQI\ngboyURRFUUJENxIqiqIoIaECRFEURQkJFSCKoihKSKgAURRFUUJCBYiiKIoSEipAFEVRlJCI1pG2\nihLXGGM6AUuxduinYPkMWgDcKh4eYD3emyCWc1BFafSoAFEaMxtE5HDnD3uD42fA8X7eGRjtRClK\noqACRFFqeQTYbPthuhXohXXWgmD5DHoawBgzXUSONsachuUkNB1YBVxnO8VTlEaBzoEoio3tm2w5\n1mFoZWKdp9ANy7Pw6WIfkmULjzysQ3tOEZG+WF5tn/EesqIkJ6qBKIo7DmAesMr2IdYD6zCfZi73\nwTpwZ39gou3PK5XoeTpWlLhEBYii2NhO7gzQBfgP1mmS72Cdk+Dp/DINy3Puefa7mdS61laURoGa\nsJTGjOuxwSlY8xnTgQOxvJO+h3Ve9PFYAgOsUx1TgZnA0bbLfLDmT55tqIQrSjygGojSmGlvjJmL\nJUhSsUxXlwMdgf8ZYy7CcpM9Hehsv/MN8DvQF+sQrU9sgbIe6xxsRWk0qDt3RVEUJSTUhKUoiqKE\nhAoQRVEUJSRUgCiKoigh8f/t1bEAAAAAwCB/6znsLokEAsAiEAAWgQCwCASARSAALAHClFEDRi3W\nAQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nWjvRWwMHAmcBB2EJke7+XsjLyw068PS02hXita8WMXb4uW7X9iypESrNmjVyuzdmwjK/6ajysjEs\nJycz6DR6+tnKy8tl8vyNVFZWMeDI2grZ+OlrwOHgjLxct7JokpvlM47MzHS3Zz3LMKdxls9yrUt5\nxwJn+uI9nU5at25CTnZG9e8tBaXVf3vLQzD58nwm0Due9/eVuQ+gnnhvdq02Eu+0bNGYvNaNfd4P\nqn6k4KZ25LXOJTU1PoRKotRvX0RLgOwA/hSRCmCZMWafMaa1iGz39UJ+fvCeb32N1DzDePubRTX3\ntgc3yegMw9uxt3v2BK+xeAqg/Pwinh0zG4BDD2wOwOYdJWzIL6Fv9za89tkfAJzRv7NbPoqLS/FF\nWVmF27Oe+S8pKfVZrnUp71iQn19EXl5u3KfTyfbtxTTKqmlOu3fXzMt5y0Mw+XJ9Jpiy8LxfWlbb\nJJYo5elk585i0h2+l8IHkx9PUZG/vShu3KCE+z1iLYCiZcKaApwOYIzZH8jBEiox4+UvFtbtBS8y\nKtJ17sE3ZzLyq0UU+BES/ifRI5seJXLESf+U9IyZIFz99ES+m7E2+Je03USMqAgQEfkWmGeM+R34\nGrhZRBLmsy1evZP3vl8aVhh1yWykJ0+daB+mJDvOlY6f/bIyxilpmETNG6+I3BetsKPN8I/ne72+\nZefekMNUtyJKfRNJd+dl5ZWkpaWQlpqQW8eC5uspq9mYX8zN5x8W66QkBAnpzn3rTu/7PqKNt5Ve\nwfLcR96FEgTQVsJQIxJG5UsCkt2ceOPwX2mRm8XwW46LdVLqTK1Nnjjw1bC+tjcMVzkccTNPEs8k\n93Aiprj3KLESeooSKXYV+Zmri2vqLgh2FKjFIBhUgESJiI1Iw9mJrjRokqF6uGbB72ITP4SiSLzx\nzWKK6rDqsqGiAiSB8ewfyiuq+OH3dTX3k6EHSRjqVtY6J1Z3dhSGKEBCeGfVpkK+UW8SAVEB4oHn\n5qtEYtLcDUnnYK6isiopBeE73/0Z9TjKK/QUQm8EW53KorQ60pW5y/K59cXfyN/te4FOQXEpv87f\n6HVvWqxRAeLBF79GxnOuv0+93U9lqUUdhk9bdoW+Sixeuf65X/j3f2fHOhkB8fe9vZ0JU7wnOEeA\n4TDmB4l6HAlBHM+Fv/71Ikr2VfDr/E0+nxn+8Xze+174/c+t9Ziy4IgbAbJuaxEvfPIHhSWxtTv+\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Percentage Variation\n", "\n", "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/3-methodology-results-conclusion-code-py2.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model but are nice for visualisations\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Oil Stocks\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", "print \"Oil stocks in DF: \", oil_stocks_in_df" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract GAIA data\n", "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and GAIA data start intersecting \n", "# i.e. date = 1999-10-29\n", "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read in FTSE100 data\n", "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "\n", "# Preview data\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort FTSE100 data by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and FTSE data start intersecting \n", "# i.e. date = 1984-04-02\n", "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Adds FTSE data to BP dataframe, joining at dates\n", "\n", "# FTSE columns we want to copy to BP dataframe\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close'] \n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the FTSE row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "bp_counter = 0\n", "ftse_counter = 0\n", "while ftse_counter < len(sorted_ftse100):\n", " bp_date = bp.loc[bp_ftse_start + bp_counter, 'Date']\n", " ftse_date = sorted_ftse100.loc[ftse_start - ftse_counter, 'Date']\n", " if bp_date == ftse_date:\n", " # Add FTSE data to BP row\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start + bp_counter, 'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start - ftse_counter,'%s' % str(col)]\n", " # FTSE counter + 1, BP counter + 1\n", " bp_counter += 1\n", " ftse_counter += 1\n", " elif bp_date < ftse_date:\n", " # Move to next BP row, same FTSE row and repeat\n", " bp_counter += 1\n", " elif bp_date > ftse_date:\n", " # Move to next FTSE row, same BP row and repeat\n", " ftse_counter += 1\n", " else:\n", " print \"Error: BP date is \", bp_date, \"; FTSE date is \", ftse_date\n", " # FTSE row + 1, BP row + 1\n", " bp_counter += 1\n", " ftse_counter += 1" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1984-04-27\n", "1984-05-02\n", "1984-05-07\n", "1984-05-29\n", "1984-08-27\n", "1984-12-26\n", "1985-04-08\n", "1985-05-06\n", "1985-08-26\n", "1985-12-26\n", "1986-03-31\n", "1986-05-05\n", "1986-08-25\n", "1986-12-26\n", "1987-04-20\n", "1987-05-04\n", "1987-08-31\n", "1987-12-28\n", "1988-04-04\n", "1988-05-02\n", "1988-08-29\n", "1988-12-27\n", "1989-03-27\n", "1989-05-01\n", "1989-08-28\n", "1989-12-26\n", "1990-04-16\n", "1990-05-07\n", "1990-08-27\n", "1990-12-26\n", "1991-04-01\n", "1991-05-06\n", "1991-08-26\n", "1991-12-26\n", "1992-04-20\n", "1992-05-04\n", "1992-08-31\n", "1992-12-28\n", "1993-04-12\n", "1993-05-03\n", "1993-08-30\n", "1993-12-27\n", "1993-12-28\n", "1994-01-03\n", "1994-04-04\n", "1994-05-02\n", "1994-08-29\n", "1994-12-27\n", "1995-04-17\n", "1995-05-08\n", "1995-08-28\n", "1995-12-26\n", "1996-04-08\n", "1996-05-06\n", "1996-08-26\n", "1996-12-26\n", "1997-03-31\n", "1997-05-05\n", "1997-08-25\n", "1997-12-26\n", "1998-04-13\n", "1998-05-04\n", "1998-08-31\n", "1998-12-28\n", "1998-12-31\n", "1999-04-05\n", "1999-05-03\n", "1999-08-30\n", "1999-12-27\n", "1999-12-28\n", "1999-12-31\n", "2000-01-03\n", "2000-04-24\n", "2000-05-01\n", "2000-08-28\n", "2000-12-26\n", "2001-04-16\n", "2001-05-07\n", "2001-08-27\n", "2001-12-26\n", "2002-04-01\n", "2002-05-06\n", "2002-06-03\n", "2002-06-04\n", "2002-08-26\n", "2002-12-26\n", "2003-04-21\n", "2003-05-05\n", "2003-08-25\n", "2003-12-26\n", "2004-04-12\n", "2004-05-03\n", "2004-08-30\n", "2004-12-27\n", "2004-12-28\n", "2005-01-03\n", "2005-03-28\n", "2005-05-02\n", "2005-08-29\n", "2005-12-27\n", "2006-04-17\n", "2006-05-01\n", "2006-08-28\n", "2006-12-26\n", "2007-04-09\n", "2007-05-07\n", "2007-08-27\n", "2007-12-26\n", "2008-03-24\n", "2008-05-05\n", "2008-08-25\n", "2008-12-26\n", "2009-03-27\n", "2009-04-13\n", "2009-05-04\n", "2009-06-25\n", "2009-08-11\n", "2009-08-31\n", "2009-09-02\n", "2009-12-28\n", "2010-04-05\n", "2010-04-19\n", "2010-04-20\n", "2010-05-03\n", "2010-05-12\n", "2010-08-30\n", "2010-12-27\n", "2010-12-28\n", "2011-01-03\n", "2011-04-25\n", "2011-04-29\n", "2011-05-02\n", "2011-08-29\n", "2011-12-27\n", "2012-04-09\n", "2012-05-07\n", "2012-06-04\n", "2012-06-05\n", "2012-08-27\n", "2012-12-26\n", "2013-04-01\n", "2013-05-06\n", "2013-08-26\n", "2013-09-23\n", "2013-12-26\n", "2014-04-21\n", "2014-05-05\n", "2014-08-25\n", "2014-12-26\n", "2015-01-02\n", "2015-04-06\n", "2015-05-04\n", "2015-08-31\n", "2015-12-17\n", "2015-12-28\n", "2016-03-28\n", "2016-05-02\n", "2016-08-29\n", "NaNs: 158\n" ] } ], "source": [ "# Count and display NaNs in FTSE data \n", "# i.e. dates where we have BP but not FTSE data\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print bp.loc[bp_ftse_start+row, 'Date']\n", " nan_counter += 1\n", "print \"NaNs: \", nan_counter" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Proxy remaining FTSE NaNs by taking the mean of the prices in the \n", "# two closest trading days where data is available \n", "# (one before, one after the day)\n", "ftse_data_to_average = ['Open', 'High', 'Low', 'Close'] \n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " if not (pd.isnull(bp.loc[bp_ftse_start+row-1, 'FTSE Date']) or pd.isnull(bp.loc[bp_ftse_start+row+1, 'FTSE Date'])):\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']\n", " else:\n", " go_back = 0\n", " go_forward = 0\n", " while pd.isnull(bp.loc[bp_ftse_start+row-1-go_back, 'FTSE Date']):\n", " go_back += 1\n", " while pd.isnull(bp.loc[bp_ftse_start+row+1+go_forward, 'FTSE Date']):\n", " go_forward += 1\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1-go_back,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1+go_forward,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs: 0\n" ] } ], "source": [ "# Check there are no more NaNs\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print bp.loc[bp_ftse_start+row, 'Date']\n", " nan_counter += 1\n", "print \"NaNs: \", nan_counter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", " print \"X.tail: \", X.tail()\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "X_train = []\n", "X_test = []\n", "y_train = []\n", "y_test = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2)) * 100\n", "\n", "def print_metrics(test, pred):\n", " print \"Root Mean Squared Percentage Error\", rmsp(test, pred)\n", " print \"Mean Absolute Error: \", mean_absolute_error(test, pred)\n", " print \"Explained Variance Score: \", explained_variance_score(test, pred)\n", " print \"Mean Squared Error: \", mean_squared_error(test, pred)\n", " print \"R2 score: \", r2_score(test, pred)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "days = 7" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " # Lines below for debugging purposes\n", "# print \"X_train.head(): \", X_train.head()\n", "# print \"X_train.tail(): \", X_train.tail()\n", "# print \"Pred: \", pred[:5]\n", "# print \"Test: \", y_test[:5]\n", " \n", " # Print metrics\n", " print \"# Days used to predict: %s\" % str(days)\n", " print \"\\n%s-day predictions\" % str(target_days) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "def execute(steps=8, buffer_step=1000, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=days, periods=periods, buffer=buffer)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64\n", "Mean Absolute Error: 1.35177309038\n", "Explained Variance Score: -0.999897657081\n", "Mean Squared Error: 5.3988704324\n", "R2 score: -1.79018260924\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64\n", "Mean Absolute Error: 0.0968047690639\n", "Explained Variance Score: 0.631705385589\n", "Mean Squared Error: 0.0157858151181\n", "R2 score: 0.624974281171\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64\n", "Mean Absolute Error: 0.121813762853\n", "Explained Variance Score: 0.841217523638\n", "Mean Squared Error: 0.0294876156146\n", "R2 score: 0.833996914272\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64\n", "Mean Absolute Error: 0.426327931115\n", "Explained Variance Score: 0.603248858424\n", "Mean Squared Error: 0.3014216695\n", "R2 score: 0.267021281001\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64\n", "Mean Absolute Error: 2.78950172548\n", "Explained Variance Score: -3.16904684367\n", "Mean Squared Error: 12.5284487756\n", "R2 score: -9.15605753784\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64\n", "Mean Absolute Error: 0.794150514869\n", "Explained Variance Score: 0.596407090489\n", "Mean Squared Error: 1.14332478592\n", "R2 score: 0.597101359913\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64\n", "Mean Absolute Error: 4.81075475134\n", "Explained Variance Score: -1.96163694244\n", "Mean Squared Error: 33.132880399\n", "R2 score: -8.55239322845\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64\n", "Mean Absolute Error: 1.21013490927\n", "Explained Variance Score: 0.826791346825\n", "Mean Squared Error: 2.43831676478\n", "R2 score: 0.822383271832\n", "Errors: [Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64, Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64, Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64, Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64, Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64, Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64, Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64, Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64]\n", "Daily error: [[28.167307082010478, 1.4463260128939317, 1.4015691053772388, 10.765715566952402, 24.41364846412203, 2.5976792674283566, 18.495640626302091, 2.5516641001831584], [28.524924281544262, 2.1150843700255639, 1.9904192071209452, 9.9777793095670795, 24.431344729424715, 3.367362298621531, 18.32452824442602, 2.9446157412542853], [28.966326367296624, 2.5023622771613652, 2.3109755963471068, 10.480972016930716, 24.620149855164474, 3.7850136112690573, 18.233121169601173, 3.1880683026068426], [29.085697436318398, 2.8063986750089587, 2.7077120693474366, 10.557942877986475, 24.986822088443628, 4.1801925531737281, 18.358886996507305, 3.4904393628985919], [29.562881417844032, 3.021868557170595, 3.0291535073135702, 10.431970367583759, 25.272566808380592, 4.6500648454107214, 18.479669548458453, 4.1392852048533699], [29.542482156287058, 3.1522506324077977, 3.4807177473584945, 10.593414589800933, 26.220902712818216, 5.0692206066914274, 18.598393316146357, 4.6759345302063018], [29.721120149448151, 3.3063521749028761, 4.1903047240177909, 11.1043790016977, 26.731233491624817, 5.4599845932349131, 18.818122838439312, 5.1515982900107735]]\n", "Mean daily error: [11.229943778158709, 11.45950727274805, 11.76087364954717, 12.021761507460564, 12.323432532126887, 12.666664536464573, 13.060386907922041]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# svm.SVR() trial\n", "execute(model=svm.SVR(), steps=8)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64\n", "Mean Absolute Error: 0.238191228204\n", "Explained Variance Score: 0.936734586453\n", "Mean Squared Error: 0.124174009044\n", "R2 score: 0.935825805621\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64\n", "Mean Absolute Error: 0.0972692755964\n", "Explained Variance Score: 0.631714378075\n", "Mean Squared Error: 0.0158811529743\n", "R2 score: 0.622709326982\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64\n", "Mean Absolute Error: 0.107737269091\n", "Explained Variance Score: 0.871650317662\n", "Mean Squared Error: 0.0228261083752\n", "R2 score: 0.871498446163\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64\n", "Mean Absolute Error: 0.181147312912\n", "Explained Variance Score: 0.875052508652\n", "Mean Squared Error: 0.0677040810751\n", "R2 score: 0.835361370336\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64\n", "Mean Absolute Error: 0.214491478056\n", "Explained Variance Score: 0.938634248613\n", "Mean Squared Error: 0.079359261295\n", "R2 score: 0.935668234886\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64\n", "Mean Absolute Error: 0.800157764607\n", "Explained Variance Score: 0.613715850639\n", "Mean Squared Error: 1.11699089039\n", "R2 score: 0.606381217067\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64\n", "Mean Absolute Error: 0.64399497304\n", "Explained Variance Score: 0.892268550448\n", "Mean Squared Error: 0.724194775999\n", "R2 score: 0.791210628505\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64\n", "Mean Absolute Error: 1.05035951615\n", "Explained Variance Score: 0.867777620914\n", "Mean Squared Error: 1.93149720042\n", "R2 score: 0.859302032386\n", "Errors: [Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64, Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64, Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64, Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64, Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64, Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64, Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64, Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64]\n", "Daily error: [[2.3698570333111504, 1.4112606385290734, 1.3388596770845407, 1.9978731488987438, 1.0643274139994094, 2.1726600714614435, 1.2096456519754599, 1.7851545701577813], [3.5397290828630266, 2.0992094906568943, 1.8827346495576485, 2.9916658848423605, 1.5585063699310966, 3.1013013471389437, 1.8485430242142713, 2.3575578468241742], [4.4040805111224612, 2.4921560557064821, 2.1764572183007651, 3.8243303952515619, 1.9133366253171493, 3.7697615623429668, 2.3093446670878617, 2.8551593057497877], [5.1323698739556516, 2.7671208137147856, 2.5543948404668759, 4.5282824168670546, 2.2001438159343518, 4.2080025337986378, 2.6823554175829778, 3.1844563168900706], [5.7184126896356871, 2.9697212352907276, 2.8435756292022925, 5.2200020876609496, 2.4613047808963091, 4.6245858986274824, 3.0873673748688937, 3.7434820521423369], [6.3399233706097196, 3.1396242770876306, 3.0843584513004441, 5.8895164465804859, 2.661753553657308, 5.0196880611640164, 3.4767926237582256, 4.2266657488609063], [6.8622343672731771, 3.2855971145088323, 3.3444418914677345, 6.4172185016832541, 2.843053391214541, 5.462962469783192, 3.8883808398183208, 4.6139581254374233]]\n", "Mean daily error: [1.6687047756772002, 2.4224059620035518, 2.9680782926098792, 3.4071407536513005, 3.8335564685405847, 4.2297903166273416, 4.5897308376483092]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Linear Regression trial\n", "execute(steps=8)\n", "\n", "# R2 scores: [0.859, 0.791, 0.606, 0.936, 0.835, 0.871, 0.623, 0.936]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n", "\n", "No change in performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Feature Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1 Adding more of the same type of features" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-09 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-10 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "1979-10-11 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 \n", "1979-10-12 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 \n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1979-10-09 7.67689 7.59882 7.72894 8.36703 7.28654 \n", "1979-10-10 7.69042 7.67689 7.59882 8.36703 7.28654 \n", "1979-10-11 7.67689 7.69042 7.67689 8.36703 7.55926 \n", "1979-10-12 7.9111 7.67689 7.69042 8.36703 7.53428 \n", "1979-10-13 8.22338 7.9111 7.67689 8.36703 7.53428 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64\n", "Mean Absolute Error: 0.245263403626\n", "Explained Variance Score: 0.934491328873\n", "Mean Squared Error: 0.129280801098\n", "R2 score: 0.933454012643\n", "Buffer: 700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-07-15 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 5.80321 \n", "1982-07-16 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 \n", "1982-07-17 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 \n", "1982-07-18 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 \n", "1982-07-19 5.15262 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1982-07-15 5.89377 5.9073 5.77718 5.95935 5.50446 \n", "1982-07-16 5.80321 5.89377 5.9073 5.95935 5.30876 \n", "1982-07-17 5.62104 5.80321 5.89377 5.95935 5.24423 \n", "1982-07-18 5.67309 5.62104 5.80321 5.89377 5.08809 \n", "1982-07-19 5.68558 5.67309 5.62104 5.82923 5.06102 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64\n", "Mean Absolute Error: 0.173300277596\n", "Explained Variance Score: 0.888815416717\n", "Mean Squared Error: 0.0490251778494\n", "R2 score: 0.883431428434\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-04-24 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 4.6967 \n", "1985-04-25 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 \n", "1985-04-26 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 \n", "1985-04-27 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 \n", "1985-04-28 4.21578 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1985-04-24 4.72376 4.6967 4.72376 4.74874 4.50204 \n", "1985-04-25 4.6967 4.72376 4.6967 4.74874 4.44999 \n", "1985-04-26 4.71023 4.6967 4.72376 4.73625 4.35943 \n", "1985-04-27 4.6842 4.71023 4.6967 4.72376 4.26783 \n", "1985-04-28 4.6842 4.6842 4.71023 4.72376 4.21578 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64\n", "Mean Absolute Error: 0.119108631048\n", "Explained Variance Score: 0.711899830922\n", "Mean Squared Error: 0.0289413179188\n", "R2 score: 0.708651146753\n", "Buffer: 2100\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-28 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 6.23485 \n", "1988-01-29 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 \n", "1988-01-30 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 \n", "1988-01-31 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 \n", "1988-02-01 6.3015 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1988-01-28 6.31547 6.34235 6.2757 6.34235 5.93923 \n", "1988-01-29 6.23485 6.31547 6.34235 6.34235 5.93923 \n", "1988-01-30 6.1682 6.23485 6.31547 6.32945 5.93923 \n", "1988-01-31 6.11445 6.1682 6.23485 6.35525 5.93923 \n", "1988-02-01 6.10048 6.11445 6.1682 6.3961 5.93923 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64\n", "Mean Absolute Error: 0.0952769269966\n", "Explained Variance Score: 0.871507295966\n", "Mean Squared Error: 0.0159940255259\n", "R2 score: 0.870509426232\n", "Buffer: 2800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-11-07 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 6.98862 \n", "1990-11-08 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 \n", "1990-11-09 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 \n", "1990-11-10 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 \n", "1990-11-11 6.98862 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1990-11-07 6.91929 7.01658 6.86338 7.22567 6.80748 \n", "1990-11-08 6.98862 6.91929 7.01658 7.22567 6.80748 \n", "1990-11-09 7.21226 6.98862 6.91929 7.22567 6.80748 \n", "1990-11-10 7.08702 7.21226 6.98862 7.22567 6.80748 \n", "1990-11-11 6.98862 7.08702 7.21226 7.22567 6.80748 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64\n", "Mean Absolute Error: 0.144183713669\n", "Explained Variance Score: 0.723639903735\n", "Mean Squared Error: 0.0348028136176\n", "R2 score: 0.713646708273\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-11 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-12 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "1993-08-13 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 \n", "1993-08-14 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 \n", "1993-08-15 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1993-08-11 9.36866 9.29831 9.29831 9.3998 9.00997 \n", "1993-08-12 9.21296 9.36866 9.29831 9.47131 9.00997 \n", "1993-08-13 9.11146 9.21296 9.36866 9.70198 9.00997 \n", "1993-08-14 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-15 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64\n", "Mean Absolute Error: 0.175887097751\n", "Explained Variance Score: 0.887963498445\n", "Mean Squared Error: 0.0551035235759\n", "R2 score: 0.867615685704\n", "Buffer: 4200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1996-05-18 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 19.2888 \n", "1996-05-19 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 \n", "1996-05-20 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 \n", "1996-05-21 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 \n", "1996-05-22 20.0734 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1996-05-18 19.4235 19.6291 19.6008 19.7473 18.8327 \n", "1996-05-19 19.2888 19.4235 19.6291 19.9553 18.8327 \n", "1996-05-20 18.8776 19.2888 19.4235 20.3381 18.8327 \n", "1996-05-21 19.0691 18.8776 19.2888 20.6193 18.8327 \n", "1996-05-22 19.5252 19.0691 18.8776 20.6193 18.8327 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64\n", "Mean Absolute Error: 0.338537070406\n", "Explained Variance Score: 0.880567104974\n", "Mean Squared Error: 0.199301427398\n", "R2 score: 0.878296105939\n", "Buffer: 4900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-02-25 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 25.869 \n", "1999-02-26 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 \n", "1999-02-27 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 \n", "1999-02-28 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 \n", "1999-03-01 27.0567 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1999-02-25 25.6215 25.468 25.3739 27.384 24.8145 \n", "1999-02-26 25.869 25.6215 25.468 27.384 25.1907 \n", "1999-02-27 26.8889 25.869 25.6215 27.384 25.3096 \n", "1999-02-28 27.29 26.8889 25.869 27.384 25.4383 \n", "1999-03-01 26.3344 27.29 26.8889 27.384 26.0522 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64\n", "Mean Absolute Error: 0.79987099583\n", "Explained Variance Score: 0.713699257351\n", "Mean Squared Error: 1.14286865075\n", "R2 score: 0.709731902283\n", "Buffer: 5600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-12-05 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 20.6785 \n", "2001-12-06 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 \n", "2001-12-07 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 \n", "2001-12-08 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 \n", "2001-12-09 21.2375 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2001-12-05 20.6677 20.8934 20.7161 21.5437 20.4119 \n", "2001-12-06 20.6785 20.6677 20.8934 21.5437 20.4119 \n", "2001-12-07 21.4792 20.6785 20.6677 21.5437 20.4119 \n", "2001-12-08 21.3878 21.4792 20.6785 21.5437 20.4119 \n", "2001-12-09 21.2803 21.3878 21.4792 21.5437 20.4119 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64\n", "Mean Absolute Error: 0.841030573229\n", "Explained Variance Score: 0.823346393459\n", "Mean Squared Error: 1.23605771115\n", "R2 score: 0.721970087336\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2004-09-17 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 39.3459 \n", "2004-09-18 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 \n", "2004-09-19 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 \n", "2004-09-20 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 \n", "2004-09-21 39.8887 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2004-09-17 39.4294 40.4553 40.4672 41.3022 39.0358 \n", "2004-09-18 39.3459 39.4294 40.4553 41.3022 39.0358 \n", "2004-09-19 39.2684 39.3459 39.4294 41.3022 39.0358 \n", "2004-09-20 40.4374 39.2684 39.3459 41.3022 39.0358 \n", "2004-09-21 40.6223 40.4374 39.2684 41.3022 39.0358 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64\n", "Mean Absolute Error: 0.728558429454\n", "Explained Variance Score: 0.795888858571\n", "Mean Squared Error: 0.927322469233\n", "R2 score: 0.79156569031\n", "Errors: [Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64, Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64, Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64, Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64, Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64, Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64, Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64, Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64, Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64, Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64]\n", "Daily error: [[2.3633119350196083, 2.3656668815405815, 1.8068967673168335, 1.1618527298758623, 1.2445199687301822, 1.3663233859342694, 1.2306040140332253, 2.0991032810897887, 2.4324477531714686, 1.2507503445957771], [3.5547442825053919, 3.481529290249135, 2.5856310121744528, 1.6496590138637148, 1.809132425557288, 1.9964030368392935, 1.8720955368221319, 3.1280968433143097, 3.5227538429212828, 1.8321069037719084], [4.4479717498041955, 4.3049728599220547, 3.1680784232346348, 1.9720295214110184, 2.1910410000791423, 2.5121823913989516, 2.3170550743329108, 3.8585169441853613, 4.3728666842384767, 2.2386315167496664], [5.2227419733682234, 4.7215794009499099, 3.4891579548518452, 2.2414627141040615, 2.5055902203003813, 2.90970213520768, 2.6274277931002956, 4.376862471759261, 5.1061285474682583, 2.5932743630842392], [5.8260923948398808, 5.0598325984063965, 3.8226976530484578, 2.4088856925610633, 2.7730862599144057, 3.2157984690632953, 2.9342447416299611, 4.7079859138129168, 5.7969965267876038, 2.8488069806603251], [6.4375575079233638, 5.3681318110243605, 4.1111391646782698, 2.5862495537524421, 2.9855585838487566, 3.482818119821625, 3.2730794532705025, 4.9961485085103687, 6.418081003261106, 3.0338810314181326], [6.9698629698470569, 5.6450129168027123, 4.3105607363275551, 2.6921943572726881, 3.1522043963508404, 3.7153490809861225, 3.4874417668039328, 5.3341041131784843, 6.9664616392606362, 3.1588584581960775]]\n", "Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Considering more than 7 days' worth of prior data\n", "# 10 days' worth of prior data\n", "execute(steps=10, days=10, buffer_step = 700)\n", "\n", "# Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "1979-10-14 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 \n", "1979-10-15 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 \n", "1979-10-16 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 \n", "1979-10-17 7.20847 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1979-10-13 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-14 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-15 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-16 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-17 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-13 8.36703 7.28654 \n", "1979-10-14 8.36703 7.28654 \n", "1979-10-15 8.36703 7.39063 \n", "1979-10-16 8.36703 7.18245 \n", "1979-10-17 8.36703 6.92221 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64\n", "Mean Absolute Error: 0.248776074705\n", "Explained Variance Score: 0.932287153948\n", "Mean Squared Error: 0.131935951513\n", "R2 score: 0.931564117202\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-07 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 3.87748 \n", "1981-10-08 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 \n", "1981-10-09 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 \n", "1981-10-10 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 \n", "1981-10-11 3.72134 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1981-10-07 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 3.44757 \n", "1981-10-08 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 \n", "1981-10-09 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 \n", "1981-10-10 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 \n", "1981-10-11 3.64327 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 \n", "\n", " Adj. High Adj. Low \n", "1981-10-07 4.0076 3.3185 \n", "1981-10-08 4.0076 3.3185 \n", "1981-10-09 4.0076 3.3185 \n", "1981-10-10 4.0076 3.48713 \n", "1981-10-11 4.0076 3.53918 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64\n", "Mean Absolute Error: 0.139681061468\n", "Explained Variance Score: 0.695779905092\n", "Mean Squared Error: 0.0337119645641\n", "R2 score: 0.685613674393\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-30 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 4.39795 \n", "1983-10-01 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 \n", "1983-10-02 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 \n", "1983-10-03 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 \n", "1983-10-04 4.35943 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1983-09-30 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-10-01 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-10-02 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-10-03 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-10-04 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-30 4.60613 4.3459 \n", "1983-10-01 4.60613 4.3459 \n", "1983-10-02 4.56762 4.26783 \n", "1983-10-03 4.56762 4.26783 \n", "1983-10-04 4.56762 4.26783 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64\n", "Mean Absolute Error: 0.0983383277787\n", "Explained Variance Score: 0.673001905538\n", "Mean Squared Error: 0.0159582555222\n", "R2 score: 0.663777302829\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-09-20 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 5.14013 \n", "1985-09-21 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 \n", "1985-09-22 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 \n", "1985-09-23 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 \n", "1985-09-24 5.11307 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1985-09-20 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 5.20467 \n", "1985-09-21 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 \n", "1985-09-22 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 \n", "1985-09-23 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 \n", "1985-09-24 5.14013 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 \n", "\n", " Adj. High Adj. Low \n", "1985-09-20 5.26921 4.89239 \n", "1985-09-21 5.26921 4.89239 \n", "1985-09-22 5.26921 4.89239 \n", "1985-09-23 5.26921 4.90488 \n", "1985-09-24 5.26921 4.91841 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64\n", "Mean Absolute Error: 0.122285822087\n", "Explained Variance Score: 0.532878366341\n", "Mean Squared Error: 0.025722263709\n", "R2 score: 0.528611373486\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-10 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 5.67454 \n", "1987-09-11 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 \n", "1987-09-12 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 \n", "1987-09-13 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 \n", "1987-09-14 5.78111 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1987-09-10 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-11 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-12 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-13 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-14 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-10 5.84824 5.62126 \n", "1987-09-11 5.84824 5.62126 \n", "1987-09-12 5.84824 5.62126 \n", "1987-09-13 5.84824 5.62126 \n", "1987-09-14 5.84824 5.62126 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64\n", "Mean Absolute Error: 0.107345237581\n", "Explained Variance Score: 0.872175783957\n", "Mean Squared Error: 0.0226157683537\n", "R2 score: 0.872187834621\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-02 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 8.62105 \n", "1989-09-03 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 \n", "1989-09-04 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 \n", "1989-09-05 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 \n", "1989-09-06 8.74405 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1989-09-02 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 8.56614 \n", "1989-09-03 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 \n", "1989-09-04 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 \n", "1989-09-05 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 \n", "1989-09-06 8.57932 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 \n", "\n", " Adj. High Adj. Low \n", "1989-09-02 8.78578 8.35967 \n", "1989-09-03 8.78578 8.35967 \n", "1989-09-04 8.78578 8.35967 \n", "1989-09-05 8.78578 8.35967 \n", "1989-09-06 8.78578 8.35967 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64\n", "Mean Absolute Error: 0.182993141917\n", "Explained Variance Score: 0.923373254714\n", "Mean Squared Error: 0.0633763394031\n", "R2 score: 0.913263877343\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-27 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 5.01791 \n", "1991-08-28 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 \n", "1991-08-29 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 \n", "1991-08-30 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 \n", "1991-08-31 4.97595 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1991-08-27 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-28 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-29 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-30 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-31 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-27 5.27306 4.69245 \n", "1991-08-28 5.24471 4.69245 \n", "1991-08-29 5.24471 4.69245 \n", "1991-08-30 5.15966 4.69245 \n", "1991-08-31 5.14605 4.69245 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64\n", "Mean Absolute Error: 0.196205423468\n", "Explained Variance Score: 0.867530206283\n", "Mean Squared Error: 0.0757048791729\n", "R2 score: 0.806951047925\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-18 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "1993-08-19 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 \n", "1993-08-20 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 \n", "1993-08-21 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 \n", "1993-08-22 9.34213 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1993-08-18 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 9.29831 \n", "1993-08-19 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 \n", "1993-08-20 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 \n", "1993-08-21 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-22 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "\n", " Adj. High Adj. Low \n", "1993-08-18 9.83231 9.00997 \n", "1993-08-19 9.83231 9.00997 \n", "1993-08-20 9.83231 9.00997 \n", "1993-08-21 9.83231 9.00997 \n", "1993-08-22 9.83231 9.00997 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64\n", "Mean Absolute Error: 0.174147642649\n", "Explained Variance Score: 0.892678602856\n", "Mean Squared Error: 0.0544705960063\n", "R2 score: 0.872851342431\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-09 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 15.3418 \n", "1995-08-10 15.005 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 \n", "1995-08-11 15.0778 15.005 15.2984 15.5612 15.4004 15.357 15.2538 \n", "1995-08-12 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 15.357 \n", "1995-08-13 15.1071 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1995-08-09 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-08-10 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-08-11 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-12 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-13 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-08-09 15.5612 14.9311 \n", "1995-08-10 15.5612 14.9463 \n", "1995-08-11 15.5612 14.9463 \n", "1995-08-12 15.5612 14.9463 \n", "1995-08-13 15.5612 14.9463 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64\n", "Mean Absolute Error: 0.214711322421\n", "Explained Variance Score: 0.942826192476\n", "Mean Squared Error: 0.0808523509562\n", "R2 score: 0.937817635223\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-07-31 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 20.5119 \n", "1997-08-01 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 \n", "1997-08-02 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 \n", "1997-08-03 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 \n", "1997-08-04 19.7879 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1997-07-31 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 22.0346 \n", "1997-08-01 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 \n", "1997-08-02 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 \n", "1997-08-03 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 \n", "1997-08-04 20.9197 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 \n", "\n", " Adj. High Adj. Low \n", "1997-07-31 22.1407 20.1788 \n", "1997-08-01 22.1407 19.8627 \n", "1997-08-02 21.5061 19.8627 \n", "1997-08-03 21.4771 19.8482 \n", "1997-08-04 21.4771 19.6528 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64\n", "Mean Absolute Error: 0.575956001159\n", "Explained Variance Score: 0.632401065134\n", "Mean Squared Error: 0.536694556461\n", "R2 score: 0.635433823871\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-23 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 26.9688 \n", "1999-07-24 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 \n", "1999-07-25 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 \n", "1999-07-26 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 \n", "1999-07-27 27.47 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1999-07-23 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-24 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-25 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-26 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-27 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-23 27.3146 25.811 \n", "1999-07-24 28.1917 25.811 \n", "1999-07-25 28.7229 25.811 \n", "1999-07-26 28.7229 25.9664 \n", "1999-07-27 28.7229 25.9664 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64\n", "Mean Absolute Error: 0.834586135448\n", "Explained Variance Score: 0.552372347128\n", "Mean Squared Error: 1.19797116115\n", "R2 score: 0.541753682113\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-17 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 21.771 \n", "2001-07-18 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 \n", "2001-07-19 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 \n", "2001-07-20 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 \n", "2001-07-21 21.9624 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2001-07-17 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 21.7337 \n", "2001-07-18 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 \n", "2001-07-19 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 \n", "2001-07-20 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 \n", "2001-07-21 21.0584 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 \n", "\n", " Adj. High Adj. Low \n", "2001-07-17 22.6378 19.9417 \n", "2001-07-18 22.6378 19.9417 \n", "2001-07-19 22.6378 19.9417 \n", "2001-07-20 22.6378 19.9417 \n", "2001-07-21 22.6378 19.9417 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64\n", "Mean Absolute Error: 0.676312438719\n", "Explained Variance Score: 0.79312466119\n", "Mean Squared Error: 0.850174654841\n", "R2 score: 0.78753038764\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-10 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 33.5442 \n", "2003-07-11 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 \n", "2003-07-12 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 \n", "2003-07-13 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 \n", "2003-07-14 33.6131 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2003-07-10 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-11 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-12 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-13 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-14 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-10 34.3357 32.0187 \n", "2003-07-11 34.3357 32.5005 \n", "2003-07-12 34.3357 32.7585 \n", "2003-07-13 34.3357 32.7585 \n", "2003-07-14 34.3357 32.7585 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64\n", "Mean Absolute Error: 0.633855324068\n", "Explained Variance Score: 0.893339521738\n", "Mean Squared Error: 0.718058387086\n", "R2 score: 0.80969350896\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-09 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 40.2947 \n", "2005-07-10 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 \n", "2005-07-11 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 \n", "2005-07-12 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 \n", "2005-07-13 39.5982 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2005-07-09 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 39.867 \n", "2005-07-10 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 \n", "2005-07-11 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 \n", "2005-07-12 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 \n", "2005-07-13 39.7571 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 \n", "\n", " Adj. High Adj. Low \n", "2005-07-09 40.8933 38.9812 \n", "2005-07-10 40.8933 38.9812 \n", "2005-07-11 40.8933 38.8041 \n", "2005-07-12 40.6123 38.8041 \n", "2005-07-13 40.6123 38.8041 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64\n", "Mean Absolute Error: 0.813134820175\n", "Explained Variance Score: 0.629454488747\n", "Mean Squared Error: 1.11504616982\n", "R2 score: 0.634165070736\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-06 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 34.1229 \n", "2007-07-07 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 \n", "2007-07-08 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 \n", "2007-07-09 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 \n", "2007-07-10 33.2667 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2007-07-06 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-07-07 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-07-08 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-07-09 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-10 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-07-06 37.6275 32.8884 \n", "2007-07-07 37.6275 32.8884 \n", "2007-07-08 37.6275 32.0919 \n", "2007-07-09 37.6275 32.0919 \n", "2007-07-10 37.6275 32.0919 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64\n", "Mean Absolute Error: 1.15665536203\n", "Explained Variance Score: 0.868995317818\n", "Mean Squared Error: 2.51929559765\n", "R2 score: 0.848349836178\n", "Errors: [Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64, Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64, Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64, Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64, Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64, Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64, Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64, Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64, Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64, Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64, Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64, Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64, Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64, Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64, Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64]\n", "Daily error: [[2.3428046878594335, 2.5494465554647414, 1.3954581010084075, 1.9338110474345769, 1.349031388428084, 1.3082501119097614, 2.0877971918382312, 1.362629656063173, 1.0672541331288881, 1.7560891545451207, 2.2842628093726178, 2.0416633481835507, 1.1975233764939945, 1.2541140107194724, 1.9979717114798277], [3.5258552334178641, 3.7320533743630255, 2.1034184642616141, 2.6897205756015548, 1.8969039843105724, 2.0506153412586832, 3.2171984334944406, 1.9827940259871397, 1.5688995987559236, 2.6367635568182766, 3.3068351824563802, 2.8945074594428291, 1.8249088288131119, 1.7898187399932406, 2.6622184489674865], [4.420877989036649, 4.7032147476522344, 2.5136196508353961, 3.0922152789031143, 2.1796658505265682, 2.6304796746940839, 4.1915655602523731, 2.4924344110851404, 1.9105828050113176, 3.2464940581864847, 4.0444675805083419, 3.4573108599535782, 2.2800119253617375, 2.1330178906407928, 3.2434631632331032], [5.2453007591988934, 5.3658643734648832, 2.7831224905377154, 3.416748711154967, 2.5549049030530955, 3.0746731020488789, 4.9524019488849751, 2.8907889072630373, 2.1787553036935075, 3.7318496940231114, 4.5205370675953178, 3.9785266649335007, 2.6882642728569226, 2.5139768692486597, 3.8987847995297504], [5.9123764917439461, 5.9343992865756627, 2.9779283268835495, 3.749884830258206, 2.8424480771173175, 3.4493099318044464, 5.6296725435585397, 3.1974315805691531, 2.4205889442104498, 4.1528377889957317, 4.8491578280113066, 4.4437933328538719, 3.0871274223490661, 2.8212984449238308, 4.5627499655632802], [6.5253540389538474, 6.411869704769062, 3.1595872490659578, 3.9820786600745923, 3.0589602014064852, 3.6925343353850728, 6.2161677524830603, 3.4512842358405149, 2.6052006922636068, 4.4255891500298041, 5.1504375410897554, 4.8667198046540632, 3.4479777609243358, 3.1141175250353417, 5.4764165109956515], [7.0484327153638269, 6.8859112718527289, 3.3214906751109079, 4.1319603443044786, 3.2919049518842676, 3.8961844607912113, 6.645652227769677, 3.680437333538447, 2.7931310314182922, 4.6362674911036841, 5.5220713093967051, 5.2196422824700353, 3.7666650074113814, 3.3699869165228575, 6.3198328863514632]]\n", "Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 14 days' worth of prior data\n", "execute(steps=15, days=14, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-24 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 7.49473 \n", "1979-10-25 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 \n", "1979-10-26 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 \n", "1979-10-27 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 \n", "1979-10-28 7.39063 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1979-10-24 7.63838 7.58633 7.72894 ... 8.14531 8.22338 7.9111 \n", "1979-10-25 7.49473 7.63838 7.58633 ... 8.0027 8.14531 8.22338 \n", "1979-10-26 7.4687 7.49473 7.63838 ... 7.78098 8.0027 8.14531 \n", "1979-10-27 7.20847 7.4687 7.49473 ... 7.79452 7.78098 8.0027 \n", "1979-10-28 7.20847 7.20847 7.4687 ... 7.72894 7.79452 7.78098 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1979-10-24 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-10-25 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-10-26 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-10-27 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-10-28 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.47982 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64\n", "Mean Absolute Error: 0.247178558128\n", "Explained Variance Score: 0.934716071877\n", "Mean Squared Error: 0.125104935048\n", "R2 score: 0.934194798936\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-16 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 3.63078 \n", "1981-10-17 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 \n", "1981-10-18 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 \n", "1981-10-19 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 \n", "1981-10-20 4.15125 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1981-10-16 3.60371 3.59122 3.68283 ... 3.87748 3.95555 3.85146 \n", "1981-10-17 3.63078 3.60371 3.59122 ... 3.66929 3.87748 3.95555 \n", "1981-10-18 3.70781 3.63078 3.60371 ... 3.66929 3.66929 3.87748 \n", "1981-10-19 3.72134 3.70781 3.63078 ... 3.64327 3.66929 3.66929 \n", "1981-10-20 3.72134 3.72134 3.70781 ... 3.68283 3.64327 3.66929 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1981-10-16 3.69532 3.53918 3.47464 3.39553 3.44757 4.0076 3.3185 \n", "1981-10-17 3.85146 3.69532 3.53918 3.47464 3.39553 4.0076 3.3185 \n", "1981-10-18 3.95555 3.85146 3.69532 3.53918 3.47464 4.0076 3.3185 \n", "1981-10-19 3.87748 3.95555 3.85146 3.69532 3.53918 4.07213 3.48713 \n", "1981-10-20 3.66929 3.87748 3.95555 3.85146 3.69532 4.20329 3.53918 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64\n", "Mean Absolute Error: 0.14560789487\n", "Explained Variance Score: 0.697986240547\n", "Mean Squared Error: 0.0357285529497\n", "R2 score: 0.693931872833\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-11 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 4.38441 \n", "1983-10-12 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 \n", "1983-10-13 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 \n", "1983-10-14 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 \n", "1983-10-15 4.28032 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1983-10-11 4.44999 4.51557 4.55409 ... 4.39795 4.42397 4.37192 \n", "1983-10-12 4.38441 4.44999 4.51557 ... 4.44999 4.39795 4.42397 \n", "1983-10-13 4.29385 4.38441 4.44999 ... 4.37192 4.44999 4.39795 \n", "1983-10-14 4.3459 4.29385 4.38441 ... 4.47602 4.37192 4.44999 \n", "1983-10-15 4.35943 4.3459 4.29385 ... 4.55409 4.47602 4.37192 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1983-10-11 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.21578 \n", "1983-10-12 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.18976 \n", "1983-10-13 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.18976 \n", "1983-10-14 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.18976 \n", "1983-10-15 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.18976 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64\n", "Mean Absolute Error: 0.100467856093\n", "Explained Variance Score: 0.707746188515\n", "Mean Squared Error: 0.0166816164165\n", "R2 score: 0.690365934271\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-01 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 5.03604 \n", "1985-10-02 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 \n", "1985-10-03 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 \n", "1985-10-04 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 \n", "1985-10-05 5.15262 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1985-10-01 5.10058 5.23069 5.25672 ... 5.14013 5.16512 5.15262 \n", "1985-10-02 5.03604 5.10058 5.23069 ... 5.08809 5.14013 5.16512 \n", "1985-10-03 4.99648 5.03604 5.10058 ... 5.17865 5.08809 5.14013 \n", "1985-10-04 4.95693 4.99648 5.03604 ... 5.14013 5.17865 5.08809 \n", "1985-10-05 5.11307 4.95693 4.99648 ... 5.25672 5.14013 5.17865 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1985-10-01 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-02 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-03 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-04 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-05 5.08809 5.14013 5.16512 5.15262 4.98399 5.26921 4.91841 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64\n", "Mean Absolute Error: 0.118704995917\n", "Explained Variance Score: 0.599720926078\n", "Mean Squared Error: 0.0233000629812\n", "R2 score: 0.596620827484\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-22 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 5.79496 \n", "1987-09-23 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 \n", "1987-09-24 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 \n", "1987-09-25 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 \n", "1987-09-26 5.90152 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1987-09-22 5.84824 5.79496 5.70118 ... 5.67454 5.72782 5.70118 \n", "1987-09-23 5.79496 5.84824 5.79496 ... 5.74168 5.67454 5.72782 \n", "1987-09-24 5.76725 5.79496 5.84824 ... 5.72782 5.74168 5.67454 \n", "1987-09-25 5.79496 5.76725 5.79496 ... 5.6479 5.72782 5.74168 \n", "1987-09-26 5.78111 5.79496 5.76725 ... 5.70118 5.6479 5.72782 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1987-09-22 5.66069 5.79496 5.72782 5.71397 5.6479 5.86103 5.62126 \n", "1987-09-23 5.70118 5.66069 5.79496 5.72782 5.71397 5.86103 5.62126 \n", "1987-09-24 5.72782 5.70118 5.66069 5.79496 5.72782 5.86103 5.62126 \n", "1987-09-25 5.67454 5.72782 5.70118 5.66069 5.79496 5.86103 5.62126 \n", "1987-09-26 5.74168 5.67454 5.72782 5.70118 5.66069 5.90152 5.62126 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64\n", "Mean Absolute Error: 0.107246850816\n", "Explained Variance Score: 0.873418919146\n", "Mean Squared Error: 0.0223804852513\n", "R2 score: 0.873053045647\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-13 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 8.51123 \n", "1989-09-14 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 \n", "1989-09-15 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 \n", "1989-09-16 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 \n", "1989-09-17 8.66302 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1989-09-13 8.38823 8.38823 8.4695 ... 8.62105 8.71769 8.73087 \n", "1989-09-14 8.51123 8.38823 8.38823 ... 8.71769 8.62105 8.71769 \n", "1989-09-15 8.52441 8.51123 8.38823 ... 8.64851 8.71769 8.62105 \n", "1989-09-16 8.62105 8.52441 8.51123 ... 8.57932 8.64851 8.71769 \n", "1989-09-17 8.74405 8.62105 8.52441 ... 8.4695 8.57932 8.64851 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1989-09-13 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.35967 \n", "1989-09-14 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.35967 \n", "1989-09-15 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.35967 \n", "1989-09-16 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.35967 \n", "1989-09-17 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.35967 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64\n", "Mean Absolute Error: 0.183367476501\n", "Explained Variance Score: 0.923191778806\n", "Mean Squared Error: 0.062951655998\n", "R2 score: 0.914995737201\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-05 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 4.96121 \n", "1991-09-06 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 \n", "1991-09-07 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 \n", "1991-09-08 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 \n", "1991-09-09 4.86252 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1991-09-05 4.83307 4.79111 4.80585 ... 5.01791 5.03265 5.11657 \n", "1991-09-06 4.96121 4.83307 4.79111 ... 4.96121 5.01791 5.03265 \n", "1991-09-07 4.97595 4.96121 4.83307 ... 4.90451 4.96121 5.01791 \n", "1991-09-08 5.01791 4.97595 4.96121 ... 4.69245 4.90451 4.96121 \n", "1991-09-09 4.97595 5.01791 4.97595 ... 4.80585 4.69245 4.90451 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1991-09-05 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-06 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-07 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-08 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-09 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64\n", "Mean Absolute Error: 0.179845135179\n", "Explained Variance Score: 0.878379857563\n", "Mean Squared Error: 0.0637005335646\n", "R2 score: 0.832463137105\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-27 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 9.52898 \n", "1993-08-28 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 \n", "1993-08-29 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 \n", "1993-08-30 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 \n", "1993-08-31 9.35597 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1993-08-27 9.5728 9.77464 9.6743 ... 9.21296 9.2268 9.08263 \n", "1993-08-28 9.52898 9.5728 9.77464 ... 9.3133 9.21296 9.2268 \n", "1993-08-29 9.58664 9.52898 9.5728 ... 9.32829 9.3133 9.21296 \n", "1993-08-30 9.3998 9.58664 9.52898 ... 9.45747 9.32829 9.3133 \n", "1993-08-31 9.34213 9.3998 9.58664 ... 9.6743 9.45747 9.32829 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1993-08-27 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 9.00997 \n", "1993-08-28 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 9.00997 \n", "1993-08-29 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 9.00997 \n", "1993-08-30 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-31 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64\n", "Mean Absolute Error: 0.173480085165\n", "Explained Variance Score: 0.889783953988\n", "Mean Squared Error: 0.0542550164358\n", "R2 score: 0.87630032975\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-19 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 15.005 \n", "1995-08-20 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 \n", "1995-08-21 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 \n", "1995-08-22 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 \n", "1995-08-23 14.7703 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1995-08-19 15.2984 15.5612 15.4004 ... 15.3418 15.4298 15.4298 \n", "1995-08-20 15.005 15.2984 15.5612 ... 15.1071 15.3418 15.4298 \n", "1995-08-21 15.0778 15.005 15.2984 ... 15.2538 15.1071 15.3418 \n", "1995-08-22 15.1071 15.0778 15.005 ... 15.357 15.2538 15.1071 \n", "1995-08-23 15.1071 15.1071 15.0778 ... 15.4004 15.357 15.2538 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1995-08-19 15.1364 15.1071 15.3124 15.4298 15.2397 15.5612 14.6812 \n", "1995-08-20 15.4298 15.1364 15.1071 15.3124 15.4298 15.5612 14.6812 \n", "1995-08-21 15.4298 15.4298 15.1364 15.1071 15.3124 15.5612 14.6812 \n", "1995-08-22 15.3418 15.4298 15.4298 15.1364 15.1071 15.5612 14.6671 \n", "1995-08-23 15.1071 15.3418 15.4298 15.4298 15.1364 15.5612 14.6378 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64\n", "Mean Absolute Error: 0.21969484392\n", "Explained Variance Score: 0.941053178728\n", "Mean Squared Error: 0.0874448127494\n", "R2 score: 0.934717418017\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-09 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 20.0003 \n", "1997-08-10 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 \n", "1997-08-11 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 \n", "1997-08-12 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 \n", "1997-08-13 21.523 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1997-08-09 20.9486 21.4313 21.4023 ... 20.5119 20.9197 21.2069 \n", "1997-08-10 20.0003 20.9486 21.4313 ... 20.6036 20.5119 20.9197 \n", "1997-08-11 20.1788 20.0003 20.9486 ... 20.6928 20.6036 20.5119 \n", "1997-08-12 19.9689 20.1788 20.0003 ... 20.9197 20.6928 20.6036 \n", "1997-08-13 19.7879 19.9689 20.1788 ... 21.4023 20.9197 20.6928 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1997-08-09 20.8883 21.2358 20.7387 21.0403 22.0346 22.1407 19.6528 \n", "1997-08-10 21.2069 20.8883 21.2358 20.7387 21.0403 22.1407 19.6528 \n", "1997-08-11 20.9197 21.2069 20.8883 21.2358 20.7387 21.6267 19.6528 \n", "1997-08-12 20.5119 20.9197 21.2069 20.8883 21.2358 21.6267 19.6528 \n", "1997-08-13 20.6036 20.5119 20.9197 21.2069 20.8883 21.6267 19.6528 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64\n", "Mean Absolute Error: 0.587602123323\n", "Explained Variance Score: 0.597673117636\n", "Mean Squared Error: 0.562295173611\n", "R2 score: 0.599602671043\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-03 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 27.6253 \n", "1999-08-04 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 \n", "1999-08-05 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 \n", "1999-08-06 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 \n", "1999-08-07 26.0316 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1999-08-03 27.1893 26.8435 26.623 ... 26.9688 26.5628 26.1569 \n", "1999-08-04 27.6253 27.1893 26.8435 ... 26.7533 26.9688 26.5628 \n", "1999-08-05 28.4122 27.6253 27.1893 ... 26.5027 26.7533 26.9688 \n", "1999-08-06 27.3447 28.4122 27.6253 ... 26.3423 26.5027 26.7533 \n", "1999-08-07 27.47 27.3447 28.4122 ... 26.623 26.3423 26.5027 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1999-08-03 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 25.811 \n", "1999-08-04 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 25.811 \n", "1999-08-05 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 25.811 \n", "1999-08-06 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 25.9664 \n", "1999-08-07 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 25.9363 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64\n", "Mean Absolute Error: 0.80841683447\n", "Explained Variance Score: 0.55978076116\n", "Mean Squared Error: 1.12748077923\n", "R2 score: 0.551337857615\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-26 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 21.2871 \n", "2001-07-27 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 \n", "2001-07-28 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 \n", "2001-07-29 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 \n", "2001-07-30 21.3349 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2001-07-26 20.7074 19.9948 20.633 ... 21.771 22.2762 21.2179 \n", "2001-07-27 21.2871 20.7074 19.9948 ... 21.4998 21.771 22.2762 \n", "2001-07-28 21.2339 21.2871 20.7074 ... 21.1701 21.4998 21.771 \n", "2001-07-29 22.2708 21.2339 21.2871 ... 21.0584 21.1701 21.4998 \n", "2001-07-30 21.9624 22.2708 21.2339 ... 20.633 21.0584 21.1701 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2001-07-26 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.9417 \n", "2001-07-27 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.9417 \n", "2001-07-28 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.9417 \n", "2001-07-29 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.9417 \n", "2001-07-30 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.9417 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64\n", "Mean Absolute Error: 0.702921222006\n", "Explained Variance Score: 0.80646285415\n", "Mean Squared Error: 0.898869096996\n", "R2 score: 0.800649358483\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-19 33.831 33.5959 33.2632 33.6131 34.0719 34.112 33.9686 \n", "2003-07-20 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 34.112 \n", "2003-07-21 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 \n", "2003-07-22 33.917 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 \n", "2003-07-23 33.8826 33.917 33.4926 33.5729 33.831 33.5959 33.2632 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2003-07-19 34.1522 33.5959 33.0052 ... 33.5442 33.1944 33.0052 \n", "2003-07-20 33.9686 34.1522 33.5959 ... 32.8962 33.5442 33.1944 \n", "2003-07-21 34.112 33.9686 34.1522 ... 32.9937 32.8962 33.5442 \n", "2003-07-22 34.0719 34.112 33.9686 ... 33.3722 32.9937 32.8962 \n", "2003-07-23 33.6131 34.0719 34.112 ... 33.0052 33.3722 32.9937 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2003-07-19 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-07-20 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-07-21 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-07-22 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-07-23 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64\n", "Mean Absolute Error: 0.607302274291\n", "Explained Variance Score: 0.912255975134\n", "Mean Squared Error: 0.641949670141\n", "R2 score: 0.841214975617\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-20 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 39.9404 \n", "2005-07-21 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 \n", "2005-07-22 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 \n", "2005-07-23 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 \n", "2005-07-24 41.2538 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2005-07-20 40.0625 40.1969 40.4413 ... 40.2947 39.7082 39.8304 \n", "2005-07-21 39.9404 40.0625 40.1969 ... 39.8304 40.2947 39.7082 \n", "2005-07-22 38.9263 39.9404 40.0625 ... 39.7449 39.8304 40.2947 \n", "2005-07-23 39.7388 38.9263 39.9404 ... 39.7571 39.7449 39.8304 \n", "2005-07-24 39.5982 39.7388 38.9263 ... 40.4413 39.7571 39.7449 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2005-07-20 40.0442 39.6227 40.2275 40.7162 39.867 40.8933 38.8041 \n", "2005-07-21 39.8304 40.0442 39.6227 40.2275 40.7162 40.8933 38.8041 \n", "2005-07-22 39.7082 39.8304 40.0442 39.6227 40.2275 40.8933 38.8041 \n", "2005-07-23 40.2947 39.7082 39.8304 40.0442 39.6227 40.6123 38.8041 \n", "2005-07-24 39.8304 40.2947 39.7082 39.8304 40.0442 41.3454 38.8041 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64\n", "Mean Absolute Error: 0.834239650358\n", "Explained Variance Score: 0.583600781437\n", "Mean Squared Error: 1.16134570271\n", "R2 score: 0.585510921947\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-17 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 36.2071 \n", "2007-07-18 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 \n", "2007-07-19 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 \n", "2007-07-20 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 \n", "2007-07-21 26.9147 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2007-07-17 36.7314 35.5367 35.9084 ... 34.1229 34.7269 34.4681 \n", "2007-07-18 36.2071 36.7314 35.5367 ... 34.1561 34.1229 34.7269 \n", "2007-07-19 32.6162 36.2071 36.7314 ... 36.2071 34.1561 34.1229 \n", "2007-07-20 33.2999 32.6162 36.2071 ... 36.6119 36.2071 34.1561 \n", "2007-07-21 33.2667 33.2999 32.6162 ... 35.9084 36.6119 36.2071 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2007-07-17 36.3664 35.457 35.5035 34.78 36.1009 37.6275 28.4479 \n", "2007-07-18 34.4681 36.3664 35.457 35.5035 34.78 37.6275 28.4479 \n", "2007-07-19 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 28.3484 \n", "2007-07-20 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 26.5629 \n", "2007-07-21 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64\n", "Mean Absolute Error: 1.2420603359\n", "Explained Variance Score: 0.882276409115\n", "Mean Squared Error: 2.85887227574\n", "R2 score: 0.862561522356\n", "Errors: [Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64, Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64, Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64, Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64, Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64, Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64, Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64, Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64, Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64, Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64, Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64, Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64, Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64, Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64, Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64]\n", "Daily error: [[2.2932086903598066, 2.5745843677223665, 1.410938665851232, 1.8560341967801308, 1.3452118535491773, 1.2953543921120965, 2.0706240035799164, 1.3163805720674671, 1.0787215801674817, 1.7589705465567647, 2.2752138152167474, 2.0880627448808471, 1.1687399396644256, 1.2874672090863213, 2.3679740132036238], [3.5051253714594792, 3.7758939807647049, 2.1101590340760858, 2.5311938217644379, 1.8869590042388795, 2.0136643031598154, 3.0941050306484827, 1.9668400833290185, 1.5852576005774814, 2.6692218359360016, 3.2804625406152712, 3.0511678681477217, 1.7709780411099409, 1.8590066437215769, 3.2260112930119331], [4.3910769731836528, 4.73443172240734, 2.5163581244682867, 2.8921256793047787, 2.1712841603268145, 2.5715803374493698, 3.9478706366382608, 2.5025348594217718, 1.9241814438590694, 3.2905025186776364, 3.9550573049063185, 3.6441654215575263, 2.1770380803647402, 2.2190678049570254, 3.7581852465385679], [5.1361009877654604, 5.4151232904822937, 2.7996492546644527, 3.254525792271338, 2.552883694387567, 3.030218079266386, 4.6195946055962853, 2.8935016311120809, 2.2056247688212975, 3.7878186640966414, 4.3904674266100656, 4.1287784929628275, 2.544219187098574, 2.5895015720185302, 4.440659439319135], [5.7410212232012947, 6.0457890220500268, 3.0383136360900456, 3.5252188012037138, 2.826196220616342, 3.4278249217933108, 5.1806333088289245, 3.2002251370334793, 2.4562804221504946, 4.2112453125333271, 4.6795839169286628, 4.5588302590783849, 2.9100623154365133, 2.8787401524867353, 5.1795549205147617], [6.3168411174496839, 6.565847199104029, 3.2619156971270429, 3.7370190918129889, 3.0182882726444662, 3.7051905637636322, 5.6874360343827588, 3.4407560971972138, 2.6628209714516475, 4.5058494414038934, 4.9211912763832011, 5.0124273285269396, 3.2339526748757406, 3.1592652479164429, 5.8957221091782941], [6.8191565595888122, 7.0508931309669327, 3.4473160422940028, 3.964312202423975, 3.2338778357552651, 3.9255667936052023, 6.0096699233415531, 3.6545134565638175, 2.8840627731649513, 4.7448298869292778, 5.2894102436662802, 5.4030603118359393, 3.5305738678012406, 3.3828891687730129, 6.526988671729911]]\n", "Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 21 days' worth of prior data\n", "execute(steps=15, days=21, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-11-06 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 7.09084 \n", "1979-11-07 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 \n", "1979-11-08 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 \n", "1979-11-09 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 \n", "1979-11-10 6.55789 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1979-11-06 6.83061 6.87017 6.92221 ... 8.14531 8.22338 7.9111 \n", "1979-11-07 7.09084 6.83061 6.87017 ... 8.0027 8.14531 8.22338 \n", "1979-11-08 7.39063 7.09084 6.83061 ... 7.78098 8.0027 8.14531 \n", "1979-11-09 7.39063 7.39063 7.09084 ... 7.79452 7.78098 8.0027 \n", "1979-11-10 7.26052 7.39063 7.39063 ... 7.72894 7.79452 7.78098 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1979-11-06 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-11-07 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-11-08 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-11-09 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-11-10 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.46628 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64\n", "Mean Absolute Error: 0.265589379571\n", "Explained Variance Score: 0.923826112353\n", "Mean Squared Error: 0.137645958828\n", "R2 score: 0.924053762052\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-29 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 4.02009 \n", "1981-10-30 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 \n", "1981-10-31 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 \n", "1981-11-01 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 \n", "1981-11-02 4.16374 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1981-10-29 3.9035 3.65576 3.70781 ... 3.87748 3.95555 3.85146 \n", "1981-10-30 4.02009 3.9035 3.65576 ... 3.66929 3.87748 3.95555 \n", "1981-10-31 4.15125 4.02009 3.9035 ... 3.66929 3.66929 3.87748 \n", "1981-11-01 4.17623 4.15125 4.02009 ... 3.64327 3.66929 3.66929 \n", "1981-11-02 4.26783 4.17623 4.15125 ... 3.68283 3.64327 3.66929 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1981-10-29 3.69532 3.53918 3.47464 3.39553 3.44757 4.30739 3.3185 \n", "1981-10-30 3.85146 3.69532 3.53918 3.47464 3.39553 4.30739 3.3185 \n", "1981-10-31 3.95555 3.85146 3.69532 3.53918 3.47464 4.30739 3.3185 \n", "1981-11-01 3.87748 3.95555 3.85146 3.69532 3.53918 4.30739 3.48713 \n", "1981-11-02 3.66929 3.87748 3.95555 3.85146 3.69532 4.30739 3.53918 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64\n", "Mean Absolute Error: 0.147636752695\n", "Explained Variance Score: 0.723234662854\n", "Mean Squared Error: 0.0364831332012\n", "R2 score: 0.711874870251\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-22 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 4.28032 \n", "1983-10-23 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 \n", "1983-10-24 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 \n", "1983-10-25 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 \n", "1983-10-26 4.31988 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1983-10-22 4.30739 4.25534 4.25534 ... 4.39795 4.42397 4.37192 \n", "1983-10-23 4.28032 4.30739 4.25534 ... 4.44999 4.39795 4.42397 \n", "1983-10-24 4.28032 4.28032 4.30739 ... 4.37192 4.44999 4.39795 \n", "1983-10-25 4.37192 4.28032 4.28032 ... 4.47602 4.37192 4.44999 \n", "1983-10-26 4.37192 4.37192 4.28032 ... 4.55409 4.47602 4.37192 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1983-10-22 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.13771 \n", "1983-10-23 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.13771 \n", "1983-10-24 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.12418 \n", "1983-10-25 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.12418 \n", "1983-10-26 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.12418 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64\n", "Mean Absolute Error: 0.0982455236583\n", "Explained Variance Score: 0.738585897896\n", "Mean Squared Error: 0.0162113557319\n", "R2 score: 0.736956378599\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-12 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 5.04853 \n", "1985-10-13 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 \n", "1985-10-14 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 \n", "1985-10-15 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 \n", "1985-10-16 5.40037 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1985-10-12 4.99648 5.08809 5.15262 ... 5.14013 5.16512 5.15262 \n", "1985-10-13 5.04853 4.99648 5.08809 ... 5.08809 5.14013 5.16512 \n", "1985-10-14 5.15262 5.04853 4.99648 ... 5.17865 5.08809 5.14013 \n", "1985-10-15 5.24423 5.15262 5.04853 ... 5.14013 5.17865 5.08809 \n", "1985-10-16 5.20467 5.24423 5.15262 ... 5.25672 5.14013 5.17865 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1985-10-12 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-13 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-14 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-15 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-16 5.08809 5.14013 5.16512 5.15262 4.98399 5.43888 4.91841 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64\n", "Mean Absolute Error: 0.125644826003\n", "Explained Variance Score: 0.64103714916\n", "Mean Squared Error: 0.0279968462683\n", "R2 score: 0.621838958431\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-10-06 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 5.83439 \n", "1987-10-07 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 \n", "1987-10-08 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 \n", "1987-10-09 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 \n", "1987-10-10 5.71397 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1987-10-06 5.76725 5.76725 5.84824 ... 5.67454 5.72782 5.70118 \n", "1987-10-07 5.83439 5.76725 5.76725 ... 5.74168 5.67454 5.72782 \n", "1987-10-08 5.90152 5.83439 5.76725 ... 5.72782 5.74168 5.67454 \n", "1987-10-09 5.86103 5.90152 5.83439 ... 5.6479 5.72782 5.74168 \n", "1987-10-10 5.98038 5.86103 5.90152 ... 5.70118 5.6479 5.72782 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1987-10-06 5.66069 5.79496 5.72782 5.71397 5.6479 6.07416 5.62126 \n", "1987-10-07 5.70118 5.66069 5.79496 5.72782 5.71397 6.07416 5.62126 \n", "1987-10-08 5.72782 5.70118 5.66069 5.79496 5.72782 6.07416 5.62126 \n", "1987-10-09 5.67454 5.72782 5.70118 5.66069 5.79496 6.07416 5.62126 \n", "1987-10-10 5.74168 5.67454 5.72782 5.70118 5.66069 6.07416 5.62126 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64\n", "Mean Absolute Error: 0.101127508153\n", "Explained Variance Score: 0.896285604892\n", "Mean Squared Error: 0.0175440030481\n", "R2 score: 0.895446126394\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-28 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 8.73244 \n", "1989-09-29 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 \n", "1989-09-30 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 \n", "1989-10-01 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 \n", "1989-10-02 8.29169 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1989-09-28 8.84263 8.81508 8.84263 ... 8.62105 8.71769 8.73087 \n", "1989-09-29 8.73244 8.84263 8.81508 ... 8.71769 8.62105 8.71769 \n", "1989-09-30 8.66302 8.73244 8.84263 ... 8.64851 8.71769 8.62105 \n", "1989-10-01 8.52639 8.66302 8.73244 ... 8.57932 8.64851 8.71769 \n", "1989-10-02 8.44264 8.52639 8.66302 ... 8.4695 8.57932 8.64851 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1989-09-28 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.20904 \n", "1989-09-29 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.1264 \n", "1989-09-30 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.1264 \n", "1989-10-01 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.1264 \n", "1989-10-02 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.1264 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64\n", "Mean Absolute Error: 0.192674964535\n", "Explained Variance Score: 0.915662166478\n", "Mean Squared Error: 0.0693827817393\n", "R2 score: 0.904473158945\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-19 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 4.86252 \n", "1991-09-20 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 \n", "1991-09-21 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 \n", "1991-09-22 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 \n", "1991-09-23 4.96148 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1991-09-19 4.89096 4.91925 4.91925 ... 5.01791 5.03265 5.11657 \n", "1991-09-20 4.86252 4.89096 4.91925 ... 4.96121 5.01791 5.03265 \n", "1991-09-21 4.86252 4.86252 4.89096 ... 4.90451 4.96121 5.01791 \n", "1991-09-22 4.83409 4.86252 4.86252 ... 4.69245 4.90451 4.96121 \n", "1991-09-23 4.83409 4.83409 4.86252 ... 4.80585 4.69245 4.90451 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1991-09-19 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-20 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-21 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-22 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-23 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64\n", "Mean Absolute Error: 0.169117487826\n", "Explained Variance Score: 0.885949963038\n", "Mean Squared Error: 0.0583397959215\n", "R2 score: 0.84902479478\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-09-09 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 9.29831 \n", "1993-09-10 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 \n", "1993-09-11 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 \n", "1993-09-12 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 \n", "1993-09-13 9.17272 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1993-09-09 9.25563 9.24064 9.35597 ... 9.21296 9.2268 9.08263 \n", "1993-09-10 9.29831 9.25563 9.24064 ... 9.3133 9.21296 9.2268 \n", "1993-09-11 9.35597 9.29831 9.25563 ... 9.32829 9.3133 9.21296 \n", "1993-09-12 9.28827 9.35597 9.29831 ... 9.45747 9.32829 9.3133 \n", "1993-09-13 9.17272 9.28827 9.35597 ... 9.6743 9.45747 9.32829 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1993-09-09 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.86881 \n", "1993-09-10 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.86881 \n", "1993-09-11 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.86881 \n", "1993-09-12 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.86881 \n", "1993-09-13 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.86881 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64\n", "Mean Absolute Error: 0.173953716023\n", "Explained Variance Score: 0.882699120583\n", "Mean Squared Error: 0.055246949342\n", "R2 score: 0.868280591863\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-09-01 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 14.7844 \n", "1995-09-02 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 \n", "1995-09-03 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 \n", "1995-09-04 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 \n", "1995-09-05 16.2301 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1995-09-01 14.7551 14.7551 14.7551 ... 15.3418 15.4298 15.4298 \n", "1995-09-02 14.7844 14.7551 14.7551 ... 15.1071 15.3418 15.4298 \n", "1995-09-03 14.7703 14.7844 14.7551 ... 15.2538 15.1071 15.3418 \n", "1995-09-04 15.005 14.7703 14.7844 ... 15.357 15.2538 15.1071 \n", "1995-09-05 15.3265 15.005 14.7703 ... 15.4004 15.357 15.2538 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1995-09-01 15.1364 15.1071 15.3124 15.4298 15.2397 15.5764 14.6378 \n", "1995-09-02 15.4298 15.1364 15.1071 15.3124 15.4298 15.7738 14.6378 \n", "1995-09-03 15.4298 15.4298 15.1364 15.1071 15.3124 16.1125 14.6378 \n", "1995-09-04 15.3418 15.4298 15.4298 15.1364 15.1071 16.3183 14.6378 \n", "1995-09-05 15.1071 15.3418 15.4298 15.4298 15.1364 16.3183 14.6378 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64\n", "Mean Absolute Error: 0.239159740022\n", "Explained Variance Score: 0.944241221285\n", "Mean Squared Error: 0.101972988604\n", "R2 score: 0.93697372492\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-23 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 21.3565 \n", "1997-08-24 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 \n", "1997-08-25 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 \n", "1997-08-26 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 \n", "1997-08-27 22.3992 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1997-08-23 21.4771 21.0235 20.8594 ... 20.5119 20.9197 21.2069 \n", "1997-08-24 21.3565 21.4771 21.0235 ... 20.6036 20.5119 20.9197 \n", "1997-08-25 21.523 21.3565 21.4771 ... 20.6928 20.6036 20.5119 \n", "1997-08-26 21.7933 21.523 21.3565 ... 20.9197 20.6928 20.6036 \n", "1997-08-27 22.1407 21.7933 21.523 ... 21.4023 20.9197 20.6928 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1997-08-23 20.8883 21.2358 20.7387 21.0403 22.0346 22.1721 19.6528 \n", "1997-08-24 21.2069 20.8883 21.2358 20.7387 21.0403 22.1721 19.6528 \n", "1997-08-25 20.9197 21.2069 20.8883 21.2358 20.7387 22.1721 19.6528 \n", "1997-08-26 20.5119 20.9197 21.2069 20.8883 21.2358 22.1721 19.6528 \n", "1997-08-27 20.6036 20.5119 20.9197 21.2069 20.8883 22.3992 19.6528 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64\n", "Mean Absolute Error: 0.601937849493\n", "Explained Variance Score: 0.588903471007\n", "Mean Squared Error: 0.583981651008\n", "R2 score: 0.583088547014\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-14 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 26.7533 \n", "1999-08-15 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 \n", "1999-08-16 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 \n", "1999-08-17 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 \n", "1999-08-18 24.6834 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1999-08-14 27.0339 27.3146 26.9086 ... 26.9688 26.5628 26.1569 \n", "1999-08-15 26.7533 27.0339 27.3146 ... 26.7533 26.9688 26.5628 \n", "1999-08-16 26.0316 26.7533 27.0339 ... 26.5027 26.7533 26.9688 \n", "1999-08-17 26.0616 26.0316 26.7533 ... 26.3423 26.5027 26.7533 \n", "1999-08-18 25.3098 26.0616 26.0316 ... 26.623 26.3423 26.5027 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1999-08-14 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 24.964 \n", "1999-08-15 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 24.964 \n", "1999-08-16 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 24.4027 \n", "1999-08-17 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 24.4027 \n", "1999-08-18 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 24.4027 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64\n", "Mean Absolute Error: 0.794397514735\n", "Explained Variance Score: 0.589058113891\n", "Mean Squared Error: 1.06170118828\n", "R2 score: 0.586860973735\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-08-08 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 21.1594 \n", "2001-08-09 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 \n", "2001-08-10 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 \n", "2001-08-11 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 \n", "2001-08-12 19.8885 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2001-08-08 21.2445 21.2658 22.3559 ... 21.771 22.2762 21.2179 \n", "2001-08-09 21.1594 21.2445 21.2658 ... 21.4998 21.771 22.2762 \n", "2001-08-10 21.3349 21.1594 21.2445 ... 21.1701 21.4998 21.771 \n", "2001-08-11 20.9786 21.3349 21.1594 ... 21.0584 21.1701 21.4998 \n", "2001-08-12 19.5588 20.9786 21.3349 ... 20.633 21.0584 21.1701 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2001-08-08 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.2769 \n", "2001-08-09 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.2769 \n", "2001-08-10 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.2769 \n", "2001-08-11 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.2769 \n", "2001-08-12 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.2769 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64\n", "Mean Absolute Error: 0.716918405219\n", "Explained Variance Score: 0.831164391363\n", "Mean Squared Error: 0.921046477113\n", "R2 score: 0.8261118985\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-08-01 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 33.917 \n", "2003-08-02 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 \n", "2003-08-03 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 \n", "2003-08-04 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 \n", "2003-08-05 33.9973 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2003-08-01 33.4926 33.5729 33.831 ... 33.5442 33.1944 33.0052 \n", "2003-08-02 33.917 33.4926 33.5729 ... 32.8962 33.5442 33.1944 \n", "2003-08-03 33.8826 33.917 33.4926 ... 32.9937 32.8962 33.5442 \n", "2003-08-04 33.8195 33.8826 33.917 ... 33.3722 32.9937 32.8962 \n", "2003-08-05 34.112 33.8195 33.8826 ... 33.0052 33.3722 32.9937 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2003-08-01 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-08-02 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-08-03 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-08-04 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-08-05 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64\n", "Mean Absolute Error: 0.58624564363\n", "Explained Variance Score: 0.917058612472\n", "Mean Squared Error: 0.59587482901\n", "R2 score: 0.858798903078\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-08-02 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 40.3008 \n", "2005-08-03 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 \n", "2005-08-04 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 \n", "2005-08-05 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 \n", "2005-08-06 41.5776 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2005-08-02 39.751 39.0118 39.4211 ... 40.2947 39.7082 39.8304 \n", "2005-08-03 40.3008 39.751 39.0118 ... 39.8304 40.2947 39.7082 \n", "2005-08-04 41.2538 40.3008 39.751 ... 39.7449 39.8304 40.2947 \n", "2005-08-05 41.3943 41.2538 40.3008 ... 39.7571 39.7449 39.8304 \n", "2005-08-06 40.6551 41.3943 41.2538 ... 40.4413 39.7571 39.7449 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2005-08-02 40.0442 39.6227 40.2275 40.7162 39.867 41.7791 38.8041 \n", "2005-08-03 39.8304 40.0442 39.6227 40.2275 40.7162 41.8952 38.8041 \n", "2005-08-04 39.7082 39.8304 40.0442 39.6227 40.2275 42.3962 38.8041 \n", "2005-08-05 40.2947 39.7082 39.8304 40.0442 39.6227 42.4511 38.8041 \n", "2005-08-06 39.8304 40.2947 39.7082 39.8304 40.0442 42.4511 38.8041 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64\n", "Mean Absolute Error: 0.802958635558\n", "Explained Variance Score: 0.615314748251\n", "Mean Squared Error: 1.07455580184\n", "R2 score: 0.610929179905\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-28 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 27.0143 \n", "2007-07-29 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 \n", "2007-07-30 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 \n", "2007-07-31 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 \n", "2007-08-01 29.9082 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2007-07-28 29.6692 29.4834 30.2998 ... 34.1229 34.7269 34.4681 \n", "2007-07-29 27.0143 29.6692 29.4834 ... 34.1561 34.1229 34.7269 \n", "2007-07-30 26.9147 27.0143 29.6692 ... 36.2071 34.1561 34.1229 \n", "2007-07-31 30.8639 26.9147 27.0143 ... 36.6119 36.2071 34.1561 \n", "2007-08-01 31.0033 30.8639 26.9147 ... 35.9084 36.6119 36.2071 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2007-07-28 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-07-29 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-07-30 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-07-31 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-08-01 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64\n", "Mean Absolute Error: 1.34141196406\n", "Explained Variance Score: 0.8823848576\n", "Mean Squared Error: 3.23643017946\n", "R2 score: 0.870276149629\n", "Errors: [Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64, Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64, Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64, Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64, Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64, Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64, Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64, Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64, Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64, Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64, Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64, Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64, Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64, Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64, Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64]\n", "Daily error: [[2.3547309468646977, 2.6843698878562434, 1.4073060638117993, 1.8257205265526617, 1.2571302541332623, 1.3070616670286337, 1.9988507624239815, 1.2774261200573758, 1.0972884438734316, 1.7713207964022895, 2.2515787402833238, 2.1936305240618905, 1.1322810611135845, 1.2781940755820749, 2.9218559619814704], [3.6177056160450944, 3.8529029980585308, 2.0996497849323741, 2.5200941777904116, 1.7425090853194207, 2.0767602945362782, 2.9825225833769546, 1.9238545410998846, 1.6284871067250986, 2.6941111554594688, 3.193383888830593, 3.1126222980274192, 1.7023257899660558, 1.8256993808103501, 3.9248097333153922], [4.5649082663487981, 4.919654734680905, 2.5310312168153977, 2.9836384156717788, 2.0110091568888309, 2.6672760574192766, 3.7613247626665651, 2.4870650021890679, 1.9946989514581441, 3.3683432902069392, 3.8294519687663078, 3.7373617983789833, 2.080606518150474, 2.14060014177976, 4.2051556740937093], [5.4024502775560101, 5.5403781813156501, 2.8324489798600148, 3.4016521599695979, 2.3200498153968843, 3.1868909037254345, 4.4188904926330173, 2.8895466676894839, 2.3126474095813565, 3.8741601379971553, 4.2175713308860896, 4.2133650475354072, 2.4493016707758857, 2.465324887372323, 4.9642444869322437], [6.0874752741145528, 6.1238292431129455, 3.0779955606900775, 3.7679999784167957, 2.5431262388706335, 3.5929183893538976, 5.033414123710652, 3.230316091173671, 2.5966357031707243, 4.2764916616348794, 4.5333785968485394, 4.6529261285101802, 2.7891901712253597, 2.7680731557270328, 5.6452968644470065], [6.7355277492693739, 6.5918510035213815, 3.2815416890282374, 4.0959675621588527, 2.742164531970531, 3.874977862896968, 5.5623865765175768, 3.461071665532764, 2.8417667456729157, 4.5564166688903143, 4.779192398380526, 5.086101610706165, 3.0854034250811742, 3.0325416694322258, 6.1485518594275472], [7.3347922060064086, 7.025247411581879, 3.453130554000138, 4.4229639877662024, 2.8911324077574512, 4.0773842621070342, 5.9115774229114351, 3.6835908281785965, 3.0577563801686329, 4.7911542187225136, 5.0594615569728996, 5.4556849461479642, 3.3659760913065653, 3.2410121186171836, 6.7994967443732222]]\n", "Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 30 days' worth of prior data\n", "\n", "execute(steps=15, days=30, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1980-02-14 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 5.04853 \n", "1980-02-15 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 \n", "1980-02-16 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 \n", "1980-02-17 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 \n", "1980-02-18 5.20467 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1980-02-14 5.03604 4.89239 4.91841 ... 8.14531 8.22338 7.9111 \n", "1980-02-15 5.04853 5.03604 4.89239 ... 8.0027 8.14531 8.22338 \n", "1980-02-16 5.10058 5.04853 5.03604 ... 7.78098 8.0027 8.14531 \n", "1980-02-17 5.02251 5.10058 5.04853 ... 7.79452 7.78098 8.0027 \n", "1980-02-18 5.10058 5.02251 5.10058 ... 7.72894 7.79452 7.78098 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1980-02-14 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 4.6842 \n", "1980-02-15 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 4.6842 \n", "1980-02-16 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 4.6842 \n", "1980-02-17 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 4.6842 \n", "1980-02-18 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 4.6842 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64\n", "Mean Absolute Error: 0.308123611359\n", "Explained Variance Score: 0.883196210344\n", "Mean Squared Error: 0.174895557318\n", "R2 score: 0.882761749111\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-02-06 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 4.67171 \n", "1982-02-07 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 \n", "1982-02-08 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 \n", "1982-02-09 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 \n", "1982-02-10 4.91841 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1982-02-06 4.74874 4.73625 4.7883 ... 3.87748 3.95555 3.85146 \n", "1982-02-07 4.67171 4.74874 4.73625 ... 3.66929 3.87748 3.95555 \n", "1982-02-08 4.71023 4.67171 4.74874 ... 3.66929 3.66929 3.87748 \n", "1982-02-09 4.72376 4.71023 4.67171 ... 3.64327 3.66929 3.66929 \n", "1982-02-10 4.74874 4.72376 4.71023 ... 3.68283 3.64327 3.66929 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1982-02-06 3.69532 3.53918 3.47464 3.39553 3.44757 4.85284 3.3185 \n", "1982-02-07 3.85146 3.69532 3.53918 3.47464 3.39553 4.85284 3.3185 \n", "1982-02-08 3.95555 3.85146 3.69532 3.53918 3.47464 4.8799 3.3185 \n", "1982-02-09 3.87748 3.95555 3.85146 3.69532 3.53918 4.94444 3.48713 \n", "1982-02-10 3.66929 3.87748 3.95555 3.85146 3.69532 4.94444 3.53918 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64\n", "Mean Absolute Error: 0.153771584056\n", "Explained Variance Score: 0.858967690029\n", "Mean Squared Error: 0.037657109341\n", "R2 score: 0.855415148739\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1984-02-01 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 4.82785 \n", "1984-02-02 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 \n", "1984-02-03 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 \n", "1984-02-04 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 \n", "1984-02-05 4.90488 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1984-02-01 4.7883 4.7883 4.84034 ... 4.39795 4.42397 4.37192 \n", "1984-02-02 4.82785 4.7883 4.7883 ... 4.44999 4.39795 4.42397 \n", "1984-02-03 4.86637 4.82785 4.7883 ... 4.37192 4.44999 4.39795 \n", "1984-02-04 4.90488 4.86637 4.82785 ... 4.47602 4.37192 4.44999 \n", "1984-02-05 4.86637 4.90488 4.86637 ... 4.55409 4.47602 4.37192 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1984-02-01 4.35943 4.39795 4.43646 4.58011 4.56762 5.02251 4.12418 \n", "1984-02-02 4.37192 4.35943 4.39795 4.43646 4.58011 5.02251 4.12418 \n", "1984-02-03 4.42397 4.37192 4.35943 4.39795 4.43646 5.02251 4.12418 \n", "1984-02-04 4.39795 4.42397 4.37192 4.35943 4.39795 5.02251 4.12418 \n", "1984-02-05 4.44999 4.39795 4.42397 4.37192 4.35943 5.02251 4.12418 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64\n", "Mean Absolute Error: 0.101043295151\n", "Explained Variance Score: 0.769182909465\n", "Mean Squared Error: 0.0161008843587\n", "R2 score: 0.617638917329\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1986-01-22 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 7.36443 \n", "1986-01-23 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 \n", "1986-01-24 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 \n", "1986-01-25 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 \n", "1986-01-26 7.39064 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1986-01-22 7.36443 7.39064 7.48289 ... 5.14013 5.16512 5.15262 \n", "1986-01-23 7.36443 7.36443 7.39064 ... 5.08809 5.14013 5.16512 \n", "1986-01-24 7.43048 7.36443 7.36443 ... 5.17865 5.08809 5.14013 \n", "1986-01-25 7.41685 7.43048 7.36443 ... 5.14013 5.17865 5.08809 \n", "1986-01-26 7.40322 7.41685 7.43048 ... 5.25672 5.14013 5.17865 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1986-01-22 4.98399 4.99648 4.90488 5.15262 5.20467 7.5741 4.89239 \n", "1986-01-23 5.15262 4.98399 4.99648 4.90488 5.15262 7.5741 4.89239 \n", "1986-01-24 5.16512 5.15262 4.98399 4.99648 4.90488 7.5741 4.89239 \n", "1986-01-25 5.14013 5.16512 5.15262 4.98399 4.99648 7.5741 4.90488 \n", "1986-01-26 5.08809 5.14013 5.16512 5.15262 4.98399 7.5741 4.91841 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64\n", "Mean Absolute Error: 0.212433916939\n", "Explained Variance Score: 0.908541965433\n", "Mean Squared Error: 0.0861793881797\n", "R2 score: 0.881980679802\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-14 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 6.44985 \n", "1988-01-15 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 \n", "1988-01-16 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 \n", "1988-01-17 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 \n", "1988-01-18 6.23485 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1988-01-14 6.49069 6.42297 6.50359 ... 5.67454 5.72782 5.70118 \n", "1988-01-15 6.44985 6.49069 6.42297 ... 5.74168 5.67454 5.72782 \n", "1988-01-16 6.43695 6.44985 6.49069 ... 5.72782 5.74168 5.67454 \n", "1988-01-17 6.42297 6.43695 6.44985 ... 5.6479 5.72782 5.74168 \n", "1988-01-18 6.36922 6.42297 6.43695 ... 5.70118 5.6479 5.72782 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1988-01-14 5.66069 5.79496 5.72782 5.71397 5.6479 6.62399 5.62126 \n", "1988-01-15 5.70118 5.66069 5.79496 5.72782 5.71397 6.62399 5.62126 \n", "1988-01-16 5.72782 5.70118 5.66069 5.79496 5.72782 6.62399 5.62126 \n", "1988-01-17 5.67454 5.72782 5.70118 5.66069 5.79496 6.62399 5.62126 \n", "1988-01-18 5.74168 5.67454 5.72782 5.70118 5.66069 6.62399 5.62126 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64\n", "Mean Absolute Error: 0.104323850003\n", "Explained Variance Score: 0.850284924048\n", "Mean Squared Error: 0.0187007596422\n", "R2 score: 0.835576466493\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-01-05 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 8.25312 \n", "1990-01-06 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 \n", "1990-01-07 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 \n", "1990-01-08 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 \n", "1990-01-09 7.67357 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1990-01-05 8.30842 8.46105 8.41902 ... 8.62105 8.71769 8.73087 \n", "1990-01-06 8.25312 8.30842 8.46105 ... 8.71769 8.62105 8.71769 \n", "1990-01-07 8.06067 8.25312 8.30842 ... 8.64851 8.71769 8.62105 \n", "1990-01-08 7.92131 8.06067 8.25312 ... 8.57932 8.64851 8.71769 \n", "1990-01-09 7.92131 7.92131 8.06067 ... 8.4695 8.57932 8.64851 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1990-01-05 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 7.57546 \n", "1990-01-06 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 7.57546 \n", "1990-01-07 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 7.57546 \n", "1990-01-08 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 7.57546 \n", "1990-01-09 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 7.57546 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64\n", "Mean Absolute Error: 0.210351894406\n", "Explained Variance Score: 0.741325230038\n", "Mean Squared Error: 0.0765172809939\n", "R2 score: 0.70389414274\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-12-31 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 5.7994 \n", "1992-01-01 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 \n", "1992-01-02 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 \n", "1992-01-03 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 \n", "1992-01-04 6.19833 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1991-12-31 5.7994 5.75608 5.71277 ... 5.01791 5.03265 5.11657 \n", "1992-01-01 5.7994 5.7994 5.75608 ... 4.96121 5.01791 5.03265 \n", "1992-01-02 5.82675 5.7994 5.7994 ... 4.90451 4.96121 5.01791 \n", "1992-01-03 5.74241 5.82675 5.7994 ... 4.69245 4.90451 4.96121 \n", "1992-01-04 5.72759 5.74241 5.82675 ... 4.80585 4.69245 4.90451 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1991-12-31 5.11657 5.15966 5.22997 5.21636 5.18801 5.87006 4.67712 \n", "1992-01-01 5.11657 5.11657 5.15966 5.22997 5.21636 5.95555 4.67712 \n", "1992-01-02 5.03265 5.11657 5.11657 5.15966 5.22997 6.14134 4.67712 \n", "1992-01-03 5.01791 5.03265 5.11657 5.11657 5.15966 6.1687 4.67712 \n", "1992-01-04 4.96121 5.01791 5.03265 5.11657 5.11657 6.22569 4.67712 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64\n", "Mean Absolute Error: 0.183122699785\n", "Explained Variance Score: 0.66511338143\n", "Mean Squared Error: 0.0658789640265\n", "R2 score: 0.599655687338\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-12-22 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 8.78214 \n", "1993-12-23 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 \n", "1993-12-24 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 \n", "1993-12-25 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 \n", "1993-12-26 8.846 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1993-12-22 8.99938 9.09992 9.14267 ... 9.21296 9.2268 9.08263 \n", "1993-12-23 8.78214 8.99938 9.09992 ... 9.3133 9.21296 9.2268 \n", "1993-12-24 8.83992 8.78214 8.99938 ... 9.32829 9.3133 9.21296 \n", "1993-12-25 8.78214 8.83992 8.78214 ... 9.45747 9.32829 9.3133 \n", "1993-12-26 8.94161 8.78214 8.83992 ... 9.6743 9.45747 9.32829 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1993-12-22 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.65272 \n", "1993-12-23 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.65272 \n", "1993-12-24 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.65272 \n", "1993-12-25 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.65272 \n", "1993-12-26 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.65272 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64\n", "Mean Absolute Error: 0.158445846768\n", "Explained Variance Score: 0.620247529876\n", "Mean Squared Error: 0.0465380189471\n", "R2 score: 0.60132021659\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-12-13 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 15.4516 \n", "1995-12-14 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 \n", "1995-12-15 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 \n", "1995-12-16 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 \n", "1995-12-17 15.8276 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1995-12-13 15.7456 15.7738 16.0396 ... 15.3418 15.4298 15.4298 \n", "1995-12-14 15.4516 15.7456 15.7738 ... 15.1071 15.3418 15.4298 \n", "1995-12-15 15.5329 15.4516 15.7456 ... 15.2538 15.1071 15.3418 \n", "1995-12-16 15.5482 15.5329 15.4516 ... 15.357 15.2538 15.1071 \n", "1995-12-17 15.6354 15.5482 15.5329 ... 15.4004 15.357 15.2538 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1995-12-13 15.1364 15.1071 15.3124 15.4298 15.2397 17.2886 14.6378 \n", "1995-12-14 15.4298 15.1364 15.1071 15.3124 15.4298 17.2886 14.6378 \n", "1995-12-15 15.4298 15.4298 15.1364 15.1071 15.3124 17.2886 14.6378 \n", "1995-12-16 15.3418 15.4298 15.4298 15.1364 15.1071 17.2886 14.6378 \n", "1995-12-17 15.1071 15.3418 15.4298 15.4298 15.1364 17.2886 14.6378 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64\n", "Mean Absolute Error: 0.287728749471\n", "Explained Variance Score: 0.938381959646\n", "Mean Squared Error: 0.147641443939\n", "R2 score: 0.93566576996\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-12-04 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 20.2949 \n", "1997-12-05 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 \n", "1997-12-06 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 \n", "1997-12-07 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 \n", "1997-12-08 20.5831 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1997-12-04 20.462 20.6121 21.1885 ... 20.5119 20.9197 21.2069 \n", "1997-12-05 20.2949 20.462 20.6121 ... 20.6036 20.5119 20.9197 \n", "1997-12-06 20.1278 20.2949 20.462 ... 20.6928 20.6036 20.5119 \n", "1997-12-07 19.9172 20.1278 20.2949 ... 20.9197 20.6928 20.6036 \n", "1997-12-08 19.8276 19.9172 20.1278 ... 21.4023 20.9197 20.6928 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1997-12-04 20.8883 21.2358 20.7387 21.0403 22.0346 23.0966 19.4643 \n", "1997-12-05 21.2069 20.8883 21.2358 20.7387 21.0403 23.0966 19.4643 \n", "1997-12-06 20.9197 21.2069 20.8883 21.2358 20.7387 23.0966 19.4643 \n", "1997-12-07 20.5119 20.9197 21.2069 20.8883 21.2358 23.0966 19.4643 \n", "1997-12-08 20.6036 20.5119 20.9197 21.2069 20.8883 23.0966 19.4643 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64\n", "Mean Absolute Error: 0.597633444026\n", "Explained Variance Score: 0.503137515046\n", "Mean Squared Error: 0.589490186568\n", "R2 score: 0.482368816144\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-11-26 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 26.6624 \n", "1999-11-27 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 \n", "1999-11-28 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 \n", "1999-11-29 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 \n", "1999-11-30 25.0023 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1999-11-26 26.2385 26.1124 25.9862 ... 26.9688 26.5628 26.1569 \n", "1999-11-27 26.6624 26.2385 26.1124 ... 26.7533 26.9688 26.5628 \n", "1999-11-28 26.4959 26.6624 26.2385 ... 26.5027 26.7533 26.9688 \n", "1999-11-29 26.1881 26.4959 26.6624 ... 26.3423 26.5027 26.7533 \n", "1999-11-30 26.2284 26.1881 26.4959 ... 26.623 26.3423 26.5027 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1999-11-26 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 22.767 \n", "1999-11-27 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 22.767 \n", "1999-11-28 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 22.767 \n", "1999-11-29 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 22.767 \n", "1999-11-30 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 22.767 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64\n", "Mean Absolute Error: 0.701837927805\n", "Explained Variance Score: 0.61258560237\n", "Mean Squared Error: 0.807580404799\n", "R2 score: 0.6103741195\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-11-21 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 20.8021 \n", "2001-11-22 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 \n", "2001-11-23 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 \n", "2001-11-24 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 \n", "2001-11-25 20.6785 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2001-11-21 20.8719 20.8558 20.9633 ... 21.771 22.2762 21.2179 \n", "2001-11-22 20.8021 20.8719 20.8558 ... 21.4998 21.771 22.2762 \n", "2001-11-23 20.2432 20.8021 20.8719 ... 21.1701 21.4998 21.771 \n", "2001-11-24 20.2486 20.2432 20.8021 ... 21.0584 21.1701 21.4998 \n", "2001-11-25 20.399 20.2486 20.2432 ... 20.633 21.0584 21.1701 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2001-11-21 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 18.6311 \n", "2001-11-22 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 18.6311 \n", "2001-11-23 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 18.6311 \n", "2001-11-24 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 18.6311 \n", "2001-11-25 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 18.6311 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64\n", "Mean Absolute Error: 0.901971504049\n", "Explained Variance Score: 0.812150385253\n", "Mean Squared Error: 1.39923634887\n", "R2 score: 0.736584033371\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-11-14 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 34.4386 \n", "2003-11-15 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 \n", "2003-11-16 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 \n", "2003-11-17 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 \n", "2003-11-18 35.9577 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2003-11-14 34.3577 34.7736 34.6003 ... 33.5442 33.1944 33.0052 \n", "2003-11-15 34.4386 34.3577 34.7736 ... 32.8962 33.5442 33.1944 \n", "2003-11-16 34.9527 34.4386 34.3577 ... 32.9937 32.8962 33.5442 \n", "2003-11-17 35.0335 34.9527 34.4386 ... 33.3722 32.9937 32.8962 \n", "2003-11-18 34.9411 35.0335 34.9527 ... 33.0052 33.3722 32.9937 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2003-11-14 32.7585 33.0338 33.3206 32.5234 32.3628 35.8711 32.0187 \n", "2003-11-15 33.0052 32.7585 33.0338 33.3206 32.5234 35.8711 32.5005 \n", "2003-11-16 33.1944 33.0052 32.7585 33.0338 33.3206 36.0733 32.6941 \n", "2003-11-17 33.5442 33.1944 33.0052 32.7585 33.0338 36.079 32.6941 \n", "2003-11-18 32.8962 33.5442 33.1944 33.0052 32.7585 36.1079 32.6941 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64\n", "Mean Absolute Error: 0.570240576978\n", "Explained Variance Score: 0.883135670682\n", "Mean Squared Error: 0.543397166296\n", "R2 score: 0.840783709451\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-11-15 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 39.2664 \n", "2005-11-16 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 \n", "2005-11-17 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 \n", "2005-11-18 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 \n", "2005-11-19 38.755 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2005-11-15 39.2171 40.0858 40.1844 ... 40.2947 39.7082 39.8304 \n", "2005-11-16 39.2664 39.2171 40.0858 ... 39.8304 40.2947 39.7082 \n", "2005-11-17 38.7119 39.2664 39.2171 ... 39.7449 39.8304 40.2947 \n", "2005-11-18 39.1863 38.7119 39.2664 ... 39.7571 39.7449 39.8304 \n", "2005-11-19 39.1308 39.1863 38.7119 ... 40.4413 39.7571 39.7449 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2005-11-15 40.0442 39.6227 40.2275 40.7162 39.867 42.5812 37.763 \n", "2005-11-16 39.8304 40.0442 39.6227 40.2275 40.7162 42.5812 37.763 \n", "2005-11-17 39.7082 39.8304 40.0442 39.6227 40.2275 42.5812 37.763 \n", "2005-11-18 40.2947 39.7082 39.8304 40.0442 39.6227 42.5812 37.763 \n", "2005-11-19 39.8304 40.2947 39.7082 39.8304 40.0442 42.5812 37.763 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64\n", "Mean Absolute Error: 0.805184356548\n", "Explained Variance Score: 0.654726098599\n", "Mean Squared Error: 1.0911864143\n", "R2 score: 0.607901692497\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-11-08 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 28.4939 \n", "2007-11-09 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 \n", "2007-11-10 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 \n", "2007-11-11 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 \n", "2007-11-12 29.1031 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2007-11-08 27.9387 29.9291 29.4484 ... 34.1229 34.7269 34.4681 \n", "2007-11-09 28.4939 27.9387 29.9291 ... 34.1561 34.1229 34.7269 \n", "2007-11-10 28.0538 28.4939 27.9387 ... 36.2071 34.1561 34.1229 \n", "2007-11-11 27.607 28.0538 28.4939 ... 36.6119 36.2071 34.1561 \n", "2007-11-12 28.9068 27.607 28.0538 ... 35.9084 36.6119 36.2071 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2007-11-08 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-11-09 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-11-10 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-11-11 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-11-12 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64\n", "Mean Absolute Error: 1.56779790378\n", "Explained Variance Score: 0.910623053074\n", "Mean Squared Error: 4.56773993183\n", "R2 score: 0.895897673607\n", "Errors: [Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64, Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64, Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64, Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64, Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64, Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64, Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64, Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64, Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64, Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64, Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64, Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64, Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64, Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64, Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64]\n", "Daily error: [[2.6862566648548238, 2.8732187489270236, 1.3256064617379473, 2.1600519846869646, 1.2235156291439226, 1.305420663991631, 2.0685360603124372, 1.0875370689226691, 1.0580095307028299, 2.0217217081378305, 2.0537492673878845, 2.4976641398052424, 1.1175050339269137, 1.3645755070232506, 4.0144579037852735], [4.0592999976323814, 3.9678510989277207, 1.9701678416738304, 3.1636611153866219, 1.7692200297767153, 2.0939347787175921, 3.1255411549111267, 1.5935961405005887, 1.6621738433483118, 2.8422732907658617, 2.8428406166970612, 3.7016790635281951, 1.5881359065976202, 1.838708716353143, 5.2950310548423047], [5.2012518896016813, 4.8595851174817444, 2.4015165262481593, 3.9663184853702087, 2.0937319599079633, 2.725889802618255, 4.0256221884370413, 2.0881478237011293, 2.1198589394936009, 3.4394436515955458, 3.1903941017651203, 4.5898554829578231, 1.9260258581576921, 2.1713779643400297, 5.7435946634475581], [6.2376680609655004, 5.1906888229530841, 2.7333023116243766, 4.771870644055527, 2.3317264370474895, 3.2484164567711518, 4.8235413121812867, 2.44198402513774, 2.4877734757315642, 3.9035877213534098, 3.4596893962513113, 5.3691221960409514, 2.2172821574031762, 2.5155067947627172, 6.6214749061448526], [7.101348672465936, 5.5598705130212815, 2.9861408788558754, 5.5072501857210723, 2.6000741043961906, 3.7020463356701927, 5.5006034680471787, 2.7726485729779609, 2.8237001385613416, 4.2351005173762228, 3.7102018424167729, 6.1433467552325984, 2.4636478733847298, 2.8408545898388282, 7.3789947893347989], [7.9277550527409595, 5.7625298134685217, 3.2529086470869495, 6.1356457071558008, 2.8329554445052851, 4.0602549841923929, 6.1326462265073882, 3.0168250033454465, 3.1420826313227979, 4.5159739803948229, 3.93149884705644, 6.8548130816086976, 2.7183436027777019, 3.1374226069422688, 8.1094147478977305], [8.7018642223453728, 6.1191921810565226, 3.5381132656657028, 6.6786375127786863, 3.0316781856016899, 4.3423819076586243, 6.6589006154937413, 3.2298492480472585, 3.4452102937068454, 4.7210730604544686, 4.2033108503209542, 7.4993260970943192, 2.9790689586399646, 3.4016567175540446, 8.8936393091082984]]\n", "Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 100 days' worth of prior data\n", "\n", "execute(steps=15, days=100, buffer_step = 500)\n", "\n", "# Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2 Adding Oil Stock Prices (GAIA)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1932616BP2014-09-2445.8245.8845.3645.516237900.00.01.040.666021...2014-09-246.756.956.6456.942014-09-246676.086707.266651.986706.27
1932617BP2014-09-2544.9644.9943.8944.0615355000.00.01.039.902756...2014-09-256.946.946.7006.702014-09-256706.276726.406621.486639.71
1932618BP2014-09-2643.9444.5543.8144.367105500.00.01.038.997489...2014-09-266.706.746.6306.702014-09-266639.716664.006615.126649.39
1932619BP2014-09-2944.2544.7244.1444.544460900.00.01.039.272619...2014-09-296.626.696.5706.622014-09-296649.396653.946608.666646.60
1932620BP2014-09-3044.0444.2243.8043.956834500.00.01.039.086241...2014-09-306.617.416.6107.342014-09-306646.606658.916601.626622.72
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1932616 BP 2014-09-24 45.82 45.88 45.36 45.51 6237900.0 \n", "1932617 BP 2014-09-25 44.96 44.99 43.89 44.06 15355000.0 \n", "1932618 BP 2014-09-26 43.94 44.55 43.81 44.36 7105500.0 \n", "1932619 BP 2014-09-29 44.25 44.72 44.14 44.54 4460900.0 \n", "1932620 BP 2014-09-30 44.04 44.22 43.80 43.95 6834500.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open ... GAIA Date \\\n", "1932616 0.0 1.0 40.666021 ... 2014-09-24 \n", "1932617 0.0 1.0 39.902756 ... 2014-09-25 \n", "1932618 0.0 1.0 38.997489 ... 2014-09-26 \n", "1932619 0.0 1.0 39.272619 ... 2014-09-29 \n", "1932620 0.0 1.0 39.086241 ... 2014-09-30 \n", "\n", " GAIA Adj. Open GAIA Adj. High GAIA Adj. Low GAIA Adj. Close \\\n", "1932616 6.75 6.95 6.645 6.94 \n", "1932617 6.94 6.94 6.700 6.70 \n", "1932618 6.70 6.74 6.630 6.70 \n", "1932619 6.62 6.69 6.570 6.62 \n", "1932620 6.61 7.41 6.610 7.34 \n", "\n", " FTSE Date FTSE Open FTSE High FTSE Low FTSE Close \n", "1932616 2014-09-24 6676.08 6707.26 6651.98 6706.27 \n", "1932617 2014-09-25 6706.27 6726.40 6621.48 6639.71 \n", "1932618 2014-09-26 6639.71 6664.00 6615.12 6649.39 \n", "1932619 2014-09-29 6649.39 6653.94 6608.66 6646.60 \n", "1932620 2014-09-30 6646.60 6658.91 6601.62 6622.72 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create dataframe with BP and GAIA data in overlapping date range\n", "# Date range: 1999-10-29 to 2014-09-30\n", "# `bp_gaia_start` etc defined in Feature Engineering section 1.2.2.2\n", "bp_gaia = bp.loc[bp_gaia_start:bp_gaia_start+bp_gaia_intersect_length-1]\n", "\n", "# Check it ends at the right date\n", "bp_gaia.tail()" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3753" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(bp_gaia)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add GAIA data.\n", "\n", "# Potential improvement: Generalise `prepare_train_test` function instead\n", "# of copy and pasting it and making a new function.\n", "def prepare_train_test_with_gaia(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_gaia): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days`: the number of days prior we consider (the prices of)\n", " `periods`: the total number of datapoints used (training + test)\n", " \"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # GAIA cols\n", " for j in range(1,days+1):\n", " columns.append('GAIA i-%s' % str(j))\n", " columns.append('GAIA Adj. High')\n", " columns.append('GAIA Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['GAIA i-%s' % str(days-j)] = df.iloc[buffer+i+j]['GAIA %s' % str(target)]\n", " features.iloc[i]['GAIA Adj. High'] = max(df[buffer+i:buffer+i+days]['GAIA Adj. High'])\n", " features.iloc[i]['GAIA Adj. Low'] = min(df[buffer+i:buffer+i+days]['GAIA Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_gaia(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + GAIA data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_gaia(days=days, periods=periods, buffer=buffer, df=bp_gaia)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64\n", "Mean Absolute Error: 0.390417267381\n", "Explained Variance Score: 0.853744159868\n", "Mean Squared Error: 0.253189951823\n", "R2 score: 0.846876833577\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64\n", "Mean Absolute Error: 0.640084309346\n", "Explained Variance Score: 0.937272372234\n", "Mean Squared Error: 0.720859692963\n", "R2 score: 0.86521356578\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64\n", "Mean Absolute Error: 0.559376996819\n", "Explained Variance Score: 0.848725761062\n", "Mean Squared Error: 0.504733717139\n", "R2 score: 0.836876888323\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64\n", "Mean Absolute Error: 0.807669964064\n", "Explained Variance Score: 0.513947367438\n", "Mean Squared Error: 1.11918208013\n", "R2 score: 0.47656012379\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64\n", "Mean Absolute Error: 0.784485223446\n", "Explained Variance Score: 0.611742357358\n", "Mean Squared Error: 1.08805000734\n", "R2 score: 0.59682736149\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64\n", "Mean Absolute Error: 0.823528275858\n", "Explained Variance Score: 0.854979604454\n", "Mean Squared Error: 1.21173657923\n", "R2 score: 0.848280893753\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64\n", "Mean Absolute Error: 1.08202656801\n", "Explained Variance Score: 0.785807434633\n", "Mean Squared Error: 2.18729500527\n", "R2 score: 0.771849063305\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64\n", "Mean Absolute Error: 1.64293719873\n", "Explained Variance Score: 0.701929531055\n", "Mean Squared Error: 4.86875519644\n", "R2 score: 0.576854711057\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64\n", "Mean Absolute Error: 1.09213527916\n", "Explained Variance Score: 0.877782414782\n", "Mean Squared Error: 1.85736866345\n", "R2 score: 0.823140444507\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64\n", "Mean Absolute Error: 1.26399823305\n", "Explained Variance Score: 0.917408689638\n", "Mean Squared Error: 3.26079876466\n", "R2 score: 0.904206507456\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64\n", "Mean Absolute Error: 0.949041466517\n", "Explained Variance Score: 0.760114297454\n", "Mean Squared Error: 1.50840397037\n", "R2 score: 0.751639652033\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64\n", "Mean Absolute Error: 0.83600905218\n", "Explained Variance Score: 0.749597354718\n", "Mean Squared Error: 1.16224774383\n", "R2 score: 0.742591965811\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64\n", "Mean Absolute Error: 0.557442173078\n", "Explained Variance Score: 0.46981043696\n", "Mean Squared Error: 0.522034902854\n", "R2 score: 0.465782842549\n", "Errors: [Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64, Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64, Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64, Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64, Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64, Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64, Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64, Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64, Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64, Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64, Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64, Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64, Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64]\n", "Daily error: [[1.3416274627176741, 1.2253222561285753, 1.0255495409576574, 1.266776829926521, 1.1982064351141712, 1.310712301821582, 1.7298817238551929, 3.8921754249906253, 1.6629575970691628, 3.0941354597945034, 2.0330820163702419, 1.7164225319161091, 1.1686884331757421], [1.7150760880207037, 1.8964172603677423, 1.4834673922912223, 1.8554594521723491, 1.6787503849419985, 1.8263483157031517, 2.3241398333250651, 5.2355080851844216, 2.3752099271864098, 4.4270718273765972, 2.9025947293955445, 2.4521487734937994, 1.5958526122466832], [2.0477430054053203, 2.3723857338154257, 1.7988798566364699, 2.2637800713580867, 2.0641570748232887, 2.1815157366804447, 2.8355986521448, 5.9932443782633227, 2.9633965226109846, 5.2083198103473851, 3.5852639670979616, 2.9819102400068132, 1.8925844623819319], [2.3097316999351953, 2.8071999746923053, 2.0500517838892773, 2.6324197507576557, 2.4726133505762671, 2.5425603577844873, 3.2307653588653578, 7.1525225718155419, 3.4134342032425726, 6.2465795890314988, 4.0172291702026053, 3.4643390217868517, 2.1742172950593774], [2.5975117870884237, 3.2335105558655264, 2.2739368989119333, 2.9489855905646274, 2.8044131318548891, 2.870944054320459, 3.7485731532447448, 8.3852639729218854, 3.8372768182949173, 7.2493788386688047, 4.3865708556257568, 3.7613389113197311, 2.3577017695179605], [2.7408301709503315, 3.6348871408243957, 2.4565607234069882, 3.2327235750256049, 3.1394000107197346, 3.1446997267702699, 4.354234736214309, 9.4347187346765544, 4.2807532074257058, 8.2875526190580011, 4.6089459172836937, 3.9769158354848391, 2.5282971175926079], [2.855423021053821, 4.0729371465412827, 2.6544296847203288, 3.4571876639216557, 3.4085147945800864, 3.3865251171130839, 4.7922194765634272, 10.64932394540064, 4.6834300530757496, 9.5173590389649085, 4.8463224597302119, 4.1659653260441791, 2.632187257416279]]\n", "Mean daily error: [1.743502924141366, 2.4436957447465919, 2.9375984239670951, 3.4241280098183839, 3.8811851029384354, 4.2938861165717714, 4.701678845009666]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of BP and GAIA data\n", "execute_with_gaia(steps=13)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64\n", "Mean Absolute Error: 0.411869432422\n", "Explained Variance Score: 0.860958167317\n", "Mean Squared Error: 0.278323948034\n", "R2 score: 0.821867759953\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64\n", "Mean Absolute Error: 0.606986183256\n", "Explained Variance Score: 0.932648097155\n", "Mean Squared Error: 0.66024635669\n", "R2 score: 0.868677365951\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64\n", "Mean Absolute Error: 0.559944807019\n", "Explained Variance Score: 0.833869148805\n", "Mean Squared Error: 0.505571476681\n", "R2 score: 0.823962424354\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64\n", "Mean Absolute Error: 0.821987533814\n", "Explained Variance Score: 0.46989388159\n", "Mean Squared Error: 1.15104795599\n", "R2 score: 0.430126472698\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64\n", "Mean Absolute Error: 0.817292176686\n", "Explained Variance Score: 0.605237375421\n", "Mean Squared Error: 1.16563063035\n", "R2 score: 0.588600663963\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64\n", "Mean Absolute Error: 0.855518357378\n", "Explained Variance Score: 0.855221593528\n", "Mean Squared Error: 1.28660241537\n", "R2 score: 0.84831538254\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64\n", "Mean Absolute Error: 1.1189552901\n", "Explained Variance Score: 0.781265137134\n", "Mean Squared Error: 2.30617202977\n", "R2 score: 0.76007064928\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64\n", "Mean Absolute Error: 1.74362867052\n", "Explained Variance Score: 0.676636001157\n", "Mean Squared Error: 5.47659375935\n", "R2 score: 0.50027082935\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64\n", "Mean Absolute Error: 1.06057828555\n", "Explained Variance Score: 0.877606203974\n", "Mean Squared Error: 1.77876224515\n", "R2 score: 0.831199539803\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64\n", "Mean Absolute Error: 1.28699529802\n", "Explained Variance Score: 0.905327333598\n", "Mean Squared Error: 3.46556542013\n", "R2 score: 0.892876435992\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64\n", "Mean Absolute Error: 0.957755739612\n", "Explained Variance Score: 0.758091797889\n", "Mean Squared Error: 1.51735582203\n", "R2 score: 0.751963233546\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64\n", "Mean Absolute Error: 0.828153458555\n", "Explained Variance Score: 0.748810119642\n", "Mean Squared Error: 1.15885573253\n", "R2 score: 0.739717381937\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64\n", "Mean Absolute Error: 0.536701478378\n", "Explained Variance Score: 0.501934925031\n", "Mean Squared Error: 0.493473147419\n", "R2 score: 0.496826916953\n", "Errors: [Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64, Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64, Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64, Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64, Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64, Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64, Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64, Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64, Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64, Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64, Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64, Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64, Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64]\n", "Daily error: [[1.3231776216477114, 1.1980342560885635, 1.0337559381524328, 1.2807686653343162, 1.2456589674532657, 1.3280813790944388, 1.7103664889037826, 3.9654429549097601, 1.6030301361552719, 3.1262859191366834, 2.0575536901156961, 1.7625814480985875, 1.122261076440187], [1.6714227116632154, 1.7937529603665612, 1.4762654529955792, 1.8988415982605655, 1.7986447274603283, 1.8411983204181284, 2.3179232847517244, 5.5067122215563318, 2.2614338115669748, 4.5366470960465399, 2.9088991347268269, 2.509250623322357, 1.5543009007901478], [2.0030655887796156, 2.2380077065815658, 1.780142194025534, 2.3358307699453613, 2.1709139424992134, 2.2349182679689812, 2.9254723250608365, 6.3890225539288785, 2.8520975853223187, 5.3572107545469327, 3.6021525960354821, 3.0062242229108511, 1.8244880060908213], [2.2800381048939928, 2.6718769676440171, 2.0485058953109236, 2.7139945310843472, 2.5292649062139549, 2.6223432174672223, 3.3576365342598042, 7.6482257503288977, 3.3136212289590303, 6.4358480297866265, 4.0176389505663028, 3.4729158251810874, 2.1141046081849635], [2.6130558930393306, 3.0947438014593844, 2.2777450341905157, 2.9928587868727545, 2.8834172521302088, 2.9595736804925212, 3.922805774129059, 8.8953440466338662, 3.7744107155179223, 7.4638214002320096, 4.3930553757686583, 3.7290523761223286, 2.3044743756514912], [2.8253797825024778, 3.4910159576111015, 2.4592393810665074, 3.2417476593438641, 3.2341045345752168, 3.2340433613195385, 4.4995984413286916, 10.009035103965697, 4.1986423675716669, 8.5729105007004449, 4.632208728692107, 3.9248259983154372, 2.4578823506143306], [3.1181366825666315, 3.9477940431715237, 2.6568415237777345, 3.4724030082407742, 3.527884207580871, 3.495192276717217, 4.925807113061305, 11.437354010217145, 4.6016137595911006, 9.8966156891001624, 4.8838613016883965, 4.0961565153048944, 2.5430114038608864]]\n", "Mean daily error: [1.7505383493485149, 2.4673302187634834, 2.9784266548997227, 3.4789241961447055, 3.9464891163261573, 4.3677410898159295, 4.8155901180675889]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of BP and GAIA data\n", "execute_with_gaia(days=10, steps=13)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.3 Adding FTSE100" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1924931BP1984-04-0245.6246.3845.5046.00209700.00.01.04.748742...NaNNaNNaNNaNNaN1984-04-021108.11108.11108.11108.1
1924932BP1984-04-0346.1246.5045.8846.38148900.00.01.04.800788...NaNNaNNaNNaNNaN1984-04-031095.41095.41095.41095.4
1924933BP1984-04-0446.6248.0046.6248.00283800.00.01.04.852835...NaNNaNNaNNaNNaN1984-04-041095.41095.41095.41095.4
1924934BP1984-04-0548.3848.3847.0047.50166400.00.01.05.036040...NaNNaNNaNNaNNaN1984-04-051102.21102.21102.21102.2
1924935BP1984-04-0647.1247.5047.0047.5081500.00.01.04.904882...NaNNaNNaNNaNNaN1984-04-061096.31096.31096.31096.3
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.50 46.00 209700.0 0.0 \n", "1924932 BP 1984-04-03 46.12 46.50 45.88 46.38 148900.0 0.0 \n", "1924933 BP 1984-04-04 46.62 48.00 46.62 48.00 283800.0 0.0 \n", "1924934 BP 1984-04-05 48.38 48.38 47.00 47.50 166400.0 0.0 \n", "1924935 BP 1984-04-06 47.12 47.50 47.00 47.50 81500.0 0.0 \n", "\n", " Split Ratio Adj. Open ... GAIA Date GAIA Adj. Open \\\n", "1924931 1.0 4.748742 ... NaN NaN \n", "1924932 1.0 4.800788 ... NaN NaN \n", "1924933 1.0 4.852835 ... NaN NaN \n", "1924934 1.0 5.036040 ... NaN NaN \n", "1924935 1.0 4.904882 ... NaN NaN \n", "\n", " GAIA Adj. High GAIA Adj. Low GAIA Adj. Close FTSE Date \\\n", "1924931 NaN NaN NaN 1984-04-02 \n", "1924932 NaN NaN NaN 1984-04-03 \n", "1924933 NaN NaN NaN 1984-04-04 \n", "1924934 NaN NaN NaN 1984-04-05 \n", "1924935 NaN NaN NaN 1984-04-06 \n", "\n", " FTSE Open FTSE High FTSE Low FTSE Close \n", "1924931 1108.1 1108.1 1108.1 1108.1 \n", "1924932 1095.4 1095.4 1095.4 1095.4 \n", "1924933 1095.4 1095.4 1095.4 1095.4 \n", "1924934 1102.2 1102.2 1102.2 1102.2 \n", "1924935 1096.3 1096.3 1096.3 1096.3 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create df with BP and FTSE data\n", "bp_ftse = bp.loc[bp_ftse_start:]\n", "bp_ftse.head()" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add FTSE data.\n", "def prepare_train_test_with_ftse(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_ftse, name='FTSE'): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # FTSE cols\n", " for j in range(1,days+1):\n", " columns.append('%s i-%s' % (name, str(j)))\n", " columns.append('%s High' % name)\n", " columns.append('%s Low' % name)\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['%s i-%s' % (name, str(days-j))] = df.iloc[buffer+i+j]['%s %s' % (name, 'Close')]\n", " features.iloc[i]['%s High' % name] = max(df[buffer+i:buffer+i+days]['%s High' % name])\n", " features.iloc[i]['%s Low' % name] = min(df[buffer+i:buffer+i+days]['%s Low' % name])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_ftse(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print \"Errors: \", errors\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print \"Daily error: \", daily_error\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print \"Mean daily error: \", average_daily_error" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64\n", "Mean Absolute Error: 0.211015556424\n", "Explained Variance Score: 0.899000260643\n", "Mean Squared Error: 0.101319536893\n", "R2 score: 0.896790144908\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64\n", "Mean Absolute Error: 0.103662027254\n", "Explained Variance Score: 0.810914496372\n", "Mean Squared Error: 0.0191496161364\n", "R2 score: 0.791651910968\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64\n", "Mean Absolute Error: 0.16109328452\n", "Explained Variance Score: 0.509005999538\n", "Mean Squared Error: 0.0448450594299\n", "R2 score: 0.483113556059\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64\n", "Mean Absolute Error: 0.134831719911\n", "Explained Variance Score: 0.940362863942\n", "Mean Squared Error: 0.0312949743422\n", "R2 score: 0.930443446072\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64\n", "Mean Absolute Error: 0.138033710537\n", "Explained Variance Score: 0.808072775502\n", "Mean Squared Error: 0.0334602089163\n", "R2 score: 0.796224083528\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64\n", "Mean Absolute Error: 0.283227004062\n", "Explained Variance Score: 0.94135464242\n", "Mean Squared Error: 0.148338070724\n", "R2 score: 0.940791765118\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64\n", "Mean Absolute Error: 0.592720577547\n", "Explained Variance Score: 0.590618890488\n", "Mean Squared Error: 0.561331819027\n", "R2 score: 0.591291118732\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64\n", "Mean Absolute Error: 0.806309397821\n", "Explained Variance Score: 0.691786541195\n", "Mean Squared Error: 1.15097371293\n", "R2 score: 0.680775196711\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64\n", "Mean Absolute Error: 0.555161284679\n", "Explained Variance Score: 0.783418594845\n", "Mean Squared Error: 0.535944911988\n", "R2 score: 0.778980606844\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64\n", "Mean Absolute Error: 0.601145418071\n", "Explained Variance Score: 0.928081215955\n", "Mean Squared Error: 0.703987908082\n", "R2 score: 0.867484525348\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64\n", "Mean Absolute Error: 0.728988512466\n", "Explained Variance Score: 0.810817817708\n", "Mean Squared Error: 0.896347592801\n", "R2 score: 0.805988449328\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64\n", "Mean Absolute Error: 0.922073321462\n", "Explained Variance Score: 0.85113491032\n", "Mean Squared Error: 1.46122600596\n", "R2 score: 0.850264942708\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64\n", "Mean Absolute Error: 1.17309132125\n", "Explained Variance Score: 0.799408239284\n", "Mean Squared Error: 2.27030564663\n", "R2 score: 0.796642650027\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64\n", "Mean Absolute Error: 0.843137827511\n", "Explained Variance Score: 0.832739639424\n", "Mean Squared Error: 1.16152586731\n", "R2 score: 0.800540577102\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64\n", "Mean Absolute Error: 0.631785589032\n", "Explained Variance Score: 0.609102226738\n", "Mean Squared Error: 0.685708026384\n", "R2 score: 0.61435314998\n", "Errors: [Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64, Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64, Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64, Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64, Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64, Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64, Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64, Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64, Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64, Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64, Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64, Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64, Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64, Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64, Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64]\n", "Daily error: [[2.1093203849638837, 1.0882498665812053, 1.1727221193362856, 1.412586577442704, 0.9378952735856545, 1.0300941063834617, 1.7405932434523412, 2.1849168154032079, 1.609139147394997, 1.1597121603824943, 1.2455832253947525, 1.3370203586317857, 2.8222226244345667, 1.5229049347204531, 1.4034412486597296], [3.137677932962208, 1.5142879962397864, 1.7868339361639278, 2.1822902059145175, 1.3950071506620265, 1.6581419571681995, 2.5994688610024981, 3.150312167798214, 2.2094784630369553, 1.8210669198683502, 1.7831545661313932, 1.9538476861974765, 3.8732839254645901, 2.2895125324881676, 1.9691207311038021], [3.9275897295520128, 1.8580481167789493, 2.2658084022672815, 2.6901289014995937, 1.767085268420445, 2.1449275152997287, 3.2412865657258387, 3.8620255289884353, 2.6511445367500901, 2.3681564296528759, 2.1178502784134459, 2.4027006524959704, 4.4847012689782151, 2.8754387124563219, 2.3383173887217694], [4.8109068581784316, 2.1202592771408266, 2.7240948901950901, 3.0806499448309483, 2.0219604798575306, 2.5452837022717545, 3.7324950514184696, 4.3328167447346981, 3.0359152242486602, 2.8815894798898607, 2.4314952470219375, 2.7936258809738246, 5.1413550904137146, 3.3644214225425011, 2.6694884382791546], [5.6093030750366921, 2.3865041173957149, 3.0906874855810553, 3.3625090179209156, 2.2210374912412818, 2.9087622099011363, 4.1787916887657, 4.7142020078698375, 3.307851012047319, 3.3951893092285954, 2.6908537577255762, 3.1376619968233004, 5.6210588492955305, 3.7242680240618635, 2.8336973969591983], [6.3945931299753953, 2.6514816004326791, 3.3716820089302235, 3.6483218764886902, 2.3863700872043565, 3.2013104222689206, 4.5022040533065981, 5.0931736226381776, 3.5136885049685351, 3.9347008139004784, 2.9018384802534278, 3.3989102445656725, 5.9285358715306176, 4.01961642402006, 2.9085703842103929], [7.2348796444965835, 2.8974138017887943, 3.5583384572569687, 3.9429838565291648, 2.5529337042005769, 3.4398540607220633, 4.7926283817650912, 5.5118415837853485, 3.7316462933370311, 4.4484836960925431, 3.0861939411336166, 3.64371401011475, 6.4010282408578716, 4.2815500163757605, 2.9131303105673707]]\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=7, steps=15, buffer_step=450)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64\n", "Mean Absolute Error: 0.215528703585\n", "Explained Variance Score: 0.89239332126\n", "Mean Squared Error: 0.106333053016\n", "R2 score: 0.889423358708\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64\n", "Mean Absolute Error: 0.10544394771\n", "Explained Variance Score: 0.823015071932\n", "Mean Squared Error: 0.020152560856\n", "R2 score: 0.801681477257\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64\n", "Mean Absolute Error: 0.159314434074\n", "Explained Variance Score: 0.516143726707\n", "Mean Squared Error: 0.0435129876798\n", "R2 score: 0.495386197593\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64\n", "Mean Absolute Error: 0.136614189089\n", "Explained Variance Score: 0.939952177211\n", "Mean Squared Error: 0.0322690576029\n", "R2 score: 0.928442841529\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64\n", "Mean Absolute Error: 0.140535916916\n", "Explained Variance Score: 0.809072502567\n", "Mean Squared Error: 0.0343899561873\n", "R2 score: 0.799698674935\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64\n", "Mean Absolute Error: 0.280129258983\n", "Explained Variance Score: 0.941835339241\n", "Mean Squared Error: 0.143004453044\n", "R2 score: 0.941407871428\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64\n", "Mean Absolute Error: 0.622769626763\n", "Explained Variance Score: 0.549268768233\n", "Mean Squared Error: 0.608912691972\n", "R2 score: 0.544265975032\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64\n", "Mean Absolute Error: 0.822610971931\n", "Explained Variance Score: 0.667388346685\n", "Mean Squared Error: 1.20046660692\n", "R2 score: 0.65660643821\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64\n", "Mean Absolute Error: 0.578147544172\n", "Explained Variance Score: 0.771641543361\n", "Mean Squared Error: 0.577674968314\n", "R2 score: 0.758137073698\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64\n", "Mean Absolute Error: 0.62310658889\n", "Explained Variance Score: 0.935786377244\n", "Mean Squared Error: 0.733200459648\n", "R2 score: 0.866502386196\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64\n", "Mean Absolute Error: 0.753820405372\n", "Explained Variance Score: 0.789718883382\n", "Mean Squared Error: 0.961684765187\n", "R2 score: 0.787036306482\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64\n", "Mean Absolute Error: 0.923211659748\n", "Explained Variance Score: 0.849260130266\n", "Mean Squared Error: 1.4577408598\n", "R2 score: 0.849596798634\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64\n", "Mean Absolute Error: 1.17807639875\n", "Explained Variance Score: 0.811070055435\n", "Mean Squared Error: 2.27195431925\n", "R2 score: 0.80485970809\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64\n", "Mean Absolute Error: 0.811337617748\n", "Explained Variance Score: 0.814434213769\n", "Mean Squared Error: 1.06810231014\n", "R2 score: 0.795783463702\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64\n", "Mean Absolute Error: 0.621253472644\n", "Explained Variance Score: 0.584629646453\n", "Mean Squared Error: 0.678659874536\n", "R2 score: 0.590446476591\n", "Errors: [Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64, Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64, Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64, Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64, Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64, Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64, Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64, Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64, Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64, Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64, Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64, Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64, Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64, Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64, Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64]\n", "Daily error: [[2.1917071373549142, 1.0834175849417413, 1.1790388483576231, 1.4185720767250298, 0.96921873843174433, 1.0389149513076914, 1.7978906762316238, 2.2081130786782364, 1.626428265072178, 1.1688790011372792, 1.2442918199208317, 1.3543393912886921, 2.8279137985254801, 1.4834687450605335, 1.3679706504709863], [3.2551135884486477, 1.5219113117998229, 1.7845167567514877, 2.2058091975797436, 1.4079893663844747, 1.64581116515362, 2.7233218542675242, 3.1854362480671763, 2.2185746552549848, 1.8257198705930926, 1.7965291955873381, 1.9540303097844811, 3.7968068102836212, 2.1882198067251681, 1.9383968951517652], [4.1071642717896424, 1.899441698280516, 2.2520776093061308, 2.7079657528262455, 1.7743659001210701, 2.1122985914925523, 3.356193360147429, 3.977846700859939, 2.6167864392207312, 2.3844631650635484, 2.1738537747800573, 2.383788098908028, 4.3513351771356108, 2.7333448756427385, 2.3176337055862728], [4.9069274993299832, 2.1753970232525957, 2.6855930147788434, 3.0651327146777625, 2.0068103232086885, 2.4837707641410778, 3.878115561655151, 4.5680307683121617, 2.9908780138635374, 2.9145726033700368, 2.496350569513452, 2.7916378601993737, 5.0011359073546746, 3.1891975828644781, 2.6554416096311888], [5.684571865013738, 2.4463368567295891, 3.0361268916304378, 3.3729085591425267, 2.2222876725032874, 2.8291606439532142, 4.3457001749901645, 4.9489701760890119, 3.3523269094516883, 3.484220273558515, 2.7805684594518505, 3.1350021688093856, 5.5633024838786831, 3.5779675235638311, 2.8246714585341386], [6.5457674951850882, 2.6984515540580043, 3.2977446703014217, 3.7227666232643482, 2.4311370551028717, 3.1270319944324179, 4.6977181415685774, 5.2485644247119962, 3.7005685112433282, 4.0597642961603251, 3.0202781279834614, 3.4146913692062437, 5.9173890041333834, 3.8490686937976597, 2.9228497474023731], [7.4729519181537638, 2.9691887750983366, 3.4845684255477578, 4.0859302671068836, 2.6285168571962965, 3.3663785847193122, 5.0597293035706112, 5.539855260240377, 4.0349747441790287, 4.593526881685257, 3.2322257784365647, 3.6331538446606069, 6.4351103994170922, 4.0985222258397407, 2.8998887303961443]]\n", "Mean daily error: [1.5306776509003057, 2.2298791354555303, 2.7432372747440339, 3.1872661210768669, 3.5736081411533376, 3.9102527805700995, 4.2356347997498514]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/envs/python2.7/lib/python2.7/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=10, steps=15, buffer_step=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# We want an array with predictions for our model in a long date range.\n", "# We will consider the max error predictions, that is,\n", "# predictions of adjusted close prices 7 days ahead.\n", "\n", "# Initialise variable\n", "predictions_800_off = []" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Append predictions to `predictions_800_off`.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " print \"Pred: \", pred\n", " predictions_800_off.append(pred)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Pared-down execute function that runs train-test cycles and \n", "# appends the predictions to `predictions_800_off` via the function `predict()`.\n", "def execute_viz(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print \"Buffer: \", buffer\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " predict(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "Pred: [[ 7.83601976 7.84714155 7.85292535 ..., 7.89987737 7.91755521\n", " 7.93865868]\n", " [ 7.85539551 7.86158008 7.87498252 ..., 7.90506271 7.91740818\n", " 7.93852032]\n", " [ 7.83170231 7.84749588 7.87738729 ..., 7.89285396 7.91642424\n", " 7.92424915]\n", " ..., \n", " [ 6.36738278 6.39213824 6.39270447 ..., 6.43798347 6.45461204\n", " 6.4751872 ]\n", " [ 6.42016386 6.417325 6.42707883 ..., 6.47916005 6.50267402\n", " 6.51950021]\n", " [ 6.28080118 6.27092368 6.28282955 ..., 6.30547753 6.3252951\n", " 6.3264697 ]]\n", "Buffer: 200\n", "Pred: [[ 6.14075766 6.11117589 6.09574853 ..., 6.07217018 6.07748552\n", " 6.08070167]\n", " [ 6.21540435 6.17492322 6.17149764 ..., 6.1453285 6.13813657\n", " 6.14081275]\n", " [ 6.27753279 6.27307459 6.23843178 ..., 6.24830207 6.24374508\n", " 6.21901832]\n", " ..., \n", " [ 5.75919469 5.78334022 5.79923807 ..., 5.83008595 5.859385\n", " 5.87740631]\n", " [ 5.76238715 5.7892002 5.81412139 ..., 5.85030748 5.88508911\n", " 5.88637507]\n", " [ 5.78833298 5.81875138 5.83850427 ..., 5.88612816 5.8986934\n", " 5.90478152]]\n", "Buffer: 400\n", "Pred: [[ 5.7641509 5.79247187 5.81926042 ..., 5.84616883 5.86198088\n", " 5.87727484]\n", " [ 5.8513131 5.86385014 5.88638345 ..., 5.89063265 5.90502758\n", " 5.90804928]\n", " [ 5.9113665 5.92879268 5.93253659 ..., 5.94752817 5.95264971\n", " 5.95534078]\n", " ..., \n", " [ 6.1998076 6.19815249 6.22826773 ..., 6.25852243 6.2950688\n", " 6.28322814]\n", " [ 6.19140054 6.19932943 6.23777417 ..., 6.25145184 6.25277943\n", " 6.24492933]\n", " [ 6.22481015 6.25710477 6.27123817 ..., 6.28618561 6.29833129\n", " 6.29616353]]\n", "Buffer: 600\n", "Pred: [[ 6.1645113 6.1747009 6.17346569 ..., 6.14073882 6.13655823\n", " 6.15464913]\n", " [ 6.23869668 6.22906726 6.21064429 ..., 6.19525349 6.199533 6.1829646 ]\n", " [ 5.94298817 5.92847236 5.91129748 ..., 5.89322178 5.86434585\n", " 5.87953873]\n", " ..., \n", " [ 8.94246533 8.87626646 8.89060421 ..., 8.84848815 8.85793555\n", " 8.86792794]\n", " [ 8.78322534 8.79037462 8.72943888 ..., 8.72055999 8.7383812\n", " 8.68878426]\n", " [ 8.83433927 8.76940226 8.77364936 ..., 8.77248502 8.72566135\n", " 8.69839892]]\n", "Buffer: 800\n", "Pred: [[ 8.67603806 8.67084409 8.65130791 ..., 8.67378925 8.69676109\n", " 8.69455006]\n", " [ 8.82830315 8.8205379 8.86009166 ..., 8.87552595 8.85568772\n", " 8.84410872]\n", " [ 8.84748948 8.84911858 8.81238761 ..., 8.78189801 8.75265697\n", " 8.72581647]\n", " ..., \n", " [ 7.71616361 7.7100549 7.68435219 ..., 7.6489673 7.61926738\n", " 7.60503466]\n", " [ 7.59805829 7.59515854 7.53381661 ..., 7.5060898 7.47964638\n", " 7.49137924]\n", " [ 7.54657369 7.52483132 7.53333146 ..., 7.50714863 7.52033692\n", " 7.5104685 ]]\n", "Buffer: 1000\n", "Pred: [[ 7.46215011 7.4436282 7.43918656 ..., 7.5010726 7.48113362\n", " 7.48813435]\n", " [ 7.56216243 7.57242677 7.60962549 ..., 7.59408734 7.58687173\n", " 7.59213207]\n", " [ 7.55189234 7.58738691 7.61589834 ..., 7.60049142 7.60064947\n", " 7.60278131]\n", " ..., \n", " [ 6.19883297 6.22711546 6.24523835 ..., 6.30446123 6.33864273\n", " 6.33903875]\n", " [ 6.17836606 6.19567673 6.22059366 ..., 6.29335772 6.30085317\n", " 6.31700372]\n", " [ 6.30048133 6.33373495 6.37895762 ..., 6.41007597 6.40794933\n", " 6.42844116]]\n", "Buffer: 1200\n", "Pred: [[ 6.30754289 6.34315541 6.37136507 ..., 6.34725709 6.3533664\n", " 6.36701006]\n", " [ 6.2183139 6.22645131 6.20859811 ..., 6.19826357 6.21393204\n", " 6.22498325]\n", " [ 6.13231736 6.11064193 6.06756449 ..., 6.10864178 6.12762316\n", " 6.12009367]\n", " ..., \n", " [ 4.93362234 4.93814477 4.93428253 ..., 4.96908178 4.9916257\n", " 5.0119479 ]\n", " [ 4.94855637 4.96672313 4.9753907 ..., 5.01327007 5.04827391\n", " 5.06702398]\n", " [ 4.94109813 4.95766805 4.9861515 ..., 5.00727657 5.02994663\n", " 5.03880748]]\n", "Buffer: 1400\n", "Pred: [[ 4.99871061 5.02010571 5.014281 ..., 5.0026121 4.99747618\n", " 4.97557435]\n", " [ 5.15365698 5.15594044 5.1491617 ..., 5.09127283 5.05670229\n", " 5.06074197]\n", " [ 5.15264849 5.14912635 5.12308927 ..., 5.05939273 5.0643763\n", " 5.04887009]\n", " ..., \n", " [ 6.73631505 6.69817443 6.67661297 ..., 6.63990072 6.64029307\n", " 6.62941594]\n", " [ 6.80586543 6.78280213 6.77308604 ..., 6.73267206 6.70165677\n", " 6.68567721]\n", " [ 6.87717059 6.8713965 6.85461032 ..., 6.80891943 6.78659161\n", " 6.7676666 ]]\n", "Buffer: 1600\n", "Pred: [[ 6.88960025 6.895621 6.91178743 ..., 6.90648271 6.91037924\n", " 6.91464528]\n", " [ 6.92029213 6.93896731 6.93794831 ..., 6.94105214 6.94581302\n", " 6.93479959]\n", " [ 6.94258489 6.94132069 6.93738101 ..., 6.95109387 6.94439441\n", " 6.96149157]\n", " ..., \n", " [ 8.63303575 8.6153931 8.62242329 ..., 8.60348853 8.61375744\n", " 8.62515753]\n", " [ 8.65670167 8.66375148 8.66798893 ..., 8.65346248 8.65856181\n", " 8.64789495]\n", " [ 8.7674598 8.76709683 8.7645547 ..., 8.78059364 8.7585914\n", " 8.76297732]]\n", "Buffer: 1800\n", "Pred: [[ 8.68953042 8.68353244 8.69167093 ..., 8.69226758 8.69669531\n", " 8.70359861]\n", " [ 8.66104825 8.66338749 8.68358337 ..., 8.67084048 8.68664223\n", " 8.67802482]\n", " [ 8.67468363 8.69245015 8.66828894 ..., 8.69130084 8.67790535\n", " 8.69542446]\n", " ..., \n", " [ 10.25132895 10.26123566 10.25052647 ..., 10.2702956 10.28387785\n", " 10.29072272]\n", " [ 10.18370737 10.17290369 10.18125306 ..., 10.2112286 10.21762469\n", " 10.21706292]\n", " [ 10.22958344 10.23782323 10.24337281 ..., 10.26467471 10.25519154\n", " 10.2341133 ]]\n", "Buffer: 2000\n", "Pred: [[ 10.22064293 10.22413787 10.24471743 ..., 10.27029812 10.2744557\n", " 10.28765738]\n", " [ 10.26516025 10.27459074 10.29442757 ..., 10.31496257 10.32870539\n", " 10.33393516]\n", " [ 10.12818121 10.13767282 10.16435904 ..., 10.23174691 10.25429594\n", " 10.27571162]\n", " ..., \n", " [ 11.64694204 11.67793627 11.71878894 ..., 11.72885817 11.73598723\n", " 11.74138426]\n", " [ 11.50646666 11.55801859 11.60061623 ..., 11.59712143 11.60710104\n", " 11.62519194]\n", " [ 11.66543188 11.70375594 11.72575794 ..., 11.7634877 11.80012102\n", " 11.80921948]]\n", "Buffer: 2200\n", "Pred: [[ 11.62959737 11.64537291 11.62913452 ..., 11.63915597 11.63946331\n", " 11.67432874]\n", " [ 11.51306747 11.4921517 11.48731226 ..., 11.48843655 11.5272199\n", " 11.53575298]\n", " [ 11.4459014 11.44132033 11.44303377 ..., 11.43963244 11.4371997\n", " 11.45553989]\n", " ..., \n", " [ 16.22239336 16.21976356 16.22826391 ..., 16.21574299 16.22293648\n", " 16.26595504]\n", " [ 15.98826989 16.00674066 16.03692572 ..., 16.0496106 16.10671921\n", " 16.11635139]\n", " [ 15.79752122 15.88073774 15.95919399 ..., 16.04615273 16.04535607\n", " 16.03367065]]\n", "Buffer: 2400\n", "Pred: [[ 16.04780654 16.10427504 16.15325971 ..., 16.21640137 16.23310984\n", " 16.24580039]\n", " [ 15.93923871 15.96865021 16.01241045 ..., 16.04899501 16.0097939\n", " 16.01058251]\n", " [ 15.95002904 15.99504448 16.00543129 ..., 16.08477758 16.0724383\n", " 16.01255977]\n", " ..., \n", " [ 20.43621626 20.48574881 20.53403285 ..., 20.5853136 20.65182418\n", " 20.70740506]\n", " [ 21.01478432 21.0377329 21.06384251 ..., 21.11292127 21.16689338\n", " 21.25102393]\n", " [ 20.80946572 20.84214892 20.83450899 ..., 20.87816108 20.94758599\n", " 20.97840243]]\n", "Buffer: 2600\n", "Pred: [[ 20.79530755 20.70031722 20.67570255 ..., 20.67175512 20.75003016\n", " 20.7424359 ]\n", " [ 20.51491535 20.51195086 20.47751748 ..., 20.61619501 20.61899275\n", " 20.71100874]\n", " [ 20.88903686 20.83145557 20.76382639 ..., 20.84093447 20.95482155\n", " 20.93470293]\n", " ..., \n", " [ 21.35898088 21.44310834 21.58442593 ..., 21.67728542 21.63729079\n", " 21.76718696]\n", " [ 21.02670418 21.22586046 21.36227848 ..., 21.31522747 21.4562707\n", " 21.61980196]\n", " [ 21.08453035 21.20775213 21.19865266 ..., 21.28921609 21.44822081\n", " 21.56667633]]\n", "Buffer: 2800\n", "Pred: [[ 20.44161666 20.44133304 20.50606671 ..., 20.78067392 20.83525299\n", " 20.88356921]\n", " [ 20.47831642 20.55669655 20.6800365 ..., 20.94345539 21.0255306\n", " 21.09250263]\n", " [ 20.0543866 20.24467179 20.42056851 ..., 20.71879315 20.80801567\n", " 20.8139791 ]\n", " ..., \n", " [ 25.55444964 25.73089496 25.78688107 ..., 25.83001772 25.87363941\n", " 25.94209486]\n", " [ 26.10683785 26.13568262 26.21882171 ..., 26.1706635 26.17482513\n", " 25.99067047]\n", " [ 25.78641012 25.93842086 25.87267253 ..., 26.02785251 25.8333293\n", " 25.74114593]]\n", "Buffer: 3000\n", "Pred: [[ 26.09202122 26.16659026 26.28513376 ..., 26.27827853 26.19880974\n", " 26.29279004]\n", " [ 27.09296713 27.16525979 27.07816223 ..., 26.79828223 26.82462005\n", " 26.80115994]\n", " [ 27.37426618 27.26991991 27.08514753 ..., 26.99525355 27.0364177\n", " 27.06762629]\n", " ..., \n", " [ 25.74252888 25.81395317 25.96051853 ..., 26.19018399 26.25012269\n", " 26.22686022]\n", " [ 24.28942298 24.55436301 24.86490981 ..., 25.19589939 25.32405251\n", " 25.35862108]\n", " [ 24.10812922 24.39599208 24.70467848 ..., 25.0249339 25.12917584\n", " 25.13941702]]\n", "Buffer: 3200\n", "Pred: [[ 23.89936317 24.16238987 24.37814933 ..., 24.6867283 24.73517262\n", " 24.9000166 ]\n", " [ 22.796028 23.03957929 23.36191281 ..., 23.95134918 24.05807653\n", " 24.32577573]\n", " [ 23.98201714 24.24346901 24.60352667 ..., 24.83600538 25.01300299\n", " 25.28700399]\n", " ..., \n", " [ 25.88867191 25.80319669 25.80762619 ..., 25.73744858 25.58444691\n", " 25.6317368 ]\n", " [ 25.74242634 25.69379746 25.73573117 ..., 25.64464014 25.67333293\n", " 25.64796163]\n", " [ 25.3468584 25.36760481 25.38439543 ..., 25.45652486 25.45199294\n", " 25.37327864]]\n", "Buffer: 3400\n", "Pred: [[ 25.98449668 25.98521208 25.95242912 ..., 25.89368463 25.88045388\n", " 25.93171006]\n", " [ 25.76105977 25.70375977 25.63967045 ..., 25.59240848 25.66132277\n", " 25.66463929]\n", " [ 25.23810548 25.19061044 25.23695191 ..., 25.46131797 25.38041014\n", " 25.40377967]\n", " ..., \n", " [ 26.24824289 26.17127915 26.07623138 ..., 25.84710184 25.78029758\n", " 25.70586174]\n", " [ 26.19759651 26.09744315 25.92235382 ..., 25.63588018 25.63291115\n", " 25.59553912]\n", " [ 25.77531313 25.60455853 25.42752481 ..., 25.30530249 25.33317719\n", " 25.22147558]]\n", "Buffer: 3600\n", "Pred: [[ 25.40656908 25.27074144 25.21409378 ..., 25.28521185 25.22632841\n", " 25.16945681]\n", " [ 25.18921491 25.07334629 25.05299874 ..., 24.94128607 24.95502997\n", " 24.95791613]\n", " [ 24.81985555 24.80298349 24.7612829 ..., 24.59692495 24.58690609\n", " 24.58263133]\n", " ..., \n", " [ 26.0389708 25.93263093 25.87256265 ..., 25.77298706 25.6439993\n", " 25.58368641]\n", " [ 26.56849541 26.50595118 26.36715477 ..., 26.37166457 26.3312083\n", " 26.14700985]\n", " [ 26.80613189 26.67530444 26.66849488 ..., 26.59946944 26.42169587\n", " 26.33018949]]\n", "Buffer: 3800\n", "Pred: [[ 26.06044987 26.12046614 26.05471894 ..., 25.93053422 25.96502619\n", " 25.96056563]\n", " [ 26.03326405 25.99975566 25.8123115 ..., 25.6606701 25.76405528\n", " 25.65340638]\n", " [ 26.56229083 26.42947167 26.36848794 ..., 26.51685341 26.46719925\n", " 26.41071161]\n", " ..., \n", " [ 21.28992895 21.33566945 21.43008967 ..., 21.71406469 21.85169081\n", " 21.92897556]\n", " [ 21.21583534 21.37312981 21.57666978 ..., 21.84861172 21.88918311\n", " 21.93881172]\n", " [ 21.1126037 21.34119817 21.47466187 ..., 21.63830162 21.80664827\n", " 21.87502314]]\n", "Buffer: 4000\n", "Pred: [[ 21.24389337 21.37252773 21.35683562 ..., 21.48408902 21.48832578\n", " 21.4263668 ]\n", " [ 21.22127677 21.24046477 21.34895607 ..., 21.41706179 21.37656328\n", " 21.35550317]\n", " [ 21.43282338 21.46888922 21.493978 ..., 21.51923313 21.50631784\n", " 21.53775008]\n", " ..., \n", " [ 26.79653366 26.64113656 26.49911428 ..., 26.25092122 26.10219452\n", " 25.9559183 ]\n", " [ 26.50290012 26.38396506 26.21567803 ..., 26.05643976 25.92729177\n", " 25.75297956]\n", " [ 26.49228551 26.2948515 26.14185587 ..., 25.91011466 25.7620661\n", " 25.60436813]]\n", "Buffer: 4200\n", "Pred: [[ 26.59862697 26.53265571 26.46607521 ..., 26.31185187 26.22269463\n", " 26.15406759]\n", " [ 26.55732047 26.49355051 26.42777149 ..., 26.2624713 26.21316348\n", " 26.13021364]\n", " [ 26.38850061 26.32645169 26.21572275 ..., 26.15394371 26.11911926\n", " 25.99641195]\n", " ..., \n", " [ 34.39713553 34.08620781 33.9011808 ..., 33.34027792 33.04665311\n", " 32.89668644]\n", " [ 33.98517109 33.82119053 33.5508494 ..., 33.05718995 32.86762085\n", " 32.58866132]\n", " [ 33.8906325 33.64126562 33.39516092 ..., 32.95667114 32.6643352\n", " 32.42929969]]\n", "Buffer: 4400\n", "Pred: [[ 34.41874727 34.43546507 34.39947704 ..., 34.34448666 34.32896368\n", " 34.34120397]\n", " [ 34.46582211 34.4089387 34.43652649 ..., 34.3424298 34.30309225\n", " 34.3895445 ]\n", " [ 34.59749054 34.58828052 34.57559093 ..., 34.53213034 34.55857317\n", " 34.6258566 ]\n", " ..., \n", " [ 39.55704137 39.59838257 39.602544 ..., 39.60300783 39.63200396\n", " 39.69585152]\n", " [ 40.46611222 40.43535902 40.40883545 ..., 40.43070392 40.44180509\n", " 40.54478546]\n", " [ 41.35119597 41.342732 41.31906462 ..., 41.47767905 41.55588714\n", " 41.5559466 ]]\n", "Buffer: 4600\n", "Pred: [[ 41.24501714 41.30563545 41.33906701 ..., 41.41231404 41.36247167\n", " 41.32137465]\n", " [ 41.55176282 41.61250172 41.6040215 ..., 41.5859052 41.4933257\n", " 41.49596777]\n", " [ 41.11082905 41.21096532 41.24008778 ..., 41.10885342 41.11014781\n", " 41.19066485]\n", " ..., \n", " [ 40.40333667 40.57757536 40.7444689 ..., 40.55767817 40.62361813\n", " 40.7688445 ]\n", " [ 39.63679228 39.85222014 39.7001448 ..., 39.82137182 39.90308844\n", " 39.89175773]\n", " [ 40.03398294 39.90566847 39.92936408 ..., 40.00273409 39.99056338\n", " 40.13290444]]\n", "Buffer: 4800\n", "Pred: [[ 40.57613285 40.36745876 40.34832271 ..., 40.14127925 40.25699571\n", " 40.17561628]\n", " [ 39.98152946 40.00012052 39.84018882 ..., 39.76283388 39.68356018\n", " 39.62743014]\n", " [ 40.65448136 40.47656975 40.40428358 ..., 40.32405542 40.34608955\n", " 40.51020122]\n", " ..., \n", " [ 40.70973214 40.82156695 40.94997294 ..., 41.05915738 41.2009332\n", " 41.24048475]\n", " [ 40.74221266 40.91247665 40.94516366 ..., 41.11094752 41.12695732\n", " 41.2238754 ]\n", " [ 40.51848579 40.63794176 40.6930074 ..., 40.83603721 40.96158001\n", " 41.20000058]]\n", "Buffer: 5000\n", "Pred: [[ 41.02840608 40.97742881 41.04879639 ..., 41.08703686 41.13259893\n", " 41.13751978]\n", " [ 41.06644308 41.14932577 41.14604797 ..., 41.28572476 41.31572252\n", " 41.31868877]\n", " [ 42.00121108 41.91105222 41.98860594 ..., 42.05340097 42.0514623\n", " 42.07459136]\n", " ..., \n", " [ 41.61889522 41.77265455 42.134165 ..., 42.26888054 42.27023834\n", " 42.27099558]\n", " [ 39.61382401 39.3572463 38.99373902 ..., 39.08954502 39.72855523\n", " 40.20378919]\n", " [ 39.26326568 38.77189241 38.68857487 ..., 38.98425831 39.33537682\n", " 39.83910962]]\n", "Buffer: 5200\n", "Pred: [[ 40.47205982 40.6031967 40.7555591 ..., 41.30306999 41.58849567\n", " 42.20678238]\n", " [ 40.53496451 40.74019047 40.91134542 ..., 41.1356297 41.85741949\n", " 42.23975788]\n", " [ 40.68819248 40.89227875 40.86005788 ..., 41.29318408 41.69474886\n", " 41.93568032]\n", " ..., \n", " [ 32.58236996 32.68722674 32.94694616 ..., 33.68935864 34.40763451\n", " 35.0411307 ]\n", " [ 34.11827593 34.29691869 34.56631295 ..., 35.77380712 36.1406701\n", " 36.65944805]\n", " [ 32.53922298 32.93070035 33.1267649 ..., 33.88362425 34.34724461\n", " 35.05498163]]\n", "Buffer: 5400\n", "Pred: [[ 31.52461716 31.57967856 31.70310795 ..., 31.60969549 31.97998058\n", " 31.76583509]\n", " [ 32.56237362 32.44398294 32.30184175 ..., 32.87763302 32.50008364\n", " 32.21124309]\n", " [ 32.08373777 32.0604223 32.18122015 ..., 32.3427488 31.88531891\n", " 32.15190584]\n", " ..., \n", " [ 36.47434384 36.56338542 36.61949077 ..., 36.48991746 36.31746724\n", " 36.40344402]\n", " [ 37.24605504 37.18514913 37.20037653 ..., 36.99259881 36.96397396\n", " 36.84186326]\n", " [ 37.03819783 37.07523111 37.0042887 ..., 36.83422073 36.62528101\n", " 36.64031558]]\n", "Buffer: 5600\n", "Pred: [[ 37.15097768 37.16165774 37.0631008 ..., 36.92139965 36.90713708\n", " 36.99238524]\n", " [ 36.81621957 36.81704608 36.83068939 ..., 36.76175825 36.76190017\n", " 36.74666901]\n", " [ 37.09933134 37.1138151 37.12286448 ..., 37.17231345 37.17322168\n", " 37.11568705]\n", " ..., \n", " [ 25.7344187 26.06591327 26.15460221 ..., 27.08788596 27.12449494\n", " 27.39248972]\n", " [ 22.49560126 22.71537861 22.34032905 ..., 22.91827229 22.94172241\n", " 24.24507425]\n", " [ 24.54302106 24.12607841 24.37067691 ..., 24.36400232 25.51053396\n", " 26.15846606]]\n", "Buffer: 5800\n", "Pred: [[ 24.79977904 24.69590721 24.0883611 ..., 24.91928808 25.20504994\n", " 25.25962951]\n", " [ 23.1419501 22.66726302 21.87925864 ..., 23.11620493 22.89603025\n", " 23.68080167]\n", " [ 23.12996329 22.22263254 23.34052642 ..., 23.00870146 23.76270941\n", " 23.85789826]\n", " ..., \n", " [ 35.2820164 35.36034423 35.48074954 ..., 35.78691612 35.82649512\n", " 35.96429514]\n", " [ 35.47454644 35.55712141 35.53895006 ..., 35.77111792 35.8272775\n", " 36.00105157]\n", " [ 35.59562223 35.77160935 35.9847767 ..., 36.14101777 36.22937931\n", " 36.35845682]]\n", "Buffer: 6000\n", "Pred: [[ 34.87543571 35.05866248 34.96081266 ..., 34.91188916 34.8865196\n", " 35.09534966]\n", " [ 34.07850517 34.09411023 33.94862945 ..., 33.7652154 33.70499976\n", " 34.01118595]\n", " [ 33.74560074 33.59630762 33.55275587 ..., 33.25894686 33.44248384\n", " 33.64523254]\n", " ..., \n", " [ 34.37043957 34.49072721 34.46713889 ..., 34.61641291 34.6316781\n", " 34.65009482]\n", " [ 34.34755901 34.44125379 34.69034084 ..., 34.58201637 34.64234545\n", " 34.57663455]\n", " [ 34.57448406 34.80322892 34.60662199 ..., 34.71353755 34.54698945\n", " 34.75533398]]\n", "Buffer: 6200\n", "Pred: [[ 34.48058576 34.46931947 34.39645689 ..., 34.56175966 34.60120682\n", " 34.6889119 ]\n", " [ 34.42459542 34.4041518 34.59273011 ..., 34.71655572 34.77569208\n", " 34.91001211]\n", " [ 34.02746584 34.17503955 34.19326864 ..., 34.41906863 34.49378041\n", " 34.54149122]\n", " ..., \n", " [ 34.26729796 34.33198393 34.52037656 ..., 34.26471212 34.32199879\n", " 34.43204531]\n", " [ 33.37651991 33.60677572 33.52148382 ..., 33.42863803 33.44812737\n", " 33.44797037]\n", " [ 33.77101123 33.70474743 33.57014533 ..., 33.57211048 33.6467882\n", " 33.75261216]]\n", "Buffer: 6400\n", "Pred: [[ 33.53133289 33.43869191 33.37263046 ..., 33.32649401 33.31416629\n", " 33.19199006]\n", " [ 33.46584109 33.39713333 33.33327354 ..., 33.28221668 33.15383874\n", " 33.13431947]\n", " [ 34.41622601 34.29761196 34.4366854 ..., 34.39820455 34.52023716\n", " 34.3539505 ]\n", " ..., \n", " [ 34.78692903 34.73536166 34.73454473 ..., 34.35468426 34.27153208\n", " 34.18379174]\n", " [ 35.01790079 34.99299477 34.80046662 ..., 34.59019432 34.47643505\n", " 34.32671027]\n", " [ 34.93577164 34.68553218 34.54299772 ..., 34.42529695 34.26793524\n", " 34.20209156]]\n", "Buffer: 6600\n", "Pred: [[ 34.97898179 34.98256211 35.07425527 ..., 35.19605749 35.29951325\n", " 35.34528396]\n", " [ 35.01624583 35.10178264 35.12680389 ..., 35.30594613 35.35298146\n", " 35.4299613 ]\n", " [ 34.93937399 34.9619017 35.07676871 ..., 35.17815547 35.28027676\n", " 35.31059197]\n", " ..., \n", " [ 44.10058135 43.8139945 43.50204997 ..., 42.79200923 42.46908938\n", " 42.18424781]\n", " [ 43.92034495 43.61468664 43.30103441 ..., 42.6139226 42.32034584\n", " 42.01517437]\n", " [ 44.03369297 43.71493941 43.41566069 ..., 42.70811157 42.40436291\n", " 42.15296897]]\n", "Buffer: 6800\n", "Pred: [[ 44.26824904 44.22815477 44.2189972 ..., 44.12417068 44.16232578\n", " 44.12297489]\n", " [ 43.86504688 43.81346145 43.79542729 ..., 43.81453745 43.80092968\n", " 43.78132118]\n", " [ 44.17142766 44.10927042 44.07602426 ..., 44.01900881 44.03224618\n", " 44.05145594]\n", " ..., \n", " [ 34.95488639 35.16294448 35.49386909 ..., 35.56308703 35.46595545\n", " 35.52188355]\n", " [ 36.1446683 36.4019933 36.67338125 ..., 36.68118139 36.80819138\n", " 36.84463694]\n", " [ 35.82839891 35.92646934 36.05010142 ..., 36.31325315 36.35564094\n", " 36.41780309]]\n" ] }, { "data": { "text/plain": [ "[array([[ 7.83601976, 7.84714155, 7.85292535, ..., 7.89987737,\n", " 7.91755521, 7.93865868],\n", " [ 7.85539551, 7.86158008, 7.87498252, ..., 7.90506271,\n", " 7.91740818, 7.93852032],\n", " [ 7.83170231, 7.84749588, 7.87738729, ..., 7.89285396,\n", " 7.91642424, 7.92424915],\n", " ..., \n", " [ 6.36738278, 6.39213824, 6.39270447, ..., 6.43798347,\n", " 6.45461204, 6.4751872 ],\n", " [ 6.42016386, 6.417325 , 6.42707883, ..., 6.47916005,\n", " 6.50267402, 6.51950021],\n", " [ 6.28080118, 6.27092368, 6.28282955, ..., 6.30547753,\n", " 6.3252951 , 6.3264697 ]]),\n", " array([[ 6.14075766, 6.11117589, 6.09574853, ..., 6.07217018,\n", " 6.07748552, 6.08070167],\n", " [ 6.21540435, 6.17492322, 6.17149764, ..., 6.1453285 ,\n", " 6.13813657, 6.14081275],\n", " [ 6.27753279, 6.27307459, 6.23843178, ..., 6.24830207,\n", " 6.24374508, 6.21901832],\n", " ..., \n", " [ 5.75919469, 5.78334022, 5.79923807, ..., 5.83008595,\n", " 5.859385 , 5.87740631],\n", " [ 5.76238715, 5.7892002 , 5.81412139, ..., 5.85030748,\n", " 5.88508911, 5.88637507],\n", " [ 5.78833298, 5.81875138, 5.83850427, ..., 5.88612816,\n", " 5.8986934 , 5.90478152]]),\n", " array([[ 5.7641509 , 5.79247187, 5.81926042, ..., 5.84616883,\n", " 5.86198088, 5.87727484],\n", " [ 5.8513131 , 5.86385014, 5.88638345, ..., 5.89063265,\n", " 5.90502758, 5.90804928],\n", " [ 5.9113665 , 5.92879268, 5.93253659, ..., 5.94752817,\n", " 5.95264971, 5.95534078],\n", " ..., \n", " [ 6.1998076 , 6.19815249, 6.22826773, ..., 6.25852243,\n", " 6.2950688 , 6.28322814],\n", " [ 6.19140054, 6.19932943, 6.23777417, ..., 6.25145184,\n", " 6.25277943, 6.24492933],\n", " [ 6.22481015, 6.25710477, 6.27123817, ..., 6.28618561,\n", " 6.29833129, 6.29616353]]),\n", " array([[ 6.1645113 , 6.1747009 , 6.17346569, ..., 6.14073882,\n", " 6.13655823, 6.15464913],\n", " [ 6.23869668, 6.22906726, 6.21064429, ..., 6.19525349,\n", " 6.199533 , 6.1829646 ],\n", " [ 5.94298817, 5.92847236, 5.91129748, ..., 5.89322178,\n", " 5.86434585, 5.87953873],\n", " ..., \n", " [ 8.94246533, 8.87626646, 8.89060421, ..., 8.84848815,\n", " 8.85793555, 8.86792794],\n", " [ 8.78322534, 8.79037462, 8.72943888, ..., 8.72055999,\n", " 8.7383812 , 8.68878426],\n", " [ 8.83433927, 8.76940226, 8.77364936, ..., 8.77248502,\n", " 8.72566135, 8.69839892]]),\n", " array([[ 8.67603806, 8.67084409, 8.65130791, ..., 8.67378925,\n", " 8.69676109, 8.69455006],\n", " [ 8.82830315, 8.8205379 , 8.86009166, ..., 8.87552595,\n", " 8.85568772, 8.84410872],\n", " [ 8.84748948, 8.84911858, 8.81238761, ..., 8.78189801,\n", " 8.75265697, 8.72581647],\n", " ..., \n", " [ 7.71616361, 7.7100549 , 7.68435219, ..., 7.6489673 ,\n", " 7.61926738, 7.60503466],\n", " [ 7.59805829, 7.59515854, 7.53381661, ..., 7.5060898 ,\n", " 7.47964638, 7.49137924],\n", " [ 7.54657369, 7.52483132, 7.53333146, ..., 7.50714863,\n", " 7.52033692, 7.5104685 ]]),\n", " array([[ 7.46215011, 7.4436282 , 7.43918656, ..., 7.5010726 ,\n", " 7.48113362, 7.48813435],\n", " [ 7.56216243, 7.57242677, 7.60962549, ..., 7.59408734,\n", " 7.58687173, 7.59213207],\n", " [ 7.55189234, 7.58738691, 7.61589834, ..., 7.60049142,\n", " 7.60064947, 7.60278131],\n", " ..., \n", " [ 6.19883297, 6.22711546, 6.24523835, ..., 6.30446123,\n", " 6.33864273, 6.33903875],\n", " [ 6.17836606, 6.19567673, 6.22059366, ..., 6.29335772,\n", " 6.30085317, 6.31700372],\n", " [ 6.30048133, 6.33373495, 6.37895762, ..., 6.41007597,\n", " 6.40794933, 6.42844116]]),\n", " array([[ 6.30754289, 6.34315541, 6.37136507, ..., 6.34725709,\n", " 6.3533664 , 6.36701006],\n", " [ 6.2183139 , 6.22645131, 6.20859811, ..., 6.19826357,\n", " 6.21393204, 6.22498325],\n", " [ 6.13231736, 6.11064193, 6.06756449, ..., 6.10864178,\n", " 6.12762316, 6.12009367],\n", " ..., \n", " [ 4.93362234, 4.93814477, 4.93428253, ..., 4.96908178,\n", " 4.9916257 , 5.0119479 ],\n", " [ 4.94855637, 4.96672313, 4.9753907 , ..., 5.01327007,\n", " 5.04827391, 5.06702398],\n", " [ 4.94109813, 4.95766805, 4.9861515 , ..., 5.00727657,\n", " 5.02994663, 5.03880748]]),\n", " array([[ 4.99871061, 5.02010571, 5.014281 , ..., 5.0026121 ,\n", " 4.99747618, 4.97557435],\n", " [ 5.15365698, 5.15594044, 5.1491617 , ..., 5.09127283,\n", " 5.05670229, 5.06074197],\n", " [ 5.15264849, 5.14912635, 5.12308927, ..., 5.05939273,\n", " 5.0643763 , 5.04887009],\n", " ..., \n", " [ 6.73631505, 6.69817443, 6.67661297, ..., 6.63990072,\n", " 6.64029307, 6.62941594],\n", " [ 6.80586543, 6.78280213, 6.77308604, ..., 6.73267206,\n", " 6.70165677, 6.68567721],\n", " [ 6.87717059, 6.8713965 , 6.85461032, ..., 6.80891943,\n", " 6.78659161, 6.7676666 ]]),\n", " array([[ 6.88960025, 6.895621 , 6.91178743, ..., 6.90648271,\n", " 6.91037924, 6.91464528],\n", " [ 6.92029213, 6.93896731, 6.93794831, ..., 6.94105214,\n", " 6.94581302, 6.93479959],\n", " [ 6.94258489, 6.94132069, 6.93738101, ..., 6.95109387,\n", " 6.94439441, 6.96149157],\n", " ..., \n", " [ 8.63303575, 8.6153931 , 8.62242329, ..., 8.60348853,\n", " 8.61375744, 8.62515753],\n", " [ 8.65670167, 8.66375148, 8.66798893, ..., 8.65346248,\n", " 8.65856181, 8.64789495],\n", " [ 8.7674598 , 8.76709683, 8.7645547 , ..., 8.78059364,\n", " 8.7585914 , 8.76297732]]),\n", " array([[ 8.68953042, 8.68353244, 8.69167093, ..., 8.69226758,\n", " 8.69669531, 8.70359861],\n", " [ 8.66104825, 8.66338749, 8.68358337, ..., 8.67084048,\n", " 8.68664223, 8.67802482],\n", " [ 8.67468363, 8.69245015, 8.66828894, ..., 8.69130084,\n", " 8.67790535, 8.69542446],\n", " ..., \n", " [ 10.25132895, 10.26123566, 10.25052647, ..., 10.2702956 ,\n", " 10.28387785, 10.29072272],\n", " [ 10.18370737, 10.17290369, 10.18125306, ..., 10.2112286 ,\n", " 10.21762469, 10.21706292],\n", " [ 10.22958344, 10.23782323, 10.24337281, ..., 10.26467471,\n", " 10.25519154, 10.2341133 ]]),\n", " array([[ 10.22064293, 10.22413787, 10.24471743, ..., 10.27029812,\n", " 10.2744557 , 10.28765738],\n", " [ 10.26516025, 10.27459074, 10.29442757, ..., 10.31496257,\n", " 10.32870539, 10.33393516],\n", " [ 10.12818121, 10.13767282, 10.16435904, ..., 10.23174691,\n", " 10.25429594, 10.27571162],\n", " ..., \n", " [ 11.64694204, 11.67793627, 11.71878894, ..., 11.72885817,\n", " 11.73598723, 11.74138426],\n", " [ 11.50646666, 11.55801859, 11.60061623, ..., 11.59712143,\n", " 11.60710104, 11.62519194],\n", " [ 11.66543188, 11.70375594, 11.72575794, ..., 11.7634877 ,\n", " 11.80012102, 11.80921948]]),\n", " array([[ 11.62959737, 11.64537291, 11.62913452, ..., 11.63915597,\n", " 11.63946331, 11.67432874],\n", " [ 11.51306747, 11.4921517 , 11.48731226, ..., 11.48843655,\n", " 11.5272199 , 11.53575298],\n", " [ 11.4459014 , 11.44132033, 11.44303377, ..., 11.43963244,\n", " 11.4371997 , 11.45553989],\n", " ..., \n", " [ 16.22239336, 16.21976356, 16.22826391, ..., 16.21574299,\n", " 16.22293648, 16.26595504],\n", " [ 15.98826989, 16.00674066, 16.03692572, ..., 16.0496106 ,\n", " 16.10671921, 16.11635139],\n", " [ 15.79752122, 15.88073774, 15.95919399, ..., 16.04615273,\n", " 16.04535607, 16.03367065]]),\n", " array([[ 16.04780654, 16.10427504, 16.15325971, ..., 16.21640137,\n", " 16.23310984, 16.24580039],\n", " [ 15.93923871, 15.96865021, 16.01241045, ..., 16.04899501,\n", " 16.0097939 , 16.01058251],\n", " [ 15.95002904, 15.99504448, 16.00543129, ..., 16.08477758,\n", " 16.0724383 , 16.01255977],\n", " ..., \n", " [ 20.43621626, 20.48574881, 20.53403285, ..., 20.5853136 ,\n", " 20.65182418, 20.70740506],\n", " [ 21.01478432, 21.0377329 , 21.06384251, ..., 21.11292127,\n", " 21.16689338, 21.25102393],\n", " [ 20.80946572, 20.84214892, 20.83450899, ..., 20.87816108,\n", " 20.94758599, 20.97840243]]),\n", " array([[ 20.79530755, 20.70031722, 20.67570255, ..., 20.67175512,\n", " 20.75003016, 20.7424359 ],\n", " [ 20.51491535, 20.51195086, 20.47751748, ..., 20.61619501,\n", " 20.61899275, 20.71100874],\n", " [ 20.88903686, 20.83145557, 20.76382639, ..., 20.84093447,\n", " 20.95482155, 20.93470293],\n", " ..., \n", " [ 21.35898088, 21.44310834, 21.58442593, ..., 21.67728542,\n", " 21.63729079, 21.76718696],\n", " [ 21.02670418, 21.22586046, 21.36227848, ..., 21.31522747,\n", " 21.4562707 , 21.61980196],\n", " [ 21.08453035, 21.20775213, 21.19865266, ..., 21.28921609,\n", " 21.44822081, 21.56667633]]),\n", " array([[ 20.44161666, 20.44133304, 20.50606671, ..., 20.78067392,\n", " 20.83525299, 20.88356921],\n", " [ 20.47831642, 20.55669655, 20.6800365 , ..., 20.94345539,\n", " 21.0255306 , 21.09250263],\n", " [ 20.0543866 , 20.24467179, 20.42056851, ..., 20.71879315,\n", " 20.80801567, 20.8139791 ],\n", " ..., \n", " [ 25.55444964, 25.73089496, 25.78688107, ..., 25.83001772,\n", " 25.87363941, 25.94209486],\n", " [ 26.10683785, 26.13568262, 26.21882171, ..., 26.1706635 ,\n", " 26.17482513, 25.99067047],\n", " [ 25.78641012, 25.93842086, 25.87267253, ..., 26.02785251,\n", " 25.8333293 , 25.74114593]]),\n", " array([[ 26.09202122, 26.16659026, 26.28513376, ..., 26.27827853,\n", " 26.19880974, 26.29279004],\n", " [ 27.09296713, 27.16525979, 27.07816223, ..., 26.79828223,\n", " 26.82462005, 26.80115994],\n", " [ 27.37426618, 27.26991991, 27.08514753, ..., 26.99525355,\n", " 27.0364177 , 27.06762629],\n", " ..., \n", " [ 25.74252888, 25.81395317, 25.96051853, ..., 26.19018399,\n", " 26.25012269, 26.22686022],\n", " [ 24.28942298, 24.55436301, 24.86490981, ..., 25.19589939,\n", " 25.32405251, 25.35862108],\n", " [ 24.10812922, 24.39599208, 24.70467848, ..., 25.0249339 ,\n", " 25.12917584, 25.13941702]]),\n", " array([[ 23.89936317, 24.16238987, 24.37814933, ..., 24.6867283 ,\n", " 24.73517262, 24.9000166 ],\n", " [ 22.796028 , 23.03957929, 23.36191281, ..., 23.95134918,\n", " 24.05807653, 24.32577573],\n", " [ 23.98201714, 24.24346901, 24.60352667, ..., 24.83600538,\n", " 25.01300299, 25.28700399],\n", " ..., \n", " [ 25.88867191, 25.80319669, 25.80762619, ..., 25.73744858,\n", " 25.58444691, 25.6317368 ],\n", " [ 25.74242634, 25.69379746, 25.73573117, ..., 25.64464014,\n", " 25.67333293, 25.64796163],\n", " [ 25.3468584 , 25.36760481, 25.38439543, ..., 25.45652486,\n", " 25.45199294, 25.37327864]]),\n", " array([[ 25.98449668, 25.98521208, 25.95242912, ..., 25.89368463,\n", " 25.88045388, 25.93171006],\n", " [ 25.76105977, 25.70375977, 25.63967045, ..., 25.59240848,\n", " 25.66132277, 25.66463929],\n", " [ 25.23810548, 25.19061044, 25.23695191, ..., 25.46131797,\n", " 25.38041014, 25.40377967],\n", " ..., \n", " [ 26.24824289, 26.17127915, 26.07623138, ..., 25.84710184,\n", " 25.78029758, 25.70586174],\n", " [ 26.19759651, 26.09744315, 25.92235382, ..., 25.63588018,\n", " 25.63291115, 25.59553912],\n", " [ 25.77531313, 25.60455853, 25.42752481, ..., 25.30530249,\n", " 25.33317719, 25.22147558]]),\n", " array([[ 25.40656908, 25.27074144, 25.21409378, ..., 25.28521185,\n", " 25.22632841, 25.16945681],\n", " [ 25.18921491, 25.07334629, 25.05299874, ..., 24.94128607,\n", " 24.95502997, 24.95791613],\n", " [ 24.81985555, 24.80298349, 24.7612829 , ..., 24.59692495,\n", " 24.58690609, 24.58263133],\n", " ..., \n", " [ 26.0389708 , 25.93263093, 25.87256265, ..., 25.77298706,\n", " 25.6439993 , 25.58368641],\n", " [ 26.56849541, 26.50595118, 26.36715477, ..., 26.37166457,\n", " 26.3312083 , 26.14700985],\n", " [ 26.80613189, 26.67530444, 26.66849488, ..., 26.59946944,\n", " 26.42169587, 26.33018949]]),\n", " array([[ 26.06044987, 26.12046614, 26.05471894, ..., 25.93053422,\n", " 25.96502619, 25.96056563],\n", " [ 26.03326405, 25.99975566, 25.8123115 , ..., 25.6606701 ,\n", " 25.76405528, 25.65340638],\n", " [ 26.56229083, 26.42947167, 26.36848794, ..., 26.51685341,\n", " 26.46719925, 26.41071161],\n", " ..., \n", " [ 21.28992895, 21.33566945, 21.43008967, ..., 21.71406469,\n", " 21.85169081, 21.92897556],\n", " [ 21.21583534, 21.37312981, 21.57666978, ..., 21.84861172,\n", " 21.88918311, 21.93881172],\n", " [ 21.1126037 , 21.34119817, 21.47466187, ..., 21.63830162,\n", " 21.80664827, 21.87502314]]),\n", " array([[ 21.24389337, 21.37252773, 21.35683562, ..., 21.48408902,\n", " 21.48832578, 21.4263668 ],\n", " [ 21.22127677, 21.24046477, 21.34895607, ..., 21.41706179,\n", " 21.37656328, 21.35550317],\n", " [ 21.43282338, 21.46888922, 21.493978 , ..., 21.51923313,\n", " 21.50631784, 21.53775008],\n", " ..., \n", " [ 26.79653366, 26.64113656, 26.49911428, ..., 26.25092122,\n", " 26.10219452, 25.9559183 ],\n", " [ 26.50290012, 26.38396506, 26.21567803, ..., 26.05643976,\n", " 25.92729177, 25.75297956],\n", " [ 26.49228551, 26.2948515 , 26.14185587, ..., 25.91011466,\n", " 25.7620661 , 25.60436813]]),\n", " array([[ 26.59862697, 26.53265571, 26.46607521, ..., 26.31185187,\n", " 26.22269463, 26.15406759],\n", " [ 26.55732047, 26.49355051, 26.42777149, ..., 26.2624713 ,\n", " 26.21316348, 26.13021364],\n", " [ 26.38850061, 26.32645169, 26.21572275, ..., 26.15394371,\n", " 26.11911926, 25.99641195],\n", " ..., \n", " [ 34.39713553, 34.08620781, 33.9011808 , ..., 33.34027792,\n", " 33.04665311, 32.89668644],\n", " [ 33.98517109, 33.82119053, 33.5508494 , ..., 33.05718995,\n", " 32.86762085, 32.58866132],\n", " [ 33.8906325 , 33.64126562, 33.39516092, ..., 32.95667114,\n", " 32.6643352 , 32.42929969]]),\n", " array([[ 34.41874727, 34.43546507, 34.39947704, ..., 34.34448666,\n", " 34.32896368, 34.34120397],\n", " [ 34.46582211, 34.4089387 , 34.43652649, ..., 34.3424298 ,\n", " 34.30309225, 34.3895445 ],\n", " [ 34.59749054, 34.58828052, 34.57559093, ..., 34.53213034,\n", " 34.55857317, 34.6258566 ],\n", " ..., \n", " [ 39.55704137, 39.59838257, 39.602544 , ..., 39.60300783,\n", " 39.63200396, 39.69585152],\n", " [ 40.46611222, 40.43535902, 40.40883545, ..., 40.43070392,\n", " 40.44180509, 40.54478546],\n", " [ 41.35119597, 41.342732 , 41.31906462, ..., 41.47767905,\n", " 41.55588714, 41.5559466 ]]),\n", " array([[ 41.24501714, 41.30563545, 41.33906701, ..., 41.41231404,\n", " 41.36247167, 41.32137465],\n", " [ 41.55176282, 41.61250172, 41.6040215 , ..., 41.5859052 ,\n", " 41.4933257 , 41.49596777],\n", " [ 41.11082905, 41.21096532, 41.24008778, ..., 41.10885342,\n", " 41.11014781, 41.19066485],\n", " ..., \n", " [ 40.40333667, 40.57757536, 40.7444689 , ..., 40.55767817,\n", " 40.62361813, 40.7688445 ],\n", " [ 39.63679228, 39.85222014, 39.7001448 , ..., 39.82137182,\n", " 39.90308844, 39.89175773],\n", " [ 40.03398294, 39.90566847, 39.92936408, ..., 40.00273409,\n", " 39.99056338, 40.13290444]]),\n", " array([[ 40.57613285, 40.36745876, 40.34832271, ..., 40.14127925,\n", " 40.25699571, 40.17561628],\n", " [ 39.98152946, 40.00012052, 39.84018882, ..., 39.76283388,\n", " 39.68356018, 39.62743014],\n", " [ 40.65448136, 40.47656975, 40.40428358, ..., 40.32405542,\n", " 40.34608955, 40.51020122],\n", " ..., \n", " [ 40.70973214, 40.82156695, 40.94997294, ..., 41.05915738,\n", " 41.2009332 , 41.24048475],\n", " [ 40.74221266, 40.91247665, 40.94516366, ..., 41.11094752,\n", " 41.12695732, 41.2238754 ],\n", " [ 40.51848579, 40.63794176, 40.6930074 , ..., 40.83603721,\n", " 40.96158001, 41.20000058]]),\n", " array([[ 41.02840608, 40.97742881, 41.04879639, ..., 41.08703686,\n", " 41.13259893, 41.13751978],\n", " [ 41.06644308, 41.14932577, 41.14604797, ..., 41.28572476,\n", " 41.31572252, 41.31868877],\n", " [ 42.00121108, 41.91105222, 41.98860594, ..., 42.05340097,\n", " 42.0514623 , 42.07459136],\n", " ..., \n", " [ 41.61889522, 41.77265455, 42.134165 , ..., 42.26888054,\n", " 42.27023834, 42.27099558],\n", " [ 39.61382401, 39.3572463 , 38.99373902, ..., 39.08954502,\n", " 39.72855523, 40.20378919],\n", " [ 39.26326568, 38.77189241, 38.68857487, ..., 38.98425831,\n", " 39.33537682, 39.83910962]]),\n", " array([[ 40.47205982, 40.6031967 , 40.7555591 , ..., 41.30306999,\n", " 41.58849567, 42.20678238],\n", " [ 40.53496451, 40.74019047, 40.91134542, ..., 41.1356297 ,\n", " 41.85741949, 42.23975788],\n", " [ 40.68819248, 40.89227875, 40.86005788, ..., 41.29318408,\n", " 41.69474886, 41.93568032],\n", " ..., \n", " [ 32.58236996, 32.68722674, 32.94694616, ..., 33.68935864,\n", " 34.40763451, 35.0411307 ],\n", " [ 34.11827593, 34.29691869, 34.56631295, ..., 35.77380712,\n", " 36.1406701 , 36.65944805],\n", " [ 32.53922298, 32.93070035, 33.1267649 , ..., 33.88362425,\n", " 34.34724461, 35.05498163]]),\n", " array([[ 31.52461716, 31.57967856, 31.70310795, ..., 31.60969549,\n", " 31.97998058, 31.76583509],\n", " [ 32.56237362, 32.44398294, 32.30184175, ..., 32.87763302,\n", " 32.50008364, 32.21124309],\n", " [ 32.08373777, 32.0604223 , 32.18122015, ..., 32.3427488 ,\n", " 31.88531891, 32.15190584],\n", " ..., \n", " [ 36.47434384, 36.56338542, 36.61949077, ..., 36.48991746,\n", " 36.31746724, 36.40344402],\n", " [ 37.24605504, 37.18514913, 37.20037653, ..., 36.99259881,\n", " 36.96397396, 36.84186326],\n", " [ 37.03819783, 37.07523111, 37.0042887 , ..., 36.83422073,\n", " 36.62528101, 36.64031558]]),\n", " array([[ 37.15097768, 37.16165774, 37.0631008 , ..., 36.92139965,\n", " 36.90713708, 36.99238524],\n", " [ 36.81621957, 36.81704608, 36.83068939, ..., 36.76175825,\n", " 36.76190017, 36.74666901],\n", " [ 37.09933134, 37.1138151 , 37.12286448, ..., 37.17231345,\n", " 37.17322168, 37.11568705],\n", " ..., \n", " [ 25.7344187 , 26.06591327, 26.15460221, ..., 27.08788596,\n", " 27.12449494, 27.39248972],\n", " [ 22.49560126, 22.71537861, 22.34032905, ..., 22.91827229,\n", " 22.94172241, 24.24507425],\n", " [ 24.54302106, 24.12607841, 24.37067691, ..., 24.36400232,\n", " 25.51053396, 26.15846606]]),\n", " array([[ 24.79977904, 24.69590721, 24.0883611 , ..., 24.91928808,\n", " 25.20504994, 25.25962951],\n", " [ 23.1419501 , 22.66726302, 21.87925864, ..., 23.11620493,\n", " 22.89603025, 23.68080167],\n", " [ 23.12996329, 22.22263254, 23.34052642, ..., 23.00870146,\n", " 23.76270941, 23.85789826],\n", " ..., \n", " [ 35.2820164 , 35.36034423, 35.48074954, ..., 35.78691612,\n", " 35.82649512, 35.96429514],\n", " [ 35.47454644, 35.55712141, 35.53895006, ..., 35.77111792,\n", " 35.8272775 , 36.00105157],\n", " [ 35.59562223, 35.77160935, 35.9847767 , ..., 36.14101777,\n", " 36.22937931, 36.35845682]]),\n", " array([[ 34.87543571, 35.05866248, 34.96081266, ..., 34.91188916,\n", " 34.8865196 , 35.09534966],\n", " [ 34.07850517, 34.09411023, 33.94862945, ..., 33.7652154 ,\n", " 33.70499976, 34.01118595],\n", " [ 33.74560074, 33.59630762, 33.55275587, ..., 33.25894686,\n", " 33.44248384, 33.64523254],\n", " ..., \n", " [ 34.37043957, 34.49072721, 34.46713889, ..., 34.61641291,\n", " 34.6316781 , 34.65009482],\n", " [ 34.34755901, 34.44125379, 34.69034084, ..., 34.58201637,\n", " 34.64234545, 34.57663455],\n", " [ 34.57448406, 34.80322892, 34.60662199, ..., 34.71353755,\n", " 34.54698945, 34.75533398]]),\n", " array([[ 34.48058576, 34.46931947, 34.39645689, ..., 34.56175966,\n", " 34.60120682, 34.6889119 ],\n", " [ 34.42459542, 34.4041518 , 34.59273011, ..., 34.71655572,\n", " 34.77569208, 34.91001211],\n", " [ 34.02746584, 34.17503955, 34.19326864, ..., 34.41906863,\n", " 34.49378041, 34.54149122],\n", " ..., \n", " [ 34.26729796, 34.33198393, 34.52037656, ..., 34.26471212,\n", " 34.32199879, 34.43204531],\n", " [ 33.37651991, 33.60677572, 33.52148382, ..., 33.42863803,\n", " 33.44812737, 33.44797037],\n", " [ 33.77101123, 33.70474743, 33.57014533, ..., 33.57211048,\n", " 33.6467882 , 33.75261216]]),\n", " array([[ 33.53133289, 33.43869191, 33.37263046, ..., 33.32649401,\n", " 33.31416629, 33.19199006],\n", " [ 33.46584109, 33.39713333, 33.33327354, ..., 33.28221668,\n", " 33.15383874, 33.13431947],\n", " [ 34.41622601, 34.29761196, 34.4366854 , ..., 34.39820455,\n", " 34.52023716, 34.3539505 ],\n", " ..., \n", " [ 34.78692903, 34.73536166, 34.73454473, ..., 34.35468426,\n", " 34.27153208, 34.18379174],\n", " [ 35.01790079, 34.99299477, 34.80046662, ..., 34.59019432,\n", " 34.47643505, 34.32671027],\n", " [ 34.93577164, 34.68553218, 34.54299772, ..., 34.42529695,\n", " 34.26793524, 34.20209156]]),\n", " array([[ 34.97898179, 34.98256211, 35.07425527, ..., 35.19605749,\n", " 35.29951325, 35.34528396],\n", " [ 35.01624583, 35.10178264, 35.12680389, ..., 35.30594613,\n", " 35.35298146, 35.4299613 ],\n", " [ 34.93937399, 34.9619017 , 35.07676871, ..., 35.17815547,\n", " 35.28027676, 35.31059197],\n", " ..., \n", " [ 44.10058135, 43.8139945 , 43.50204997, ..., 42.79200923,\n", " 42.46908938, 42.18424781],\n", " [ 43.92034495, 43.61468664, 43.30103441, ..., 42.6139226 ,\n", " 42.32034584, 42.01517437],\n", " [ 44.03369297, 43.71493941, 43.41566069, ..., 42.70811157,\n", " 42.40436291, 42.15296897]]),\n", " array([[ 44.26824904, 44.22815477, 44.2189972 , ..., 44.12417068,\n", " 44.16232578, 44.12297489],\n", " [ 43.86504688, 43.81346145, 43.79542729, ..., 43.81453745,\n", " 43.80092968, 43.78132118],\n", " [ 44.17142766, 44.10927042, 44.07602426, ..., 44.01900881,\n", " 44.03224618, 44.05145594],\n", " ..., \n", " [ 34.95488639, 35.16294448, 35.49386909, ..., 35.56308703,\n", " 35.46595545, 35.52188355],\n", " [ 36.1446683 , 36.4019933 , 36.67338125, ..., 36.68118139,\n", " 36.80819138, 36.84463694],\n", " [ 35.82839891, 35.92646934, 36.05010142, ..., 36.31325315,\n", " 36.35564094, 36.41780309]])]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract predictions. \n", "# `execute_viz` function appends predictions to `predictions_800_off`.\n", "execute_viz(steps=35)\n", "predictions_800_off" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7000\n" ] }, { "data": { "text/plain": [ "[7.9386586814575164,\n", " 7.9385203217998654,\n", " 7.924249146106483,\n", " 7.9012922230048002,\n", " 7.9694966896901072,\n", " 7.9379066283830166,\n", " 7.9033436487609698,\n", " 7.9624823177768214,\n", " 7.9797023821236319,\n", " 8.0022559969116571,\n", " 8.0346843791736688,\n", " 8.0165273954102201,\n", " 8.0478567389874343,\n", " 8.0175318531137716,\n", " 8.1207363588667363,\n", " 8.3027967645395577,\n", " 8.3830578303821088,\n", " 8.433113998415509,\n", " 8.3680978432868649,\n", " 8.3471882088960587,\n", " 8.1889879868111279,\n", " 8.1863491608515524,\n", " 8.4241681316139623,\n", " 8.418357801473503,\n", " 8.5213388551832345,\n", " 8.3832348535517571,\n", " 8.1961078162144627,\n", " 8.0712254420379281,\n", " 7.8577649445467834,\n", " 7.8242291698881647,\n", " 7.8212444345901204,\n", " 7.7634359328571501,\n", " 7.9755668055243518,\n", " 8.0341178823289692,\n", " 7.8730729840682745,\n", " 7.8744687301826684,\n", " 8.053238381571342,\n", " 8.0217328098924536,\n", " 8.0288730932490946,\n", " 7.7596041420852018,\n", " 7.4272558470725887,\n", " 7.6045342781236531,\n", " 7.5541483821835058,\n", " 7.6921907134941465,\n", " 7.8355729543313348,\n", " 7.5862038765559605,\n", " 7.3265133334045185,\n", " 7.3144934353553213,\n", " 7.3500829043810105,\n", " 7.3510859878584105,\n", " 7.4282522099924249,\n", " 7.37924055474861,\n", " 7.4078716362153223,\n", " 7.6956865693848453,\n", " 7.7665983163343082,\n", " 7.7437631679078303,\n", " 7.9610193388681854,\n", " 8.0008118350990696,\n", " 7.9373151329248639,\n", " 8.0235718872491102,\n", " 7.9163579791227132,\n", " 7.8450888166196311,\n", " 7.7645800745267728,\n", " 7.8200451803263924,\n", " 7.8416342933699266,\n", " 7.8434909561987745,\n", " 7.8382321920669131,\n", " 7.8685651108740355,\n", " 7.9846856131927062,\n", " 8.0088802813229911,\n", " 7.865448180200195,\n", " 7.9267289179245122,\n", " 7.8755502361625265,\n", " 7.7186662517603013,\n", " 7.9199563662611236,\n", " 7.9782845980081945,\n", " 7.9338153744603783,\n", " 7.9077209067781506,\n", " 7.8805941466182876,\n", " 7.804253716325892,\n", " 7.8490373611580342,\n", " 7.8753824102238852,\n", " 7.8915503700812,\n", " 7.877443173859108,\n", " 7.7895429137186358,\n", " 7.7513428027436122,\n", " 7.7149487495816276,\n", " 7.5523444523503853,\n", " 7.4303808282737211,\n", " 7.0821673891687666,\n", " 5.9677691947169427,\n", " 5.1362911464119145,\n", " 5.5574575276275731,\n", " 5.2818650930534563,\n", " 5.4744499091450667,\n", " 5.3094567735870584,\n", " 5.0301794949373013,\n", " 5.1123900154976303,\n", " 5.4867000687863783,\n", " 5.2783798151050974,\n", " 5.5429067215920238,\n", " 5.2856207494813647,\n", " 5.2600922736577882,\n", " 5.3795144576904841,\n", " 5.3226781806849388,\n", " 5.3103028948361795,\n", " 5.3168439182747154,\n", " 5.3543485747309898,\n", " 5.3950525100208226,\n", " 5.345318857173547,\n", " 5.3198220678787616,\n", " 5.4133559584263899,\n", " 5.3843395565582757,\n", " 5.5139377070660638,\n", " 5.6091792949613897,\n", " 5.6306767189261206,\n", " 5.7172608253593893,\n", " 5.7317686562106136,\n", " 5.7259383971371589,\n", " 5.492856834747605,\n", " 5.4135359809230312,\n", " 5.362572896424024,\n", " 5.3979066269629259,\n", " 5.4939663284969846,\n", " 5.6319808805005911,\n", " 5.6411152173746011,\n", " 5.6758521237026303,\n", " 5.5963907615876654,\n", " 5.7466509186675312,\n", " 5.6527778014805667,\n", " 5.5911499582756194,\n", " 5.5687781331245487,\n", " 5.436830255690305,\n", " 5.4554965703535103,\n", " 5.7195278095458084,\n", " 5.7427309518459584,\n", " 5.9606798799275227,\n", " 5.9384989424349897,\n", " 5.7778385648473565,\n", " 5.6901466393148805,\n", " 5.9579184804955743,\n", " 5.8436553203737107,\n", " 6.1517305136993015,\n", " 6.1555230756912005,\n", " 6.1184355998723934,\n", " 6.0827708197957993,\n", " 5.8898273456745862,\n", " 5.8970123526576721,\n", " 5.8540476000295616,\n", " 5.8947781345973125,\n", " 5.8988450139051256,\n", " 5.9144672991265015,\n", " 5.8782232003546042,\n", " 5.751470819801737,\n", " 5.6138833941332598,\n", " 5.7077101710774851,\n", " 5.8340908464301124,\n", " 5.8308013171332744,\n", " 5.8327581835573215,\n", " 5.8519904841862331,\n", " 6.0306902932743567,\n", " 5.9651639045282563,\n", " 5.9024180741927683,\n", " 5.905254944675784,\n", " 5.8274018484276713,\n", " 5.8672542702992745,\n", " 5.7672014808651406,\n", " 5.6255380091922573,\n", " 5.6900808085978474,\n", " 5.7491740048308451,\n", " 5.7679135053569599,\n", " 5.7921074313959346,\n", " 5.7529437138169861,\n", " 5.7453901557846443,\n", " 5.7549205739837044,\n", " 5.6990868193754816,\n", " 5.8251170153492167,\n", " 5.8273091752505657,\n", " 5.7601002273888726,\n", " 5.8233125011725528,\n", " 5.7657222040117455,\n", " 5.6902374599790972,\n", " 5.7354608350877712,\n", " 5.8177104411454748,\n", " 5.7374285740025925,\n", " 5.7577836964541582,\n", " 5.9131196878942065,\n", " 6.0303952627288453,\n", " 6.0860790674585017,\n", " 6.523352100466882,\n", " 6.5176956991855022,\n", " 6.3933007815776115,\n", " 6.3835975284975151,\n", " 6.4078502003894933,\n", " 6.3637590570703271,\n", " 6.5949673261789989,\n", " 6.5455806185616092,\n", " 6.4751872040984262,\n", " 6.5195002081104771,\n", " 6.3264696997486274,\n", " 6.0807016653319117,\n", " 6.1408127499487541,\n", " 6.219018322737476,\n", " 6.1846771780336889,\n", " 6.1968487923542526,\n", " 6.1407414692183888,\n", " 6.1799911998396553,\n", " 6.2249280967765133,\n", " 6.2936809105776534,\n", " 6.4090332930535974,\n", " 6.6308038648546219,\n", " 6.5138903921171174,\n", " 6.5528890032476212,\n", " 6.4015883914550091,\n", " 6.4307525014847942,\n", " 6.6354753933126718,\n", " 6.6776841894164463,\n", " 6.6257053006111022,\n", " 6.5979277591120677,\n", " 6.5177020655583062,\n", " 6.4639621922853854,\n", " 6.5929430396185502,\n", " 6.563617827386925,\n", " 6.5303849680219948,\n", " 6.4995593769216953,\n", " 6.4649624362380536,\n", " 6.5278670522895528,\n", " 6.3057793819307069,\n", " 6.3585309273105324,\n", " 6.3898301080010222,\n", " 6.4109942891001142,\n", " 6.4160272080079075,\n", " 6.3290462648771761,\n", " 6.3437505325128685,\n", " 6.4353914645100412,\n", " 6.3846107235843457,\n", " 6.3345204796076109,\n", " 6.1894686224716153,\n", " 6.2157073895180872,\n", " 6.2486000973397662,\n", " 6.2368927411923671,\n", " 6.3432386601776685,\n", " 6.3379977975373869,\n", " 6.2523736617222125,\n", " 6.2063880601390755,\n", " 6.2004624044192527,\n", " 6.2274621198667726,\n", " 6.1435489361737572,\n", " 6.2171136176098889,\n", " 6.2762419621511194,\n", " 6.2082569735496369,\n", " 6.2434735901984277,\n", " 6.2285656669525213,\n", " 6.339001638826165,\n", " 6.2277719563607379,\n", " 6.2288520447248956,\n", " 6.2365459050280343,\n", " 6.0893816610840972,\n", " 6.0374599279207759,\n", " 6.0264675246684556,\n", " 6.1137591008762504,\n", " 6.0592710923379505,\n", " 5.9711306319655613,\n", " 5.7513733266823639,\n", " 5.5097994661055463,\n", " 5.6962746683908954,\n", " 5.6915570017391728,\n", " 5.6848440041287835,\n", " 5.6832244978989124,\n", " 5.750705474799763,\n", " 5.8113211743784543,\n", " 5.8016871915600143,\n", " 5.7972938306995045,\n", " 5.7972083706741921,\n", " 5.6453255228951784,\n", " 5.6749863348097422,\n", " 5.6996741266188975,\n", " 5.5675009534560509,\n", " 5.6021289487784047,\n", " 5.6022023704383761,\n", " 5.7929905942999023,\n", " 5.7600080508509617,\n", " 5.6803857091223806,\n", " 5.7001653286947382,\n", " 5.628053946210775,\n", " 5.7397504025018833,\n", " 5.7488611551852298,\n", " 5.7884776433347263,\n", " 5.7606480893760974,\n", " 5.7232441999062003,\n", " 5.7390025629080252,\n", " 5.6898914943350904,\n", " 5.5913404105092237,\n", " 5.6429359360509661,\n", " 5.6245308816441879,\n", " 5.521229202338322,\n", " 5.6702633627264429,\n", " 5.6416480607131669,\n", " 5.5986566920550347,\n", " 5.6172741720165718,\n", " 5.623086217458237,\n", " 5.6246064977859165,\n", " 5.6653931448466528,\n", " 5.4608227015679969,\n", " 5.3966586488185202,\n", " 5.4289511411185103,\n", " 5.2875078547393901,\n", " 5.2847054810112235,\n", " 5.3373680496133895,\n", " 5.2762810454534268,\n", " 5.2750734296384039,\n", " 5.1959823860369054,\n", " 5.2827342978803458,\n", " 5.4710139571842973,\n", " 5.3300835355799663,\n", " 5.2970530689830815,\n", " 5.2985848476817736,\n", " 5.3305227087546792,\n", " 5.3663885542906495,\n", " 5.3759541957048853,\n", " 5.4322736425101743,\n", " 5.4220898474720185,\n", " 5.3905230414398773,\n", " 5.4458845984162574,\n", " 5.4705876696812235,\n", " 5.3943082767618771,\n", " 5.4052406528858148,\n", " 5.4362040742190922,\n", " 5.4640939263392863,\n", " 5.4051135025701749,\n", " 5.4741070501629476,\n", " 5.3940804759505001,\n", " 5.2765852999039407,\n", " 5.2367939145239086,\n", " 5.3135569615141129,\n", " 5.3711115812887265,\n", " 5.3801967917752913,\n", " 5.3885632691395839,\n", " 5.3309693678326386,\n", " 5.2689932543645357,\n", " 5.3557540160890884,\n", " 5.5215502002634196,\n", " 5.6763469115788743,\n", " 5.6275036264298288,\n", " 5.5790831372201453,\n", " 5.5845116651871987,\n", " 5.5322635927423747,\n", " 5.4275658988016069,\n", " 5.55966343140968,\n", " 5.6129061682784309,\n", " 5.6316581658716416,\n", " 5.6462540778406192,\n", " 5.598136919296274,\n", " 5.6571348286246561,\n", " 5.6359001873908632,\n", " 5.7277202299609788,\n", " 5.6740846350932692,\n", " 5.6799922954066577,\n", " 5.7594643478485308,\n", " 5.7271271693549277,\n", " 5.7967246479761405,\n", " 5.6902957053480048,\n", " 5.7481933912333032,\n", " 5.776096557452461,\n", " 5.7617121849113948,\n", " 5.8393455241629351,\n", " 5.80851365580238,\n", " 5.7061651224700221,\n", " 5.7463001838894643,\n", " 5.8459095214973518,\n", " 5.8129708972445027,\n", " 5.7289537224283746,\n", " 5.7635394830243891,\n", " 5.7798753607785249,\n", " 5.760361358559452,\n", " 5.7352354078773384,\n", " 5.8116352347282767,\n", " 5.8429041999416764,\n", " 5.8151036523615378,\n", " 5.78702086082113,\n", " 5.8210950505819294,\n", " 5.8882420455009639,\n", " 5.8628804827773484,\n", " 6.0480230583435945,\n", " 6.0152743474266623,\n", " 6.0384255844887509,\n", " 6.0212276415691575,\n", " 5.9373441582168853,\n", " 5.9386898388109204,\n", " 5.7265774770612952,\n", " 5.8058124065141357,\n", " 5.8309416828753804,\n", " 5.806825128711198,\n", " 5.8609904639039865,\n", " 5.8103033501851673,\n", " 5.899075710547133,\n", " 5.8957817233608933,\n", " 5.8774063086352131,\n", " 5.8863750678935238,\n", " 5.9047815232695564,\n", " 5.8772748371652774,\n", " 5.9080492770719681,\n", " 5.9553407787211086,\n", " 5.9539213164617859,\n", " 5.9474931006010614,\n", " 5.8824304350302858,\n", " 5.9246357303227732,\n", " 5.9966512718277771,\n", " 6.1830447741650625,\n", " 6.1328495597379868,\n", " 6.1648144070294419,\n", " 6.0655478905435771,\n", " 6.1017832651817727,\n", " 6.1675802992967839,\n", " 6.31166827776266,\n", " 6.3916595515334285,\n", " 6.2929588458907384,\n", " 6.2468526458728455,\n", " 6.2573973153866271,\n", " 6.1080822368652887,\n", " 6.1801817058435908,\n", " 6.1874435542180333,\n", " 6.1350554316167294,\n", " 6.0669973296916986,\n", " 6.0475437364201925,\n", " 6.1625560989227237,\n", " 6.2144637250854933,\n", " 6.1360530433596248,\n", " 6.1616971499738726,\n", " 6.162973598717806,\n", " 6.0741678423814678,\n", " 6.0596716303603868,\n", " 6.0415228476100937,\n", " 6.0584859422238981,\n", " 6.0317058123404124,\n", " 5.9932926460257168,\n", " 6.0560413661011907,\n", " 6.0989702709130871,\n", " 6.2309670013660554,\n", " 6.2005731621493752,\n", " 6.165409758191255,\n", " 6.1311294067934936,\n", " 6.0906456841662697,\n", " 6.1555500785503412,\n", " 6.2323054704055867,\n", " 6.4881160956818604,\n", " 6.6342351373521016,\n", " 6.4570445412912933,\n", " 6.374866042053406,\n", " 6.4308433625467396,\n", " 6.3734370573236641,\n", " 6.403447253121584,\n", " 6.436265969918189,\n", " 6.3590009819059148,\n", " 6.3961207763580941,\n", " 6.1724201549414683,\n", " 6.2769197073061669,\n", " 6.2851321353926437,\n", " 6.3128169127219014,\n", " 6.3081045394587481,\n", " 6.1950091414851673,\n", " 6.1408556719668068,\n", " 6.0633621949316598,\n", " 6.0881970236622189,\n", " 6.1073369206643013,\n", " 5.9588693113440678,\n", " 6.1175907639469376,\n", " 6.1372956140145734,\n", " 6.2946030931079147,\n", " 6.3439360660854538,\n", " 6.2612379585117202,\n", " 6.2581080316719033,\n", " 6.2563896000018691,\n", " 6.2072595691211578,\n", " 6.3080575540291051,\n", " 6.3459910132352366,\n", " 6.3501889363780117,\n", " 6.3105526963978145,\n", " 6.2589070066815893,\n", " 6.2311725027310167,\n", " 6.2194414241635601,\n", " 6.2260806644232733,\n", " 6.064356694106241,\n", " 6.0569670539878011,\n", " 6.0360820200847431,\n", " 6.0306526347561622,\n", " 6.10963306558555,\n", " 6.1197242278900479,\n", " 6.0840258823582527,\n", " 6.0907413639358587,\n", " 6.1439408348711586,\n", " 6.1601605760088054,\n", " 6.0746815738915974,\n", " 5.8478758489596752,\n", " 5.9261799695037238,\n", " 5.9563496161725427,\n", " 5.9888011699820742,\n", " 5.9312195708763165,\n", " 5.9706724129626032,\n", " 5.9933024864740227,\n", " 5.9867673200914338,\n", " 5.8462362349739472,\n", " 5.9601537526648034,\n", " 5.9947582922473552,\n", " 6.003057420843751,\n", " 5.9846443000312544,\n", " 5.9730104266088659,\n", " 5.9523187593356379,\n", " 5.9463690122944595,\n", " 5.9744223995801935,\n", " 5.939786744728857,\n", " 5.9826215361874091,\n", " 5.939582759766612,\n", " 5.9888134963242665,\n", " 6.0360791469381807,\n", " 6.0211579926374652,\n", " 6.0288817551633125,\n", " 6.2414042550326423,\n", " 6.187163845104128,\n", " 6.0519093619819317,\n", " 6.0220627521113963,\n", " 6.1415191929752213,\n", " 6.2190798550543382,\n", " 6.1596585446123315,\n", " 6.3441677016418678,\n", " 6.3298115176501053,\n", " 6.4282979048325384,\n", " 6.424476408727922,\n", " 6.3926797855142894,\n", " 6.3964736095324044,\n", " 6.4309222704303508,\n", " 6.4470428619492104,\n", " 6.597800571524612,\n", " 6.5303882717602022,\n", " 6.5082277797125911,\n", " 6.4270857231766456,\n", " 6.4280481825694959,\n", " 6.4917677985204172,\n", " 6.5034166775764621,\n", " 6.5314044539772151,\n", " 6.4837296606382804,\n", " 6.454390809817399,\n", " 6.4916832355943601,\n", " 6.3007656633067493,\n", " 6.3505162371615906,\n", " 6.3777252483749614,\n", " 6.4000177307712267,\n", " 6.3744653862664533,\n", " 6.3526573477015882,\n", " 6.2204218426367976,\n", " 6.1601168553797816,\n", " 6.1357619573139441,\n", " 6.2557727237074658,\n", " 6.167742089596838,\n", " 6.2587492973828391,\n", " 6.1016104108795437,\n", " 6.1198442383635463,\n", " 6.1495833296504987,\n", " 6.2104622960501796,\n", " 6.3339111604633027,\n", " 6.2809282570745042,\n", " 6.2876242414388512,\n", " 6.2570788764030008,\n", " 6.2033487804901064,\n", " 6.2705460448924306,\n", " 6.2850656101178455,\n", " 6.2239789058183588,\n", " 6.3938717421479074,\n", " 6.5437888896406857,\n", " 6.4274379632568737,\n", " 6.4566503260158292,\n", " 6.5911292572436331,\n", " 6.5176506312491016,\n", " 6.4449942789804293,\n", " 6.5680941377072877,\n", " 6.4967225254631238,\n", " 6.5211041469949542,\n", " 6.5064621824467359,\n", " 6.480709131233116,\n", " 6.4566845587051755,\n", " 6.442262406589645,\n", " 6.4255759662780054,\n", " 6.2656812077390098,\n", " 6.3326998793779747,\n", " 6.3605331189005687,\n", " 6.4384627842288777,\n", " 6.4182529242340722,\n", " 6.3521926479634994,\n", " 6.3548838182060834,\n", " 6.2062493660098026,\n", " 6.1227534193402322,\n", " 6.1735780907244342,\n", " 6.257880580049517,\n", " 6.1715395829319775,\n", " 6.0964155135202915,\n", " 6.0253029706579264,\n", " 6.2279525671036495,\n", " 6.2832281365796092,\n", " 6.2449293342950511,\n", " 6.2961635274504477,\n", " 6.1546491347218293,\n", " 6.1829646029905909,\n", " 5.8795387296098784,\n", " 5.865635708643282,\n", " 5.9808970294014356,\n", " 6.1233726326465199,\n", " 6.1475733627792479,\n", " 6.1234137034614715,\n", " 6.1820172411545045,\n", " 6.110953603406112,\n", " 6.2301473140168921,\n", " 6.2909630759115895,\n", " 6.2296161049651513,\n", " 6.2549459330259936,\n", " 6.2373482726972096,\n", " 6.2483758660354063,\n", " 6.2136703788104803,\n", " 6.2104630252886199,\n", " 6.2273990415426388,\n", " 6.1087535952540319,\n", " 6.1529684320528553,\n", " 6.2322211056114236,\n", " 6.3655802441960807,\n", " 6.3948997516109243,\n", " 6.4151474712194867,\n", " 6.3925188418026853,\n", " 6.3981933492676948,\n", " 6.4473398997059395,\n", " 6.4744905381026641,\n", " 6.5274246800210474,\n", " 6.6117935320756445,\n", " 6.7194849132268351,\n", " 6.9065916735152806,\n", " 6.8569523133756771,\n", " 7.093649832044397,\n", " 7.1146614486597333,\n", " 6.959046564567581,\n", " 6.8971847300462166,\n", " 6.8718920640936894,\n", " 6.8892431482389771,\n", " 6.9093609232819713,\n", " 6.9342292846106615,\n", " 6.9050223003563289,\n", " 6.9568955928567116,\n", " 7.0621991213880539,\n", " 7.0144742262601563,\n", " 7.0902069086374846,\n", " 7.0928409263184173,\n", " 7.1213566373017265,\n", " 7.1094460551202339,\n", " 7.1264856050282752,\n", " 7.1652686399345962,\n", " 7.1338122136285271,\n", " 7.0767649887730579,\n", " 7.1709408285468967,\n", " 7.0153013499499597,\n", " 6.9989558882842946,\n", " 7.0219877913103499,\n", " 7.0231120950138726,\n", " 6.9636665248807326,\n", " 6.9282749508431589,\n", " 6.7439350370019371,\n", " 6.7192000359220172,\n", " 6.6714688249428402,\n", " 6.8086869327901827,\n", " 7.0141874165476148,\n", " 7.2015380502578346,\n", " 7.2104397327448781,\n", " 7.4097307244234658,\n", " 7.4994811937661714,\n", " 7.5383955652596217,\n", " 7.5257598243247159,\n", " 7.4643927526662219,\n", " 7.419925051358887,\n", " 7.4250818221390835,\n", " 7.3873811927391833,\n", " 7.2617188504588261,\n", " 7.3738386857080407,\n", " 7.4131889877389785,\n", " 7.6126550414636469,\n", " 7.5654094819681772,\n", " 7.5157908776454461,\n", " 7.4497562244839779,\n", " 7.493839352409922,\n", " 7.3213402218210568,\n", " 7.3789381935771532,\n", " 7.4106714634786703,\n", " 7.3807416312214471,\n", " 7.3334474425140224,\n", " 7.3750624522642534,\n", " 7.1372007727528706,\n", " 7.1606881584684707,\n", " 7.1803672350699816,\n", " 7.3255470613039817,\n", " 6.9943591433109242,\n", " 6.9732675095448213,\n", " 6.8783565835878377,\n", " 6.98031341771956,\n", " 7.0696330413615396,\n", " 7.1607723114095014,\n", " 7.0449926166276597,\n", " 7.0414901962793346,\n", " 6.9804239710971157,\n", " 6.9562096900860082,\n", " 7.0210273090914965,\n", " 7.09478413240039,\n", " 7.012461803934074,\n", " 7.0590005713322466,\n", " 7.0127664831919914,\n", " 6.9826575725121636,\n", " 6.7550987187868294,\n", " 6.8455421117176369,\n", " 6.8003112684943243,\n", " 6.8145724087410535,\n", " 6.7527017284933013,\n", " 6.7705005164856784,\n", " 6.7455740696794591,\n", " 6.7090450939173296,\n", " 6.8174593561024039,\n", " 6.7561050422959914,\n", " 6.7685896090459821,\n", " 6.7212441360700428,\n", " 6.708807593216064,\n", " 6.7271014922594778,\n", " 6.6292978617777898,\n", " 6.6781841107789504,\n", " 6.6371342050968041,\n", " 6.5761833234625202,\n", " 6.4605090722697485,\n", " 6.4744029638508964,\n", " 6.5284606295299801,\n", " 6.6373386089196691,\n", " 6.7138169997656982,\n", " 6.9934142385080982,\n", " 7.0033428700723244,\n", " 6.9731492025766002,\n", " 6.903985690267298,\n", " 6.7763511117355106,\n", " 6.9286200126673725,\n", " 7.1000447927499133,\n", " 7.09345535511933,\n", " 7.2090938424918161,\n", " 7.3875787563479705,\n", " 7.2690978663524817,\n", " 7.0616455045616044,\n", " 7.2840816049333386,\n", " 7.1494006615636714,\n", " 7.0909212815348575,\n", " 6.9756315987328001,\n", " 7.1271611782983575,\n", " 7.3403473742641054,\n", " 7.2331691094700741,\n", " 7.2989727139133107,\n", " 7.2774514255596436,\n", " 7.1840288370307857,\n", " 7.0735299963138605,\n", " 7.0574518530785344,\n", " 7.0548456751269599,\n", " 7.0500731962669914,\n", " 7.1972686558377195,\n", " 7.3031413984761011,\n", " 7.3132245486697238,\n", " 7.2868563605187724,\n", " 7.1813517379585132,\n", " 7.2056567321774807,\n", " 7.2221203604976587,\n", " 7.303063402287032,\n", " 7.249336357764383,\n", " 7.3215974293986239,\n", " 7.3465744795495835,\n", " 7.2623125996367914,\n", " 7.1832045239247577,\n", " 7.2110622174023407,\n", " 7.2747432344764427,\n", " 7.2988475355933025,\n", " 7.2356259413900874,\n", " 7.3840689407557019,\n", " 7.4877323004681422,\n", " 7.4430426064260899,\n", " 7.547895511610589,\n", " 7.853534332512754,\n", " 7.8830789750244366,\n", " 7.9047336433194486,\n", " 7.8181639151809526,\n", " 7.7530848964388044,\n", " 7.7092626693515918,\n", " 7.7095797684844971,\n", " 7.7309297661935092,\n", " 8.0600143476631736,\n", " 8.0258230337079368,\n", " 7.9327871394336968,\n", " 7.9057457729556697,\n", " 7.9818310553921803,\n", " 8.0143330004230258,\n", " 8.1754728516629527,\n", " 8.7407287580604791,\n", " 8.7995995090737971,\n", " 8.867927942283929,\n", " 8.6887842580518946,\n", " 8.6983989242566118,\n", " 8.6945500631580295,\n", " 8.8441087150870885,\n", " 8.7258164661630744,\n", " 8.8024823054114449,\n", " 8.7787939745095258,\n", " 9.1172342120167613,\n", " 9.2680542237316139,\n", " 9.1650955209006391,\n", " 9.1386373110298855,\n", " 9.1268413609690526,\n", " 9.1291268207320435,\n", " 8.6960030096486172,\n", " 8.4810024645889115,\n", " 8.706283715671649,\n", " 8.5742443320341302,\n", " 8.6031961396124572,\n", " 8.7541019859943603,\n", " 8.8981049343881047,\n", " 9.1199557942662679,\n", " 9.0634315212467769,\n", " 9.0170817804556229,\n", " 8.936251707707612,\n", " 8.8447979331690725,\n", " 8.8924510671958963,\n", " 8.7791685153324366,\n", " 8.8370720416319664,\n", " 8.9438054404963623,\n", " 9.0455691462537509,\n", " 8.9756613136340881,\n", " 8.9782988128879637,\n", " 8.7991923503918912,\n", " 8.8319758268649018,\n", " 8.5466183148245918,\n", " 8.4355524888700018,\n", " 8.3217873270650173,\n", " 8.2988388549950294,\n", " 8.3065803960319577,\n", " 8.4021592910978384,\n", " 8.5870749537099229,\n", " 8.6557881491832518,\n", " 9.0317099927321145,\n", " 9.3410479073250805,\n", " 9.257132790073296,\n", " 9.1141185430142784,\n", " 9.0238654242010554,\n", " 8.9053677378521812,\n", " 8.7573052001405713,\n", " 8.5919558075387883,\n", " 8.5357095650479451,\n", " 8.5705348340574652,\n", " 8.5261801217514801,\n", " 8.455678023573725,\n", " 8.5249425070290421,\n", " 8.5236222570150524,\n", " 8.503959955965918,\n", " 8.4779948267985503,\n", " 8.5056881023953892,\n", " 8.5034824896200227,\n", " 8.4185489627222019,\n", " 8.3965397334449214,\n", " 8.4227469652387406,\n", " 8.6334553104145435,\n", " 8.5475481715345403,\n", " 8.6156735357205285,\n", " 8.4874570101510827,\n", " 8.5989568750146859,\n", " 8.4999619685108208,\n", " 8.4278022041539309,\n", " 8.2926979585328304,\n", " 8.2191610967032283,\n", " 8.2553098502367348,\n", " 8.3580209656298372,\n", " 8.3849307979197505,\n", " 8.5128770984646316,\n", " 8.6936671450390151,\n", " 8.7351396771845877,\n", " 8.9359409027146697,\n", " 8.7476072646596776,\n", " 8.760362013563892,\n", " 8.7813559838988837,\n", " 8.7019480478778419,\n", " 8.5962504827029846,\n", " 8.3097775815425656,\n", " 8.314351872071196,\n", " 8.3332544217005697,\n", " 8.177403143787636,\n", " 8.0370736920569641,\n", " 7.9955316026275227,\n", " 8.1135286130677589,\n", " 8.0999295185881248,\n", " 8.1323977424668836,\n", " 8.353558473235843,\n", " 8.3627913457939798,\n", " 8.2982673496554327,\n", " 8.239889751083922,\n", " 8.2794388368821039,\n", " 8.3151318186046659,\n", " 8.2878949770880226,\n", " 8.3145224376038662,\n", " 8.3217347747334678,\n", " 8.361261606969169,\n", " 8.2482657385797076,\n", " 8.1191631477612169,\n", " 8.0100525958385624,\n", " 7.9554902189860819,\n", " 7.9742993581720665,\n", " 7.8767152934545601,\n", " 7.9164994418923085,\n", " 7.9365820129852329,\n", " 7.9045451847957189,\n", " 7.8760165254064036,\n", " 7.7042965921734918,\n", " 7.6322132401307998,\n", " 7.4676383587877524,\n", " 7.5858334540930628,\n", " 7.5291781811296907,\n", " 7.6096179559688855,\n", " 7.630509550688771,\n", " 7.6094201957988741,\n", " 7.6641815079352149,\n", " 7.6848412585378814,\n", " 7.8911170276009788,\n", " 7.8190718466675859,\n", " 7.8330305627793999,\n", " 7.9387218052772308,\n", " 8.1745324941517552,\n", " 8.384695869685924,\n", " 8.3652442732570798,\n", " 8.398681958037912,\n", " 8.2744982214506173,\n", " 8.1104570473939859,\n", " 8.0677158919087297,\n", " 7.9424607383238817,\n", " 8.0678176000176194,\n", " 8.0501612723240346,\n", " 8.1853794404798172,\n", " 8.2151225058013857,\n", " 8.246360084538626,\n", " 8.1941068591003763,\n", " 8.4321177951631796,\n", " 8.4877223086359805,\n", " 8.4042422357193338,\n", " 8.3366053381759251,\n", " 8.4219905782303037,\n", " 8.397206008853054,\n", " 8.3405830860297705,\n", " 8.3534836349673398,\n", " 8.3344084410325863,\n", " 8.3679514733665776,\n", " 8.2150060140943069,\n", " 8.2782100074905181,\n", " 8.0397544097686939,\n", " 7.8083451503724639,\n", " 7.7759904510853541,\n", " 7.7659556863017114,\n", " 7.8816910861271836,\n", " 7.8284873779591297,\n", " 7.7491053833361532,\n", " 7.7384166631877536,\n", " 7.7749151618182237,\n", " 7.6598817571314335,\n", " 7.7044720656557004,\n", " 7.802719627179008,\n", " 7.826875388505754,\n", " 7.8818001021853403,\n", " 7.8003511199652689,\n", " 7.857051034205834,\n", " 7.7864747767375251,\n", " 7.7862678309626165,\n", " 8.133128993505311,\n", " 8.2698183444256976,\n", " 8.4167558575348203,\n", " 8.383077049640633,\n", " 8.3904754222121767,\n", " 8.1992277975189083,\n", " 7.9908745958752458,\n", " 7.7943533392336741,\n", " 7.8640805782897685,\n", " 7.7894779972708088,\n", " 7.709607920105328,\n", " 7.8026737473801102,\n", " 7.777483277159015,\n", " 7.8719721434556789,\n", " 7.9582558942923693,\n", " 8.1224926189577289,\n", " 8.0170409399506521,\n", " 8.0704090637939032,\n", " 8.079237085478379,\n", " 7.8730172640258562,\n", " 7.958210582937153,\n", " 7.8145807161893641,\n", " 7.7035187304274677,\n", " 7.5795677889528887,\n", " 7.5396208640973876,\n", " 7.653805772717047,\n", " 7.3691106847887298,\n", " 7.5347701137935541,\n", " 7.6050346596434109,\n", " 7.4913792400688708,\n", " 7.5104684964167978,\n", " ...]" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Put all 7-days-ahead predictions into an array\n", "predictions_800_7thday = []\n", "for array in predictions_800_off:\n", " for week_prediction in array:\n", " predictions_800_7thday.append(week_prediction[6]) \n", "print len(predictions_800_7thday)\n", "predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Prepare dataframe for visualisation\n", "# There are 7000 predictions\n", "bp_final_predictions = bp_ftse[800+6:806+7000]\n", "bp_final_predictions.loc[:,'7d Ahead Pred'] = predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKcj/A8gycsG+fw1+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual adjusted close prices\n", "bp_final_predictions.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual prices\n", "# Only first 200 predictions\n", "bp_preds_200 = bp_final_predictions[:200]\n", "bp_preds_200.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [python2.7]", "language": "python", "name": "Python [python2.7]" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.12" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/3-methodology-results-conclusion-code-py3.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model but are nice for visualisations\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Oil Stocks\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", "print(\"Oil stocks in DF: \", oil_stocks_in_df)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract GAIA data\n", "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and GAIA data start intersecting \n", "# i.e. date = 1999-10-29\n", "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Read in FTSE100 data\n", "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "\n", "# Preview data\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sort FTSE100 data by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Check index of row where BP and FTSE data start intersecting \n", "# i.e. date = 1984-04-02\n", "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Adds FTSE data to BP dataframe, joining at dates\n", "\n", "# FTSE columns we want to copy to BP dataframe\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close'] \n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the FTSE row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "bp_counter = 0\n", "ftse_counter = 0\n", "while ftse_counter < len(sorted_ftse100):\n", " bp_date = bp.loc[bp_ftse_start + bp_counter, 'Date']\n", " ftse_date = sorted_ftse100.loc[ftse_start - ftse_counter, 'Date']\n", " if bp_date == ftse_date:\n", " # Add FTSE data to BP row\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start + bp_counter, 'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start - ftse_counter,'%s' % str(col)]\n", " # FTSE counter + 1, BP counter + 1\n", " bp_counter += 1\n", " ftse_counter += 1\n", " elif bp_date < ftse_date:\n", " # Move to next BP row, same FTSE row and repeat\n", " bp_counter += 1\n", " elif bp_date > ftse_date:\n", " # Move to next FTSE row, same BP row and repeat\n", " ftse_counter += 1\n", " else:\n", " print(\"Error: BP date is \", bp_date, \"; FTSE date is \", ftse_date)\n", " # FTSE row + 1, BP row + 1\n", " bp_counter += 1\n", " ftse_counter += 1" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1984-04-27\n", "1984-05-02\n", "1984-05-07\n", "1984-05-29\n", "1984-08-27\n", "1984-12-26\n", "1985-04-08\n", "1985-05-06\n", "1985-08-26\n", "1985-12-26\n", "1986-03-31\n", "1986-05-05\n", "1986-08-25\n", "1986-12-26\n", "1987-04-20\n", "1987-05-04\n", "1987-08-31\n", "1987-12-28\n", "1988-04-04\n", "1988-05-02\n", "1988-08-29\n", "1988-12-27\n", "1989-03-27\n", "1989-05-01\n", "1989-08-28\n", "1989-12-26\n", "1990-04-16\n", "1990-05-07\n", "1990-08-27\n", "1990-12-26\n", "1991-04-01\n", "1991-05-06\n", "1991-08-26\n", "1991-12-26\n", "1992-04-20\n", "1992-05-04\n", "1992-08-31\n", "1992-12-28\n", "1993-04-12\n", "1993-05-03\n", "1993-08-30\n", "1993-12-27\n", "1993-12-28\n", "1994-01-03\n", "1994-04-04\n", "1994-05-02\n", "1994-08-29\n", "1994-12-27\n", "1995-04-17\n", "1995-05-08\n", "1995-08-28\n", "1995-12-26\n", "1996-04-08\n", "1996-05-06\n", "1996-08-26\n", "1996-12-26\n", "1997-03-31\n", "1997-05-05\n", "1997-08-25\n", "1997-12-26\n", "1998-04-13\n", "1998-05-04\n", "1998-08-31\n", "1998-12-28\n", "1998-12-31\n", "1999-04-05\n", "1999-05-03\n", "1999-08-30\n", "1999-12-27\n", "1999-12-28\n", "1999-12-31\n", "2000-01-03\n", "2000-04-24\n", "2000-05-01\n", "2000-08-28\n", "2000-12-26\n", "2001-04-16\n", "2001-05-07\n", "2001-08-27\n", "2001-12-26\n", "2002-04-01\n", "2002-05-06\n", "2002-06-03\n", "2002-06-04\n", "2002-08-26\n", "2002-12-26\n", "2003-04-21\n", "2003-05-05\n", "2003-08-25\n", "2003-12-26\n", "2004-04-12\n", "2004-05-03\n", "2004-08-30\n", "2004-12-27\n", "2004-12-28\n", "2005-01-03\n", "2005-03-28\n", "2005-05-02\n", "2005-08-29\n", "2005-12-27\n", "2006-04-17\n", "2006-05-01\n", "2006-08-28\n", "2006-12-26\n", "2007-04-09\n", "2007-05-07\n", "2007-08-27\n", "2007-12-26\n", "2008-03-24\n", "2008-05-05\n", "2008-08-25\n", "2008-12-26\n", "2009-03-27\n", "2009-04-13\n", "2009-05-04\n", "2009-06-25\n", "2009-08-11\n", "2009-08-31\n", "2009-09-02\n", "2009-12-28\n", "2010-04-05\n", "2010-04-19\n", "2010-04-20\n", "2010-05-03\n", "2010-05-12\n", "2010-08-30\n", "2010-12-27\n", "2010-12-28\n", "2011-01-03\n", "2011-04-25\n", "2011-04-29\n", "2011-05-02\n", "2011-08-29\n", "2011-12-27\n", "2012-04-09\n", "2012-05-07\n", "2012-06-04\n", "2012-06-05\n", "2012-08-27\n", "2012-12-26\n", "2013-04-01\n", "2013-05-06\n", "2013-08-26\n", "2013-09-23\n", "2013-12-26\n", "2014-04-21\n", "2014-05-05\n", "2014-08-25\n", "2014-12-26\n", "2015-01-02\n", "2015-04-06\n", "2015-05-04\n", "2015-08-31\n", "2015-12-17\n", "2015-12-28\n", "2016-03-28\n", "2016-05-02\n", "2016-08-29\n", "NaNs: 158\n" ] } ], "source": [ "# Count and display NaNs in FTSE data \n", "# i.e. dates where we have BP but not FTSE data\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Proxy remaining FTSE NaNs by taking the mean of the prices in the \n", "# two closest trading days where data is available \n", "# (one before, one after the day)\n", "ftse_data_to_average = ['Open', 'High', 'Low', 'Close'] \n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " if not (pd.isnull(bp.loc[bp_ftse_start+row-1, 'FTSE Date']) or pd.isnull(bp.loc[bp_ftse_start+row+1, 'FTSE Date'])):\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']\n", " else:\n", " go_back = 0\n", " go_forward = 0\n", " while pd.isnull(bp.loc[bp_ftse_start+row-1-go_back, 'FTSE Date']):\n", " go_back += 1\n", " while pd.isnull(bp.loc[bp_ftse_start+row+1+go_forward, 'FTSE Date']):\n", " go_forward += 1\n", " for col in ftse_data_to_average:\n", " bp.loc[bp_ftse_start+row,'FTSE %s' % str(col)] = np.mean([float(bp.loc[bp_ftse_start+row-1-go_back,'FTSE %s' % str(col)]), float(bp.loc[bp_ftse_start+row+1+go_forward,'FTSE %s' % str(col)])])\n", " bp.loc[bp_ftse_start+row,'FTSE Date'] = bp.loc[bp_ftse_start+row, 'Date']" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "NaNs: 0\n" ] } ], "source": [ "# Check there are no more NaNs\n", "nan_counter = 0\n", "for row in range(len(bp.loc[bp_ftse_start:])):\n", " if pd.isnull(bp.loc[bp_ftse_start+row, 'FTSE Date']):\n", " print(bp.loc[bp_ftse_start+row, 'Date'])\n", " nan_counter += 1\n", "print(\"NaNs: \", nan_counter)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", " print(\"X.tail: \", X.tail())\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "X_train = []\n", "X_test = []\n", "y_train = []\n", "y_test = []" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2)) * 100\n", "\n", "def print_metrics(test, pred):\n", " print(\"Root Mean Squared Percentage Error\", rmsp(test, pred))\n", " print(\"Mean Absolute Error: \", mean_absolute_error(test, pred))\n", " print(\"Explained Variance Score: \", explained_variance_score(test, pred))\n", " print(\"Mean Squared Error: \", mean_squared_error(test, pred))\n", " print(\"R2 score: \", r2_score(test, pred))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Initialise variables to prevent errors\n", "days = 7" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " # Lines below for debugging purposes\n", "# print(\"X_train.head(): \", X_train.head())\n", "# print(\"X_train.tail(): \", X_train.tail())\n", "# print(\"Pred: \", pred[:5])\n", "# print(\"Test: \", y_test[:5])\n", " \n", " # Print metrics\n", " print(\"# Days used to predict: %s\" % str(days))\n", " print(\"\\n%s-day predictions\" % str(target_days)) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "def execute(steps=8, buffer_step=1000, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=days, periods=periods, buffer=buffer)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64\n", "Mean Absolute Error: 1.35177309038\n", "Explained Variance Score: -0.999897657081\n", "Mean Squared Error: 5.3988704324\n", "R2 score: -1.79018260924\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64\n", "Mean Absolute Error: 0.0968047690639\n", "Explained Variance Score: 0.631705385589\n", "Mean Squared Error: 0.0157858151181\n", "R2 score: 0.624974281171\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64\n", "Mean Absolute Error: 0.121813762853\n", "Explained Variance Score: 0.841217523638\n", "Mean Squared Error: 0.0294876156146\n", "R2 score: 0.833996914272\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64\n", "Mean Absolute Error: 0.426327931115\n", "Explained Variance Score: 0.603248858424\n", "Mean Squared Error: 0.3014216695\n", "R2 score: 0.267021281001\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64\n", "Mean Absolute Error: 2.78950172548\n", "Explained Variance Score: -3.16904684367\n", "Mean Squared Error: 12.5284487756\n", "R2 score: -9.15605753784\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64\n", "Mean Absolute Error: 0.794150514869\n", "Explained Variance Score: 0.596407090489\n", "Mean Squared Error: 1.14332478592\n", "R2 score: 0.597101359913\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64\n", "Mean Absolute Error: 4.81075475134\n", "Explained Variance Score: -1.96163694244\n", "Mean Squared Error: 33.132880399\n", "R2 score: -8.55239322845\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64\n", "Mean Absolute Error: 1.21013490927\n", "Explained Variance Score: 0.826791346825\n", "Mean Squared Error: 2.43831676478\n", "R2 score: 0.822383271832\n", "Errors: [Day 0 28.167307\n", "Day 1 28.524924\n", "Day 2 28.966326\n", "Day 3 29.085697\n", "Day 4 29.562881\n", "Day 5 29.542482\n", "Day 6 29.721120\n", "dtype: float64, Day 0 1.446326\n", "Day 1 2.115084\n", "Day 2 2.502362\n", "Day 3 2.806399\n", "Day 4 3.021869\n", "Day 5 3.152251\n", "Day 6 3.306352\n", "dtype: float64, Day 0 1.401569\n", "Day 1 1.990419\n", "Day 2 2.310976\n", "Day 3 2.707712\n", "Day 4 3.029154\n", "Day 5 3.480718\n", "Day 6 4.190305\n", "dtype: float64, Day 0 10.765716\n", "Day 1 9.977779\n", "Day 2 10.480972\n", "Day 3 10.557943\n", "Day 4 10.431970\n", "Day 5 10.593415\n", "Day 6 11.104379\n", "dtype: float64, Day 0 24.413648\n", "Day 1 24.431345\n", "Day 2 24.620150\n", "Day 3 24.986822\n", "Day 4 25.272567\n", "Day 5 26.220903\n", "Day 6 26.731233\n", "dtype: float64, Day 0 2.597679\n", "Day 1 3.367362\n", "Day 2 3.785014\n", "Day 3 4.180193\n", "Day 4 4.650065\n", "Day 5 5.069221\n", "Day 6 5.459985\n", "dtype: float64, Day 0 18.495641\n", "Day 1 18.324528\n", "Day 2 18.233121\n", "Day 3 18.358887\n", "Day 4 18.479670\n", "Day 5 18.598393\n", "Day 6 18.818123\n", "dtype: float64, Day 0 2.551664\n", "Day 1 2.944616\n", "Day 2 3.188068\n", "Day 3 3.490439\n", "Day 4 4.139285\n", "Day 5 4.675935\n", "Day 6 5.151598\n", "dtype: float64]\n", "Daily error: [[28.167307082010478, 1.4463260128939317, 1.4015691053772388, 10.765715566952402, 24.41364846412203, 2.5976792674283566, 18.495640626302091, 2.5516641001831584], [28.524924281544262, 2.1150843700255639, 1.9904192071209452, 9.9777793095670795, 24.431344729424715, 3.367362298621531, 18.32452824442602, 2.9446157412542853], [28.966326367296624, 2.5023622771613652, 2.3109755963471068, 10.480972016930716, 24.620149855164474, 3.7850136112690573, 18.233121169601173, 3.1880683026068426], [29.085697436318398, 2.8063986750089587, 2.7077120693474366, 10.557942877986475, 24.986822088443628, 4.1801925531737281, 18.358886996507305, 3.4904393628985919], [29.562881417844032, 3.021868557170595, 3.0291535073135702, 10.431970367583759, 25.272566808380592, 4.6500648454107214, 18.479669548458453, 4.1392852048533699], [29.542482156287058, 3.1522506324077977, 3.4807177473584945, 10.593414589800933, 26.220902712818216, 5.0692206066914274, 18.598393316146357, 4.6759345302063018], [29.721120149448151, 3.3063521749028761, 4.1903047240177909, 11.1043790016977, 26.731233491624817, 5.4599845932349131, 18.818122838439312, 5.1515982900107735]]\n", "Mean daily error: [11.229943778158709, 11.45950727274805, 11.76087364954717, 12.021761507460564, 12.323432532126887, 12.666664536464573, 13.060386907922041]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# svm.SVR() trial\n", "execute(model=svm.SVR(), steps=8)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-04 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-05 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-06 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-07 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-08 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-04 8.36703 7.28654 \n", "1979-10-05 8.36703 7.28654 \n", "1979-10-06 8.36703 7.55926 \n", "1979-10-07 8.36703 7.5728 \n", "1979-10-08 8.36703 7.5728 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64\n", "Mean Absolute Error: 0.238191228204\n", "Explained Variance Score: 0.936734586453\n", "Mean Squared Error: 0.124174009044\n", "R2 score: 0.935825805621\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-20 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-09-21 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-09-22 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-09-23 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-09-24 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-20 4.60613 4.3459 \n", "1983-09-21 4.60613 4.3459 \n", "1983-09-22 4.56762 4.3459 \n", "1983-09-23 4.47602 4.3459 \n", "1983-09-24 4.47602 4.3459 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64\n", "Mean Absolute Error: 0.0972692755964\n", "Explained Variance Score: 0.631714378075\n", "Mean Squared Error: 0.0158811529743\n", "R2 score: 0.622709326982\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-01 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-02 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-03 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-04 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-05 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-01 5.82054 5.63511 \n", "1987-09-02 5.82054 5.66069 \n", "1987-09-03 5.82054 5.66069 \n", "1987-09-04 5.82054 5.66069 \n", "1987-09-05 5.78111 5.62126 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64\n", "Mean Absolute Error: 0.107737269091\n", "Explained Variance Score: 0.871650317662\n", "Mean Squared Error: 0.0228261083752\n", "R2 score: 0.871498446163\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-15 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-16 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-17 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-18 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-19 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-15 5.27306 4.98956 \n", "1991-08-16 5.24471 4.98956 \n", "1991-08-17 5.24471 4.91925 \n", "1991-08-18 5.15966 4.90451 \n", "1991-08-19 5.14605 4.69245 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64\n", "Mean Absolute Error: 0.181147312912\n", "Explained Variance Score: 0.875052508652\n", "Mean Squared Error: 0.0677040810751\n", "R2 score: 0.835361370336\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-07-29 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-07-30 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-07-31 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-01 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-02 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-07-29 15.5178 14.9311 \n", "1995-07-30 15.5178 15.0191 \n", "1995-07-31 15.5178 14.9463 \n", "1995-08-01 15.5178 14.9463 \n", "1995-08-02 15.5178 14.9463 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64\n", "Mean Absolute Error: 0.214491478056\n", "Explained Variance Score: 0.938634248613\n", "Mean Squared Error: 0.079359261295\n", "R2 score: 0.935668234886\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-14 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-15 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-16 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-17 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-18 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-14 26.9387 25.811 \n", "1999-07-15 27.064 25.811 \n", "1999-07-16 27.064 25.811 \n", "1999-07-17 27.064 25.9664 \n", "1999-07-18 27.064 25.9664 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64\n", "Mean Absolute Error: 0.800157764607\n", "Explained Variance Score: 0.613715850639\n", "Mean Squared Error: 1.11699089039\n", "R2 score: 0.606381217067\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-01 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-02 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-03 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-04 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-05 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-01 33.4066 32.0187 \n", "2003-07-02 33.8597 32.5005 \n", "2003-07-03 33.8597 32.7585 \n", "2003-07-04 33.8597 32.7585 \n", "2003-07-05 33.8597 32.7585 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64\n", "Mean Absolute Error: 0.64399497304\n", "Explained Variance Score: 0.892268550448\n", "Mean Squared Error: 0.724194775999\n", "R2 score: 0.791210628505\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-06-27 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-06-28 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-06-29 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-06-30 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-01 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-06-27 36.4526 33.3928 \n", "2007-06-28 36.4327 33.2401 \n", "2007-06-29 36.4327 32.8884 \n", "2007-06-30 36.4327 32.8884 \n", "2007-07-01 37.6275 32.8884 \n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64\n", "Mean Absolute Error: 1.05035951615\n", "Explained Variance Score: 0.867777620914\n", "Mean Squared Error: 1.93149720042\n", "R2 score: 0.859302032386\n", "Errors: [Day 0 2.369857\n", "Day 1 3.539729\n", "Day 2 4.404081\n", "Day 3 5.132370\n", "Day 4 5.718413\n", "Day 5 6.339923\n", "Day 6 6.862234\n", "dtype: float64, Day 0 1.411261\n", "Day 1 2.099209\n", "Day 2 2.492156\n", "Day 3 2.767121\n", "Day 4 2.969721\n", "Day 5 3.139624\n", "Day 6 3.285597\n", "dtype: float64, Day 0 1.338860\n", "Day 1 1.882735\n", "Day 2 2.176457\n", "Day 3 2.554395\n", "Day 4 2.843576\n", "Day 5 3.084358\n", "Day 6 3.344442\n", "dtype: float64, Day 0 1.997873\n", "Day 1 2.991666\n", "Day 2 3.824330\n", "Day 3 4.528282\n", "Day 4 5.220002\n", "Day 5 5.889516\n", "Day 6 6.417219\n", "dtype: float64, Day 0 1.064327\n", "Day 1 1.558506\n", "Day 2 1.913337\n", "Day 3 2.200144\n", "Day 4 2.461305\n", "Day 5 2.661754\n", "Day 6 2.843053\n", "dtype: float64, Day 0 2.172660\n", "Day 1 3.101301\n", "Day 2 3.769762\n", "Day 3 4.208003\n", "Day 4 4.624586\n", "Day 5 5.019688\n", "Day 6 5.462962\n", "dtype: float64, Day 0 1.209646\n", "Day 1 1.848543\n", "Day 2 2.309345\n", "Day 3 2.682355\n", "Day 4 3.087367\n", "Day 5 3.476793\n", "Day 6 3.888381\n", "dtype: float64, Day 0 1.785155\n", "Day 1 2.357558\n", "Day 2 2.855159\n", "Day 3 3.184456\n", "Day 4 3.743482\n", "Day 5 4.226666\n", "Day 6 4.613958\n", "dtype: float64]\n", "Daily error: [[2.3698570333111504, 1.4112606385290734, 1.3388596770845407, 1.9978731488987438, 1.0643274139994094, 2.1726600714614435, 1.2096456519754599, 1.7851545701577813], [3.5397290828630266, 2.0992094906568943, 1.8827346495576485, 2.9916658848423605, 1.5585063699310966, 3.1013013471389437, 1.8485430242142713, 2.3575578468241742], [4.4040805111224612, 2.4921560557064821, 2.1764572183007651, 3.8243303952515619, 1.9133366253171493, 3.7697615623429668, 2.3093446670878617, 2.8551593057497877], [5.1323698739556516, 2.7671208137147856, 2.5543948404668759, 4.5282824168670546, 2.2001438159343518, 4.2080025337986378, 2.6823554175829778, 3.1844563168900706], [5.7184126896356871, 2.9697212352907276, 2.8435756292022925, 5.2200020876609496, 2.4613047808963091, 4.6245858986274824, 3.0873673748688937, 3.7434820521423369], [6.3399233706097196, 3.1396242770876306, 3.0843584513004441, 5.8895164465804859, 2.661753553657308, 5.0196880611640164, 3.4767926237582256, 4.2266657488609063], [6.8622343672731771, 3.2855971145088323, 3.3444418914677345, 6.4172185016832541, 2.843053391214541, 5.462962469783192, 3.8883808398183208, 4.6139581254374233]]\n", "Mean daily error: [1.6687047756772002, 2.4224059620035518, 2.9680782926098792, 3.4071407536513005, 3.8335564685405847, 4.2297903166273416, 4.5897308376483092]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Linear Regression trial\n", "execute(steps=8)\n", "\n", "# R2 scores: [0.859, 0.791, 0.606, 0.936, 0.835, 0.871, 0.623, 0.936]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n", "\n", "No change in performance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2 Feature Selection" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1 Adding more of the same type of features" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-09 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-10 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "1979-10-11 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 \n", "1979-10-12 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 8.22338 \n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1979-10-09 7.67689 7.59882 7.72894 8.36703 7.28654 \n", "1979-10-10 7.69042 7.67689 7.59882 8.36703 7.28654 \n", "1979-10-11 7.67689 7.69042 7.67689 8.36703 7.55926 \n", "1979-10-12 7.9111 7.67689 7.69042 8.36703 7.53428 \n", "1979-10-13 8.22338 7.9111 7.67689 8.36703 7.53428 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64\n", "Mean Absolute Error: 0.245263403626\n", "Explained Variance Score: 0.934491328873\n", "Mean Squared Error: 0.129280801098\n", "R2 score: 0.933454012643\n", "Buffer: 700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-07-15 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 5.80321 \n", "1982-07-16 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 5.62104 \n", "1982-07-17 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 5.67309 \n", "1982-07-18 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 5.68558 \n", "1982-07-19 5.15262 5.10058 5.24423 5.3733 5.52944 5.55651 5.59502 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1982-07-15 5.89377 5.9073 5.77718 5.95935 5.50446 \n", "1982-07-16 5.80321 5.89377 5.9073 5.95935 5.30876 \n", "1982-07-17 5.62104 5.80321 5.89377 5.95935 5.24423 \n", "1982-07-18 5.67309 5.62104 5.80321 5.89377 5.08809 \n", "1982-07-19 5.68558 5.67309 5.62104 5.82923 5.06102 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64\n", "Mean Absolute Error: 0.173300277596\n", "Explained Variance Score: 0.888815416717\n", "Mean Squared Error: 0.0490251778494\n", "R2 score: 0.883431428434\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-04-24 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 4.6967 \n", "1985-04-25 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 4.71023 \n", "1985-04-26 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 4.6842 \n", "1985-04-27 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 4.6842 \n", "1985-04-28 4.21578 4.29385 4.37192 4.47602 4.51557 4.61967 4.5926 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1985-04-24 4.72376 4.6967 4.72376 4.74874 4.50204 \n", "1985-04-25 4.6967 4.72376 4.6967 4.74874 4.44999 \n", "1985-04-26 4.71023 4.6967 4.72376 4.73625 4.35943 \n", "1985-04-27 4.6842 4.71023 4.6967 4.72376 4.26783 \n", "1985-04-28 4.6842 4.6842 4.71023 4.72376 4.21578 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64\n", "Mean Absolute Error: 0.119108631048\n", "Explained Variance Score: 0.711899830922\n", "Mean Squared Error: 0.0289413179188\n", "R2 score: 0.708651146753\n", "Buffer: 2100\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-28 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 6.23485 \n", "1988-01-29 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 6.1682 \n", "1988-01-30 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 6.11445 \n", "1988-01-31 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 6.10048 \n", "1988-02-01 6.3015 6.34235 6.2886 6.194 6.10048 5.95321 6.0865 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1988-01-28 6.31547 6.34235 6.2757 6.34235 5.93923 \n", "1988-01-29 6.23485 6.31547 6.34235 6.34235 5.93923 \n", "1988-01-30 6.1682 6.23485 6.31547 6.32945 5.93923 \n", "1988-01-31 6.11445 6.1682 6.23485 6.35525 5.93923 \n", "1988-02-01 6.10048 6.11445 6.1682 6.3961 5.93923 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64\n", "Mean Absolute Error: 0.0952769269966\n", "Explained Variance Score: 0.871507295966\n", "Mean Squared Error: 0.0159940255259\n", "R2 score: 0.870509426232\n", "Buffer: 2800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-11-07 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 6.98862 \n", "1990-11-08 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 7.21226 \n", "1990-11-09 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 7.08702 \n", "1990-11-10 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 6.98862 \n", "1990-11-11 6.98862 6.9752 7.00204 7.04453 7.21226 7.16977 6.98862 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1990-11-07 6.91929 7.01658 6.86338 7.22567 6.80748 \n", "1990-11-08 6.98862 6.91929 7.01658 7.22567 6.80748 \n", "1990-11-09 7.21226 6.98862 6.91929 7.22567 6.80748 \n", "1990-11-10 7.08702 7.21226 6.98862 7.22567 6.80748 \n", "1990-11-11 6.98862 7.08702 7.21226 7.22567 6.80748 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64\n", "Mean Absolute Error: 0.144183713669\n", "Explained Variance Score: 0.723639903735\n", "Mean Squared Error: 0.0348028136176\n", "R2 score: 0.713646708273\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-11 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-12 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "1993-08-13 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 \n", "1993-08-14 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 9.2268 \n", "1993-08-15 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1993-08-11 9.36866 9.29831 9.29831 9.3998 9.00997 \n", "1993-08-12 9.21296 9.36866 9.29831 9.47131 9.00997 \n", "1993-08-13 9.11146 9.21296 9.36866 9.70198 9.00997 \n", "1993-08-14 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-15 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64\n", "Mean Absolute Error: 0.175887097751\n", "Explained Variance Score: 0.887963498445\n", "Mean Squared Error: 0.0551035235759\n", "R2 score: 0.867615685704\n", "Buffer: 4200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1996-05-18 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 19.2888 \n", "1996-05-19 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 18.8776 \n", "1996-05-20 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 19.0691 \n", "1996-05-21 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 19.5252 \n", "1996-05-22 20.0734 20.4279 20.3239 19.7922 19.2605 19.0832 19.4826 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1996-05-18 19.4235 19.6291 19.6008 19.7473 18.8327 \n", "1996-05-19 19.2888 19.4235 19.6291 19.9553 18.8327 \n", "1996-05-20 18.8776 19.2888 19.4235 20.3381 18.8327 \n", "1996-05-21 19.0691 18.8776 19.2888 20.6193 18.8327 \n", "1996-05-22 19.5252 19.0691 18.8776 20.6193 18.8327 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64\n", "Mean Absolute Error: 0.338537070406\n", "Explained Variance Score: 0.880567104974\n", "Mean Squared Error: 0.199301427398\n", "R2 score: 0.878296105939\n", "Buffer: 4900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-02-25 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 25.869 \n", "1999-02-26 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 26.8889 \n", "1999-02-27 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 27.29 \n", "1999-02-28 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 26.3344 \n", "1999-03-01 27.0567 26.5934 26.676 27.2306 26.8147 27.0771 26.1463 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "1999-02-25 25.6215 25.468 25.3739 27.384 24.8145 \n", "1999-02-26 25.869 25.6215 25.468 27.384 25.1907 \n", "1999-02-27 26.8889 25.869 25.6215 27.384 25.3096 \n", "1999-02-28 27.29 26.8889 25.869 27.384 25.4383 \n", "1999-03-01 26.3344 27.29 26.8889 27.384 26.0522 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64\n", "Mean Absolute Error: 0.79987099583\n", "Explained Variance Score: 0.713699257351\n", "Mean Squared Error: 1.14286865075\n", "R2 score: 0.709731902283\n", "Buffer: 5600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-12-05 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 20.6785 \n", "2001-12-06 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 21.4792 \n", "2001-12-07 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 21.3878 \n", "2001-12-08 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 21.2803 \n", "2001-12-09 21.2375 21.3299 21.3679 21.3353 20.6998 20.841 21.0692 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2001-12-05 20.6677 20.8934 20.7161 21.5437 20.4119 \n", "2001-12-06 20.6785 20.6677 20.8934 21.5437 20.4119 \n", "2001-12-07 21.4792 20.6785 20.6677 21.5437 20.4119 \n", "2001-12-08 21.3878 21.4792 20.6785 21.5437 20.4119 \n", "2001-12-09 21.2803 21.3878 21.4792 21.5437 20.4119 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64\n", "Mean Absolute Error: 0.841030573229\n", "Explained Variance Score: 0.823346393459\n", "Mean Squared Error: 1.23605771115\n", "R2 score: 0.721970087336\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2004-09-17 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 39.3459 \n", "2004-09-18 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 39.2684 \n", "2004-09-19 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 40.4374 \n", "2004-09-20 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 40.6223 \n", "2004-09-21 39.8887 40.1571 40.0318 40.8072 40.1571 41.0099 40.8847 \n", "\n", " i-8 i-9 i-10 Adj. High Adj. Low \n", "2004-09-17 39.4294 40.4553 40.4672 41.3022 39.0358 \n", "2004-09-18 39.3459 39.4294 40.4553 41.3022 39.0358 \n", "2004-09-19 39.2684 39.3459 39.4294 41.3022 39.0358 \n", "2004-09-20 40.4374 39.2684 39.3459 41.3022 39.0358 \n", "2004-09-21 40.6223 40.4374 39.2684 41.3022 39.0358 \n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64\n", "Mean Absolute Error: 0.728558429454\n", "Explained Variance Score: 0.795888858571\n", "Mean Squared Error: 0.927322469233\n", "R2 score: 0.79156569031\n", "Errors: [Day 0 2.363312\n", "Day 1 3.554744\n", "Day 2 4.447972\n", "Day 3 5.222742\n", "Day 4 5.826092\n", "Day 5 6.437558\n", "Day 6 6.969863\n", "dtype: float64, Day 0 2.365667\n", "Day 1 3.481529\n", "Day 2 4.304973\n", "Day 3 4.721579\n", "Day 4 5.059833\n", "Day 5 5.368132\n", "Day 6 5.645013\n", "dtype: float64, Day 0 1.806897\n", "Day 1 2.585631\n", "Day 2 3.168078\n", "Day 3 3.489158\n", "Day 4 3.822698\n", "Day 5 4.111139\n", "Day 6 4.310561\n", "dtype: float64, Day 0 1.161853\n", "Day 1 1.649659\n", "Day 2 1.972030\n", "Day 3 2.241463\n", "Day 4 2.408886\n", "Day 5 2.586250\n", "Day 6 2.692194\n", "dtype: float64, Day 0 1.244520\n", "Day 1 1.809132\n", "Day 2 2.191041\n", "Day 3 2.505590\n", "Day 4 2.773086\n", "Day 5 2.985559\n", "Day 6 3.152204\n", "dtype: float64, Day 0 1.366323\n", "Day 1 1.996403\n", "Day 2 2.512182\n", "Day 3 2.909702\n", "Day 4 3.215798\n", "Day 5 3.482818\n", "Day 6 3.715349\n", "dtype: float64, Day 0 1.230604\n", "Day 1 1.872096\n", "Day 2 2.317055\n", "Day 3 2.627428\n", "Day 4 2.934245\n", "Day 5 3.273079\n", "Day 6 3.487442\n", "dtype: float64, Day 0 2.099103\n", "Day 1 3.128097\n", "Day 2 3.858517\n", "Day 3 4.376862\n", "Day 4 4.707986\n", "Day 5 4.996149\n", "Day 6 5.334104\n", "dtype: float64, Day 0 2.432448\n", "Day 1 3.522754\n", "Day 2 4.372867\n", "Day 3 5.106129\n", "Day 4 5.796997\n", "Day 5 6.418081\n", "Day 6 6.966462\n", "dtype: float64, Day 0 1.250750\n", "Day 1 1.832107\n", "Day 2 2.238632\n", "Day 3 2.593274\n", "Day 4 2.848807\n", "Day 5 3.033881\n", "Day 6 3.158858\n", "dtype: float64]\n", "Daily error: [[2.3633119350196083, 2.3656668815405815, 1.8068967673168335, 1.1618527298758623, 1.2445199687301822, 1.3663233859342694, 1.2306040140332253, 2.0991032810897887, 2.4324477531714686, 1.2507503445957771], [3.5547442825053919, 3.481529290249135, 2.5856310121744528, 1.6496590138637148, 1.809132425557288, 1.9964030368392935, 1.8720955368221319, 3.1280968433143097, 3.5227538429212828, 1.8321069037719084], [4.4479717498041955, 4.3049728599220547, 3.1680784232346348, 1.9720295214110184, 2.1910410000791423, 2.5121823913989516, 2.3170550743329108, 3.8585169441853613, 4.3728666842384767, 2.2386315167496664], [5.2227419733682234, 4.7215794009499099, 3.4891579548518452, 2.2414627141040615, 2.5055902203003813, 2.90970213520768, 2.6274277931002956, 4.376862471759261, 5.1061285474682583, 2.5932743630842392], [5.8260923948398808, 5.0598325984063965, 3.8226976530484578, 2.4088856925610633, 2.7730862599144057, 3.2157984690632953, 2.9342447416299611, 4.7079859138129168, 5.7969965267876038, 2.8488069806603251], [6.4375575079233638, 5.3681318110243605, 4.1111391646782698, 2.5862495537524421, 2.9855585838487566, 3.482818119821625, 3.2730794532705025, 4.9961485085103687, 6.418081003261106, 3.0338810314181326], [6.9698629698470569, 5.6450129168027123, 4.3105607363275551, 2.6921943572726881, 3.1522043963508404, 3.7153490809861225, 3.4874417668039328, 5.3341041131784843, 6.9664616392606362, 3.1588584581960775]]\n", "Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Considering more than 7 days' worth of prior data\n", "# 10 days' worth of prior data\n", "execute(steps=10, days=10, buffer_step = 700)\n", "\n", "# Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-13 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 8.14531 \n", "1979-10-14 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 8.0027 \n", "1979-10-15 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 7.78098 \n", "1979-10-16 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 7.79452 \n", "1979-10-17 7.20847 7.20847 7.4687 7.49473 7.63838 7.58633 7.72894 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1979-10-13 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 7.72894 \n", "1979-10-14 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 7.59882 \n", "1979-10-15 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 7.67689 \n", "1979-10-16 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 7.69042 \n", "1979-10-17 7.79452 7.78098 8.0027 8.14531 8.22338 7.9111 7.67689 \n", "\n", " Adj. High Adj. Low \n", "1979-10-13 8.36703 7.28654 \n", "1979-10-14 8.36703 7.28654 \n", "1979-10-15 8.36703 7.39063 \n", "1979-10-16 8.36703 7.18245 \n", "1979-10-17 8.36703 6.92221 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64\n", "Mean Absolute Error: 0.248776074705\n", "Explained Variance Score: 0.932287153948\n", "Mean Squared Error: 0.131935951513\n", "R2 score: 0.931564117202\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-07 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 3.87748 \n", "1981-10-08 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 3.66929 \n", "1981-10-09 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 3.66929 \n", "1981-10-10 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 3.64327 \n", "1981-10-11 3.72134 3.72134 3.70781 3.63078 3.60371 3.59122 3.68283 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1981-10-07 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 3.44757 \n", "1981-10-08 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 3.39553 \n", "1981-10-09 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 3.47464 \n", "1981-10-10 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 3.53918 \n", "1981-10-11 3.64327 3.66929 3.66929 3.87748 3.95555 3.85146 3.69532 \n", "\n", " Adj. High Adj. Low \n", "1981-10-07 4.0076 3.3185 \n", "1981-10-08 4.0076 3.3185 \n", "1981-10-09 4.0076 3.3185 \n", "1981-10-10 4.0076 3.48713 \n", "1981-10-11 4.0076 3.53918 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64\n", "Mean Absolute Error: 0.139681061468\n", "Explained Variance Score: 0.695779905092\n", "Mean Squared Error: 0.0337119645641\n", "R2 score: 0.685613674393\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-09-30 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 4.39795 \n", "1983-10-01 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 4.44999 \n", "1983-10-02 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 4.37192 \n", "1983-10-03 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 4.47602 \n", "1983-10-04 4.35943 4.3459 4.29385 4.38441 4.44999 4.51557 4.55409 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1983-09-30 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 4.56762 \n", "1983-10-01 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 4.58011 \n", "1983-10-02 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 4.43646 \n", "1983-10-03 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 4.39795 \n", "1983-10-04 4.47602 4.37192 4.44999 4.39795 4.42397 4.37192 4.35943 \n", "\n", " Adj. High Adj. Low \n", "1983-09-30 4.60613 4.3459 \n", "1983-10-01 4.60613 4.3459 \n", "1983-10-02 4.56762 4.26783 \n", "1983-10-03 4.56762 4.26783 \n", "1983-10-04 4.56762 4.26783 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64\n", "Mean Absolute Error: 0.0983383277787\n", "Explained Variance Score: 0.673001905538\n", "Mean Squared Error: 0.0159582555222\n", "R2 score: 0.663777302829\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-09-20 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 5.14013 \n", "1985-09-21 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 5.08809 \n", "1985-09-22 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 5.17865 \n", "1985-09-23 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 5.14013 \n", "1985-09-24 5.11307 4.95693 4.99648 5.03604 5.10058 5.23069 5.25672 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1985-09-20 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 5.20467 \n", "1985-09-21 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 5.15262 \n", "1985-09-22 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 4.90488 \n", "1985-09-23 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 4.99648 \n", "1985-09-24 5.14013 5.17865 5.08809 5.14013 5.16512 5.15262 4.98399 \n", "\n", " Adj. High Adj. Low \n", "1985-09-20 5.26921 4.89239 \n", "1985-09-21 5.26921 4.89239 \n", "1985-09-22 5.26921 4.89239 \n", "1985-09-23 5.26921 4.90488 \n", "1985-09-24 5.26921 4.91841 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64\n", "Mean Absolute Error: 0.122285822087\n", "Explained Variance Score: 0.532878366341\n", "Mean Squared Error: 0.025722263709\n", "R2 score: 0.528611373486\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-10 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 5.67454 \n", "1987-09-11 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 5.74168 \n", "1987-09-12 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 5.72782 \n", "1987-09-13 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 5.6479 \n", "1987-09-14 5.78111 5.79496 5.76725 5.79496 5.84824 5.79496 5.70118 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1987-09-10 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 5.6479 \n", "1987-09-11 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 5.71397 \n", "1987-09-12 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 5.72782 \n", "1987-09-13 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 5.79496 \n", "1987-09-14 5.6479 5.72782 5.74168 5.67454 5.72782 5.70118 5.66069 \n", "\n", " Adj. High Adj. Low \n", "1987-09-10 5.84824 5.62126 \n", "1987-09-11 5.84824 5.62126 \n", "1987-09-12 5.84824 5.62126 \n", "1987-09-13 5.84824 5.62126 \n", "1987-09-14 5.84824 5.62126 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64\n", "Mean Absolute Error: 0.107345237581\n", "Explained Variance Score: 0.872175783957\n", "Mean Squared Error: 0.0226157683537\n", "R2 score: 0.872187834621\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-02 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 8.62105 \n", "1989-09-03 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 8.71769 \n", "1989-09-04 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 8.64851 \n", "1989-09-05 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 8.57932 \n", "1989-09-06 8.74405 8.62105 8.52441 8.51123 8.38823 8.38823 8.4695 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1989-09-02 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 8.56614 \n", "1989-09-03 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 8.51123 \n", "1989-09-04 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 8.49805 \n", "1989-09-05 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 8.57932 \n", "1989-09-06 8.57932 8.64851 8.71769 8.62105 8.71769 8.73087 8.78578 \n", "\n", " Adj. High Adj. Low \n", "1989-09-02 8.78578 8.35967 \n", "1989-09-03 8.78578 8.35967 \n", "1989-09-04 8.78578 8.35967 \n", "1989-09-05 8.78578 8.35967 \n", "1989-09-06 8.78578 8.35967 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64\n", "Mean Absolute Error: 0.182993141917\n", "Explained Variance Score: 0.923373254714\n", "Mean Squared Error: 0.0633763394031\n", "R2 score: 0.913263877343\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-08-27 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 5.01791 \n", "1991-08-28 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 4.96121 \n", "1991-08-29 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 4.90451 \n", "1991-08-30 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 4.69245 \n", "1991-08-31 4.97595 5.01791 4.97595 4.96121 4.83307 4.79111 4.80585 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1991-08-27 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 5.18801 \n", "1991-08-28 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 5.21636 \n", "1991-08-29 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 5.22997 \n", "1991-08-30 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 5.15966 \n", "1991-08-31 4.69245 4.90451 4.96121 5.01791 5.03265 5.11657 5.11657 \n", "\n", " Adj. High Adj. Low \n", "1991-08-27 5.27306 4.69245 \n", "1991-08-28 5.24471 4.69245 \n", "1991-08-29 5.24471 4.69245 \n", "1991-08-30 5.15966 4.69245 \n", "1991-08-31 5.14605 4.69245 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64\n", "Mean Absolute Error: 0.196205423468\n", "Explained Variance Score: 0.867530206283\n", "Mean Squared Error: 0.0757048791729\n", "R2 score: 0.806951047925\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-18 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 9.21296 \n", "1993-08-19 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 9.3133 \n", "1993-08-20 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 9.32829 \n", "1993-08-21 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 9.45747 \n", "1993-08-22 9.34213 9.3998 9.58664 9.52898 9.5728 9.77464 9.6743 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1993-08-18 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 9.29831 \n", "1993-08-19 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 9.29831 \n", "1993-08-20 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 9.36866 \n", "1993-08-21 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 9.21296 \n", "1993-08-22 9.45747 9.32829 9.3133 9.21296 9.2268 9.08263 9.11146 \n", "\n", " Adj. High Adj. Low \n", "1993-08-18 9.83231 9.00997 \n", "1993-08-19 9.83231 9.00997 \n", "1993-08-20 9.83231 9.00997 \n", "1993-08-21 9.83231 9.00997 \n", "1993-08-22 9.83231 9.00997 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64\n", "Mean Absolute Error: 0.174147642649\n", "Explained Variance Score: 0.892678602856\n", "Mean Squared Error: 0.0544705960063\n", "R2 score: 0.872851342431\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-09 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 15.3418 \n", "1995-08-10 15.005 15.2984 15.5612 15.4004 15.357 15.2538 15.1071 \n", "1995-08-11 15.0778 15.005 15.2984 15.5612 15.4004 15.357 15.2538 \n", "1995-08-12 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 15.357 \n", "1995-08-13 15.1071 15.1071 15.0778 15.005 15.2984 15.5612 15.4004 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1995-08-09 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 15.2397 \n", "1995-08-10 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 15.4298 \n", "1995-08-11 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 15.3124 \n", "1995-08-12 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 15.1071 \n", "1995-08-13 15.357 15.2538 15.1071 15.3418 15.4298 15.4298 15.1364 \n", "\n", " Adj. High Adj. Low \n", "1995-08-09 15.5612 14.9311 \n", "1995-08-10 15.5612 14.9463 \n", "1995-08-11 15.5612 14.9463 \n", "1995-08-12 15.5612 14.9463 \n", "1995-08-13 15.5612 14.9463 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64\n", "Mean Absolute Error: 0.214711322421\n", "Explained Variance Score: 0.942826192476\n", "Mean Squared Error: 0.0808523509562\n", "R2 score: 0.937817635223\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-07-31 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 20.5119 \n", "1997-08-01 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 20.6036 \n", "1997-08-02 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 20.6928 \n", "1997-08-03 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 20.9197 \n", "1997-08-04 19.7879 19.9689 20.1788 20.0003 20.9486 21.4313 21.4023 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1997-07-31 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 22.0346 \n", "1997-08-01 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 21.0403 \n", "1997-08-02 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 20.7387 \n", "1997-08-03 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 21.2358 \n", "1997-08-04 20.9197 20.6928 20.6036 20.5119 20.9197 21.2069 20.8883 \n", "\n", " Adj. High Adj. Low \n", "1997-07-31 22.1407 20.1788 \n", "1997-08-01 22.1407 19.8627 \n", "1997-08-02 21.5061 19.8627 \n", "1997-08-03 21.4771 19.8482 \n", "1997-08-04 21.4771 19.6528 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64\n", "Mean Absolute Error: 0.575956001159\n", "Explained Variance Score: 0.632401065134\n", "Mean Squared Error: 0.536694556461\n", "R2 score: 0.635433823871\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-07-23 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 26.9688 \n", "1999-07-24 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 26.7533 \n", "1999-07-25 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 26.5027 \n", "1999-07-26 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 26.3423 \n", "1999-07-27 27.47 27.3447 28.4122 27.6253 27.1893 26.8435 26.623 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "1999-07-23 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 26.7533 \n", "1999-07-24 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 26.5027 \n", "1999-07-25 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 26.3122 \n", "1999-07-26 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 26.4375 \n", "1999-07-27 26.3423 26.5027 26.7533 26.9688 26.5628 26.1569 26.7182 \n", "\n", " Adj. High Adj. Low \n", "1999-07-23 27.3146 25.811 \n", "1999-07-24 28.1917 25.811 \n", "1999-07-25 28.7229 25.811 \n", "1999-07-26 28.7229 25.9664 \n", "1999-07-27 28.7229 25.9664 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64\n", "Mean Absolute Error: 0.834586135448\n", "Explained Variance Score: 0.552372347128\n", "Mean Squared Error: 1.19797116115\n", "R2 score: 0.541753682113\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-17 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 21.771 \n", "2001-07-18 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 21.4998 \n", "2001-07-19 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 21.1701 \n", "2001-07-20 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 21.0584 \n", "2001-07-21 21.9624 22.2708 21.2339 21.2871 20.7074 19.9948 20.633 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2001-07-17 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 21.7337 \n", "2001-07-18 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 21.085 \n", "2001-07-19 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 21.1488 \n", "2001-07-20 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 22.0156 \n", "2001-07-21 21.0584 21.1701 21.4998 21.771 22.2762 21.2179 21.9784 \n", "\n", " Adj. High Adj. Low \n", "2001-07-17 22.6378 19.9417 \n", "2001-07-18 22.6378 19.9417 \n", "2001-07-19 22.6378 19.9417 \n", "2001-07-20 22.6378 19.9417 \n", "2001-07-21 22.6378 19.9417 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64\n", "Mean Absolute Error: 0.676312438719\n", "Explained Variance Score: 0.79312466119\n", "Mean Squared Error: 0.850174654841\n", "R2 score: 0.78753038764\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-10 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 33.5442 \n", "2003-07-11 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 32.8962 \n", "2003-07-12 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 32.9937 \n", "2003-07-13 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 33.3722 \n", "2003-07-14 33.6131 34.0719 34.112 33.9686 34.1522 33.5959 33.0052 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2003-07-10 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 32.3628 \n", "2003-07-11 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 32.5234 \n", "2003-07-12 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 33.3206 \n", "2003-07-13 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 33.0338 \n", "2003-07-14 33.3722 32.9937 32.8962 33.5442 33.1944 33.0052 32.7585 \n", "\n", " Adj. High Adj. Low \n", "2003-07-10 34.3357 32.0187 \n", "2003-07-11 34.3357 32.5005 \n", "2003-07-12 34.3357 32.7585 \n", "2003-07-13 34.3357 32.7585 \n", "2003-07-14 34.3357 32.7585 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64\n", "Mean Absolute Error: 0.633855324068\n", "Explained Variance Score: 0.893339521738\n", "Mean Squared Error: 0.718058387086\n", "R2 score: 0.80969350896\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-09 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 40.2947 \n", "2005-07-10 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 39.8304 \n", "2005-07-11 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 39.7449 \n", "2005-07-12 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 39.7571 \n", "2005-07-13 39.5982 39.7388 38.9263 39.9404 40.0625 40.1969 40.4413 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2005-07-09 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 39.867 \n", "2005-07-10 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 40.7162 \n", "2005-07-11 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 40.2275 \n", "2005-07-12 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 39.6227 \n", "2005-07-13 39.7571 39.7449 39.8304 40.2947 39.7082 39.8304 40.0442 \n", "\n", " Adj. High Adj. Low \n", "2005-07-09 40.8933 38.9812 \n", "2005-07-10 40.8933 38.9812 \n", "2005-07-11 40.8933 38.8041 \n", "2005-07-12 40.6123 38.8041 \n", "2005-07-13 40.6123 38.8041 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64\n", "Mean Absolute Error: 0.813134820175\n", "Explained Variance Score: 0.629454488747\n", "Mean Squared Error: 1.11504616982\n", "R2 score: 0.634165070736\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-06 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 34.1229 \n", "2007-07-07 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 34.1561 \n", "2007-07-08 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 36.2071 \n", "2007-07-09 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 36.6119 \n", "2007-07-10 33.2667 33.2999 32.6162 36.2071 36.7314 35.5367 35.9084 \n", "\n", " i-8 i-9 i-10 i-11 i-12 i-13 i-14 \\\n", "2007-07-06 34.7269 34.4681 36.3664 35.457 35.5035 34.78 36.1009 \n", "2007-07-07 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 34.78 \n", "2007-07-08 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 35.5035 \n", "2007-07-09 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 35.457 \n", "2007-07-10 36.6119 36.2071 34.1561 34.1229 34.7269 34.4681 36.3664 \n", "\n", " Adj. High Adj. Low \n", "2007-07-06 37.6275 32.8884 \n", "2007-07-07 37.6275 32.8884 \n", "2007-07-08 37.6275 32.0919 \n", "2007-07-09 37.6275 32.0919 \n", "2007-07-10 37.6275 32.0919 \n", "# Days used to predict: 14\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64\n", "Mean Absolute Error: 1.15665536203\n", "Explained Variance Score: 0.868995317818\n", "Mean Squared Error: 2.51929559765\n", "R2 score: 0.848349836178\n", "Errors: [Day 0 2.342805\n", "Day 1 3.525855\n", "Day 2 4.420878\n", "Day 3 5.245301\n", "Day 4 5.912376\n", "Day 5 6.525354\n", "Day 6 7.048433\n", "dtype: float64, Day 0 2.549447\n", "Day 1 3.732053\n", "Day 2 4.703215\n", "Day 3 5.365864\n", "Day 4 5.934399\n", "Day 5 6.411870\n", "Day 6 6.885911\n", "dtype: float64, Day 0 1.395458\n", "Day 1 2.103418\n", "Day 2 2.513620\n", "Day 3 2.783122\n", "Day 4 2.977928\n", "Day 5 3.159587\n", "Day 6 3.321491\n", "dtype: float64, Day 0 1.933811\n", "Day 1 2.689721\n", "Day 2 3.092215\n", "Day 3 3.416749\n", "Day 4 3.749885\n", "Day 5 3.982079\n", "Day 6 4.131960\n", "dtype: float64, Day 0 1.349031\n", "Day 1 1.896904\n", "Day 2 2.179666\n", "Day 3 2.554905\n", "Day 4 2.842448\n", "Day 5 3.058960\n", "Day 6 3.291905\n", "dtype: float64, Day 0 1.308250\n", "Day 1 2.050615\n", "Day 2 2.630480\n", "Day 3 3.074673\n", "Day 4 3.449310\n", "Day 5 3.692534\n", "Day 6 3.896184\n", "dtype: float64, Day 0 2.087797\n", "Day 1 3.217198\n", "Day 2 4.191566\n", "Day 3 4.952402\n", "Day 4 5.629673\n", "Day 5 6.216168\n", "Day 6 6.645652\n", "dtype: float64, Day 0 1.362630\n", "Day 1 1.982794\n", "Day 2 2.492434\n", "Day 3 2.890789\n", "Day 4 3.197432\n", "Day 5 3.451284\n", "Day 6 3.680437\n", "dtype: float64, Day 0 1.067254\n", "Day 1 1.568900\n", "Day 2 1.910583\n", "Day 3 2.178755\n", "Day 4 2.420589\n", "Day 5 2.605201\n", "Day 6 2.793131\n", "dtype: float64, Day 0 1.756089\n", "Day 1 2.636764\n", "Day 2 3.246494\n", "Day 3 3.731850\n", "Day 4 4.152838\n", "Day 5 4.425589\n", "Day 6 4.636267\n", "dtype: float64, Day 0 2.284263\n", "Day 1 3.306835\n", "Day 2 4.044468\n", "Day 3 4.520537\n", "Day 4 4.849158\n", "Day 5 5.150438\n", "Day 6 5.522071\n", "dtype: float64, Day 0 2.041663\n", "Day 1 2.894507\n", "Day 2 3.457311\n", "Day 3 3.978527\n", "Day 4 4.443793\n", "Day 5 4.866720\n", "Day 6 5.219642\n", "dtype: float64, Day 0 1.197523\n", "Day 1 1.824909\n", "Day 2 2.280012\n", "Day 3 2.688264\n", "Day 4 3.087127\n", "Day 5 3.447978\n", "Day 6 3.766665\n", "dtype: float64, Day 0 1.254114\n", "Day 1 1.789819\n", "Day 2 2.133018\n", "Day 3 2.513977\n", "Day 4 2.821298\n", "Day 5 3.114118\n", "Day 6 3.369987\n", "dtype: float64, Day 0 1.997972\n", "Day 1 2.662218\n", "Day 2 3.243463\n", "Day 3 3.898785\n", "Day 4 4.562750\n", "Day 5 5.476417\n", "Day 6 6.319833\n", "dtype: float64]\n", "Daily error: [[2.3428046878594335, 2.5494465554647414, 1.3954581010084075, 1.9338110474345769, 1.349031388428084, 1.3082501119097614, 2.0877971918382312, 1.362629656063173, 1.0672541331288881, 1.7560891545451207, 2.2842628093726178, 2.0416633481835507, 1.1975233764939945, 1.2541140107194724, 1.9979717114798277], [3.5258552334178641, 3.7320533743630255, 2.1034184642616141, 2.6897205756015548, 1.8969039843105724, 2.0506153412586832, 3.2171984334944406, 1.9827940259871397, 1.5688995987559236, 2.6367635568182766, 3.3068351824563802, 2.8945074594428291, 1.8249088288131119, 1.7898187399932406, 2.6622184489674865], [4.420877989036649, 4.7032147476522344, 2.5136196508353961, 3.0922152789031143, 2.1796658505265682, 2.6304796746940839, 4.1915655602523731, 2.4924344110851404, 1.9105828050113176, 3.2464940581864847, 4.0444675805083419, 3.4573108599535782, 2.2800119253617375, 2.1330178906407928, 3.2434631632331032], [5.2453007591988934, 5.3658643734648832, 2.7831224905377154, 3.416748711154967, 2.5549049030530955, 3.0746731020488789, 4.9524019488849751, 2.8907889072630373, 2.1787553036935075, 3.7318496940231114, 4.5205370675953178, 3.9785266649335007, 2.6882642728569226, 2.5139768692486597, 3.8987847995297504], [5.9123764917439461, 5.9343992865756627, 2.9779283268835495, 3.749884830258206, 2.8424480771173175, 3.4493099318044464, 5.6296725435585397, 3.1974315805691531, 2.4205889442104498, 4.1528377889957317, 4.8491578280113066, 4.4437933328538719, 3.0871274223490661, 2.8212984449238308, 4.5627499655632802], [6.5253540389538474, 6.411869704769062, 3.1595872490659578, 3.9820786600745923, 3.0589602014064852, 3.6925343353850728, 6.2161677524830603, 3.4512842358405149, 2.6052006922636068, 4.4255891500298041, 5.1504375410897554, 4.8667198046540632, 3.4479777609243358, 3.1141175250353417, 5.4764165109956515], [7.0484327153638269, 6.8859112718527289, 3.3214906751109079, 4.1319603443044786, 3.2919049518842676, 3.8961844607912113, 6.645652227769677, 3.680437333538447, 2.7931310314182922, 4.6362674911036841, 5.5220713093967051, 5.2196422824700353, 3.7666650074113814, 3.3699869165228575, 6.3198328863514632]]\n", "Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 14 days' worth of prior data\n", "execute(steps=15, days=14, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-10-24 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 7.49473 \n", "1979-10-25 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 7.4687 \n", "1979-10-26 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 7.20847 \n", "1979-10-27 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 7.20847 \n", "1979-10-28 7.39063 7.09084 6.83061 6.87017 6.92221 6.89619 7.09084 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1979-10-24 7.63838 7.58633 7.72894 ... 8.14531 8.22338 7.9111 \n", "1979-10-25 7.49473 7.63838 7.58633 ... 8.0027 8.14531 8.22338 \n", "1979-10-26 7.4687 7.49473 7.63838 ... 7.78098 8.0027 8.14531 \n", "1979-10-27 7.20847 7.4687 7.49473 ... 7.79452 7.78098 8.0027 \n", "1979-10-28 7.20847 7.20847 7.4687 ... 7.72894 7.79452 7.78098 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1979-10-24 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-10-25 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-10-26 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-10-27 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-10-28 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.47982 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64\n", "Mean Absolute Error: 0.247178558128\n", "Explained Variance Score: 0.934716071877\n", "Mean Squared Error: 0.125104935048\n", "R2 score: 0.934194798936\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-16 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 3.63078 \n", "1981-10-17 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 3.70781 \n", "1981-10-18 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 3.72134 \n", "1981-10-19 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 3.72134 \n", "1981-10-20 4.15125 4.02009 3.9035 3.65576 3.70781 3.70781 3.72134 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1981-10-16 3.60371 3.59122 3.68283 ... 3.87748 3.95555 3.85146 \n", "1981-10-17 3.63078 3.60371 3.59122 ... 3.66929 3.87748 3.95555 \n", "1981-10-18 3.70781 3.63078 3.60371 ... 3.66929 3.66929 3.87748 \n", "1981-10-19 3.72134 3.70781 3.63078 ... 3.64327 3.66929 3.66929 \n", "1981-10-20 3.72134 3.72134 3.70781 ... 3.68283 3.64327 3.66929 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1981-10-16 3.69532 3.53918 3.47464 3.39553 3.44757 4.0076 3.3185 \n", "1981-10-17 3.85146 3.69532 3.53918 3.47464 3.39553 4.0076 3.3185 \n", "1981-10-18 3.95555 3.85146 3.69532 3.53918 3.47464 4.0076 3.3185 \n", "1981-10-19 3.87748 3.95555 3.85146 3.69532 3.53918 4.07213 3.48713 \n", "1981-10-20 3.66929 3.87748 3.95555 3.85146 3.69532 4.20329 3.53918 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64\n", "Mean Absolute Error: 0.14560789487\n", "Explained Variance Score: 0.697986240547\n", "Mean Squared Error: 0.0357285529497\n", "R2 score: 0.693931872833\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-11 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 4.38441 \n", "1983-10-12 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 4.29385 \n", "1983-10-13 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 4.3459 \n", "1983-10-14 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 4.35943 \n", "1983-10-15 4.28032 4.28032 4.30739 4.25534 4.25534 4.26783 4.37192 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1983-10-11 4.44999 4.51557 4.55409 ... 4.39795 4.42397 4.37192 \n", "1983-10-12 4.38441 4.44999 4.51557 ... 4.44999 4.39795 4.42397 \n", "1983-10-13 4.29385 4.38441 4.44999 ... 4.37192 4.44999 4.39795 \n", "1983-10-14 4.3459 4.29385 4.38441 ... 4.47602 4.37192 4.44999 \n", "1983-10-15 4.35943 4.3459 4.29385 ... 4.55409 4.47602 4.37192 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1983-10-11 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.21578 \n", "1983-10-12 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.18976 \n", "1983-10-13 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.18976 \n", "1983-10-14 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.18976 \n", "1983-10-15 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.18976 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64\n", "Mean Absolute Error: 0.100467856093\n", "Explained Variance Score: 0.707746188515\n", "Mean Squared Error: 0.0166816164165\n", "R2 score: 0.690365934271\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-01 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 5.03604 \n", "1985-10-02 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 4.99648 \n", "1985-10-03 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 4.95693 \n", "1985-10-04 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 5.11307 \n", "1985-10-05 5.15262 5.04853 4.99648 5.08809 5.15262 5.19218 5.02251 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1985-10-01 5.10058 5.23069 5.25672 ... 5.14013 5.16512 5.15262 \n", "1985-10-02 5.03604 5.10058 5.23069 ... 5.08809 5.14013 5.16512 \n", "1985-10-03 4.99648 5.03604 5.10058 ... 5.17865 5.08809 5.14013 \n", "1985-10-04 4.95693 4.99648 5.03604 ... 5.14013 5.17865 5.08809 \n", "1985-10-05 5.11307 4.95693 4.99648 ... 5.25672 5.14013 5.17865 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1985-10-01 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-02 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-03 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-04 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-05 5.08809 5.14013 5.16512 5.15262 4.98399 5.26921 4.91841 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64\n", "Mean Absolute Error: 0.118704995917\n", "Explained Variance Score: 0.599720926078\n", "Mean Squared Error: 0.0233000629812\n", "R2 score: 0.596620827484\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-09-22 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 5.79496 \n", "1987-09-23 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 5.76725 \n", "1987-09-24 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 5.79496 \n", "1987-09-25 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 5.78111 \n", "1987-09-26 5.90152 5.83439 5.76725 5.76725 5.84824 5.84824 5.74168 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1987-09-22 5.84824 5.79496 5.70118 ... 5.67454 5.72782 5.70118 \n", "1987-09-23 5.79496 5.84824 5.79496 ... 5.74168 5.67454 5.72782 \n", "1987-09-24 5.76725 5.79496 5.84824 ... 5.72782 5.74168 5.67454 \n", "1987-09-25 5.79496 5.76725 5.79496 ... 5.6479 5.72782 5.74168 \n", "1987-09-26 5.78111 5.79496 5.76725 ... 5.70118 5.6479 5.72782 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1987-09-22 5.66069 5.79496 5.72782 5.71397 5.6479 5.86103 5.62126 \n", "1987-09-23 5.70118 5.66069 5.79496 5.72782 5.71397 5.86103 5.62126 \n", "1987-09-24 5.72782 5.70118 5.66069 5.79496 5.72782 5.86103 5.62126 \n", "1987-09-25 5.67454 5.72782 5.70118 5.66069 5.79496 5.86103 5.62126 \n", "1987-09-26 5.74168 5.67454 5.72782 5.70118 5.66069 5.90152 5.62126 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64\n", "Mean Absolute Error: 0.107246850816\n", "Explained Variance Score: 0.873418919146\n", "Mean Squared Error: 0.0223804852513\n", "R2 score: 0.873053045647\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-13 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 8.51123 \n", "1989-09-14 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 8.52441 \n", "1989-09-15 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 8.62105 \n", "1989-09-16 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 8.74405 \n", "1989-09-17 8.66302 8.73244 8.84263 8.81508 8.84263 9.00791 8.77321 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1989-09-13 8.38823 8.38823 8.4695 ... 8.62105 8.71769 8.73087 \n", "1989-09-14 8.51123 8.38823 8.38823 ... 8.71769 8.62105 8.71769 \n", "1989-09-15 8.52441 8.51123 8.38823 ... 8.64851 8.71769 8.62105 \n", "1989-09-16 8.62105 8.52441 8.51123 ... 8.57932 8.64851 8.71769 \n", "1989-09-17 8.74405 8.62105 8.52441 ... 8.4695 8.57932 8.64851 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1989-09-13 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.35967 \n", "1989-09-14 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.35967 \n", "1989-09-15 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.35967 \n", "1989-09-16 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.35967 \n", "1989-09-17 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.35967 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64\n", "Mean Absolute Error: 0.183367476501\n", "Explained Variance Score: 0.923191778806\n", "Mean Squared Error: 0.062951655998\n", "R2 score: 0.914995737201\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-05 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 4.96121 \n", "1991-09-06 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 4.97595 \n", "1991-09-07 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 5.01791 \n", "1991-09-08 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 4.97595 \n", "1991-09-09 4.86252 4.86252 4.89096 4.91925 4.91925 4.81946 4.86255 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1991-09-05 4.83307 4.79111 4.80585 ... 5.01791 5.03265 5.11657 \n", "1991-09-06 4.96121 4.83307 4.79111 ... 4.96121 5.01791 5.03265 \n", "1991-09-07 4.97595 4.96121 4.83307 ... 4.90451 4.96121 5.01791 \n", "1991-09-08 5.01791 4.97595 4.96121 ... 4.69245 4.90451 4.96121 \n", "1991-09-09 4.97595 5.01791 4.97595 ... 4.80585 4.69245 4.90451 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1991-09-05 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-06 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-07 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-08 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-09 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64\n", "Mean Absolute Error: 0.179845135179\n", "Explained Variance Score: 0.878379857563\n", "Mean Squared Error: 0.0637005335646\n", "R2 score: 0.832463137105\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-08-27 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 9.52898 \n", "1993-08-28 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 9.58664 \n", "1993-08-29 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 9.3998 \n", "1993-08-30 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 9.34213 \n", "1993-08-31 9.35597 9.29831 9.25563 9.24064 9.35597 9.47131 9.42863 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1993-08-27 9.5728 9.77464 9.6743 ... 9.21296 9.2268 9.08263 \n", "1993-08-28 9.52898 9.5728 9.77464 ... 9.3133 9.21296 9.2268 \n", "1993-08-29 9.58664 9.52898 9.5728 ... 9.32829 9.3133 9.21296 \n", "1993-08-30 9.3998 9.58664 9.52898 ... 9.45747 9.32829 9.3133 \n", "1993-08-31 9.34213 9.3998 9.58664 ... 9.6743 9.45747 9.32829 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1993-08-27 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 9.00997 \n", "1993-08-28 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 9.00997 \n", "1993-08-29 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 9.00997 \n", "1993-08-30 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 9.00997 \n", "1993-08-31 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 9.00997 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64\n", "Mean Absolute Error: 0.173480085165\n", "Explained Variance Score: 0.889783953988\n", "Mean Squared Error: 0.0542550164358\n", "R2 score: 0.87630032975\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-08-19 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 15.005 \n", "1995-08-20 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 15.0778 \n", "1995-08-21 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 15.1071 \n", "1995-08-22 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 15.1071 \n", "1995-08-23 14.7703 14.7844 14.7551 14.7551 14.7551 15.0918 15.0778 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1995-08-19 15.2984 15.5612 15.4004 ... 15.3418 15.4298 15.4298 \n", "1995-08-20 15.005 15.2984 15.5612 ... 15.1071 15.3418 15.4298 \n", "1995-08-21 15.0778 15.005 15.2984 ... 15.2538 15.1071 15.3418 \n", "1995-08-22 15.1071 15.0778 15.005 ... 15.357 15.2538 15.1071 \n", "1995-08-23 15.1071 15.1071 15.0778 ... 15.4004 15.357 15.2538 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1995-08-19 15.1364 15.1071 15.3124 15.4298 15.2397 15.5612 14.6812 \n", "1995-08-20 15.4298 15.1364 15.1071 15.3124 15.4298 15.5612 14.6812 \n", "1995-08-21 15.4298 15.4298 15.1364 15.1071 15.3124 15.5612 14.6812 \n", "1995-08-22 15.3418 15.4298 15.4298 15.1364 15.1071 15.5612 14.6671 \n", "1995-08-23 15.1071 15.3418 15.4298 15.4298 15.1364 15.5612 14.6378 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64\n", "Mean Absolute Error: 0.21969484392\n", "Explained Variance Score: 0.941053178728\n", "Mean Squared Error: 0.0874448127494\n", "R2 score: 0.934717418017\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-09 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 20.0003 \n", "1997-08-10 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 20.1788 \n", "1997-08-11 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 19.9689 \n", "1997-08-12 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 19.7879 \n", "1997-08-13 21.523 21.3565 21.4771 21.0235 20.8594 20.5119 19.9834 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1997-08-09 20.9486 21.4313 21.4023 ... 20.5119 20.9197 21.2069 \n", "1997-08-10 20.0003 20.9486 21.4313 ... 20.6036 20.5119 20.9197 \n", "1997-08-11 20.1788 20.0003 20.9486 ... 20.6928 20.6036 20.5119 \n", "1997-08-12 19.9689 20.1788 20.0003 ... 20.9197 20.6928 20.6036 \n", "1997-08-13 19.7879 19.9689 20.1788 ... 21.4023 20.9197 20.6928 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1997-08-09 20.8883 21.2358 20.7387 21.0403 22.0346 22.1407 19.6528 \n", "1997-08-10 21.2069 20.8883 21.2358 20.7387 21.0403 22.1407 19.6528 \n", "1997-08-11 20.9197 21.2069 20.8883 21.2358 20.7387 21.6267 19.6528 \n", "1997-08-12 20.5119 20.9197 21.2069 20.8883 21.2358 21.6267 19.6528 \n", "1997-08-13 20.6036 20.5119 20.9197 21.2069 20.8883 21.6267 19.6528 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64\n", "Mean Absolute Error: 0.587602123323\n", "Explained Variance Score: 0.597673117636\n", "Mean Squared Error: 0.562295173611\n", "R2 score: 0.599602671043\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-03 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 27.6253 \n", "1999-08-04 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 28.4122 \n", "1999-08-05 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 27.3447 \n", "1999-08-06 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 27.47 \n", "1999-08-07 26.0316 26.7533 27.0339 27.3146 26.9086 26.5929 27.0039 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "1999-08-03 27.1893 26.8435 26.623 ... 26.9688 26.5628 26.1569 \n", "1999-08-04 27.6253 27.1893 26.8435 ... 26.7533 26.9688 26.5628 \n", "1999-08-05 28.4122 27.6253 27.1893 ... 26.5027 26.7533 26.9688 \n", "1999-08-06 27.3447 28.4122 27.6253 ... 26.3423 26.5027 26.7533 \n", "1999-08-07 27.47 27.3447 28.4122 ... 26.623 26.3423 26.5027 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "1999-08-03 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 25.811 \n", "1999-08-04 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 25.811 \n", "1999-08-05 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 25.811 \n", "1999-08-06 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 25.9664 \n", "1999-08-07 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 25.9363 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64\n", "Mean Absolute Error: 0.80841683447\n", "Explained Variance Score: 0.55978076116\n", "Mean Squared Error: 1.12748077923\n", "R2 score: 0.551337857615\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-07-26 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 21.2871 \n", "2001-07-27 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 21.2339 \n", "2001-07-28 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 22.2708 \n", "2001-07-29 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 21.9624 \n", "2001-07-30 21.3349 21.1594 21.2445 21.2658 22.3559 22.5208 22.5208 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2001-07-26 20.7074 19.9948 20.633 ... 21.771 22.2762 21.2179 \n", "2001-07-27 21.2871 20.7074 19.9948 ... 21.4998 21.771 22.2762 \n", "2001-07-28 21.2339 21.2871 20.7074 ... 21.1701 21.4998 21.771 \n", "2001-07-29 22.2708 21.2339 21.2871 ... 21.0584 21.1701 21.4998 \n", "2001-07-30 21.9624 22.2708 21.2339 ... 20.633 21.0584 21.1701 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2001-07-26 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.9417 \n", "2001-07-27 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.9417 \n", "2001-07-28 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.9417 \n", "2001-07-29 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.9417 \n", "2001-07-30 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.9417 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64\n", "Mean Absolute Error: 0.702921222006\n", "Explained Variance Score: 0.80646285415\n", "Mean Squared Error: 0.898869096996\n", "R2 score: 0.800649358483\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-07-19 33.831 33.5959 33.2632 33.6131 34.0719 34.112 33.9686 \n", "2003-07-20 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 34.112 \n", "2003-07-21 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 34.0719 \n", "2003-07-22 33.917 33.4926 33.5729 33.831 33.5959 33.2632 33.6131 \n", "2003-07-23 33.8826 33.917 33.4926 33.5729 33.831 33.5959 33.2632 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2003-07-19 34.1522 33.5959 33.0052 ... 33.5442 33.1944 33.0052 \n", "2003-07-20 33.9686 34.1522 33.5959 ... 32.8962 33.5442 33.1944 \n", "2003-07-21 34.112 33.9686 34.1522 ... 32.9937 32.8962 33.5442 \n", "2003-07-22 34.0719 34.112 33.9686 ... 33.3722 32.9937 32.8962 \n", "2003-07-23 33.6131 34.0719 34.112 ... 33.0052 33.3722 32.9937 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2003-07-19 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-07-20 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-07-21 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-07-22 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-07-23 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64\n", "Mean Absolute Error: 0.607302274291\n", "Explained Variance Score: 0.912255975134\n", "Mean Squared Error: 0.641949670141\n", "R2 score: 0.841214975617\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-07-20 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 39.9404 \n", "2005-07-21 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 38.9263 \n", "2005-07-22 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 39.7388 \n", "2005-07-23 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 39.5982 \n", "2005-07-24 41.2538 40.3008 39.751 39.0118 39.4211 39.2928 39.5188 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2005-07-20 40.0625 40.1969 40.4413 ... 40.2947 39.7082 39.8304 \n", "2005-07-21 39.9404 40.0625 40.1969 ... 39.8304 40.2947 39.7082 \n", "2005-07-22 38.9263 39.9404 40.0625 ... 39.7449 39.8304 40.2947 \n", "2005-07-23 39.7388 38.9263 39.9404 ... 39.7571 39.7449 39.8304 \n", "2005-07-24 39.5982 39.7388 38.9263 ... 40.4413 39.7571 39.7449 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2005-07-20 40.0442 39.6227 40.2275 40.7162 39.867 40.8933 38.8041 \n", "2005-07-21 39.8304 40.0442 39.6227 40.2275 40.7162 40.8933 38.8041 \n", "2005-07-22 39.7082 39.8304 40.0442 39.6227 40.2275 40.8933 38.8041 \n", "2005-07-23 40.2947 39.7082 39.8304 40.0442 39.6227 40.6123 38.8041 \n", "2005-07-24 39.8304 40.2947 39.7082 39.8304 40.0442 41.3454 38.8041 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64\n", "Mean Absolute Error: 0.834239650358\n", "Explained Variance Score: 0.583600781437\n", "Mean Squared Error: 1.16134570271\n", "R2 score: 0.585510921947\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-17 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 36.2071 \n", "2007-07-18 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 32.6162 \n", "2007-07-19 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 33.2999 \n", "2007-07-20 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 33.2667 \n", "2007-07-21 26.9147 27.0143 29.6692 29.4834 30.2998 31.6936 31.2224 \n", "\n", " i-8 i-9 i-10 ... i-14 i-15 i-16 \\\n", "2007-07-17 36.7314 35.5367 35.9084 ... 34.1229 34.7269 34.4681 \n", "2007-07-18 36.2071 36.7314 35.5367 ... 34.1561 34.1229 34.7269 \n", "2007-07-19 32.6162 36.2071 36.7314 ... 36.2071 34.1561 34.1229 \n", "2007-07-20 33.2999 32.6162 36.2071 ... 36.6119 36.2071 34.1561 \n", "2007-07-21 33.2667 33.2999 32.6162 ... 35.9084 36.6119 36.2071 \n", "\n", " i-17 i-18 i-19 i-20 i-21 Adj. High Adj. Low \n", "2007-07-17 36.3664 35.457 35.5035 34.78 36.1009 37.6275 28.4479 \n", "2007-07-18 34.4681 36.3664 35.457 35.5035 34.78 37.6275 28.4479 \n", "2007-07-19 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 28.3484 \n", "2007-07-20 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 26.5629 \n", "2007-07-21 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 23 columns]\n", "# Days used to predict: 21\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64\n", "Mean Absolute Error: 1.2420603359\n", "Explained Variance Score: 0.882276409115\n", "Mean Squared Error: 2.85887227574\n", "R2 score: 0.862561522356\n", "Errors: [Day 0 2.293209\n", "Day 1 3.505125\n", "Day 2 4.391077\n", "Day 3 5.136101\n", "Day 4 5.741021\n", "Day 5 6.316841\n", "Day 6 6.819157\n", "dtype: float64, Day 0 2.574584\n", "Day 1 3.775894\n", "Day 2 4.734432\n", "Day 3 5.415123\n", "Day 4 6.045789\n", "Day 5 6.565847\n", "Day 6 7.050893\n", "dtype: float64, Day 0 1.410939\n", "Day 1 2.110159\n", "Day 2 2.516358\n", "Day 3 2.799649\n", "Day 4 3.038314\n", "Day 5 3.261916\n", "Day 6 3.447316\n", "dtype: float64, Day 0 1.856034\n", "Day 1 2.531194\n", "Day 2 2.892126\n", "Day 3 3.254526\n", "Day 4 3.525219\n", "Day 5 3.737019\n", "Day 6 3.964312\n", "dtype: float64, Day 0 1.345212\n", "Day 1 1.886959\n", "Day 2 2.171284\n", "Day 3 2.552884\n", "Day 4 2.826196\n", "Day 5 3.018288\n", "Day 6 3.233878\n", "dtype: float64, Day 0 1.295354\n", "Day 1 2.013664\n", "Day 2 2.571580\n", "Day 3 3.030218\n", "Day 4 3.427825\n", "Day 5 3.705191\n", "Day 6 3.925567\n", "dtype: float64, Day 0 2.070624\n", "Day 1 3.094105\n", "Day 2 3.947871\n", "Day 3 4.619595\n", "Day 4 5.180633\n", "Day 5 5.687436\n", "Day 6 6.009670\n", "dtype: float64, Day 0 1.316381\n", "Day 1 1.966840\n", "Day 2 2.502535\n", "Day 3 2.893502\n", "Day 4 3.200225\n", "Day 5 3.440756\n", "Day 6 3.654513\n", "dtype: float64, Day 0 1.078722\n", "Day 1 1.585258\n", "Day 2 1.924181\n", "Day 3 2.205625\n", "Day 4 2.456280\n", "Day 5 2.662821\n", "Day 6 2.884063\n", "dtype: float64, Day 0 1.758971\n", "Day 1 2.669222\n", "Day 2 3.290503\n", "Day 3 3.787819\n", "Day 4 4.211245\n", "Day 5 4.505849\n", "Day 6 4.744830\n", "dtype: float64, Day 0 2.275214\n", "Day 1 3.280463\n", "Day 2 3.955057\n", "Day 3 4.390467\n", "Day 4 4.679584\n", "Day 5 4.921191\n", "Day 6 5.289410\n", "dtype: float64, Day 0 2.088063\n", "Day 1 3.051168\n", "Day 2 3.644165\n", "Day 3 4.128778\n", "Day 4 4.558830\n", "Day 5 5.012427\n", "Day 6 5.403060\n", "dtype: float64, Day 0 1.168740\n", "Day 1 1.770978\n", "Day 2 2.177038\n", "Day 3 2.544219\n", "Day 4 2.910062\n", "Day 5 3.233953\n", "Day 6 3.530574\n", "dtype: float64, Day 0 1.287467\n", "Day 1 1.859007\n", "Day 2 2.219068\n", "Day 3 2.589502\n", "Day 4 2.878740\n", "Day 5 3.159265\n", "Day 6 3.382889\n", "dtype: float64, Day 0 2.367974\n", "Day 1 3.226011\n", "Day 2 3.758185\n", "Day 3 4.440659\n", "Day 4 5.179555\n", "Day 5 5.895722\n", "Day 6 6.526989\n", "dtype: float64]\n", "Daily error: [[2.2932086903598066, 2.5745843677223665, 1.410938665851232, 1.8560341967801308, 1.3452118535491773, 1.2953543921120965, 2.0706240035799164, 1.3163805720674671, 1.0787215801674817, 1.7589705465567647, 2.2752138152167474, 2.0880627448808471, 1.1687399396644256, 1.2874672090863213, 2.3679740132036238], [3.5051253714594792, 3.7758939807647049, 2.1101590340760858, 2.5311938217644379, 1.8869590042388795, 2.0136643031598154, 3.0941050306484827, 1.9668400833290185, 1.5852576005774814, 2.6692218359360016, 3.2804625406152712, 3.0511678681477217, 1.7709780411099409, 1.8590066437215769, 3.2260112930119331], [4.3910769731836528, 4.73443172240734, 2.5163581244682867, 2.8921256793047787, 2.1712841603268145, 2.5715803374493698, 3.9478706366382608, 2.5025348594217718, 1.9241814438590694, 3.2905025186776364, 3.9550573049063185, 3.6441654215575263, 2.1770380803647402, 2.2190678049570254, 3.7581852465385679], [5.1361009877654604, 5.4151232904822937, 2.7996492546644527, 3.254525792271338, 2.552883694387567, 3.030218079266386, 4.6195946055962853, 2.8935016311120809, 2.2056247688212975, 3.7878186640966414, 4.3904674266100656, 4.1287784929628275, 2.544219187098574, 2.5895015720185302, 4.440659439319135], [5.7410212232012947, 6.0457890220500268, 3.0383136360900456, 3.5252188012037138, 2.826196220616342, 3.4278249217933108, 5.1806333088289245, 3.2002251370334793, 2.4562804221504946, 4.2112453125333271, 4.6795839169286628, 4.5588302590783849, 2.9100623154365133, 2.8787401524867353, 5.1795549205147617], [6.3168411174496839, 6.565847199104029, 3.2619156971270429, 3.7370190918129889, 3.0182882726444662, 3.7051905637636322, 5.6874360343827588, 3.4407560971972138, 2.6628209714516475, 4.5058494414038934, 4.9211912763832011, 5.0124273285269396, 3.2339526748757406, 3.1592652479164429, 5.8957221091782941], [6.8191565595888122, 7.0508931309669327, 3.4473160422940028, 3.964312202423975, 3.2338778357552651, 3.9255667936052023, 6.0096699233415531, 3.6545134565638175, 2.8840627731649513, 4.7448298869292778, 5.2894102436662802, 5.4030603118359393, 3.5305738678012406, 3.3828891687730129, 6.526988671729911]]\n", "Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 21 days' worth of prior data\n", "execute(steps=15, days=21, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1979-11-06 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 7.09084 \n", "1979-11-07 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 7.39063 \n", "1979-11-08 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 7.39063 \n", "1979-11-09 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 7.26052 \n", "1979-11-10 6.55789 6.76607 6.76607 6.84414 6.84414 7.1304 7.0388 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1979-11-06 6.83061 6.87017 6.92221 ... 8.14531 8.22338 7.9111 \n", "1979-11-07 7.09084 6.83061 6.87017 ... 8.0027 8.14531 8.22338 \n", "1979-11-08 7.39063 7.09084 6.83061 ... 7.78098 8.0027 8.14531 \n", "1979-11-09 7.39063 7.39063 7.09084 ... 7.79452 7.78098 8.0027 \n", "1979-11-10 7.26052 7.39063 7.39063 ... 7.72894 7.79452 7.78098 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1979-11-06 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 6.47982 \n", "1979-11-07 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 6.47982 \n", "1979-11-08 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 6.47982 \n", "1979-11-09 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 6.47982 \n", "1979-11-10 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 6.46628 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64\n", "Mean Absolute Error: 0.265589379571\n", "Explained Variance Score: 0.923826112353\n", "Mean Squared Error: 0.137645958828\n", "R2 score: 0.924053762052\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1981-10-29 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 4.02009 \n", "1981-10-30 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 4.15125 \n", "1981-10-31 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 4.17623 \n", "1981-11-01 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 4.26783 \n", "1981-11-02 4.16374 3.95555 3.85146 4.03362 3.92953 4.15125 4.15125 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1981-10-29 3.9035 3.65576 3.70781 ... 3.87748 3.95555 3.85146 \n", "1981-10-30 4.02009 3.9035 3.65576 ... 3.66929 3.87748 3.95555 \n", "1981-10-31 4.15125 4.02009 3.9035 ... 3.66929 3.66929 3.87748 \n", "1981-11-01 4.17623 4.15125 4.02009 ... 3.64327 3.66929 3.66929 \n", "1981-11-02 4.26783 4.17623 4.15125 ... 3.68283 3.64327 3.66929 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1981-10-29 3.69532 3.53918 3.47464 3.39553 3.44757 4.30739 3.3185 \n", "1981-10-30 3.85146 3.69532 3.53918 3.47464 3.39553 4.30739 3.3185 \n", "1981-10-31 3.95555 3.85146 3.69532 3.53918 3.47464 4.30739 3.3185 \n", "1981-11-01 3.87748 3.95555 3.85146 3.69532 3.53918 4.30739 3.48713 \n", "1981-11-02 3.66929 3.87748 3.95555 3.85146 3.69532 4.30739 3.53918 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64\n", "Mean Absolute Error: 0.147636752695\n", "Explained Variance Score: 0.723234662854\n", "Mean Squared Error: 0.0364831332012\n", "R2 score: 0.711874870251\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1983-10-22 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 4.28032 \n", "1983-10-23 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 4.28032 \n", "1983-10-24 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 4.37192 \n", "1983-10-25 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 4.37192 \n", "1983-10-26 4.31988 4.18976 4.15125 4.16374 4.16374 4.24181 4.31988 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1983-10-22 4.30739 4.25534 4.25534 ... 4.39795 4.42397 4.37192 \n", "1983-10-23 4.28032 4.30739 4.25534 ... 4.44999 4.39795 4.42397 \n", "1983-10-24 4.28032 4.28032 4.30739 ... 4.37192 4.44999 4.39795 \n", "1983-10-25 4.37192 4.28032 4.28032 ... 4.47602 4.37192 4.44999 \n", "1983-10-26 4.37192 4.37192 4.28032 ... 4.55409 4.47602 4.37192 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1983-10-22 4.35943 4.39795 4.43646 4.58011 4.56762 4.60613 4.13771 \n", "1983-10-23 4.37192 4.35943 4.39795 4.43646 4.58011 4.60613 4.13771 \n", "1983-10-24 4.42397 4.37192 4.35943 4.39795 4.43646 4.56762 4.12418 \n", "1983-10-25 4.39795 4.42397 4.37192 4.35943 4.39795 4.56762 4.12418 \n", "1983-10-26 4.44999 4.39795 4.42397 4.37192 4.35943 4.56762 4.12418 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64\n", "Mean Absolute Error: 0.0982455236583\n", "Explained Variance Score: 0.738585897896\n", "Mean Squared Error: 0.0162113557319\n", "R2 score: 0.736956378599\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1985-10-12 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 5.04853 \n", "1985-10-13 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 5.15262 \n", "1985-10-14 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 5.24423 \n", "1985-10-15 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 5.20467 \n", "1985-10-16 5.40037 5.23069 5.14013 5.15262 5.15262 5.17865 5.17865 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1985-10-12 4.99648 5.08809 5.15262 ... 5.14013 5.16512 5.15262 \n", "1985-10-13 5.04853 4.99648 5.08809 ... 5.08809 5.14013 5.16512 \n", "1985-10-14 5.15262 5.04853 4.99648 ... 5.17865 5.08809 5.14013 \n", "1985-10-15 5.24423 5.15262 5.04853 ... 5.14013 5.17865 5.08809 \n", "1985-10-16 5.20467 5.24423 5.15262 ... 5.25672 5.14013 5.17865 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1985-10-12 4.98399 4.99648 4.90488 5.15262 5.20467 5.26921 4.89239 \n", "1985-10-13 5.15262 4.98399 4.99648 4.90488 5.15262 5.26921 4.89239 \n", "1985-10-14 5.16512 5.15262 4.98399 4.99648 4.90488 5.26921 4.89239 \n", "1985-10-15 5.14013 5.16512 5.15262 4.98399 4.99648 5.26921 4.90488 \n", "1985-10-16 5.08809 5.14013 5.16512 5.15262 4.98399 5.43888 4.91841 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64\n", "Mean Absolute Error: 0.125644826003\n", "Explained Variance Score: 0.64103714916\n", "Mean Squared Error: 0.0279968462683\n", "R2 score: 0.621838958431\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1987-10-06 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 5.83439 \n", "1987-10-07 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 5.90152 \n", "1987-10-08 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 5.86103 \n", "1987-10-09 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 5.98038 \n", "1987-10-10 5.71397 5.70118 5.83439 5.86103 5.99424 5.98038 5.96759 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1987-10-06 5.76725 5.76725 5.84824 ... 5.67454 5.72782 5.70118 \n", "1987-10-07 5.83439 5.76725 5.76725 ... 5.74168 5.67454 5.72782 \n", "1987-10-08 5.90152 5.83439 5.76725 ... 5.72782 5.74168 5.67454 \n", "1987-10-09 5.86103 5.90152 5.83439 ... 5.6479 5.72782 5.74168 \n", "1987-10-10 5.98038 5.86103 5.90152 ... 5.70118 5.6479 5.72782 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1987-10-06 5.66069 5.79496 5.72782 5.71397 5.6479 6.07416 5.62126 \n", "1987-10-07 5.70118 5.66069 5.79496 5.72782 5.71397 6.07416 5.62126 \n", "1987-10-08 5.72782 5.70118 5.66069 5.79496 5.72782 6.07416 5.62126 \n", "1987-10-09 5.67454 5.72782 5.70118 5.66069 5.79496 6.07416 5.62126 \n", "1987-10-10 5.74168 5.67454 5.72782 5.70118 5.66069 6.07416 5.62126 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64\n", "Mean Absolute Error: 0.101127508153\n", "Explained Variance Score: 0.896285604892\n", "Mean Squared Error: 0.0175440030481\n", "R2 score: 0.895446126394\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1989-09-28 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 8.73244 \n", "1989-09-29 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 8.66302 \n", "1989-09-30 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 8.52639 \n", "1989-10-01 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 8.44264 \n", "1989-10-02 8.29169 8.25092 8.23659 8.1815 8.20904 8.34678 8.47129 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1989-09-28 8.84263 8.81508 8.84263 ... 8.62105 8.71769 8.73087 \n", "1989-09-29 8.73244 8.84263 8.81508 ... 8.71769 8.62105 8.71769 \n", "1989-09-30 8.66302 8.73244 8.84263 ... 8.64851 8.71769 8.62105 \n", "1989-10-01 8.52639 8.66302 8.73244 ... 8.57932 8.64851 8.71769 \n", "1989-10-02 8.44264 8.52639 8.66302 ... 8.4695 8.57932 8.64851 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1989-09-28 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 8.20904 \n", "1989-09-29 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 8.1264 \n", "1989-09-30 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 8.1264 \n", "1989-10-01 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 8.1264 \n", "1989-10-02 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 8.1264 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64\n", "Mean Absolute Error: 0.192674964535\n", "Explained Variance Score: 0.915662166478\n", "Mean Squared Error: 0.0693827817393\n", "R2 score: 0.904473158945\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-09-19 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 4.86252 \n", "1991-09-20 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 4.86252 \n", "1991-09-21 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 4.83409 \n", "1991-09-22 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 4.83409 \n", "1991-09-23 4.96148 4.99105 4.93418 4.94783 5.0047 5.03314 4.93418 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1991-09-19 4.89096 4.91925 4.91925 ... 5.01791 5.03265 5.11657 \n", "1991-09-20 4.86252 4.89096 4.91925 ... 4.96121 5.01791 5.03265 \n", "1991-09-21 4.86252 4.86252 4.89096 ... 4.90451 4.96121 5.01791 \n", "1991-09-22 4.83409 4.86252 4.86252 ... 4.69245 4.90451 4.96121 \n", "1991-09-23 4.83409 4.83409 4.86252 ... 4.80585 4.69245 4.90451 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1991-09-19 5.11657 5.15966 5.22997 5.21636 5.18801 5.27306 4.69245 \n", "1991-09-20 5.11657 5.11657 5.15966 5.22997 5.21636 5.24471 4.69245 \n", "1991-09-21 5.03265 5.11657 5.11657 5.15966 5.22997 5.24471 4.69245 \n", "1991-09-22 5.01791 5.03265 5.11657 5.11657 5.15966 5.15966 4.69245 \n", "1991-09-23 4.96121 5.01791 5.03265 5.11657 5.11657 5.14605 4.69245 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64\n", "Mean Absolute Error: 0.169117487826\n", "Explained Variance Score: 0.885949963038\n", "Mean Squared Error: 0.0583397959215\n", "R2 score: 0.84902479478\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-09-09 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 9.29831 \n", "1993-09-10 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 9.35597 \n", "1993-09-11 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 9.28827 \n", "1993-09-12 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 9.17272 \n", "1993-09-13 9.17272 9.12881 9.09992 9.01325 8.94161 8.8977 9.07103 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1993-09-09 9.25563 9.24064 9.35597 ... 9.21296 9.2268 9.08263 \n", "1993-09-10 9.29831 9.25563 9.24064 ... 9.3133 9.21296 9.2268 \n", "1993-09-11 9.35597 9.29831 9.25563 ... 9.32829 9.3133 9.21296 \n", "1993-09-12 9.28827 9.35597 9.29831 ... 9.45747 9.32829 9.3133 \n", "1993-09-13 9.17272 9.28827 9.35597 ... 9.6743 9.45747 9.32829 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1993-09-09 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.86881 \n", "1993-09-10 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.86881 \n", "1993-09-11 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.86881 \n", "1993-09-12 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.86881 \n", "1993-09-13 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.86881 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64\n", "Mean Absolute Error: 0.173953716023\n", "Explained Variance Score: 0.882699120583\n", "Mean Squared Error: 0.055246949342\n", "R2 score: 0.868280591863\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-09-01 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 14.7844 \n", "1995-09-02 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 14.7703 \n", "1995-09-03 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 15.005 \n", "1995-09-04 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 15.3265 \n", "1995-09-05 16.2301 16.2442 16.0984 15.6127 15.5764 15.4744 15.3265 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1995-09-01 14.7551 14.7551 14.7551 ... 15.3418 15.4298 15.4298 \n", "1995-09-02 14.7844 14.7551 14.7551 ... 15.1071 15.3418 15.4298 \n", "1995-09-03 14.7703 14.7844 14.7551 ... 15.2538 15.1071 15.3418 \n", "1995-09-04 15.005 14.7703 14.7844 ... 15.357 15.2538 15.1071 \n", "1995-09-05 15.3265 15.005 14.7703 ... 15.4004 15.357 15.2538 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1995-09-01 15.1364 15.1071 15.3124 15.4298 15.2397 15.5764 14.6378 \n", "1995-09-02 15.4298 15.1364 15.1071 15.3124 15.4298 15.7738 14.6378 \n", "1995-09-03 15.4298 15.4298 15.1364 15.1071 15.3124 16.1125 14.6378 \n", "1995-09-04 15.3418 15.4298 15.4298 15.1364 15.1071 16.3183 14.6378 \n", "1995-09-05 15.1071 15.3418 15.4298 15.4298 15.1364 16.3183 14.6378 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64\n", "Mean Absolute Error: 0.239159740022\n", "Explained Variance Score: 0.944241221285\n", "Mean Squared Error: 0.101972988604\n", "R2 score: 0.93697372492\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-08-23 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 21.3565 \n", "1997-08-24 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 21.523 \n", "1997-08-25 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 21.7933 \n", "1997-08-26 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 22.1407 \n", "1997-08-27 22.3992 21.7188 21.3556 21.0965 21.5519 21.8391 22.1552 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1997-08-23 21.4771 21.0235 20.8594 ... 20.5119 20.9197 21.2069 \n", "1997-08-24 21.3565 21.4771 21.0235 ... 20.6036 20.5119 20.9197 \n", "1997-08-25 21.523 21.3565 21.4771 ... 20.6928 20.6036 20.5119 \n", "1997-08-26 21.7933 21.523 21.3565 ... 20.9197 20.6928 20.6036 \n", "1997-08-27 22.1407 21.7933 21.523 ... 21.4023 20.9197 20.6928 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1997-08-23 20.8883 21.2358 20.7387 21.0403 22.0346 22.1721 19.6528 \n", "1997-08-24 21.2069 20.8883 21.2358 20.7387 21.0403 22.1721 19.6528 \n", "1997-08-25 20.9197 21.2069 20.8883 21.2358 20.7387 22.1721 19.6528 \n", "1997-08-26 20.5119 20.9197 21.2069 20.8883 21.2358 22.1721 19.6528 \n", "1997-08-27 20.6036 20.5119 20.9197 21.2069 20.8883 22.3992 19.6528 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64\n", "Mean Absolute Error: 0.601937849493\n", "Explained Variance Score: 0.588903471007\n", "Mean Squared Error: 0.583981651008\n", "R2 score: 0.583088547014\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-08-14 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 26.7533 \n", "1999-08-15 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 26.0316 \n", "1999-08-16 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 26.0616 \n", "1999-08-17 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 25.3098 \n", "1999-08-18 24.6834 24.5881 24.6533 24.9991 26.0015 25.5304 25.5604 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "1999-08-14 27.0339 27.3146 26.9086 ... 26.9688 26.5628 26.1569 \n", "1999-08-15 26.7533 27.0339 27.3146 ... 26.7533 26.9688 26.5628 \n", "1999-08-16 26.0316 26.7533 27.0339 ... 26.5027 26.7533 26.9688 \n", "1999-08-17 26.0616 26.0316 26.7533 ... 26.3423 26.5027 26.7533 \n", "1999-08-18 25.3098 26.0616 26.0316 ... 26.623 26.3423 26.5027 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "1999-08-14 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 24.964 \n", "1999-08-15 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 24.964 \n", "1999-08-16 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 24.4027 \n", "1999-08-17 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 24.4027 \n", "1999-08-18 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 24.4027 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64\n", "Mean Absolute Error: 0.794397514735\n", "Explained Variance Score: 0.589058113891\n", "Mean Squared Error: 1.06170118828\n", "R2 score: 0.586860973735\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-08-08 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 21.1594 \n", "2001-08-09 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 21.3349 \n", "2001-08-10 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 20.9786 \n", "2001-08-11 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 19.5588 \n", "2001-08-12 19.8885 20.1544 20.4841 20.3405 20.9893 20.4468 20.2767 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2001-08-08 21.2445 21.2658 22.3559 ... 21.771 22.2762 21.2179 \n", "2001-08-09 21.1594 21.2445 21.2658 ... 21.4998 21.771 22.2762 \n", "2001-08-10 21.3349 21.1594 21.2445 ... 21.1701 21.4998 21.771 \n", "2001-08-11 20.9786 21.3349 21.1594 ... 21.0584 21.1701 21.4998 \n", "2001-08-12 19.5588 20.9786 21.3349 ... 20.633 21.0584 21.1701 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2001-08-08 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 19.2769 \n", "2001-08-09 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 19.2769 \n", "2001-08-10 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 19.2769 \n", "2001-08-11 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 19.2769 \n", "2001-08-12 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 19.2769 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64\n", "Mean Absolute Error: 0.716918405219\n", "Explained Variance Score: 0.831164391363\n", "Mean Squared Error: 0.921046477113\n", "R2 score: 0.8261118985\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-08-01 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 33.917 \n", "2003-08-02 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 33.8826 \n", "2003-08-03 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 33.8195 \n", "2003-08-04 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 34.112 \n", "2003-08-05 33.9973 33.2632 33.5041 33.4066 33.0453 33.6303 33.7966 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2003-08-01 33.4926 33.5729 33.831 ... 33.5442 33.1944 33.0052 \n", "2003-08-02 33.917 33.4926 33.5729 ... 32.8962 33.5442 33.1944 \n", "2003-08-03 33.8826 33.917 33.4926 ... 32.9937 32.8962 33.5442 \n", "2003-08-04 33.8195 33.8826 33.917 ... 33.3722 32.9937 32.8962 \n", "2003-08-05 34.112 33.8195 33.8826 ... 33.0052 33.3722 32.9937 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2003-08-01 32.7585 33.0338 33.3206 32.5234 32.3628 34.3357 32.0187 \n", "2003-08-02 33.0052 32.7585 33.0338 33.3206 32.5234 34.3357 32.5005 \n", "2003-08-03 33.1944 33.0052 32.7585 33.0338 33.3206 34.3357 32.7585 \n", "2003-08-04 33.5442 33.1944 33.0052 32.7585 33.0338 34.3357 32.7585 \n", "2003-08-05 32.8962 33.5442 33.1944 33.0052 32.7585 34.3357 32.7585 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64\n", "Mean Absolute Error: 0.58624564363\n", "Explained Variance Score: 0.917058612472\n", "Mean Squared Error: 0.59587482901\n", "R2 score: 0.858798903078\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-08-02 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 40.3008 \n", "2005-08-03 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 41.2538 \n", "2005-08-04 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 41.3943 \n", "2005-08-05 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 40.6551 \n", "2005-08-06 41.5776 41.8158 42.2862 41.7242 41.4554 41.4187 41.5898 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2005-08-02 39.751 39.0118 39.4211 ... 40.2947 39.7082 39.8304 \n", "2005-08-03 40.3008 39.751 39.0118 ... 39.8304 40.2947 39.7082 \n", "2005-08-04 41.2538 40.3008 39.751 ... 39.7449 39.8304 40.2947 \n", "2005-08-05 41.3943 41.2538 40.3008 ... 39.7571 39.7449 39.8304 \n", "2005-08-06 40.6551 41.3943 41.2538 ... 40.4413 39.7571 39.7449 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2005-08-02 40.0442 39.6227 40.2275 40.7162 39.867 41.7791 38.8041 \n", "2005-08-03 39.8304 40.0442 39.6227 40.2275 40.7162 41.8952 38.8041 \n", "2005-08-04 39.7082 39.8304 40.0442 39.6227 40.2275 42.3962 38.8041 \n", "2005-08-05 40.2947 39.7082 39.8304 40.0442 39.6227 42.4511 38.8041 \n", "2005-08-06 39.8304 40.2947 39.7082 39.8304 40.0442 42.4511 38.8041 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64\n", "Mean Absolute Error: 0.802958635558\n", "Explained Variance Score: 0.615314748251\n", "Mean Squared Error: 1.07455580184\n", "R2 score: 0.610929179905\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-07-28 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 27.0143 \n", "2007-07-29 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 26.9147 \n", "2007-07-30 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 30.8639 \n", "2007-07-31 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 31.0033 \n", "2007-08-01 29.9082 28.7068 31.375 33.8043 29.4037 29.4966 27.4523 \n", "\n", " i-8 i-9 i-10 ... i-23 i-24 i-25 \\\n", "2007-07-28 29.6692 29.4834 30.2998 ... 34.1229 34.7269 34.4681 \n", "2007-07-29 27.0143 29.6692 29.4834 ... 34.1561 34.1229 34.7269 \n", "2007-07-30 26.9147 27.0143 29.6692 ... 36.2071 34.1561 34.1229 \n", "2007-07-31 30.8639 26.9147 27.0143 ... 36.6119 36.2071 34.1561 \n", "2007-08-01 31.0033 30.8639 26.9147 ... 35.9084 36.6119 36.2071 \n", "\n", " i-26 i-27 i-28 i-29 i-30 Adj. High Adj. Low \n", "2007-07-28 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-07-29 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-07-30 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-07-31 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-08-01 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 32 columns]\n", "# Days used to predict: 30\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64\n", "Mean Absolute Error: 1.34141196406\n", "Explained Variance Score: 0.8823848576\n", "Mean Squared Error: 3.23643017946\n", "R2 score: 0.870276149629\n", "Errors: [Day 0 2.354731\n", "Day 1 3.617706\n", "Day 2 4.564908\n", "Day 3 5.402450\n", "Day 4 6.087475\n", "Day 5 6.735528\n", "Day 6 7.334792\n", "dtype: float64, Day 0 2.684370\n", "Day 1 3.852903\n", "Day 2 4.919655\n", "Day 3 5.540378\n", "Day 4 6.123829\n", "Day 5 6.591851\n", "Day 6 7.025247\n", "dtype: float64, Day 0 1.407306\n", "Day 1 2.099650\n", "Day 2 2.531031\n", "Day 3 2.832449\n", "Day 4 3.077996\n", "Day 5 3.281542\n", "Day 6 3.453131\n", "dtype: float64, Day 0 1.825721\n", "Day 1 2.520094\n", "Day 2 2.983638\n", "Day 3 3.401652\n", "Day 4 3.768000\n", "Day 5 4.095968\n", "Day 6 4.422964\n", "dtype: float64, Day 0 1.257130\n", "Day 1 1.742509\n", "Day 2 2.011009\n", "Day 3 2.320050\n", "Day 4 2.543126\n", "Day 5 2.742165\n", "Day 6 2.891132\n", "dtype: float64, Day 0 1.307062\n", "Day 1 2.076760\n", "Day 2 2.667276\n", "Day 3 3.186891\n", "Day 4 3.592918\n", "Day 5 3.874978\n", "Day 6 4.077384\n", "dtype: float64, Day 0 1.998851\n", "Day 1 2.982523\n", "Day 2 3.761325\n", "Day 3 4.418890\n", "Day 4 5.033414\n", "Day 5 5.562387\n", "Day 6 5.911577\n", "dtype: float64, Day 0 1.277426\n", "Day 1 1.923855\n", "Day 2 2.487065\n", "Day 3 2.889547\n", "Day 4 3.230316\n", "Day 5 3.461072\n", "Day 6 3.683591\n", "dtype: float64, Day 0 1.097288\n", "Day 1 1.628487\n", "Day 2 1.994699\n", "Day 3 2.312647\n", "Day 4 2.596636\n", "Day 5 2.841767\n", "Day 6 3.057756\n", "dtype: float64, Day 0 1.771321\n", "Day 1 2.694111\n", "Day 2 3.368343\n", "Day 3 3.874160\n", "Day 4 4.276492\n", "Day 5 4.556417\n", "Day 6 4.791154\n", "dtype: float64, Day 0 2.251579\n", "Day 1 3.193384\n", "Day 2 3.829452\n", "Day 3 4.217571\n", "Day 4 4.533379\n", "Day 5 4.779192\n", "Day 6 5.059462\n", "dtype: float64, Day 0 2.193631\n", "Day 1 3.112622\n", "Day 2 3.737362\n", "Day 3 4.213365\n", "Day 4 4.652926\n", "Day 5 5.086102\n", "Day 6 5.455685\n", "dtype: float64, Day 0 1.132281\n", "Day 1 1.702326\n", "Day 2 2.080607\n", "Day 3 2.449302\n", "Day 4 2.789190\n", "Day 5 3.085403\n", "Day 6 3.365976\n", "dtype: float64, Day 0 1.278194\n", "Day 1 1.825699\n", "Day 2 2.140600\n", "Day 3 2.465325\n", "Day 4 2.768073\n", "Day 5 3.032542\n", "Day 6 3.241012\n", "dtype: float64, Day 0 2.921856\n", "Day 1 3.924810\n", "Day 2 4.205156\n", "Day 3 4.964244\n", "Day 4 5.645297\n", "Day 5 6.148552\n", "Day 6 6.799497\n", "dtype: float64]\n", "Daily error: [[2.3547309468646977, 2.6843698878562434, 1.4073060638117993, 1.8257205265526617, 1.2571302541332623, 1.3070616670286337, 1.9988507624239815, 1.2774261200573758, 1.0972884438734316, 1.7713207964022895, 2.2515787402833238, 2.1936305240618905, 1.1322810611135845, 1.2781940755820749, 2.9218559619814704], [3.6177056160450944, 3.8529029980585308, 2.0996497849323741, 2.5200941777904116, 1.7425090853194207, 2.0767602945362782, 2.9825225833769546, 1.9238545410998846, 1.6284871067250986, 2.6941111554594688, 3.193383888830593, 3.1126222980274192, 1.7023257899660558, 1.8256993808103501, 3.9248097333153922], [4.5649082663487981, 4.919654734680905, 2.5310312168153977, 2.9836384156717788, 2.0110091568888309, 2.6672760574192766, 3.7613247626665651, 2.4870650021890679, 1.9946989514581441, 3.3683432902069392, 3.8294519687663078, 3.7373617983789833, 2.080606518150474, 2.14060014177976, 4.2051556740937093], [5.4024502775560101, 5.5403781813156501, 2.8324489798600148, 3.4016521599695979, 2.3200498153968843, 3.1868909037254345, 4.4188904926330173, 2.8895466676894839, 2.3126474095813565, 3.8741601379971553, 4.2175713308860896, 4.2133650475354072, 2.4493016707758857, 2.465324887372323, 4.9642444869322437], [6.0874752741145528, 6.1238292431129455, 3.0779955606900775, 3.7679999784167957, 2.5431262388706335, 3.5929183893538976, 5.033414123710652, 3.230316091173671, 2.5966357031707243, 4.2764916616348794, 4.5333785968485394, 4.6529261285101802, 2.7891901712253597, 2.7680731557270328, 5.6452968644470065], [6.7355277492693739, 6.5918510035213815, 3.2815416890282374, 4.0959675621588527, 2.742164531970531, 3.874977862896968, 5.5623865765175768, 3.461071665532764, 2.8417667456729157, 4.5564166688903143, 4.779192398380526, 5.086101610706165, 3.0854034250811742, 3.0325416694322258, 6.1485518594275472], [7.3347922060064086, 7.025247411581879, 3.453130554000138, 4.4229639877662024, 2.8911324077574512, 4.0773842621070342, 5.9115774229114351, 3.6835908281785965, 3.0577563801686329, 4.7911542187225136, 5.0594615569728996, 5.4556849461479642, 3.3659760913065653, 3.2410121186171836, 6.7994967443732222]]\n", "Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 30 days' worth of prior data\n", "\n", "execute(steps=15, days=30, buffer_step = 500)\n", "\n", "# Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1980-02-14 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 5.04853 \n", "1980-02-15 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 5.10058 \n", "1980-02-16 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 5.02251 \n", "1980-02-17 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 5.10058 \n", "1980-02-18 5.20467 5.30876 5.32126 5.38683 5.28274 5.32126 5.29627 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1980-02-14 5.03604 4.89239 4.91841 ... 8.14531 8.22338 7.9111 \n", "1980-02-15 5.04853 5.03604 4.89239 ... 8.0027 8.14531 8.22338 \n", "1980-02-16 5.10058 5.04853 5.03604 ... 7.78098 8.0027 8.14531 \n", "1980-02-17 5.02251 5.10058 5.04853 ... 7.79452 7.78098 8.0027 \n", "1980-02-18 5.10058 5.02251 5.10058 ... 7.72894 7.79452 7.78098 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1980-02-14 7.67689 7.69042 7.67689 7.59882 7.72894 8.36703 4.6842 \n", "1980-02-15 7.9111 7.67689 7.69042 7.67689 7.59882 8.36703 4.6842 \n", "1980-02-16 8.22338 7.9111 7.67689 7.69042 7.67689 8.36703 4.6842 \n", "1980-02-17 8.14531 8.22338 7.9111 7.67689 7.69042 8.36703 4.6842 \n", "1980-02-18 8.0027 8.14531 8.22338 7.9111 7.67689 8.36703 4.6842 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64\n", "Mean Absolute Error: 0.308123611359\n", "Explained Variance Score: 0.883196210344\n", "Mean Squared Error: 0.174895557318\n", "R2 score: 0.882761749111\n", "Buffer: 500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1982-02-06 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 4.67171 \n", "1982-02-07 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 4.71023 \n", "1982-02-08 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 4.72376 \n", "1982-02-09 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 4.74874 \n", "1982-02-10 4.91841 4.90488 4.84034 4.81432 4.63216 4.74874 4.6967 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1982-02-06 4.74874 4.73625 4.7883 ... 3.87748 3.95555 3.85146 \n", "1982-02-07 4.67171 4.74874 4.73625 ... 3.66929 3.87748 3.95555 \n", "1982-02-08 4.71023 4.67171 4.74874 ... 3.66929 3.66929 3.87748 \n", "1982-02-09 4.72376 4.71023 4.67171 ... 3.64327 3.66929 3.66929 \n", "1982-02-10 4.74874 4.72376 4.71023 ... 3.68283 3.64327 3.66929 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1982-02-06 3.69532 3.53918 3.47464 3.39553 3.44757 4.85284 3.3185 \n", "1982-02-07 3.85146 3.69532 3.53918 3.47464 3.39553 4.85284 3.3185 \n", "1982-02-08 3.95555 3.85146 3.69532 3.53918 3.47464 4.8799 3.3185 \n", "1982-02-09 3.87748 3.95555 3.85146 3.69532 3.53918 4.94444 3.48713 \n", "1982-02-10 3.66929 3.87748 3.95555 3.85146 3.69532 4.94444 3.53918 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64\n", "Mean Absolute Error: 0.153771584056\n", "Explained Variance Score: 0.858967690029\n", "Mean Squared Error: 0.037657109341\n", "R2 score: 0.855415148739\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1984-02-01 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 4.82785 \n", "1984-02-02 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 4.86637 \n", "1984-02-03 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 4.90488 \n", "1984-02-04 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 4.86637 \n", "1984-02-05 4.90488 4.8799 4.8799 4.91841 4.90488 4.89239 4.90488 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1984-02-01 4.7883 4.7883 4.84034 ... 4.39795 4.42397 4.37192 \n", "1984-02-02 4.82785 4.7883 4.7883 ... 4.44999 4.39795 4.42397 \n", "1984-02-03 4.86637 4.82785 4.7883 ... 4.37192 4.44999 4.39795 \n", "1984-02-04 4.90488 4.86637 4.82785 ... 4.47602 4.37192 4.44999 \n", "1984-02-05 4.86637 4.90488 4.86637 ... 4.55409 4.47602 4.37192 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1984-02-01 4.35943 4.39795 4.43646 4.58011 4.56762 5.02251 4.12418 \n", "1984-02-02 4.37192 4.35943 4.39795 4.43646 4.58011 5.02251 4.12418 \n", "1984-02-03 4.42397 4.37192 4.35943 4.39795 4.43646 5.02251 4.12418 \n", "1984-02-04 4.39795 4.42397 4.37192 4.35943 4.39795 5.02251 4.12418 \n", "1984-02-05 4.44999 4.39795 4.42397 4.37192 4.35943 5.02251 4.12418 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64\n", "Mean Absolute Error: 0.101043295151\n", "Explained Variance Score: 0.769182909465\n", "Mean Squared Error: 0.0161008843587\n", "R2 score: 0.617638917329\n", "Buffer: 1500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1986-01-22 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 7.36443 \n", "1986-01-23 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 7.43048 \n", "1986-01-24 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 7.41685 \n", "1986-01-25 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 7.40322 \n", "1986-01-26 7.39064 7.41685 7.44306 7.44306 7.44306 7.49547 7.46926 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1986-01-22 7.36443 7.39064 7.48289 ... 5.14013 5.16512 5.15262 \n", "1986-01-23 7.36443 7.36443 7.39064 ... 5.08809 5.14013 5.16512 \n", "1986-01-24 7.43048 7.36443 7.36443 ... 5.17865 5.08809 5.14013 \n", "1986-01-25 7.41685 7.43048 7.36443 ... 5.14013 5.17865 5.08809 \n", "1986-01-26 7.40322 7.41685 7.43048 ... 5.25672 5.14013 5.17865 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1986-01-22 4.98399 4.99648 4.90488 5.15262 5.20467 7.5741 4.89239 \n", "1986-01-23 5.15262 4.98399 4.99648 4.90488 5.15262 7.5741 4.89239 \n", "1986-01-24 5.16512 5.15262 4.98399 4.99648 4.90488 7.5741 4.89239 \n", "1986-01-25 5.14013 5.16512 5.15262 4.98399 4.99648 7.5741 4.90488 \n", "1986-01-26 5.08809 5.14013 5.16512 5.15262 4.98399 7.5741 4.91841 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64\n", "Mean Absolute Error: 0.212433916939\n", "Explained Variance Score: 0.908541965433\n", "Mean Squared Error: 0.0861793881797\n", "R2 score: 0.881980679802\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1988-01-14 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 6.44985 \n", "1988-01-15 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 6.43695 \n", "1988-01-16 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 6.42297 \n", "1988-01-17 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 6.36922 \n", "1988-01-18 6.23485 6.31547 6.34235 6.2757 6.3015 6.24775 6.3832 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1988-01-14 6.49069 6.42297 6.50359 ... 5.67454 5.72782 5.70118 \n", "1988-01-15 6.44985 6.49069 6.42297 ... 5.74168 5.67454 5.72782 \n", "1988-01-16 6.43695 6.44985 6.49069 ... 5.72782 5.74168 5.67454 \n", "1988-01-17 6.42297 6.43695 6.44985 ... 5.6479 5.72782 5.74168 \n", "1988-01-18 6.36922 6.42297 6.43695 ... 5.70118 5.6479 5.72782 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1988-01-14 5.66069 5.79496 5.72782 5.71397 5.6479 6.62399 5.62126 \n", "1988-01-15 5.70118 5.66069 5.79496 5.72782 5.71397 6.62399 5.62126 \n", "1988-01-16 5.72782 5.70118 5.66069 5.79496 5.72782 6.62399 5.62126 \n", "1988-01-17 5.67454 5.72782 5.70118 5.66069 5.79496 6.62399 5.62126 \n", "1988-01-18 5.74168 5.67454 5.72782 5.70118 5.66069 6.62399 5.62126 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64\n", "Mean Absolute Error: 0.104323850003\n", "Explained Variance Score: 0.850284924048\n", "Mean Squared Error: 0.0187007596422\n", "R2 score: 0.835576466493\n", "Buffer: 2500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1990-01-05 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 8.25312 \n", "1990-01-06 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 8.06067 \n", "1990-01-07 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 7.92131 \n", "1990-01-08 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 7.92131 \n", "1990-01-09 7.67357 7.82509 7.75541 7.74214 7.90804 8.00537 7.95007 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1990-01-05 8.30842 8.46105 8.41902 ... 8.62105 8.71769 8.73087 \n", "1990-01-06 8.25312 8.30842 8.46105 ... 8.71769 8.62105 8.71769 \n", "1990-01-07 8.06067 8.25312 8.30842 ... 8.64851 8.71769 8.62105 \n", "1990-01-08 7.92131 8.06067 8.25312 ... 8.57932 8.64851 8.71769 \n", "1990-01-09 7.92131 7.92131 8.06067 ... 8.4695 8.57932 8.64851 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1990-01-05 8.78578 8.57932 8.49805 8.51123 8.56614 9.00791 7.57546 \n", "1990-01-06 8.73087 8.78578 8.57932 8.49805 8.51123 9.00791 7.57546 \n", "1990-01-07 8.71769 8.73087 8.78578 8.57932 8.49805 9.00791 7.57546 \n", "1990-01-08 8.62105 8.71769 8.73087 8.78578 8.57932 9.00791 7.57546 \n", "1990-01-09 8.71769 8.62105 8.71769 8.73087 8.78578 9.00791 7.57546 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64\n", "Mean Absolute Error: 0.210351894406\n", "Explained Variance Score: 0.741325230038\n", "Mean Squared Error: 0.0765172809939\n", "R2 score: 0.70389414274\n", "Buffer: 3000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1991-12-31 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 5.7994 \n", "1992-01-01 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 5.82675 \n", "1992-01-02 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 5.74241 \n", "1992-01-03 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 5.72759 \n", "1992-01-04 6.19833 6.15502 6.11171 5.94073 5.74241 5.6421 5.6421 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1991-12-31 5.7994 5.75608 5.71277 ... 5.01791 5.03265 5.11657 \n", "1992-01-01 5.7994 5.7994 5.75608 ... 4.96121 5.01791 5.03265 \n", "1992-01-02 5.82675 5.7994 5.7994 ... 4.90451 4.96121 5.01791 \n", "1992-01-03 5.74241 5.82675 5.7994 ... 4.69245 4.90451 4.96121 \n", "1992-01-04 5.72759 5.74241 5.82675 ... 4.80585 4.69245 4.90451 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1991-12-31 5.11657 5.15966 5.22997 5.21636 5.18801 5.87006 4.67712 \n", "1992-01-01 5.11657 5.11657 5.15966 5.22997 5.21636 5.95555 4.67712 \n", "1992-01-02 5.03265 5.11657 5.11657 5.15966 5.22997 6.14134 4.67712 \n", "1992-01-03 5.01791 5.03265 5.11657 5.11657 5.15966 6.1687 4.67712 \n", "1992-01-04 4.96121 5.01791 5.03265 5.11657 5.11657 6.22569 4.67712 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64\n", "Mean Absolute Error: 0.183122699785\n", "Explained Variance Score: 0.66511338143\n", "Mean Squared Error: 0.0658789640265\n", "R2 score: 0.599655687338\n", "Buffer: 3500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1993-12-22 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 8.78214 \n", "1993-12-23 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 8.83992 \n", "1993-12-24 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 8.78214 \n", "1993-12-25 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 8.94161 \n", "1993-12-26 8.846 8.8599 8.9178 8.9178 8.9178 9.06257 9.01972 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1993-12-22 8.99938 9.09992 9.14267 ... 9.21296 9.2268 9.08263 \n", "1993-12-23 8.78214 8.99938 9.09992 ... 9.3133 9.21296 9.2268 \n", "1993-12-24 8.83992 8.78214 8.99938 ... 9.32829 9.3133 9.21296 \n", "1993-12-25 8.78214 8.83992 8.78214 ... 9.45747 9.32829 9.3133 \n", "1993-12-26 8.94161 8.78214 8.83992 ... 9.6743 9.45747 9.32829 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1993-12-22 9.11146 9.21296 9.36866 9.29831 9.29831 9.83231 8.65272 \n", "1993-12-23 9.08263 9.11146 9.21296 9.36866 9.29831 9.83231 8.65272 \n", "1993-12-24 9.2268 9.08263 9.11146 9.21296 9.36866 9.83231 8.65272 \n", "1993-12-25 9.21296 9.2268 9.08263 9.11146 9.21296 9.83231 8.65272 \n", "1993-12-26 9.3133 9.21296 9.2268 9.08263 9.11146 9.83231 8.65272 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64\n", "Mean Absolute Error: 0.158445846768\n", "Explained Variance Score: 0.620247529876\n", "Mean Squared Error: 0.0465380189471\n", "R2 score: 0.60132021659\n", "Buffer: 4000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1995-12-13 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 15.4516 \n", "1995-12-14 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 15.5329 \n", "1995-12-15 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 15.5482 \n", "1995-12-16 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 15.6354 \n", "1995-12-17 15.8276 15.5765 15.6072 15.6661 15.5329 15.356 15.5482 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1995-12-13 15.7456 15.7738 16.0396 ... 15.3418 15.4298 15.4298 \n", "1995-12-14 15.4516 15.7456 15.7738 ... 15.1071 15.3418 15.4298 \n", "1995-12-15 15.5329 15.4516 15.7456 ... 15.2538 15.1071 15.3418 \n", "1995-12-16 15.5482 15.5329 15.4516 ... 15.357 15.2538 15.1071 \n", "1995-12-17 15.6354 15.5482 15.5329 ... 15.4004 15.357 15.2538 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1995-12-13 15.1364 15.1071 15.3124 15.4298 15.2397 17.2886 14.6378 \n", "1995-12-14 15.4298 15.1364 15.1071 15.3124 15.4298 17.2886 14.6378 \n", "1995-12-15 15.4298 15.4298 15.1364 15.1071 15.3124 17.2886 14.6378 \n", "1995-12-16 15.3418 15.4298 15.4298 15.1364 15.1071 17.2886 14.6378 \n", "1995-12-17 15.1071 15.3418 15.4298 15.4298 15.1364 17.2886 14.6378 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64\n", "Mean Absolute Error: 0.287728749471\n", "Explained Variance Score: 0.938381959646\n", "Mean Squared Error: 0.147641443939\n", "R2 score: 0.93566576996\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1997-12-04 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 20.2949 \n", "1997-12-05 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 20.1278 \n", "1997-12-06 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 19.9172 \n", "1997-12-07 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 19.8276 \n", "1997-12-08 20.5831 20.5225 20.1908 19.9922 19.8712 19.7065 19.675 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1997-12-04 20.462 20.6121 21.1885 ... 20.5119 20.9197 21.2069 \n", "1997-12-05 20.2949 20.462 20.6121 ... 20.6036 20.5119 20.9197 \n", "1997-12-06 20.1278 20.2949 20.462 ... 20.6928 20.6036 20.5119 \n", "1997-12-07 19.9172 20.1278 20.2949 ... 20.9197 20.6928 20.6036 \n", "1997-12-08 19.8276 19.9172 20.1278 ... 21.4023 20.9197 20.6928 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1997-12-04 20.8883 21.2358 20.7387 21.0403 22.0346 23.0966 19.4643 \n", "1997-12-05 21.2069 20.8883 21.2358 20.7387 21.0403 23.0966 19.4643 \n", "1997-12-06 20.9197 21.2069 20.8883 21.2358 20.7387 23.0966 19.4643 \n", "1997-12-07 20.5119 20.9197 21.2069 20.8883 21.2358 23.0966 19.4643 \n", "1997-12-08 20.6036 20.5119 20.9197 21.2069 20.8883 23.0966 19.4643 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64\n", "Mean Absolute Error: 0.597633444026\n", "Explained Variance Score: 0.503137515046\n", "Mean Squared Error: 0.589490186568\n", "R2 score: 0.482368816144\n", "Buffer: 5000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1999-11-26 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 26.6624 \n", "1999-11-27 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 26.4959 \n", "1999-11-28 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 26.1881 \n", "1999-11-29 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 26.2284 \n", "1999-11-30 25.0023 25.0528 25.1537 25.7592 25.734 26.9904 26.8239 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1999-11-26 26.2385 26.1124 25.9862 ... 26.9688 26.5628 26.1569 \n", "1999-11-27 26.6624 26.2385 26.1124 ... 26.7533 26.9688 26.5628 \n", "1999-11-28 26.4959 26.6624 26.2385 ... 26.5027 26.7533 26.9688 \n", "1999-11-29 26.1881 26.4959 26.6624 ... 26.3423 26.5027 26.7533 \n", "1999-11-30 26.2284 26.1881 26.4959 ... 26.623 26.3423 26.5027 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1999-11-26 26.7182 26.4375 26.3122 26.5027 26.7533 28.7229 22.767 \n", "1999-11-27 26.1569 26.7182 26.4375 26.3122 26.5027 28.7229 22.767 \n", "1999-11-28 26.5628 26.1569 26.7182 26.4375 26.3122 28.7229 22.767 \n", "1999-11-29 26.9688 26.5628 26.1569 26.7182 26.4375 28.7229 22.767 \n", "1999-11-30 26.7533 26.9688 26.5628 26.1569 26.7182 28.7229 22.767 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64\n", "Mean Absolute Error: 0.701837927805\n", "Explained Variance Score: 0.61258560237\n", "Mean Squared Error: 0.807580404799\n", "R2 score: 0.6103741195\n", "Buffer: 5500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2001-11-21 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 20.8021 \n", "2001-11-22 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 20.2432 \n", "2001-11-23 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 20.2486 \n", "2001-11-24 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 20.399 \n", "2001-11-25 20.6785 20.6677 20.8934 20.7161 20.4474 20.2593 20.4743 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2001-11-21 20.8719 20.8558 20.9633 ... 21.771 22.2762 21.2179 \n", "2001-11-22 20.8021 20.8719 20.8558 ... 21.4998 21.771 22.2762 \n", "2001-11-23 20.2432 20.8021 20.8719 ... 21.1701 21.4998 21.771 \n", "2001-11-24 20.2486 20.2432 20.8021 ... 21.0584 21.1701 21.4998 \n", "2001-11-25 20.399 20.2486 20.2432 ... 20.633 21.0584 21.1701 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2001-11-21 21.9784 22.0156 21.1488 21.085 21.7337 22.9462 18.6311 \n", "2001-11-22 21.2179 21.9784 22.0156 21.1488 21.085 22.9462 18.6311 \n", "2001-11-23 22.2762 21.2179 21.9784 22.0156 21.1488 22.9462 18.6311 \n", "2001-11-24 21.771 22.2762 21.2179 21.9784 22.0156 22.9462 18.6311 \n", "2001-11-25 21.4998 21.771 22.2762 21.2179 21.9784 22.9462 18.6311 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64\n", "Mean Absolute Error: 0.901971504049\n", "Explained Variance Score: 0.812150385253\n", "Mean Squared Error: 1.39923634887\n", "R2 score: 0.736584033371\n", "Buffer: 6000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2003-11-14 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 34.4386 \n", "2003-11-15 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 34.9527 \n", "2003-11-16 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 35.0335 \n", "2003-11-17 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 34.9411 \n", "2003-11-18 35.9577 35.9289 35.9115 35.2299 35.253 35.1028 35.1664 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2003-11-14 34.3577 34.7736 34.6003 ... 33.5442 33.1944 33.0052 \n", "2003-11-15 34.4386 34.3577 34.7736 ... 32.8962 33.5442 33.1944 \n", "2003-11-16 34.9527 34.4386 34.3577 ... 32.9937 32.8962 33.5442 \n", "2003-11-17 35.0335 34.9527 34.4386 ... 33.3722 32.9937 32.8962 \n", "2003-11-18 34.9411 35.0335 34.9527 ... 33.0052 33.3722 32.9937 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2003-11-14 32.7585 33.0338 33.3206 32.5234 32.3628 35.8711 32.0187 \n", "2003-11-15 33.0052 32.7585 33.0338 33.3206 32.5234 35.8711 32.5005 \n", "2003-11-16 33.1944 33.0052 32.7585 33.0338 33.3206 36.0733 32.6941 \n", "2003-11-17 33.5442 33.1944 33.0052 32.7585 33.0338 36.079 32.6941 \n", "2003-11-18 32.8962 33.5442 33.1944 33.0052 32.7585 36.1079 32.6941 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64\n", "Mean Absolute Error: 0.570240576978\n", "Explained Variance Score: 0.883135670682\n", "Mean Squared Error: 0.543397166296\n", "R2 score: 0.840783709451\n", "Buffer: 6500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2005-11-15 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 39.2664 \n", "2005-11-16 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 38.7119 \n", "2005-11-17 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 39.1863 \n", "2005-11-18 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 39.1308 \n", "2005-11-19 38.755 39.1247 39.1124 38.9706 39.3034 39.2171 39.2849 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2005-11-15 39.2171 40.0858 40.1844 ... 40.2947 39.7082 39.8304 \n", "2005-11-16 39.2664 39.2171 40.0858 ... 39.8304 40.2947 39.7082 \n", "2005-11-17 38.7119 39.2664 39.2171 ... 39.7449 39.8304 40.2947 \n", "2005-11-18 39.1863 38.7119 39.2664 ... 39.7571 39.7449 39.8304 \n", "2005-11-19 39.1308 39.1863 38.7119 ... 40.4413 39.7571 39.7449 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2005-11-15 40.0442 39.6227 40.2275 40.7162 39.867 42.5812 37.763 \n", "2005-11-16 39.8304 40.0442 39.6227 40.2275 40.7162 42.5812 37.763 \n", "2005-11-17 39.7082 39.8304 40.0442 39.6227 40.2275 42.5812 37.763 \n", "2005-11-18 40.2947 39.7082 39.8304 40.0442 39.6227 42.5812 37.763 \n", "2005-11-19 39.8304 40.2947 39.7082 39.8304 40.0442 42.5812 37.763 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64\n", "Mean Absolute Error: 0.805184356548\n", "Explained Variance Score: 0.654726098599\n", "Mean Squared Error: 1.0911864143\n", "R2 score: 0.607901692497\n", "Buffer: 7000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "X.tail: i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "2007-11-08 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 28.4939 \n", "2007-11-09 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 28.0538 \n", "2007-11-10 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 27.607 \n", "2007-11-11 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 28.9068 \n", "2007-11-12 29.1031 28.6293 28.1418 28.7511 28.7308 29.4145 29.1505 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "2007-11-08 27.9387 29.9291 29.4484 ... 34.1229 34.7269 34.4681 \n", "2007-11-09 28.4939 27.9387 29.9291 ... 34.1561 34.1229 34.7269 \n", "2007-11-10 28.0538 28.4939 27.9387 ... 36.2071 34.1561 34.1229 \n", "2007-11-11 27.607 28.0538 28.4939 ... 36.6119 36.2071 34.1561 \n", "2007-11-12 28.9068 27.607 28.0538 ... 35.9084 36.6119 36.2071 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "2007-11-08 36.3664 35.457 35.5035 34.78 36.1009 37.6275 24.9367 \n", "2007-11-09 34.4681 36.3664 35.457 35.5035 34.78 37.6275 24.9367 \n", "2007-11-10 34.7269 34.4681 36.3664 35.457 35.5035 37.6275 24.9367 \n", "2007-11-11 34.1229 34.7269 34.4681 36.3664 35.457 37.6275 24.9367 \n", "2007-11-12 34.1561 34.1229 34.7269 34.4681 36.3664 37.6275 24.9367 \n", "\n", "[5 rows x 102 columns]\n", "# Days used to predict: 100\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64\n", "Mean Absolute Error: 1.56779790378\n", "Explained Variance Score: 0.910623053074\n", "Mean Squared Error: 4.56773993183\n", "R2 score: 0.895897673607\n", "Errors: [Day 0 2.686257\n", "Day 1 4.059300\n", "Day 2 5.201252\n", "Day 3 6.237668\n", "Day 4 7.101349\n", "Day 5 7.927755\n", "Day 6 8.701864\n", "dtype: float64, Day 0 2.873219\n", "Day 1 3.967851\n", "Day 2 4.859585\n", "Day 3 5.190689\n", "Day 4 5.559871\n", "Day 5 5.762530\n", "Day 6 6.119192\n", "dtype: float64, Day 0 1.325606\n", "Day 1 1.970168\n", "Day 2 2.401517\n", "Day 3 2.733302\n", "Day 4 2.986141\n", "Day 5 3.252909\n", "Day 6 3.538113\n", "dtype: float64, Day 0 2.160052\n", "Day 1 3.163661\n", "Day 2 3.966318\n", "Day 3 4.771871\n", "Day 4 5.507250\n", "Day 5 6.135646\n", "Day 6 6.678638\n", "dtype: float64, Day 0 1.223516\n", "Day 1 1.769220\n", "Day 2 2.093732\n", "Day 3 2.331726\n", "Day 4 2.600074\n", "Day 5 2.832955\n", "Day 6 3.031678\n", "dtype: float64, Day 0 1.305421\n", "Day 1 2.093935\n", "Day 2 2.725890\n", "Day 3 3.248416\n", "Day 4 3.702046\n", "Day 5 4.060255\n", "Day 6 4.342382\n", "dtype: float64, Day 0 2.068536\n", "Day 1 3.125541\n", "Day 2 4.025622\n", "Day 3 4.823541\n", "Day 4 5.500603\n", "Day 5 6.132646\n", "Day 6 6.658901\n", "dtype: float64, Day 0 1.087537\n", "Day 1 1.593596\n", "Day 2 2.088148\n", "Day 3 2.441984\n", "Day 4 2.772649\n", "Day 5 3.016825\n", "Day 6 3.229849\n", "dtype: float64, Day 0 1.058010\n", "Day 1 1.662174\n", "Day 2 2.119859\n", "Day 3 2.487773\n", "Day 4 2.823700\n", "Day 5 3.142083\n", "Day 6 3.445210\n", "dtype: float64, Day 0 2.021722\n", "Day 1 2.842273\n", "Day 2 3.439444\n", "Day 3 3.903588\n", "Day 4 4.235101\n", "Day 5 4.515974\n", "Day 6 4.721073\n", "dtype: float64, Day 0 2.053749\n", "Day 1 2.842841\n", "Day 2 3.190394\n", "Day 3 3.459689\n", "Day 4 3.710202\n", "Day 5 3.931499\n", "Day 6 4.203311\n", "dtype: float64, Day 0 2.497664\n", "Day 1 3.701679\n", "Day 2 4.589855\n", "Day 3 5.369122\n", "Day 4 6.143347\n", "Day 5 6.854813\n", "Day 6 7.499326\n", "dtype: float64, Day 0 1.117505\n", "Day 1 1.588136\n", "Day 2 1.926026\n", "Day 3 2.217282\n", "Day 4 2.463648\n", "Day 5 2.718344\n", "Day 6 2.979069\n", "dtype: float64, Day 0 1.364576\n", "Day 1 1.838709\n", "Day 2 2.171378\n", "Day 3 2.515507\n", "Day 4 2.840855\n", "Day 5 3.137423\n", "Day 6 3.401657\n", "dtype: float64, Day 0 4.014458\n", "Day 1 5.295031\n", "Day 2 5.743595\n", "Day 3 6.621475\n", "Day 4 7.378995\n", "Day 5 8.109415\n", "Day 6 8.893639\n", "dtype: float64]\n", "Daily error: [[2.6862566648548238, 2.8732187489270236, 1.3256064617379473, 2.1600519846869646, 1.2235156291439226, 1.305420663991631, 2.0685360603124372, 1.0875370689226691, 1.0580095307028299, 2.0217217081378305, 2.0537492673878845, 2.4976641398052424, 1.1175050339269137, 1.3645755070232506, 4.0144579037852735], [4.0592999976323814, 3.9678510989277207, 1.9701678416738304, 3.1636611153866219, 1.7692200297767153, 2.0939347787175921, 3.1255411549111267, 1.5935961405005887, 1.6621738433483118, 2.8422732907658617, 2.8428406166970612, 3.7016790635281951, 1.5881359065976202, 1.838708716353143, 5.2950310548423047], [5.2012518896016813, 4.8595851174817444, 2.4015165262481593, 3.9663184853702087, 2.0937319599079633, 2.725889802618255, 4.0256221884370413, 2.0881478237011293, 2.1198589394936009, 3.4394436515955458, 3.1903941017651203, 4.5898554829578231, 1.9260258581576921, 2.1713779643400297, 5.7435946634475581], [6.2376680609655004, 5.1906888229530841, 2.7333023116243766, 4.771870644055527, 2.3317264370474895, 3.2484164567711518, 4.8235413121812867, 2.44198402513774, 2.4877734757315642, 3.9035877213534098, 3.4596893962513113, 5.3691221960409514, 2.2172821574031762, 2.5155067947627172, 6.6214749061448526], [7.101348672465936, 5.5598705130212815, 2.9861408788558754, 5.5072501857210723, 2.6000741043961906, 3.7020463356701927, 5.5006034680471787, 2.7726485729779609, 2.8237001385613416, 4.2351005173762228, 3.7102018424167729, 6.1433467552325984, 2.4636478733847298, 2.8408545898388282, 7.3789947893347989], [7.9277550527409595, 5.7625298134685217, 3.2529086470869495, 6.1356457071558008, 2.8329554445052851, 4.0602549841923929, 6.1326462265073882, 3.0168250033454465, 3.1420826313227979, 4.5159739803948229, 3.93149884705644, 6.8548130816086976, 2.7183436027777019, 3.1374226069422688, 8.1094147478977305], [8.7018642223453728, 6.1191921810565226, 3.5381132656657028, 6.6786375127786863, 3.0316781856016899, 4.3423819076586243, 6.6589006154937413, 3.2298492480472585, 3.4452102937068454, 4.7210730604544686, 4.2033108503209542, 7.4993260970943192, 2.9790689586399646, 3.4016567175540446, 8.8936393091082984]]\n", "Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 100 days' worth of prior data\n", "\n", "execute(steps=15, days=100, buffer_step = 500)\n", "\n", "# Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2 Adding Oil Stock Prices (GAIA)" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1932616BP2014-09-2445.8245.8845.3645.516237900.00.01.040.666021...2014-09-246.756.956.6456.942014-09-246676.086707.266651.986706.27
1932617BP2014-09-2544.9644.9943.8944.0615355000.00.01.039.902756...2014-09-256.946.946.7006.702014-09-256706.276726.406621.486639.71
1932618BP2014-09-2643.9444.5543.8144.367105500.00.01.038.997489...2014-09-266.706.746.6306.702014-09-266639.716664.006615.126649.39
1932619BP2014-09-2944.2544.7244.1444.544460900.00.01.039.272619...2014-09-296.626.696.5706.622014-09-296649.396653.946608.666646.60
1932620BP2014-09-3044.0444.2243.8043.956834500.00.01.039.086241...2014-09-306.617.416.6107.342014-09-306646.606658.916601.626622.72
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1932616 BP 2014-09-24 45.82 45.88 45.36 45.51 6237900.0 \n", "1932617 BP 2014-09-25 44.96 44.99 43.89 44.06 15355000.0 \n", "1932618 BP 2014-09-26 43.94 44.55 43.81 44.36 7105500.0 \n", "1932619 BP 2014-09-29 44.25 44.72 44.14 44.54 4460900.0 \n", "1932620 BP 2014-09-30 44.04 44.22 43.80 43.95 6834500.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open ... GAIA Date \\\n", "1932616 0.0 1.0 40.666021 ... 2014-09-24 \n", "1932617 0.0 1.0 39.902756 ... 2014-09-25 \n", "1932618 0.0 1.0 38.997489 ... 2014-09-26 \n", "1932619 0.0 1.0 39.272619 ... 2014-09-29 \n", "1932620 0.0 1.0 39.086241 ... 2014-09-30 \n", "\n", " GAIA Adj. Open GAIA Adj. High GAIA Adj. Low GAIA Adj. Close \\\n", "1932616 6.75 6.95 6.645 6.94 \n", "1932617 6.94 6.94 6.700 6.70 \n", "1932618 6.70 6.74 6.630 6.70 \n", "1932619 6.62 6.69 6.570 6.62 \n", "1932620 6.61 7.41 6.610 7.34 \n", "\n", " FTSE Date FTSE Open FTSE High FTSE Low FTSE Close \n", "1932616 2014-09-24 6676.08 6707.26 6651.98 6706.27 \n", "1932617 2014-09-25 6706.27 6726.40 6621.48 6639.71 \n", "1932618 2014-09-26 6639.71 6664.00 6615.12 6649.39 \n", "1932619 2014-09-29 6649.39 6653.94 6608.66 6646.60 \n", "1932620 2014-09-30 6646.60 6658.91 6601.62 6622.72 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create dataframe with BP and GAIA data in overlapping date range\n", "# Date range: 1999-10-29 to 2014-09-30\n", "# `bp_gaia_start` etc defined in Feature Engineering section 1.2.2.2\n", "bp_gaia = bp.loc[bp_gaia_start:bp_gaia_start+bp_gaia_intersect_length-1]\n", "\n", "# Check it ends at the right date\n", "bp_gaia.tail()" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "3753" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(bp_gaia)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add GAIA data.\n", "\n", "# Potential improvement: Generalise `prepare_train_test` function instead\n", "# of copy and pasting it and making a new function.\n", "def prepare_train_test_with_gaia(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_gaia): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days`: the number of days prior we consider (the prices of)\n", " `periods`: the total number of datapoints used (training + test)\n", " \"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # GAIA cols\n", " for j in range(1,days+1):\n", " columns.append('GAIA i-%s' % str(j))\n", " columns.append('GAIA Adj. High')\n", " columns.append('GAIA Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['GAIA i-%s' % str(days-j)] = df.iloc[buffer+i+j]['GAIA %s' % str(target)]\n", " features.iloc[i]['GAIA Adj. High'] = max(df[buffer+i:buffer+i+days]['GAIA Adj. High'])\n", " features.iloc[i]['GAIA Adj. Low'] = min(df[buffer+i:buffer+i+days]['GAIA Adj. Low'])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_gaia(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + GAIA data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_gaia(days=days, periods=periods, buffer=buffer, df=bp_gaia)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64\n", "Mean Absolute Error: 0.390417267381\n", "Explained Variance Score: 0.853744159868\n", "Mean Squared Error: 0.253189951823\n", "R2 score: 0.846876833577\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64\n", "Mean Absolute Error: 0.640084309346\n", "Explained Variance Score: 0.937272372234\n", "Mean Squared Error: 0.720859692963\n", "R2 score: 0.86521356578\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64\n", "Mean Absolute Error: 0.559376996819\n", "Explained Variance Score: 0.848725761062\n", "Mean Squared Error: 0.504733717139\n", "R2 score: 0.836876888323\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64\n", "Mean Absolute Error: 0.807669964064\n", "Explained Variance Score: 0.513947367438\n", "Mean Squared Error: 1.11918208013\n", "R2 score: 0.47656012379\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64\n", "Mean Absolute Error: 0.784485223446\n", "Explained Variance Score: 0.611742357358\n", "Mean Squared Error: 1.08805000734\n", "R2 score: 0.59682736149\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64\n", "Mean Absolute Error: 0.823528275858\n", "Explained Variance Score: 0.854979604454\n", "Mean Squared Error: 1.21173657923\n", "R2 score: 0.848280893753\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64\n", "Mean Absolute Error: 1.08202656801\n", "Explained Variance Score: 0.785807434633\n", "Mean Squared Error: 2.18729500527\n", "R2 score: 0.771849063305\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64\n", "Mean Absolute Error: 1.64293719873\n", "Explained Variance Score: 0.701929531055\n", "Mean Squared Error: 4.86875519644\n", "R2 score: 0.576854711057\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64\n", "Mean Absolute Error: 1.09213527916\n", "Explained Variance Score: 0.877782414782\n", "Mean Squared Error: 1.85736866345\n", "R2 score: 0.823140444507\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64\n", "Mean Absolute Error: 1.26399823305\n", "Explained Variance Score: 0.917408689638\n", "Mean Squared Error: 3.26079876466\n", "R2 score: 0.904206507456\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64\n", "Mean Absolute Error: 0.949041466517\n", "Explained Variance Score: 0.760114297454\n", "Mean Squared Error: 1.50840397037\n", "R2 score: 0.751639652033\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64\n", "Mean Absolute Error: 0.83600905218\n", "Explained Variance Score: 0.749597354718\n", "Mean Squared Error: 1.16224774383\n", "R2 score: 0.742591965811\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64\n", "Mean Absolute Error: 0.557442173078\n", "Explained Variance Score: 0.46981043696\n", "Mean Squared Error: 0.522034902854\n", "R2 score: 0.465782842549\n", "Errors: [Day 0 1.341627\n", "Day 1 1.715076\n", "Day 2 2.047743\n", "Day 3 2.309732\n", "Day 4 2.597512\n", "Day 5 2.740830\n", "Day 6 2.855423\n", "dtype: float64, Day 0 1.225322\n", "Day 1 1.896417\n", "Day 2 2.372386\n", "Day 3 2.807200\n", "Day 4 3.233511\n", "Day 5 3.634887\n", "Day 6 4.072937\n", "dtype: float64, Day 0 1.025550\n", "Day 1 1.483467\n", "Day 2 1.798880\n", "Day 3 2.050052\n", "Day 4 2.273937\n", "Day 5 2.456561\n", "Day 6 2.654430\n", "dtype: float64, Day 0 1.266777\n", "Day 1 1.855459\n", "Day 2 2.263780\n", "Day 3 2.632420\n", "Day 4 2.948986\n", "Day 5 3.232724\n", "Day 6 3.457188\n", "dtype: float64, Day 0 1.198206\n", "Day 1 1.678750\n", "Day 2 2.064157\n", "Day 3 2.472613\n", "Day 4 2.804413\n", "Day 5 3.139400\n", "Day 6 3.408515\n", "dtype: float64, Day 0 1.310712\n", "Day 1 1.826348\n", "Day 2 2.181516\n", "Day 3 2.542560\n", "Day 4 2.870944\n", "Day 5 3.144700\n", "Day 6 3.386525\n", "dtype: float64, Day 0 1.729882\n", "Day 1 2.324140\n", "Day 2 2.835599\n", "Day 3 3.230765\n", "Day 4 3.748573\n", "Day 5 4.354235\n", "Day 6 4.792219\n", "dtype: float64, Day 0 3.892175\n", "Day 1 5.235508\n", "Day 2 5.993244\n", "Day 3 7.152523\n", "Day 4 8.385264\n", "Day 5 9.434719\n", "Day 6 10.649324\n", "dtype: float64, Day 0 1.662958\n", "Day 1 2.375210\n", "Day 2 2.963397\n", "Day 3 3.413434\n", "Day 4 3.837277\n", "Day 5 4.280753\n", "Day 6 4.683430\n", "dtype: float64, Day 0 3.094135\n", "Day 1 4.427072\n", "Day 2 5.208320\n", "Day 3 6.246580\n", "Day 4 7.249379\n", "Day 5 8.287553\n", "Day 6 9.517359\n", "dtype: float64, Day 0 2.033082\n", "Day 1 2.902595\n", "Day 2 3.585264\n", "Day 3 4.017229\n", "Day 4 4.386571\n", "Day 5 4.608946\n", "Day 6 4.846322\n", "dtype: float64, Day 0 1.716423\n", "Day 1 2.452149\n", "Day 2 2.981910\n", "Day 3 3.464339\n", "Day 4 3.761339\n", "Day 5 3.976916\n", "Day 6 4.165965\n", "dtype: float64, Day 0 1.168688\n", "Day 1 1.595853\n", "Day 2 1.892584\n", "Day 3 2.174217\n", "Day 4 2.357702\n", "Day 5 2.528297\n", "Day 6 2.632187\n", "dtype: float64]\n", "Daily error: [[1.3416274627176741, 1.2253222561285753, 1.0255495409576574, 1.266776829926521, 1.1982064351141712, 1.310712301821582, 1.7298817238551929, 3.8921754249906253, 1.6629575970691628, 3.0941354597945034, 2.0330820163702419, 1.7164225319161091, 1.1686884331757421], [1.7150760880207037, 1.8964172603677423, 1.4834673922912223, 1.8554594521723491, 1.6787503849419985, 1.8263483157031517, 2.3241398333250651, 5.2355080851844216, 2.3752099271864098, 4.4270718273765972, 2.9025947293955445, 2.4521487734937994, 1.5958526122466832], [2.0477430054053203, 2.3723857338154257, 1.7988798566364699, 2.2637800713580867, 2.0641570748232887, 2.1815157366804447, 2.8355986521448, 5.9932443782633227, 2.9633965226109846, 5.2083198103473851, 3.5852639670979616, 2.9819102400068132, 1.8925844623819319], [2.3097316999351953, 2.8071999746923053, 2.0500517838892773, 2.6324197507576557, 2.4726133505762671, 2.5425603577844873, 3.2307653588653578, 7.1525225718155419, 3.4134342032425726, 6.2465795890314988, 4.0172291702026053, 3.4643390217868517, 2.1742172950593774], [2.5975117870884237, 3.2335105558655264, 2.2739368989119333, 2.9489855905646274, 2.8044131318548891, 2.870944054320459, 3.7485731532447448, 8.3852639729218854, 3.8372768182949173, 7.2493788386688047, 4.3865708556257568, 3.7613389113197311, 2.3577017695179605], [2.7408301709503315, 3.6348871408243957, 2.4565607234069882, 3.2327235750256049, 3.1394000107197346, 3.1446997267702699, 4.354234736214309, 9.4347187346765544, 4.2807532074257058, 8.2875526190580011, 4.6089459172836937, 3.9769158354848391, 2.5282971175926079], [2.855423021053821, 4.0729371465412827, 2.6544296847203288, 3.4571876639216557, 3.4085147945800864, 3.3865251171130839, 4.7922194765634272, 10.64932394540064, 4.6834300530757496, 9.5173590389649085, 4.8463224597302119, 4.1659653260441791, 2.632187257416279]]\n", "Mean daily error: [1.743502924141366, 2.4436957447465919, 2.9375984239670951, 3.4241280098183839, 3.8811851029384354, 4.2938861165717714, 4.701678845009666]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of BP and GAIA data\n", "execute_with_gaia(steps=13)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64\n", "Mean Absolute Error: 0.411869432422\n", "Explained Variance Score: 0.860958167317\n", "Mean Squared Error: 0.278323948034\n", "R2 score: 0.821867759953\n", "Buffer: 200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64\n", "Mean Absolute Error: 0.606986183256\n", "Explained Variance Score: 0.932648097155\n", "Mean Squared Error: 0.66024635669\n", "R2 score: 0.868677365951\n", "Buffer: 400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64\n", "Mean Absolute Error: 0.559944807019\n", "Explained Variance Score: 0.833869148805\n", "Mean Squared Error: 0.505571476681\n", "R2 score: 0.823962424354\n", "Buffer: 600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64\n", "Mean Absolute Error: 0.821987533814\n", "Explained Variance Score: 0.46989388159\n", "Mean Squared Error: 1.15104795599\n", "R2 score: 0.430126472698\n", "Buffer: 800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64\n", "Mean Absolute Error: 0.817292176686\n", "Explained Variance Score: 0.605237375421\n", "Mean Squared Error: 1.16563063035\n", "R2 score: 0.588600663963\n", "Buffer: 1000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64\n", "Mean Absolute Error: 0.855518357378\n", "Explained Variance Score: 0.855221593528\n", "Mean Squared Error: 1.28660241537\n", "R2 score: 0.84831538254\n", "Buffer: 1200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64\n", "Mean Absolute Error: 1.1189552901\n", "Explained Variance Score: 0.781265137134\n", "Mean Squared Error: 2.30617202977\n", "R2 score: 0.76007064928\n", "Buffer: 1400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64\n", "Mean Absolute Error: 1.74362867052\n", "Explained Variance Score: 0.676636001157\n", "Mean Squared Error: 5.47659375935\n", "R2 score: 0.50027082935\n", "Buffer: 1600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64\n", "Mean Absolute Error: 1.06057828555\n", "Explained Variance Score: 0.877606203974\n", "Mean Squared Error: 1.77876224515\n", "R2 score: 0.831199539803\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64\n", "Mean Absolute Error: 1.28699529802\n", "Explained Variance Score: 0.905327333598\n", "Mean Squared Error: 3.46556542013\n", "R2 score: 0.892876435992\n", "Buffer: 2000\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64\n", "Mean Absolute Error: 0.957755739612\n", "Explained Variance Score: 0.758091797889\n", "Mean Squared Error: 1.51735582203\n", "R2 score: 0.751963233546\n", "Buffer: 2200\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64\n", "Mean Absolute Error: 0.828153458555\n", "Explained Variance Score: 0.748810119642\n", "Mean Squared Error: 1.15885573253\n", "R2 score: 0.739717381937\n", "Buffer: 2400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64\n", "Mean Absolute Error: 0.536701478378\n", "Explained Variance Score: 0.501934925031\n", "Mean Squared Error: 0.493473147419\n", "R2 score: 0.496826916953\n", "Errors: [Day 0 1.323178\n", "Day 1 1.671423\n", "Day 2 2.003066\n", "Day 3 2.280038\n", "Day 4 2.613056\n", "Day 5 2.825380\n", "Day 6 3.118137\n", "dtype: float64, Day 0 1.198034\n", "Day 1 1.793753\n", "Day 2 2.238008\n", "Day 3 2.671877\n", "Day 4 3.094744\n", "Day 5 3.491016\n", "Day 6 3.947794\n", "dtype: float64, Day 0 1.033756\n", "Day 1 1.476265\n", "Day 2 1.780142\n", "Day 3 2.048506\n", "Day 4 2.277745\n", "Day 5 2.459239\n", "Day 6 2.656842\n", "dtype: float64, Day 0 1.280769\n", "Day 1 1.898842\n", "Day 2 2.335831\n", "Day 3 2.713995\n", "Day 4 2.992859\n", "Day 5 3.241748\n", "Day 6 3.472403\n", "dtype: float64, Day 0 1.245659\n", "Day 1 1.798645\n", "Day 2 2.170914\n", "Day 3 2.529265\n", "Day 4 2.883417\n", "Day 5 3.234105\n", "Day 6 3.527884\n", "dtype: float64, Day 0 1.328081\n", "Day 1 1.841198\n", "Day 2 2.234918\n", "Day 3 2.622343\n", "Day 4 2.959574\n", "Day 5 3.234043\n", "Day 6 3.495192\n", "dtype: float64, Day 0 1.710366\n", "Day 1 2.317923\n", "Day 2 2.925472\n", "Day 3 3.357637\n", "Day 4 3.922806\n", "Day 5 4.499598\n", "Day 6 4.925807\n", "dtype: float64, Day 0 3.965443\n", "Day 1 5.506712\n", "Day 2 6.389023\n", "Day 3 7.648226\n", "Day 4 8.895344\n", "Day 5 10.009035\n", "Day 6 11.437354\n", "dtype: float64, Day 0 1.603030\n", "Day 1 2.261434\n", "Day 2 2.852098\n", "Day 3 3.313621\n", "Day 4 3.774411\n", "Day 5 4.198642\n", "Day 6 4.601614\n", "dtype: float64, Day 0 3.126286\n", "Day 1 4.536647\n", "Day 2 5.357211\n", "Day 3 6.435848\n", "Day 4 7.463821\n", "Day 5 8.572911\n", "Day 6 9.896616\n", "dtype: float64, Day 0 2.057554\n", "Day 1 2.908899\n", "Day 2 3.602153\n", "Day 3 4.017639\n", "Day 4 4.393055\n", "Day 5 4.632209\n", "Day 6 4.883861\n", "dtype: float64, Day 0 1.762581\n", "Day 1 2.509251\n", "Day 2 3.006224\n", "Day 3 3.472916\n", "Day 4 3.729052\n", "Day 5 3.924826\n", "Day 6 4.096157\n", "dtype: float64, Day 0 1.122261\n", "Day 1 1.554301\n", "Day 2 1.824488\n", "Day 3 2.114105\n", "Day 4 2.304474\n", "Day 5 2.457882\n", "Day 6 2.543011\n", "dtype: float64]\n", "Daily error: [[1.3231776216477114, 1.1980342560885635, 1.0337559381524328, 1.2807686653343162, 1.2456589674532657, 1.3280813790944388, 1.7103664889037826, 3.9654429549097601, 1.6030301361552719, 3.1262859191366834, 2.0575536901156961, 1.7625814480985875, 1.122261076440187], [1.6714227116632154, 1.7937529603665612, 1.4762654529955792, 1.8988415982605655, 1.7986447274603283, 1.8411983204181284, 2.3179232847517244, 5.5067122215563318, 2.2614338115669748, 4.5366470960465399, 2.9088991347268269, 2.509250623322357, 1.5543009007901478], [2.0030655887796156, 2.2380077065815658, 1.780142194025534, 2.3358307699453613, 2.1709139424992134, 2.2349182679689812, 2.9254723250608365, 6.3890225539288785, 2.8520975853223187, 5.3572107545469327, 3.6021525960354821, 3.0062242229108511, 1.8244880060908213], [2.2800381048939928, 2.6718769676440171, 2.0485058953109236, 2.7139945310843472, 2.5292649062139549, 2.6223432174672223, 3.3576365342598042, 7.6482257503288977, 3.3136212289590303, 6.4358480297866265, 4.0176389505663028, 3.4729158251810874, 2.1141046081849635], [2.6130558930393306, 3.0947438014593844, 2.2777450341905157, 2.9928587868727545, 2.8834172521302088, 2.9595736804925212, 3.922805774129059, 8.8953440466338662, 3.7744107155179223, 7.4638214002320096, 4.3930553757686583, 3.7290523761223286, 2.3044743756514912], [2.8253797825024778, 3.4910159576111015, 2.4592393810665074, 3.2417476593438641, 3.2341045345752168, 3.2340433613195385, 4.4995984413286916, 10.009035103965697, 4.1986423675716669, 8.5729105007004449, 4.632208728692107, 3.9248259983154372, 2.4578823506143306], [3.1181366825666315, 3.9477940431715237, 2.6568415237777345, 3.4724030082407742, 3.527884207580871, 3.495192276717217, 4.925807113061305, 11.437354010217145, 4.6016137595911006, 9.8966156891001624, 4.8838613016883965, 4.0961565153048944, 2.5430114038608864]]\n", "Mean daily error: [1.7505383493485149, 2.4673302187634834, 2.9784266548997227, 3.4789241961447055, 3.9464891163261573, 4.3677410898159295, 4.8155901180675889]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of BP and GAIA data\n", "execute_with_gaia(days=10, steps=13)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.3 Adding FTSE100" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1924931BP1984-04-0245.6246.3845.5046.00209700.00.01.04.748742...NaNNaNNaNNaNNaN1984-04-021108.11108.11108.11108.1
1924932BP1984-04-0346.1246.5045.8846.38148900.00.01.04.800788...NaNNaNNaNNaNNaN1984-04-031095.41095.41095.41095.4
1924933BP1984-04-0446.6248.0046.6248.00283800.00.01.04.852835...NaNNaNNaNNaNNaN1984-04-041095.41095.41095.41095.4
1924934BP1984-04-0548.3848.3847.0047.50166400.00.01.05.036040...NaNNaNNaNNaNNaN1984-04-051102.21102.21102.21102.2
1924935BP1984-04-0647.1247.5047.0047.5081500.00.01.04.904882...NaNNaNNaNNaNNaN1984-04-061096.31096.31096.31096.3
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.50 46.00 209700.0 0.0 \n", "1924932 BP 1984-04-03 46.12 46.50 45.88 46.38 148900.0 0.0 \n", "1924933 BP 1984-04-04 46.62 48.00 46.62 48.00 283800.0 0.0 \n", "1924934 BP 1984-04-05 48.38 48.38 47.00 47.50 166400.0 0.0 \n", "1924935 BP 1984-04-06 47.12 47.50 47.00 47.50 81500.0 0.0 \n", "\n", " Split Ratio Adj. Open ... GAIA Date GAIA Adj. Open \\\n", "1924931 1.0 4.748742 ... NaN NaN \n", "1924932 1.0 4.800788 ... NaN NaN \n", "1924933 1.0 4.852835 ... NaN NaN \n", "1924934 1.0 5.036040 ... NaN NaN \n", "1924935 1.0 4.904882 ... NaN NaN \n", "\n", " GAIA Adj. High GAIA Adj. Low GAIA Adj. Close FTSE Date \\\n", "1924931 NaN NaN NaN 1984-04-02 \n", "1924932 NaN NaN NaN 1984-04-03 \n", "1924933 NaN NaN NaN 1984-04-04 \n", "1924934 NaN NaN NaN 1984-04-05 \n", "1924935 NaN NaN NaN 1984-04-06 \n", "\n", " FTSE Open FTSE High FTSE Low FTSE Close \n", "1924931 1108.1 1108.1 1108.1 1108.1 \n", "1924932 1095.4 1095.4 1095.4 1095.4 \n", "1924933 1095.4 1095.4 1095.4 1095.4 \n", "1924934 1102.2 1102.2 1102.2 1102.2 \n", "1924935 1096.3 1096.3 1096.3 1096.3 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Create df with BP and FTSE data\n", "bp_ftse = bp.loc[bp_ftse_start:]\n", "bp_ftse.head()" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Modify `prepare_train_test` function to add FTSE data.\n", "def prepare_train_test_with_ftse(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7, df=bp_ftse, name='FTSE'): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " # BP cols\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", " # FTSE cols\n", " for j in range(1,days+1):\n", " columns.append('%s i-%s' % (name, str(j)))\n", " columns.append('%s High' % name)\n", " columns.append('%s Low' % name)\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = df.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = df.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = df.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(df[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(df[buffer+i:buffer+i+days]['Adj. Low'])\n", " for j in range(days):\n", " features.iloc[i]['%s i-%s' % (name, str(days-j))] = df.iloc[buffer+i+j]['%s %s' % (name, 'Close')]\n", " features.iloc[i]['%s High' % name] = max(df[buffer+i:buffer+i+days]['%s High' % name])\n", " features.iloc[i]['%s Low' % name] = min(df[buffer+i:buffer+i+days]['%s Low' % name])\n", " \n", " X = features\n", " y = nday_prices\n", "\n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def execute_with_ftse(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " errors=[]\n", " r2=[]\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " errors.append(classify_and_metrics(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days))\n", " print(\"Errors: \", errors)\n", " \n", " daily_error = []\n", " for target_day in range(predict_days):\n", " daily_error.append([])\n", " for segment in range(steps):\n", " for target_day in range(predict_days):\n", " daily_error[target_day].append(errors[segment][target_day])\n", " print(\"Daily error: \", daily_error)\n", " average_daily_error = []\n", " for day in daily_error:\n", " average_daily_error.append(np.mean(day))\n", " print(\"Mean daily error: \", average_daily_error)" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64\n", "Mean Absolute Error: 0.211015556424\n", "Explained Variance Score: 0.899000260643\n", "Mean Squared Error: 0.101319536893\n", "R2 score: 0.896790144908\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64\n", "Mean Absolute Error: 0.103662027254\n", "Explained Variance Score: 0.810914496372\n", "Mean Squared Error: 0.0191496161364\n", "R2 score: 0.791651910968\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64\n", "Mean Absolute Error: 0.16109328452\n", "Explained Variance Score: 0.509005999538\n", "Mean Squared Error: 0.0448450594299\n", "R2 score: 0.483113556059\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64\n", "Mean Absolute Error: 0.134831719911\n", "Explained Variance Score: 0.940362863942\n", "Mean Squared Error: 0.0312949743422\n", "R2 score: 0.930443446072\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64\n", "Mean Absolute Error: 0.138033710537\n", "Explained Variance Score: 0.808072775502\n", "Mean Squared Error: 0.0334602089163\n", "R2 score: 0.796224083528\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64\n", "Mean Absolute Error: 0.283227004062\n", "Explained Variance Score: 0.94135464242\n", "Mean Squared Error: 0.148338070724\n", "R2 score: 0.940791765118\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64\n", "Mean Absolute Error: 0.592720577547\n", "Explained Variance Score: 0.590618890488\n", "Mean Squared Error: 0.561331819027\n", "R2 score: 0.591291118732\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64\n", "Mean Absolute Error: 0.806309397821\n", "Explained Variance Score: 0.691786541195\n", "Mean Squared Error: 1.15097371293\n", "R2 score: 0.680775196711\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64\n", "Mean Absolute Error: 0.555161284679\n", "Explained Variance Score: 0.783418594845\n", "Mean Squared Error: 0.535944911988\n", "R2 score: 0.778980606844\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64\n", "Mean Absolute Error: 0.601145418071\n", "Explained Variance Score: 0.928081215955\n", "Mean Squared Error: 0.703987908082\n", "R2 score: 0.867484525348\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64\n", "Mean Absolute Error: 0.728988512466\n", "Explained Variance Score: 0.810817817708\n", "Mean Squared Error: 0.896347592801\n", "R2 score: 0.805988449328\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64\n", "Mean Absolute Error: 0.922073321462\n", "Explained Variance Score: 0.85113491032\n", "Mean Squared Error: 1.46122600596\n", "R2 score: 0.850264942708\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64\n", "Mean Absolute Error: 1.17309132125\n", "Explained Variance Score: 0.799408239284\n", "Mean Squared Error: 2.27030564663\n", "R2 score: 0.796642650027\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64\n", "Mean Absolute Error: 0.843137827511\n", "Explained Variance Score: 0.832739639424\n", "Mean Squared Error: 1.16152586731\n", "R2 score: 0.800540577102\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 7\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64\n", "Mean Absolute Error: 0.631785589032\n", "Explained Variance Score: 0.609102226738\n", "Mean Squared Error: 0.685708026384\n", "R2 score: 0.61435314998\n", "Errors: [Day 0 2.109320\n", "Day 1 3.137678\n", "Day 2 3.927590\n", "Day 3 4.810907\n", "Day 4 5.609303\n", "Day 5 6.394593\n", "Day 6 7.234880\n", "dtype: float64, Day 0 1.088250\n", "Day 1 1.514288\n", "Day 2 1.858048\n", "Day 3 2.120259\n", "Day 4 2.386504\n", "Day 5 2.651482\n", "Day 6 2.897414\n", "dtype: float64, Day 0 1.172722\n", "Day 1 1.786834\n", "Day 2 2.265808\n", "Day 3 2.724095\n", "Day 4 3.090687\n", "Day 5 3.371682\n", "Day 6 3.558338\n", "dtype: float64, Day 0 1.412587\n", "Day 1 2.182290\n", "Day 2 2.690129\n", "Day 3 3.080650\n", "Day 4 3.362509\n", "Day 5 3.648322\n", "Day 6 3.942984\n", "dtype: float64, Day 0 0.937895\n", "Day 1 1.395007\n", "Day 2 1.767085\n", "Day 3 2.021960\n", "Day 4 2.221037\n", "Day 5 2.386370\n", "Day 6 2.552934\n", "dtype: float64, Day 0 1.030094\n", "Day 1 1.658142\n", "Day 2 2.144928\n", "Day 3 2.545284\n", "Day 4 2.908762\n", "Day 5 3.201310\n", "Day 6 3.439854\n", "dtype: float64, Day 0 1.740593\n", "Day 1 2.599469\n", "Day 2 3.241287\n", "Day 3 3.732495\n", "Day 4 4.178792\n", "Day 5 4.502204\n", "Day 6 4.792628\n", "dtype: float64, Day 0 2.184917\n", "Day 1 3.150312\n", "Day 2 3.862026\n", "Day 3 4.332817\n", "Day 4 4.714202\n", "Day 5 5.093174\n", "Day 6 5.511842\n", "dtype: float64, Day 0 1.609139\n", "Day 1 2.209478\n", "Day 2 2.651145\n", "Day 3 3.035915\n", "Day 4 3.307851\n", "Day 5 3.513689\n", "Day 6 3.731646\n", "dtype: float64, Day 0 1.159712\n", "Day 1 1.821067\n", "Day 2 2.368156\n", "Day 3 2.881589\n", "Day 4 3.395189\n", "Day 5 3.934701\n", "Day 6 4.448484\n", "dtype: float64, Day 0 1.245583\n", "Day 1 1.783155\n", "Day 2 2.117850\n", "Day 3 2.431495\n", "Day 4 2.690854\n", "Day 5 2.901838\n", "Day 6 3.086194\n", "dtype: float64, Day 0 1.337020\n", "Day 1 1.953848\n", "Day 2 2.402701\n", "Day 3 2.793626\n", "Day 4 3.137662\n", "Day 5 3.398910\n", "Day 6 3.643714\n", "dtype: float64, Day 0 2.822223\n", "Day 1 3.873284\n", "Day 2 4.484701\n", "Day 3 5.141355\n", "Day 4 5.621059\n", "Day 5 5.928536\n", "Day 6 6.401028\n", "dtype: float64, Day 0 1.522905\n", "Day 1 2.289513\n", "Day 2 2.875439\n", "Day 3 3.364421\n", "Day 4 3.724268\n", "Day 5 4.019616\n", "Day 6 4.281550\n", "dtype: float64, Day 0 1.403441\n", "Day 1 1.969121\n", "Day 2 2.338317\n", "Day 3 2.669488\n", "Day 4 2.833697\n", "Day 5 2.908570\n", "Day 6 2.913130\n", "dtype: float64]\n", "Daily error: [[2.1093203849638837, 1.0882498665812053, 1.1727221193362856, 1.412586577442704, 0.9378952735856545, 1.0300941063834617, 1.7405932434523412, 2.1849168154032079, 1.609139147394997, 1.1597121603824943, 1.2455832253947525, 1.3370203586317857, 2.8222226244345667, 1.5229049347204531, 1.4034412486597296], [3.137677932962208, 1.5142879962397864, 1.7868339361639278, 2.1822902059145175, 1.3950071506620265, 1.6581419571681995, 2.5994688610024981, 3.150312167798214, 2.2094784630369553, 1.8210669198683502, 1.7831545661313932, 1.9538476861974765, 3.8732839254645901, 2.2895125324881676, 1.9691207311038021], [3.9275897295520128, 1.8580481167789493, 2.2658084022672815, 2.6901289014995937, 1.767085268420445, 2.1449275152997287, 3.2412865657258387, 3.8620255289884353, 2.6511445367500901, 2.3681564296528759, 2.1178502784134459, 2.4027006524959704, 4.4847012689782151, 2.8754387124563219, 2.3383173887217694], [4.8109068581784316, 2.1202592771408266, 2.7240948901950901, 3.0806499448309483, 2.0219604798575306, 2.5452837022717545, 3.7324950514184696, 4.3328167447346981, 3.0359152242486602, 2.8815894798898607, 2.4314952470219375, 2.7936258809738246, 5.1413550904137146, 3.3644214225425011, 2.6694884382791546], [5.6093030750366921, 2.3865041173957149, 3.0906874855810553, 3.3625090179209156, 2.2210374912412818, 2.9087622099011363, 4.1787916887657, 4.7142020078698375, 3.307851012047319, 3.3951893092285954, 2.6908537577255762, 3.1376619968233004, 5.6210588492955305, 3.7242680240618635, 2.8336973969591983], [6.3945931299753953, 2.6514816004326791, 3.3716820089302235, 3.6483218764886902, 2.3863700872043565, 3.2013104222689206, 4.5022040533065981, 5.0931736226381776, 3.5136885049685351, 3.9347008139004784, 2.9018384802534278, 3.3989102445656725, 5.9285358715306176, 4.01961642402006, 2.9085703842103929], [7.2348796444965835, 2.8974138017887943, 3.5583384572569687, 3.9429838565291648, 2.5529337042005769, 3.4398540607220633, 4.7926283817650912, 5.5118415837853485, 3.7316462933370311, 4.4484836960925431, 3.0861939411336166, 3.64371401011475, 6.4010282408578716, 4.2815500163757605, 2.9131303105673707]]\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 7 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=7, steps=15, buffer_step=450)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64\n", "Mean Absolute Error: 0.215528703585\n", "Explained Variance Score: 0.89239332126\n", "Mean Squared Error: 0.106333053016\n", "R2 score: 0.889423358708\n", "Buffer: 450\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64\n", "Mean Absolute Error: 0.10544394771\n", "Explained Variance Score: 0.823015071932\n", "Mean Squared Error: 0.020152560856\n", "R2 score: 0.801681477257\n", "Buffer: 900\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64\n", "Mean Absolute Error: 0.159314434074\n", "Explained Variance Score: 0.516143726707\n", "Mean Squared Error: 0.0435129876798\n", "R2 score: 0.495386197593\n", "Buffer: 1350\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64\n", "Mean Absolute Error: 0.136614189089\n", "Explained Variance Score: 0.939952177211\n", "Mean Squared Error: 0.0322690576029\n", "R2 score: 0.928442841529\n", "Buffer: 1800\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64\n", "Mean Absolute Error: 0.140535916916\n", "Explained Variance Score: 0.809072502567\n", "Mean Squared Error: 0.0343899561873\n", "R2 score: 0.799698674935\n", "Buffer: 2250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64\n", "Mean Absolute Error: 0.280129258983\n", "Explained Variance Score: 0.941835339241\n", "Mean Squared Error: 0.143004453044\n", "R2 score: 0.941407871428\n", "Buffer: 2700\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64\n", "Mean Absolute Error: 0.622769626763\n", "Explained Variance Score: 0.549268768233\n", "Mean Squared Error: 0.608912691972\n", "R2 score: 0.544265975032\n", "Buffer: 3150\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64\n", "Mean Absolute Error: 0.822610971931\n", "Explained Variance Score: 0.667388346685\n", "Mean Squared Error: 1.20046660692\n", "R2 score: 0.65660643821\n", "Buffer: 3600\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64\n", "Mean Absolute Error: 0.578147544172\n", "Explained Variance Score: 0.771641543361\n", "Mean Squared Error: 0.577674968314\n", "R2 score: 0.758137073698\n", "Buffer: 4050\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64\n", "Mean Absolute Error: 0.62310658889\n", "Explained Variance Score: 0.935786377244\n", "Mean Squared Error: 0.733200459648\n", "R2 score: 0.866502386196\n", "Buffer: 4500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64\n", "Mean Absolute Error: 0.753820405372\n", "Explained Variance Score: 0.789718883382\n", "Mean Squared Error: 0.961684765187\n", "R2 score: 0.787036306482\n", "Buffer: 4950\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64\n", "Mean Absolute Error: 0.923211659748\n", "Explained Variance Score: 0.849260130266\n", "Mean Squared Error: 1.4577408598\n", "R2 score: 0.849596798634\n", "Buffer: 5400\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64\n", "Mean Absolute Error: 1.17807639875\n", "Explained Variance Score: 0.811070055435\n", "Mean Squared Error: 2.27195431925\n", "R2 score: 0.80485970809\n", "Buffer: 5850\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64\n", "Mean Absolute Error: 0.811337617748\n", "Explained Variance Score: 0.814434213769\n", "Mean Squared Error: 1.06810231014\n", "R2 score: 0.795783463702\n", "Buffer: 6300\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "# Days used to predict: 10\n", "\n", "7-day predictions\n", "Root Mean Squared Percentage Error Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64\n", "Mean Absolute Error: 0.621253472644\n", "Explained Variance Score: 0.584629646453\n", "Mean Squared Error: 0.678659874536\n", "R2 score: 0.590446476591\n", "Errors: [Day 0 2.191707\n", "Day 1 3.255114\n", "Day 2 4.107164\n", "Day 3 4.906927\n", "Day 4 5.684572\n", "Day 5 6.545767\n", "Day 6 7.472952\n", "dtype: float64, Day 0 1.083418\n", "Day 1 1.521911\n", "Day 2 1.899442\n", "Day 3 2.175397\n", "Day 4 2.446337\n", "Day 5 2.698452\n", "Day 6 2.969189\n", "dtype: float64, Day 0 1.179039\n", "Day 1 1.784517\n", "Day 2 2.252078\n", "Day 3 2.685593\n", "Day 4 3.036127\n", "Day 5 3.297745\n", "Day 6 3.484568\n", "dtype: float64, Day 0 1.418572\n", "Day 1 2.205809\n", "Day 2 2.707966\n", "Day 3 3.065133\n", "Day 4 3.372909\n", "Day 5 3.722767\n", "Day 6 4.085930\n", "dtype: float64, Day 0 0.969219\n", "Day 1 1.407989\n", "Day 2 1.774366\n", "Day 3 2.006810\n", "Day 4 2.222288\n", "Day 5 2.431137\n", "Day 6 2.628517\n", "dtype: float64, Day 0 1.038915\n", "Day 1 1.645811\n", "Day 2 2.112299\n", "Day 3 2.483771\n", "Day 4 2.829161\n", "Day 5 3.127032\n", "Day 6 3.366379\n", "dtype: float64, Day 0 1.797891\n", "Day 1 2.723322\n", "Day 2 3.356193\n", "Day 3 3.878116\n", "Day 4 4.345700\n", "Day 5 4.697718\n", "Day 6 5.059729\n", "dtype: float64, Day 0 2.208113\n", "Day 1 3.185436\n", "Day 2 3.977847\n", "Day 3 4.568031\n", "Day 4 4.948970\n", "Day 5 5.248564\n", "Day 6 5.539855\n", "dtype: float64, Day 0 1.626428\n", "Day 1 2.218575\n", "Day 2 2.616786\n", "Day 3 2.990878\n", "Day 4 3.352327\n", "Day 5 3.700569\n", "Day 6 4.034975\n", "dtype: float64, Day 0 1.168879\n", "Day 1 1.825720\n", "Day 2 2.384463\n", "Day 3 2.914573\n", "Day 4 3.484220\n", "Day 5 4.059764\n", "Day 6 4.593527\n", "dtype: float64, Day 0 1.244292\n", "Day 1 1.796529\n", "Day 2 2.173854\n", "Day 3 2.496351\n", "Day 4 2.780568\n", "Day 5 3.020278\n", "Day 6 3.232226\n", "dtype: float64, Day 0 1.354339\n", "Day 1 1.954030\n", "Day 2 2.383788\n", "Day 3 2.791638\n", "Day 4 3.135002\n", "Day 5 3.414691\n", "Day 6 3.633154\n", "dtype: float64, Day 0 2.827914\n", "Day 1 3.796807\n", "Day 2 4.351335\n", "Day 3 5.001136\n", "Day 4 5.563302\n", "Day 5 5.917389\n", "Day 6 6.435110\n", "dtype: float64, Day 0 1.483469\n", "Day 1 2.188220\n", "Day 2 2.733345\n", "Day 3 3.189198\n", "Day 4 3.577968\n", "Day 5 3.849069\n", "Day 6 4.098522\n", "dtype: float64, Day 0 1.367971\n", "Day 1 1.938397\n", "Day 2 2.317634\n", "Day 3 2.655442\n", "Day 4 2.824671\n", "Day 5 2.922850\n", "Day 6 2.899889\n", "dtype: float64]\n", "Daily error: [[2.1917071373549142, 1.0834175849417413, 1.1790388483576231, 1.4185720767250298, 0.96921873843174433, 1.0389149513076914, 1.7978906762316238, 2.2081130786782364, 1.626428265072178, 1.1688790011372792, 1.2442918199208317, 1.3543393912886921, 2.8279137985254801, 1.4834687450605335, 1.3679706504709863], [3.2551135884486477, 1.5219113117998229, 1.7845167567514877, 2.2058091975797436, 1.4079893663844747, 1.64581116515362, 2.7233218542675242, 3.1854362480671763, 2.2185746552549848, 1.8257198705930926, 1.7965291955873381, 1.9540303097844811, 3.7968068102836212, 2.1882198067251681, 1.9383968951517652], [4.1071642717896424, 1.899441698280516, 2.2520776093061308, 2.7079657528262455, 1.7743659001210701, 2.1122985914925523, 3.356193360147429, 3.977846700859939, 2.6167864392207312, 2.3844631650635484, 2.1738537747800573, 2.383788098908028, 4.3513351771356108, 2.7333448756427385, 2.3176337055862728], [4.9069274993299832, 2.1753970232525957, 2.6855930147788434, 3.0651327146777625, 2.0068103232086885, 2.4837707641410778, 3.878115561655151, 4.5680307683121617, 2.9908780138635374, 2.9145726033700368, 2.496350569513452, 2.7916378601993737, 5.0011359073546746, 3.1891975828644781, 2.6554416096311888], [5.684571865013738, 2.4463368567295891, 3.0361268916304378, 3.3729085591425267, 2.2222876725032874, 2.8291606439532142, 4.3457001749901645, 4.9489701760890119, 3.3523269094516883, 3.484220273558515, 2.7805684594518505, 3.1350021688093856, 5.5633024838786831, 3.5779675235638311, 2.8246714585341386], [6.5457674951850882, 2.6984515540580043, 3.2977446703014217, 3.7227666232643482, 2.4311370551028717, 3.1270319944324179, 4.6977181415685774, 5.2485644247119962, 3.7005685112433282, 4.0597642961603251, 3.0202781279834614, 3.4146913692062437, 5.9173890041333834, 3.8490686937976597, 2.9228497474023731], [7.4729519181537638, 2.9691887750983366, 3.4845684255477578, 4.0859302671068836, 2.6285168571962965, 3.3663785847193122, 5.0597293035706112, 5.539855260240377, 4.0349747441790287, 4.593526881685257, 3.2322257784365647, 3.6331538446606069, 6.4351103994170922, 4.0985222258397407, 2.8998887303961443]]\n", "Mean daily error: [1.5306776509003057, 2.2298791354555303, 2.7432372747440339, 3.1872661210768669, 3.5736081411533376, 3.9102527805700995, 4.2356347997498514]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/metrics/regression.py:471: DeprecationWarning: Default 'multioutput' behavior now corresponds to 'variance_weighted' value which is deprecated since 0.17, it will be changed to 'uniform_average' starting from 0.19.\n", " DeprecationWarning)\n" ] } ], "source": [ "# Consider 10 days' worth of prior BP and FTSE data\n", "execute_with_ftse(days=10, steps=15, buffer_step=450)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# We want an array with predictions for our model in a long date range.\n", "# We will consider the max error predictions, that is,\n", "# predictions of adjusted close prices 7 days ahead.\n", "\n", "# Initialise variable\n", "predictions_800_off = []" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def predict(clf=LinearRegression(), target_days=7, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Append predictions to `predictions_800_off`.\n", " \"\"\"\n", " # Classify and predict\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " print(\"Pred: \", pred)\n", " predictions_800_off.append(pred)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Pared-down execute function that runs train-test cycles and \n", "# appends the predictions to `predictions_800_off` via the function `predict()`.\n", "def execute_viz(steps=8, buffer_step=200, days=7, periods=1000, model=LinearRegression(), predict_days=7):\n", " \"\"\"Performs `steps` train-test cycles and prints evaluation metrics for BP + FTSE data.\n", " `steps`: number of train-test cycles.\n", " `periods`: the total number of datapoints used in each cycle (training + test)\n", " `buffer_step`: number of datapoints between the starting points of each\n", " consecutive train-test cycle\n", " \"\"\"\n", " for segment in range(steps):\n", " buffer = segment*buffer_step\n", " print(\"Buffer: \", buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test_with_ftse(days=days, periods=periods, buffer=buffer, df=bp_ftse)\n", " predict(clf=model, X_train=X_train, X_test=X_test, y_train=y_train, y_test=y_test, days=days)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Buffer: 0\n", "Pred: [[ 7.83601976 7.84714155 7.85292535 ..., 7.89987737 7.91755521\n", " 7.93865868]\n", " [ 7.85539551 7.86158008 7.87498252 ..., 7.90506271 7.91740818\n", " 7.93852032]\n", " [ 7.83170231 7.84749588 7.87738729 ..., 7.89285396 7.91642424\n", " 7.92424915]\n", " ..., \n", " [ 6.36738278 6.39213824 6.39270447 ..., 6.43798347 6.45461204\n", " 6.4751872 ]\n", " [ 6.42016386 6.417325 6.42707883 ..., 6.47916005 6.50267402\n", " 6.51950021]\n", " [ 6.28080118 6.27092368 6.28282955 ..., 6.30547753 6.3252951\n", " 6.3264697 ]]\n", "Buffer: 200\n", "Pred: [[ 6.14075766 6.11117589 6.09574853 ..., 6.07217018 6.07748552\n", " 6.08070167]\n", " [ 6.21540435 6.17492322 6.17149764 ..., 6.1453285 6.13813657\n", " 6.14081275]\n", " [ 6.27753279 6.27307459 6.23843178 ..., 6.24830207 6.24374508\n", " 6.21901832]\n", " ..., \n", " [ 5.75919469 5.78334022 5.79923807 ..., 5.83008595 5.859385\n", " 5.87740631]\n", " [ 5.76238715 5.7892002 5.81412139 ..., 5.85030748 5.88508911\n", " 5.88637507]\n", " [ 5.78833298 5.81875138 5.83850427 ..., 5.88612816 5.8986934\n", " 5.90478152]]\n", "Buffer: 400\n", "Pred: [[ 5.7641509 5.79247187 5.81926042 ..., 5.84616883 5.86198088\n", " 5.87727484]\n", " [ 5.8513131 5.86385014 5.88638345 ..., 5.89063265 5.90502758\n", " 5.90804928]\n", " [ 5.9113665 5.92879268 5.93253659 ..., 5.94752817 5.95264971\n", " 5.95534078]\n", " ..., \n", " [ 6.1998076 6.19815249 6.22826773 ..., 6.25852243 6.2950688\n", " 6.28322814]\n", " [ 6.19140054 6.19932943 6.23777417 ..., 6.25145184 6.25277943\n", " 6.24492933]\n", " [ 6.22481015 6.25710477 6.27123817 ..., 6.28618561 6.29833129\n", " 6.29616353]]\n", "Buffer: 600\n", "Pred: [[ 6.1645113 6.1747009 6.17346569 ..., 6.14073882 6.13655823\n", " 6.15464913]\n", " [ 6.23869668 6.22906726 6.21064429 ..., 6.19525349 6.199533 6.1829646 ]\n", " [ 5.94298817 5.92847236 5.91129748 ..., 5.89322178 5.86434585\n", " 5.87953873]\n", " ..., \n", " [ 8.94246533 8.87626646 8.89060421 ..., 8.84848815 8.85793555\n", " 8.86792794]\n", " [ 8.78322534 8.79037462 8.72943888 ..., 8.72055999 8.7383812\n", " 8.68878426]\n", " [ 8.83433927 8.76940226 8.77364936 ..., 8.77248502 8.72566135\n", " 8.69839892]]\n", "Buffer: 800\n", "Pred: [[ 8.67603806 8.67084409 8.65130791 ..., 8.67378925 8.69676109\n", " 8.69455006]\n", " [ 8.82830315 8.8205379 8.86009166 ..., 8.87552595 8.85568772\n", " 8.84410872]\n", " [ 8.84748948 8.84911858 8.81238761 ..., 8.78189801 8.75265697\n", " 8.72581647]\n", " ..., \n", " [ 7.71616361 7.7100549 7.68435219 ..., 7.6489673 7.61926738\n", " 7.60503466]\n", " [ 7.59805829 7.59515854 7.53381661 ..., 7.5060898 7.47964638\n", " 7.49137924]\n", " [ 7.54657369 7.52483132 7.53333146 ..., 7.50714863 7.52033692\n", " 7.5104685 ]]\n", "Buffer: 1000\n", "Pred: [[ 7.46215011 7.4436282 7.43918656 ..., 7.5010726 7.48113362\n", " 7.48813435]\n", " [ 7.56216243 7.57242677 7.60962549 ..., 7.59408734 7.58687173\n", " 7.59213207]\n", " [ 7.55189234 7.58738691 7.61589834 ..., 7.60049142 7.60064947\n", " 7.60278131]\n", " ..., \n", " [ 6.19883297 6.22711546 6.24523835 ..., 6.30446123 6.33864273\n", " 6.33903875]\n", " [ 6.17836606 6.19567673 6.22059366 ..., 6.29335772 6.30085317\n", " 6.31700372]\n", " [ 6.30048133 6.33373495 6.37895762 ..., 6.41007597 6.40794933\n", " 6.42844116]]\n", "Buffer: 1200\n", "Pred: [[ 6.30754289 6.34315541 6.37136507 ..., 6.34725709 6.3533664\n", " 6.36701006]\n", " [ 6.2183139 6.22645131 6.20859811 ..., 6.19826357 6.21393204\n", " 6.22498325]\n", " [ 6.13231736 6.11064193 6.06756449 ..., 6.10864178 6.12762316\n", " 6.12009367]\n", " ..., \n", " [ 4.93362234 4.93814477 4.93428253 ..., 4.96908178 4.9916257\n", " 5.0119479 ]\n", " [ 4.94855637 4.96672313 4.9753907 ..., 5.01327007 5.04827391\n", " 5.06702398]\n", " [ 4.94109813 4.95766805 4.9861515 ..., 5.00727657 5.02994663\n", " 5.03880748]]\n", "Buffer: 1400\n", "Pred: [[ 4.99871061 5.02010571 5.014281 ..., 5.0026121 4.99747618\n", " 4.97557435]\n", " [ 5.15365698 5.15594044 5.1491617 ..., 5.09127283 5.05670229\n", " 5.06074197]\n", " [ 5.15264849 5.14912635 5.12308927 ..., 5.05939273 5.0643763\n", " 5.04887009]\n", " ..., \n", " [ 6.73631505 6.69817443 6.67661297 ..., 6.63990072 6.64029307\n", " 6.62941594]\n", " [ 6.80586543 6.78280213 6.77308604 ..., 6.73267206 6.70165677\n", " 6.68567721]\n", " [ 6.87717059 6.8713965 6.85461032 ..., 6.80891943 6.78659161\n", " 6.7676666 ]]\n", "Buffer: 1600\n", "Pred: [[ 6.88960025 6.895621 6.91178743 ..., 6.90648271 6.91037924\n", " 6.91464528]\n", " [ 6.92029213 6.93896731 6.93794831 ..., 6.94105214 6.94581302\n", " 6.93479959]\n", " [ 6.94258489 6.94132069 6.93738101 ..., 6.95109387 6.94439441\n", " 6.96149157]\n", " ..., \n", " [ 8.63303575 8.6153931 8.62242329 ..., 8.60348853 8.61375744\n", " 8.62515753]\n", " [ 8.65670167 8.66375148 8.66798893 ..., 8.65346248 8.65856181\n", " 8.64789495]\n", " [ 8.7674598 8.76709683 8.7645547 ..., 8.78059364 8.7585914\n", " 8.76297732]]\n", "Buffer: 1800\n", "Pred: [[ 8.68953042 8.68353244 8.69167093 ..., 8.69226758 8.69669531\n", " 8.70359861]\n", " [ 8.66104825 8.66338749 8.68358337 ..., 8.67084048 8.68664223\n", " 8.67802482]\n", " [ 8.67468363 8.69245015 8.66828894 ..., 8.69130084 8.67790535\n", " 8.69542446]\n", " ..., \n", " [ 10.25132895 10.26123566 10.25052647 ..., 10.2702956 10.28387785\n", " 10.29072272]\n", " [ 10.18370737 10.17290369 10.18125306 ..., 10.2112286 10.21762469\n", " 10.21706292]\n", " [ 10.22958344 10.23782323 10.24337281 ..., 10.26467471 10.25519154\n", " 10.2341133 ]]\n", "Buffer: 2000\n", "Pred: [[ 10.22064293 10.22413787 10.24471743 ..., 10.27029812 10.2744557\n", " 10.28765738]\n", " [ 10.26516025 10.27459074 10.29442757 ..., 10.31496257 10.32870539\n", " 10.33393516]\n", " [ 10.12818121 10.13767282 10.16435904 ..., 10.23174691 10.25429594\n", " 10.27571162]\n", " ..., \n", " [ 11.64694204 11.67793627 11.71878894 ..., 11.72885817 11.73598723\n", " 11.74138426]\n", " [ 11.50646666 11.55801859 11.60061623 ..., 11.59712143 11.60710104\n", " 11.62519194]\n", " [ 11.66543188 11.70375594 11.72575794 ..., 11.7634877 11.80012102\n", " 11.80921948]]\n", "Buffer: 2200\n", "Pred: [[ 11.62959737 11.64537291 11.62913452 ..., 11.63915597 11.63946331\n", " 11.67432874]\n", " [ 11.51306747 11.4921517 11.48731226 ..., 11.48843655 11.5272199\n", " 11.53575298]\n", " [ 11.4459014 11.44132033 11.44303377 ..., 11.43963244 11.4371997\n", " 11.45553989]\n", " ..., \n", " [ 16.22239336 16.21976356 16.22826391 ..., 16.21574299 16.22293648\n", " 16.26595504]\n", " [ 15.98826989 16.00674066 16.03692572 ..., 16.0496106 16.10671921\n", " 16.11635139]\n", " [ 15.79752122 15.88073774 15.95919399 ..., 16.04615273 16.04535607\n", " 16.03367065]]\n", "Buffer: 2400\n", "Pred: [[ 16.04780654 16.10427504 16.15325971 ..., 16.21640137 16.23310984\n", " 16.24580039]\n", " [ 15.93923871 15.96865021 16.01241045 ..., 16.04899501 16.0097939\n", " 16.01058251]\n", " [ 15.95002904 15.99504448 16.00543129 ..., 16.08477758 16.0724383\n", " 16.01255977]\n", " ..., \n", " [ 20.43621626 20.48574881 20.53403285 ..., 20.5853136 20.65182418\n", " 20.70740506]\n", " [ 21.01478432 21.0377329 21.06384251 ..., 21.11292127 21.16689338\n", " 21.25102393]\n", " [ 20.80946572 20.84214892 20.83450899 ..., 20.87816108 20.94758599\n", " 20.97840243]]\n", "Buffer: 2600\n", "Pred: [[ 20.79530755 20.70031722 20.67570255 ..., 20.67175512 20.75003016\n", " 20.7424359 ]\n", " [ 20.51491535 20.51195086 20.47751748 ..., 20.61619501 20.61899275\n", " 20.71100874]\n", " [ 20.88903686 20.83145557 20.76382639 ..., 20.84093447 20.95482155\n", " 20.93470293]\n", " ..., \n", " [ 21.35898088 21.44310834 21.58442593 ..., 21.67728542 21.63729079\n", " 21.76718696]\n", " [ 21.02670418 21.22586046 21.36227848 ..., 21.31522747 21.4562707\n", " 21.61980196]\n", " [ 21.08453035 21.20775213 21.19865266 ..., 21.28921609 21.44822081\n", " 21.56667633]]\n", "Buffer: 2800\n", "Pred: [[ 20.44161666 20.44133304 20.50606671 ..., 20.78067392 20.83525299\n", " 20.88356921]\n", " [ 20.47831642 20.55669655 20.6800365 ..., 20.94345539 21.0255306\n", " 21.09250263]\n", " [ 20.0543866 20.24467179 20.42056851 ..., 20.71879315 20.80801567\n", " 20.8139791 ]\n", " ..., \n", " [ 25.55444964 25.73089496 25.78688107 ..., 25.83001772 25.87363941\n", " 25.94209486]\n", " [ 26.10683785 26.13568262 26.21882171 ..., 26.1706635 26.17482513\n", " 25.99067047]\n", " [ 25.78641012 25.93842086 25.87267253 ..., 26.02785251 25.8333293\n", " 25.74114593]]\n", "Buffer: 3000\n", "Pred: [[ 26.09202122 26.16659026 26.28513376 ..., 26.27827853 26.19880974\n", " 26.29279004]\n", " [ 27.09296713 27.16525979 27.07816223 ..., 26.79828223 26.82462005\n", " 26.80115994]\n", " [ 27.37426618 27.26991991 27.08514753 ..., 26.99525355 27.0364177\n", " 27.06762629]\n", " ..., \n", " [ 25.74252888 25.81395317 25.96051853 ..., 26.19018399 26.25012269\n", " 26.22686022]\n", " [ 24.28942298 24.55436301 24.86490981 ..., 25.19589939 25.32405251\n", " 25.35862108]\n", " [ 24.10812922 24.39599208 24.70467848 ..., 25.0249339 25.12917584\n", " 25.13941702]]\n", "Buffer: 3200\n", "Pred: [[ 23.89936317 24.16238987 24.37814933 ..., 24.6867283 24.73517262\n", " 24.9000166 ]\n", " [ 22.796028 23.03957929 23.36191281 ..., 23.95134918 24.05807653\n", " 24.32577573]\n", " [ 23.98201714 24.24346901 24.60352667 ..., 24.83600538 25.01300299\n", " 25.28700399]\n", " ..., \n", " [ 25.88867191 25.80319669 25.80762619 ..., 25.73744858 25.58444691\n", " 25.6317368 ]\n", " [ 25.74242634 25.69379746 25.73573117 ..., 25.64464014 25.67333293\n", " 25.64796163]\n", " [ 25.3468584 25.36760481 25.38439543 ..., 25.45652486 25.45199294\n", " 25.37327864]]\n", "Buffer: 3400\n", "Pred: [[ 25.98449668 25.98521208 25.95242912 ..., 25.89368463 25.88045388\n", " 25.93171006]\n", " [ 25.76105977 25.70375977 25.63967045 ..., 25.59240848 25.66132277\n", " 25.66463929]\n", " [ 25.23810548 25.19061044 25.23695191 ..., 25.46131797 25.38041014\n", " 25.40377967]\n", " ..., \n", " [ 26.24824289 26.17127915 26.07623138 ..., 25.84710184 25.78029758\n", " 25.70586174]\n", " [ 26.19759651 26.09744315 25.92235382 ..., 25.63588018 25.63291115\n", " 25.59553912]\n", " [ 25.77531313 25.60455853 25.42752481 ..., 25.30530249 25.33317719\n", " 25.22147558]]\n", "Buffer: 3600\n", "Pred: [[ 25.40656908 25.27074144 25.21409378 ..., 25.28521185 25.22632841\n", " 25.16945681]\n", " [ 25.18921491 25.07334629 25.05299874 ..., 24.94128607 24.95502997\n", " 24.95791613]\n", " [ 24.81985555 24.80298349 24.7612829 ..., 24.59692495 24.58690609\n", " 24.58263133]\n", " ..., \n", " [ 26.0389708 25.93263093 25.87256265 ..., 25.77298706 25.6439993\n", " 25.58368641]\n", " [ 26.56849541 26.50595118 26.36715477 ..., 26.37166457 26.3312083\n", " 26.14700985]\n", " [ 26.80613189 26.67530444 26.66849488 ..., 26.59946944 26.42169587\n", " 26.33018949]]\n", "Buffer: 3800\n", "Pred: [[ 26.06044987 26.12046614 26.05471894 ..., 25.93053422 25.96502619\n", " 25.96056563]\n", " [ 26.03326405 25.99975566 25.8123115 ..., 25.6606701 25.76405528\n", " 25.65340638]\n", " [ 26.56229083 26.42947167 26.36848794 ..., 26.51685341 26.46719925\n", " 26.41071161]\n", " ..., \n", " [ 21.28992895 21.33566945 21.43008967 ..., 21.71406469 21.85169081\n", " 21.92897556]\n", " [ 21.21583534 21.37312981 21.57666978 ..., 21.84861172 21.88918311\n", " 21.93881172]\n", " [ 21.1126037 21.34119817 21.47466187 ..., 21.63830162 21.80664827\n", " 21.87502314]]\n", "Buffer: 4000\n", "Pred: [[ 21.24389337 21.37252773 21.35683562 ..., 21.48408902 21.48832578\n", " 21.4263668 ]\n", " [ 21.22127677 21.24046477 21.34895607 ..., 21.41706179 21.37656328\n", " 21.35550317]\n", " [ 21.43282338 21.46888922 21.493978 ..., 21.51923313 21.50631784\n", " 21.53775008]\n", " ..., \n", " [ 26.79653366 26.64113656 26.49911428 ..., 26.25092122 26.10219452\n", " 25.9559183 ]\n", " [ 26.50290012 26.38396506 26.21567803 ..., 26.05643976 25.92729177\n", " 25.75297956]\n", " [ 26.49228551 26.2948515 26.14185587 ..., 25.91011466 25.7620661\n", " 25.60436813]]\n", "Buffer: 4200\n", "Pred: [[ 26.59862697 26.53265571 26.46607521 ..., 26.31185187 26.22269463\n", " 26.15406759]\n", " [ 26.55732047 26.49355051 26.42777149 ..., 26.2624713 26.21316348\n", " 26.13021364]\n", " [ 26.38850061 26.32645169 26.21572275 ..., 26.15394371 26.11911926\n", " 25.99641195]\n", " ..., \n", " [ 34.39713553 34.08620781 33.9011808 ..., 33.34027792 33.04665311\n", " 32.89668644]\n", " [ 33.98517109 33.82119053 33.5508494 ..., 33.05718995 32.86762085\n", " 32.58866132]\n", " [ 33.8906325 33.64126562 33.39516092 ..., 32.95667114 32.6643352\n", " 32.42929969]]\n", "Buffer: 4400\n", "Pred: [[ 34.41874727 34.43546507 34.39947704 ..., 34.34448666 34.32896368\n", " 34.34120397]\n", " [ 34.46582211 34.4089387 34.43652649 ..., 34.3424298 34.30309225\n", " 34.3895445 ]\n", " [ 34.59749054 34.58828052 34.57559093 ..., 34.53213034 34.55857317\n", " 34.6258566 ]\n", " ..., \n", " [ 39.55704137 39.59838257 39.602544 ..., 39.60300783 39.63200396\n", " 39.69585152]\n", " [ 40.46611222 40.43535902 40.40883545 ..., 40.43070392 40.44180509\n", " 40.54478546]\n", " [ 41.35119597 41.342732 41.31906462 ..., 41.47767905 41.55588714\n", " 41.5559466 ]]\n", "Buffer: 4600\n", "Pred: [[ 41.24501714 41.30563545 41.33906701 ..., 41.41231404 41.36247167\n", " 41.32137465]\n", " [ 41.55176282 41.61250172 41.6040215 ..., 41.5859052 41.4933257\n", " 41.49596777]\n", " [ 41.11082905 41.21096532 41.24008778 ..., 41.10885342 41.11014781\n", " 41.19066485]\n", " ..., \n", " [ 40.40333667 40.57757536 40.7444689 ..., 40.55767817 40.62361813\n", " 40.7688445 ]\n", " [ 39.63679228 39.85222014 39.7001448 ..., 39.82137182 39.90308844\n", " 39.89175773]\n", " [ 40.03398294 39.90566847 39.92936408 ..., 40.00273409 39.99056338\n", " 40.13290444]]\n", "Buffer: 4800\n", "Pred: [[ 40.57613285 40.36745876 40.34832271 ..., 40.14127925 40.25699571\n", " 40.17561628]\n", " [ 39.98152946 40.00012052 39.84018882 ..., 39.76283388 39.68356018\n", " 39.62743014]\n", " [ 40.65448136 40.47656975 40.40428358 ..., 40.32405542 40.34608955\n", " 40.51020122]\n", " ..., \n", " [ 40.70973214 40.82156695 40.94997294 ..., 41.05915738 41.2009332\n", " 41.24048475]\n", " [ 40.74221266 40.91247665 40.94516366 ..., 41.11094752 41.12695732\n", " 41.2238754 ]\n", " [ 40.51848579 40.63794176 40.6930074 ..., 40.83603721 40.96158001\n", " 41.20000058]]\n", "Buffer: 5000\n", "Pred: [[ 41.02840608 40.97742881 41.04879639 ..., 41.08703686 41.13259893\n", " 41.13751978]\n", " [ 41.06644308 41.14932577 41.14604797 ..., 41.28572476 41.31572252\n", " 41.31868877]\n", " [ 42.00121108 41.91105222 41.98860594 ..., 42.05340097 42.0514623\n", " 42.07459136]\n", " ..., \n", " [ 41.61889522 41.77265455 42.134165 ..., 42.26888054 42.27023834\n", " 42.27099558]\n", " [ 39.61382401 39.3572463 38.99373902 ..., 39.08954502 39.72855523\n", " 40.20378919]\n", " [ 39.26326568 38.77189241 38.68857487 ..., 38.98425831 39.33537682\n", " 39.83910962]]\n", "Buffer: 5200\n", "Pred: [[ 40.47205982 40.6031967 40.7555591 ..., 41.30306999 41.58849567\n", " 42.20678238]\n", " [ 40.53496451 40.74019047 40.91134542 ..., 41.1356297 41.85741949\n", " 42.23975788]\n", " [ 40.68819248 40.89227875 40.86005788 ..., 41.29318408 41.69474886\n", " 41.93568032]\n", " ..., \n", " [ 32.58236996 32.68722674 32.94694616 ..., 33.68935864 34.40763451\n", " 35.0411307 ]\n", " [ 34.11827593 34.29691869 34.56631295 ..., 35.77380712 36.1406701\n", " 36.65944805]\n", " [ 32.53922298 32.93070035 33.1267649 ..., 33.88362425 34.34724461\n", " 35.05498163]]\n", "Buffer: 5400\n", "Pred: [[ 31.52461716 31.57967856 31.70310795 ..., 31.60969549 31.97998058\n", " 31.76583509]\n", " [ 32.56237362 32.44398294 32.30184175 ..., 32.87763302 32.50008364\n", " 32.21124309]\n", " [ 32.08373777 32.0604223 32.18122015 ..., 32.3427488 31.88531891\n", " 32.15190584]\n", " ..., \n", " [ 36.47434384 36.56338542 36.61949077 ..., 36.48991746 36.31746724\n", " 36.40344402]\n", " [ 37.24605504 37.18514913 37.20037653 ..., 36.99259881 36.96397396\n", " 36.84186326]\n", " [ 37.03819783 37.07523111 37.0042887 ..., 36.83422073 36.62528101\n", " 36.64031558]]\n", "Buffer: 5600\n", "Pred: [[ 37.15097768 37.16165774 37.0631008 ..., 36.92139965 36.90713708\n", " 36.99238524]\n", " [ 36.81621957 36.81704608 36.83068939 ..., 36.76175825 36.76190017\n", " 36.74666901]\n", " [ 37.09933134 37.1138151 37.12286448 ..., 37.17231345 37.17322168\n", " 37.11568705]\n", " ..., \n", " [ 25.7344187 26.06591327 26.15460221 ..., 27.08788596 27.12449494\n", " 27.39248972]\n", " [ 22.49560126 22.71537861 22.34032905 ..., 22.91827229 22.94172241\n", " 24.24507425]\n", " [ 24.54302106 24.12607841 24.37067691 ..., 24.36400232 25.51053396\n", " 26.15846606]]\n", "Buffer: 5800\n", "Pred: [[ 24.79977904 24.69590721 24.0883611 ..., 24.91928808 25.20504994\n", " 25.25962951]\n", " [ 23.1419501 22.66726302 21.87925864 ..., 23.11620493 22.89603025\n", " 23.68080167]\n", " [ 23.12996329 22.22263254 23.34052642 ..., 23.00870146 23.76270941\n", " 23.85789826]\n", " ..., \n", " [ 35.2820164 35.36034423 35.48074954 ..., 35.78691612 35.82649512\n", " 35.96429514]\n", " [ 35.47454644 35.55712141 35.53895006 ..., 35.77111792 35.8272775\n", " 36.00105157]\n", " [ 35.59562223 35.77160935 35.9847767 ..., 36.14101777 36.22937931\n", " 36.35845682]]\n", "Buffer: 6000\n", "Pred: [[ 34.87543571 35.05866248 34.96081266 ..., 34.91188916 34.8865196\n", " 35.09534966]\n", " [ 34.07850517 34.09411023 33.94862945 ..., 33.7652154 33.70499976\n", " 34.01118595]\n", " [ 33.74560074 33.59630762 33.55275587 ..., 33.25894686 33.44248384\n", " 33.64523254]\n", " ..., \n", " [ 34.37043957 34.49072721 34.46713889 ..., 34.61641291 34.6316781\n", " 34.65009482]\n", " [ 34.34755901 34.44125379 34.69034084 ..., 34.58201637 34.64234545\n", " 34.57663455]\n", " [ 34.57448406 34.80322892 34.60662199 ..., 34.71353755 34.54698945\n", " 34.75533398]]\n", "Buffer: 6200\n", "Pred: [[ 34.48058576 34.46931947 34.39645689 ..., 34.56175966 34.60120682\n", " 34.6889119 ]\n", " [ 34.42459542 34.4041518 34.59273011 ..., 34.71655572 34.77569208\n", " 34.91001211]\n", " [ 34.02746584 34.17503955 34.19326864 ..., 34.41906863 34.49378041\n", " 34.54149122]\n", " ..., \n", " [ 34.26729796 34.33198393 34.52037656 ..., 34.26471212 34.32199879\n", " 34.43204531]\n", " [ 33.37651991 33.60677572 33.52148382 ..., 33.42863803 33.44812737\n", " 33.44797037]\n", " [ 33.77101123 33.70474743 33.57014533 ..., 33.57211048 33.6467882\n", " 33.75261216]]\n", "Buffer: 6400\n", "Pred: [[ 33.53133289 33.43869191 33.37263046 ..., 33.32649401 33.31416629\n", " 33.19199006]\n", " [ 33.46584109 33.39713333 33.33327354 ..., 33.28221668 33.15383874\n", " 33.13431947]\n", " [ 34.41622601 34.29761196 34.4366854 ..., 34.39820455 34.52023716\n", " 34.3539505 ]\n", " ..., \n", " [ 34.78692903 34.73536166 34.73454473 ..., 34.35468426 34.27153208\n", " 34.18379174]\n", " [ 35.01790079 34.99299477 34.80046662 ..., 34.59019432 34.47643505\n", " 34.32671027]\n", " [ 34.93577164 34.68553218 34.54299772 ..., 34.42529695 34.26793524\n", " 34.20209156]]\n", "Buffer: 6600\n", "Pred: [[ 34.97898179 34.98256211 35.07425527 ..., 35.19605749 35.29951325\n", " 35.34528396]\n", " [ 35.01624583 35.10178264 35.12680389 ..., 35.30594613 35.35298146\n", " 35.4299613 ]\n", " [ 34.93937399 34.9619017 35.07676871 ..., 35.17815547 35.28027676\n", " 35.31059197]\n", " ..., \n", " [ 44.10058135 43.8139945 43.50204997 ..., 42.79200923 42.46908938\n", " 42.18424781]\n", " [ 43.92034495 43.61468664 43.30103441 ..., 42.6139226 42.32034584\n", " 42.01517437]\n", " [ 44.03369297 43.71493941 43.41566069 ..., 42.70811157 42.40436291\n", " 42.15296897]]\n", "Buffer: 6800\n", "Pred: [[ 44.26824904 44.22815477 44.2189972 ..., 44.12417068 44.16232578\n", " 44.12297489]\n", " [ 43.86504688 43.81346145 43.79542729 ..., 43.81453745 43.80092968\n", " 43.78132118]\n", " [ 44.17142766 44.10927042 44.07602426 ..., 44.01900881 44.03224618\n", " 44.05145594]\n", " ..., \n", " [ 34.95488639 35.16294448 35.49386909 ..., 35.56308703 35.46595545\n", " 35.52188355]\n", " [ 36.1446683 36.4019933 36.67338125 ..., 36.68118139 36.80819138\n", " 36.84463694]\n", " [ 35.82839891 35.92646934 36.05010142 ..., 36.31325315 36.35564094\n", " 36.41780309]]\n" ] }, { "data": { "text/plain": [ "[array([[ 7.83601976, 7.84714155, 7.85292535, ..., 7.89987737,\n", " 7.91755521, 7.93865868],\n", " [ 7.85539551, 7.86158008, 7.87498252, ..., 7.90506271,\n", " 7.91740818, 7.93852032],\n", " [ 7.83170231, 7.84749588, 7.87738729, ..., 7.89285396,\n", " 7.91642424, 7.92424915],\n", " ..., \n", " [ 6.36738278, 6.39213824, 6.39270447, ..., 6.43798347,\n", " 6.45461204, 6.4751872 ],\n", " [ 6.42016386, 6.417325 , 6.42707883, ..., 6.47916005,\n", " 6.50267402, 6.51950021],\n", " [ 6.28080118, 6.27092368, 6.28282955, ..., 6.30547753,\n", " 6.3252951 , 6.3264697 ]]),\n", " array([[ 6.14075766, 6.11117589, 6.09574853, ..., 6.07217018,\n", " 6.07748552, 6.08070167],\n", " [ 6.21540435, 6.17492322, 6.17149764, ..., 6.1453285 ,\n", " 6.13813657, 6.14081275],\n", " [ 6.27753279, 6.27307459, 6.23843178, ..., 6.24830207,\n", " 6.24374508, 6.21901832],\n", " ..., \n", " [ 5.75919469, 5.78334022, 5.79923807, ..., 5.83008595,\n", " 5.859385 , 5.87740631],\n", " [ 5.76238715, 5.7892002 , 5.81412139, ..., 5.85030748,\n", " 5.88508911, 5.88637507],\n", " [ 5.78833298, 5.81875138, 5.83850427, ..., 5.88612816,\n", " 5.8986934 , 5.90478152]]),\n", " array([[ 5.7641509 , 5.79247187, 5.81926042, ..., 5.84616883,\n", " 5.86198088, 5.87727484],\n", " [ 5.8513131 , 5.86385014, 5.88638345, ..., 5.89063265,\n", " 5.90502758, 5.90804928],\n", " [ 5.9113665 , 5.92879268, 5.93253659, ..., 5.94752817,\n", " 5.95264971, 5.95534078],\n", " ..., \n", " [ 6.1998076 , 6.19815249, 6.22826773, ..., 6.25852243,\n", " 6.2950688 , 6.28322814],\n", " [ 6.19140054, 6.19932943, 6.23777417, ..., 6.25145184,\n", " 6.25277943, 6.24492933],\n", " [ 6.22481015, 6.25710477, 6.27123817, ..., 6.28618561,\n", " 6.29833129, 6.29616353]]),\n", " array([[ 6.1645113 , 6.1747009 , 6.17346569, ..., 6.14073882,\n", " 6.13655823, 6.15464913],\n", " [ 6.23869668, 6.22906726, 6.21064429, ..., 6.19525349,\n", " 6.199533 , 6.1829646 ],\n", " [ 5.94298817, 5.92847236, 5.91129748, ..., 5.89322178,\n", " 5.86434585, 5.87953873],\n", " ..., \n", " [ 8.94246533, 8.87626646, 8.89060421, ..., 8.84848815,\n", " 8.85793555, 8.86792794],\n", " [ 8.78322534, 8.79037462, 8.72943888, ..., 8.72055999,\n", " 8.7383812 , 8.68878426],\n", " [ 8.83433927, 8.76940226, 8.77364936, ..., 8.77248502,\n", " 8.72566135, 8.69839892]]),\n", " array([[ 8.67603806, 8.67084409, 8.65130791, ..., 8.67378925,\n", " 8.69676109, 8.69455006],\n", " [ 8.82830315, 8.8205379 , 8.86009166, ..., 8.87552595,\n", " 8.85568772, 8.84410872],\n", " [ 8.84748948, 8.84911858, 8.81238761, ..., 8.78189801,\n", " 8.75265697, 8.72581647],\n", " ..., \n", " [ 7.71616361, 7.7100549 , 7.68435219, ..., 7.6489673 ,\n", " 7.61926738, 7.60503466],\n", " [ 7.59805829, 7.59515854, 7.53381661, ..., 7.5060898 ,\n", " 7.47964638, 7.49137924],\n", " [ 7.54657369, 7.52483132, 7.53333146, ..., 7.50714863,\n", " 7.52033692, 7.5104685 ]]),\n", " array([[ 7.46215011, 7.4436282 , 7.43918656, ..., 7.5010726 ,\n", " 7.48113362, 7.48813435],\n", " [ 7.56216243, 7.57242677, 7.60962549, ..., 7.59408734,\n", " 7.58687173, 7.59213207],\n", " [ 7.55189234, 7.58738691, 7.61589834, ..., 7.60049142,\n", " 7.60064947, 7.60278131],\n", " ..., \n", " [ 6.19883297, 6.22711546, 6.24523835, ..., 6.30446123,\n", " 6.33864273, 6.33903875],\n", " [ 6.17836606, 6.19567673, 6.22059366, ..., 6.29335772,\n", " 6.30085317, 6.31700372],\n", " [ 6.30048133, 6.33373495, 6.37895762, ..., 6.41007597,\n", " 6.40794933, 6.42844116]]),\n", " array([[ 6.30754289, 6.34315541, 6.37136507, ..., 6.34725709,\n", " 6.3533664 , 6.36701006],\n", " [ 6.2183139 , 6.22645131, 6.20859811, ..., 6.19826357,\n", " 6.21393204, 6.22498325],\n", " [ 6.13231736, 6.11064193, 6.06756449, ..., 6.10864178,\n", " 6.12762316, 6.12009367],\n", " ..., \n", " [ 4.93362234, 4.93814477, 4.93428253, ..., 4.96908178,\n", " 4.9916257 , 5.0119479 ],\n", " [ 4.94855637, 4.96672313, 4.9753907 , ..., 5.01327007,\n", " 5.04827391, 5.06702398],\n", " [ 4.94109813, 4.95766805, 4.9861515 , ..., 5.00727657,\n", " 5.02994663, 5.03880748]]),\n", " array([[ 4.99871061, 5.02010571, 5.014281 , ..., 5.0026121 ,\n", " 4.99747618, 4.97557435],\n", " [ 5.15365698, 5.15594044, 5.1491617 , ..., 5.09127283,\n", " 5.05670229, 5.06074197],\n", " [ 5.15264849, 5.14912635, 5.12308927, ..., 5.05939273,\n", " 5.0643763 , 5.04887009],\n", " ..., \n", " [ 6.73631505, 6.69817443, 6.67661297, ..., 6.63990072,\n", " 6.64029307, 6.62941594],\n", " [ 6.80586543, 6.78280213, 6.77308604, ..., 6.73267206,\n", " 6.70165677, 6.68567721],\n", " [ 6.87717059, 6.8713965 , 6.85461032, ..., 6.80891943,\n", " 6.78659161, 6.7676666 ]]),\n", " array([[ 6.88960025, 6.895621 , 6.91178743, ..., 6.90648271,\n", " 6.91037924, 6.91464528],\n", " [ 6.92029213, 6.93896731, 6.93794831, ..., 6.94105214,\n", " 6.94581302, 6.93479959],\n", " [ 6.94258489, 6.94132069, 6.93738101, ..., 6.95109387,\n", " 6.94439441, 6.96149157],\n", " ..., \n", " [ 8.63303575, 8.6153931 , 8.62242329, ..., 8.60348853,\n", " 8.61375744, 8.62515753],\n", " [ 8.65670167, 8.66375148, 8.66798893, ..., 8.65346248,\n", " 8.65856181, 8.64789495],\n", " [ 8.7674598 , 8.76709683, 8.7645547 , ..., 8.78059364,\n", " 8.7585914 , 8.76297732]]),\n", " array([[ 8.68953042, 8.68353244, 8.69167093, ..., 8.69226758,\n", " 8.69669531, 8.70359861],\n", " [ 8.66104825, 8.66338749, 8.68358337, ..., 8.67084048,\n", " 8.68664223, 8.67802482],\n", " [ 8.67468363, 8.69245015, 8.66828894, ..., 8.69130084,\n", " 8.67790535, 8.69542446],\n", " ..., \n", " [ 10.25132895, 10.26123566, 10.25052647, ..., 10.2702956 ,\n", " 10.28387785, 10.29072272],\n", " [ 10.18370737, 10.17290369, 10.18125306, ..., 10.2112286 ,\n", " 10.21762469, 10.21706292],\n", " [ 10.22958344, 10.23782323, 10.24337281, ..., 10.26467471,\n", " 10.25519154, 10.2341133 ]]),\n", " array([[ 10.22064293, 10.22413787, 10.24471743, ..., 10.27029812,\n", " 10.2744557 , 10.28765738],\n", " [ 10.26516025, 10.27459074, 10.29442757, ..., 10.31496257,\n", " 10.32870539, 10.33393516],\n", " [ 10.12818121, 10.13767282, 10.16435904, ..., 10.23174691,\n", " 10.25429594, 10.27571162],\n", " ..., \n", " [ 11.64694204, 11.67793627, 11.71878894, ..., 11.72885817,\n", " 11.73598723, 11.74138426],\n", " [ 11.50646666, 11.55801859, 11.60061623, ..., 11.59712143,\n", " 11.60710104, 11.62519194],\n", " [ 11.66543188, 11.70375594, 11.72575794, ..., 11.7634877 ,\n", " 11.80012102, 11.80921948]]),\n", " array([[ 11.62959737, 11.64537291, 11.62913452, ..., 11.63915597,\n", " 11.63946331, 11.67432874],\n", " [ 11.51306747, 11.4921517 , 11.48731226, ..., 11.48843655,\n", " 11.5272199 , 11.53575298],\n", " [ 11.4459014 , 11.44132033, 11.44303377, ..., 11.43963244,\n", " 11.4371997 , 11.45553989],\n", " ..., \n", " [ 16.22239336, 16.21976356, 16.22826391, ..., 16.21574299,\n", " 16.22293648, 16.26595504],\n", " [ 15.98826989, 16.00674066, 16.03692572, ..., 16.0496106 ,\n", " 16.10671921, 16.11635139],\n", " [ 15.79752122, 15.88073774, 15.95919399, ..., 16.04615273,\n", " 16.04535607, 16.03367065]]),\n", " array([[ 16.04780654, 16.10427504, 16.15325971, ..., 16.21640137,\n", " 16.23310984, 16.24580039],\n", " [ 15.93923871, 15.96865021, 16.01241045, ..., 16.04899501,\n", " 16.0097939 , 16.01058251],\n", " [ 15.95002904, 15.99504448, 16.00543129, ..., 16.08477758,\n", " 16.0724383 , 16.01255977],\n", " ..., \n", " [ 20.43621626, 20.48574881, 20.53403285, ..., 20.5853136 ,\n", " 20.65182418, 20.70740506],\n", " [ 21.01478432, 21.0377329 , 21.06384251, ..., 21.11292127,\n", " 21.16689338, 21.25102393],\n", " [ 20.80946572, 20.84214892, 20.83450899, ..., 20.87816108,\n", " 20.94758599, 20.97840243]]),\n", " array([[ 20.79530755, 20.70031722, 20.67570255, ..., 20.67175512,\n", " 20.75003016, 20.7424359 ],\n", " [ 20.51491535, 20.51195086, 20.47751748, ..., 20.61619501,\n", " 20.61899275, 20.71100874],\n", " [ 20.88903686, 20.83145557, 20.76382639, ..., 20.84093447,\n", " 20.95482155, 20.93470293],\n", " ..., \n", " [ 21.35898088, 21.44310834, 21.58442593, ..., 21.67728542,\n", " 21.63729079, 21.76718696],\n", " [ 21.02670418, 21.22586046, 21.36227848, ..., 21.31522747,\n", " 21.4562707 , 21.61980196],\n", " [ 21.08453035, 21.20775213, 21.19865266, ..., 21.28921609,\n", " 21.44822081, 21.56667633]]),\n", " array([[ 20.44161666, 20.44133304, 20.50606671, ..., 20.78067392,\n", " 20.83525299, 20.88356921],\n", " [ 20.47831642, 20.55669655, 20.6800365 , ..., 20.94345539,\n", " 21.0255306 , 21.09250263],\n", " [ 20.0543866 , 20.24467179, 20.42056851, ..., 20.71879315,\n", " 20.80801567, 20.8139791 ],\n", " ..., \n", " [ 25.55444964, 25.73089496, 25.78688107, ..., 25.83001772,\n", " 25.87363941, 25.94209486],\n", " [ 26.10683785, 26.13568262, 26.21882171, ..., 26.1706635 ,\n", " 26.17482513, 25.99067047],\n", " [ 25.78641012, 25.93842086, 25.87267253, ..., 26.02785251,\n", " 25.8333293 , 25.74114593]]),\n", " array([[ 26.09202122, 26.16659026, 26.28513376, ..., 26.27827853,\n", " 26.19880974, 26.29279004],\n", " [ 27.09296713, 27.16525979, 27.07816223, ..., 26.79828223,\n", " 26.82462005, 26.80115994],\n", " [ 27.37426618, 27.26991991, 27.08514753, ..., 26.99525355,\n", " 27.0364177 , 27.06762629],\n", " ..., \n", " [ 25.74252888, 25.81395317, 25.96051853, ..., 26.19018399,\n", " 26.25012269, 26.22686022],\n", " [ 24.28942298, 24.55436301, 24.86490981, ..., 25.19589939,\n", " 25.32405251, 25.35862108],\n", " [ 24.10812922, 24.39599208, 24.70467848, ..., 25.0249339 ,\n", " 25.12917584, 25.13941702]]),\n", " array([[ 23.89936317, 24.16238987, 24.37814933, ..., 24.6867283 ,\n", " 24.73517262, 24.9000166 ],\n", " [ 22.796028 , 23.03957929, 23.36191281, ..., 23.95134918,\n", " 24.05807653, 24.32577573],\n", " [ 23.98201714, 24.24346901, 24.60352667, ..., 24.83600538,\n", " 25.01300299, 25.28700399],\n", " ..., \n", " [ 25.88867191, 25.80319669, 25.80762619, ..., 25.73744858,\n", " 25.58444691, 25.6317368 ],\n", " [ 25.74242634, 25.69379746, 25.73573117, ..., 25.64464014,\n", " 25.67333293, 25.64796163],\n", " [ 25.3468584 , 25.36760481, 25.38439543, ..., 25.45652486,\n", " 25.45199294, 25.37327864]]),\n", " array([[ 25.98449668, 25.98521208, 25.95242912, ..., 25.89368463,\n", " 25.88045388, 25.93171006],\n", " [ 25.76105977, 25.70375977, 25.63967045, ..., 25.59240848,\n", " 25.66132277, 25.66463929],\n", " [ 25.23810548, 25.19061044, 25.23695191, ..., 25.46131797,\n", " 25.38041014, 25.40377967],\n", " ..., \n", " [ 26.24824289, 26.17127915, 26.07623138, ..., 25.84710184,\n", " 25.78029758, 25.70586174],\n", " [ 26.19759651, 26.09744315, 25.92235382, ..., 25.63588018,\n", " 25.63291115, 25.59553912],\n", " [ 25.77531313, 25.60455853, 25.42752481, ..., 25.30530249,\n", " 25.33317719, 25.22147558]]),\n", " array([[ 25.40656908, 25.27074144, 25.21409378, ..., 25.28521185,\n", " 25.22632841, 25.16945681],\n", " [ 25.18921491, 25.07334629, 25.05299874, ..., 24.94128607,\n", " 24.95502997, 24.95791613],\n", " [ 24.81985555, 24.80298349, 24.7612829 , ..., 24.59692495,\n", " 24.58690609, 24.58263133],\n", " ..., \n", " [ 26.0389708 , 25.93263093, 25.87256265, ..., 25.77298706,\n", " 25.6439993 , 25.58368641],\n", " [ 26.56849541, 26.50595118, 26.36715477, ..., 26.37166457,\n", " 26.3312083 , 26.14700985],\n", " [ 26.80613189, 26.67530444, 26.66849488, ..., 26.59946944,\n", " 26.42169587, 26.33018949]]),\n", " array([[ 26.06044987, 26.12046614, 26.05471894, ..., 25.93053422,\n", " 25.96502619, 25.96056563],\n", " [ 26.03326405, 25.99975566, 25.8123115 , ..., 25.6606701 ,\n", " 25.76405528, 25.65340638],\n", " [ 26.56229083, 26.42947167, 26.36848794, ..., 26.51685341,\n", " 26.46719925, 26.41071161],\n", " ..., \n", " [ 21.28992895, 21.33566945, 21.43008967, ..., 21.71406469,\n", " 21.85169081, 21.92897556],\n", " [ 21.21583534, 21.37312981, 21.57666978, ..., 21.84861172,\n", " 21.88918311, 21.93881172],\n", " [ 21.1126037 , 21.34119817, 21.47466187, ..., 21.63830162,\n", " 21.80664827, 21.87502314]]),\n", " array([[ 21.24389337, 21.37252773, 21.35683562, ..., 21.48408902,\n", " 21.48832578, 21.4263668 ],\n", " [ 21.22127677, 21.24046477, 21.34895607, ..., 21.41706179,\n", " 21.37656328, 21.35550317],\n", " [ 21.43282338, 21.46888922, 21.493978 , ..., 21.51923313,\n", " 21.50631784, 21.53775008],\n", " ..., \n", " [ 26.79653366, 26.64113656, 26.49911428, ..., 26.25092122,\n", " 26.10219452, 25.9559183 ],\n", " [ 26.50290012, 26.38396506, 26.21567803, ..., 26.05643976,\n", " 25.92729177, 25.75297956],\n", " [ 26.49228551, 26.2948515 , 26.14185587, ..., 25.91011466,\n", " 25.7620661 , 25.60436813]]),\n", " array([[ 26.59862697, 26.53265571, 26.46607521, ..., 26.31185187,\n", " 26.22269463, 26.15406759],\n", " [ 26.55732047, 26.49355051, 26.42777149, ..., 26.2624713 ,\n", " 26.21316348, 26.13021364],\n", " [ 26.38850061, 26.32645169, 26.21572275, ..., 26.15394371,\n", " 26.11911926, 25.99641195],\n", " ..., \n", " [ 34.39713553, 34.08620781, 33.9011808 , ..., 33.34027792,\n", " 33.04665311, 32.89668644],\n", " [ 33.98517109, 33.82119053, 33.5508494 , ..., 33.05718995,\n", " 32.86762085, 32.58866132],\n", " [ 33.8906325 , 33.64126562, 33.39516092, ..., 32.95667114,\n", " 32.6643352 , 32.42929969]]),\n", " array([[ 34.41874727, 34.43546507, 34.39947704, ..., 34.34448666,\n", " 34.32896368, 34.34120397],\n", " [ 34.46582211, 34.4089387 , 34.43652649, ..., 34.3424298 ,\n", " 34.30309225, 34.3895445 ],\n", " [ 34.59749054, 34.58828052, 34.57559093, ..., 34.53213034,\n", " 34.55857317, 34.6258566 ],\n", " ..., \n", " [ 39.55704137, 39.59838257, 39.602544 , ..., 39.60300783,\n", " 39.63200396, 39.69585152],\n", " [ 40.46611222, 40.43535902, 40.40883545, ..., 40.43070392,\n", " 40.44180509, 40.54478546],\n", " [ 41.35119597, 41.342732 , 41.31906462, ..., 41.47767905,\n", " 41.55588714, 41.5559466 ]]),\n", " array([[ 41.24501714, 41.30563545, 41.33906701, ..., 41.41231404,\n", " 41.36247167, 41.32137465],\n", " [ 41.55176282, 41.61250172, 41.6040215 , ..., 41.5859052 ,\n", " 41.4933257 , 41.49596777],\n", " [ 41.11082905, 41.21096532, 41.24008778, ..., 41.10885342,\n", " 41.11014781, 41.19066485],\n", " ..., \n", " [ 40.40333667, 40.57757536, 40.7444689 , ..., 40.55767817,\n", " 40.62361813, 40.7688445 ],\n", " [ 39.63679228, 39.85222014, 39.7001448 , ..., 39.82137182,\n", " 39.90308844, 39.89175773],\n", " [ 40.03398294, 39.90566847, 39.92936408, ..., 40.00273409,\n", " 39.99056338, 40.13290444]]),\n", " array([[ 40.57613285, 40.36745876, 40.34832271, ..., 40.14127925,\n", " 40.25699571, 40.17561628],\n", " [ 39.98152946, 40.00012052, 39.84018882, ..., 39.76283388,\n", " 39.68356018, 39.62743014],\n", " [ 40.65448136, 40.47656975, 40.40428358, ..., 40.32405542,\n", " 40.34608955, 40.51020122],\n", " ..., \n", " [ 40.70973214, 40.82156695, 40.94997294, ..., 41.05915738,\n", " 41.2009332 , 41.24048475],\n", " [ 40.74221266, 40.91247665, 40.94516366, ..., 41.11094752,\n", " 41.12695732, 41.2238754 ],\n", " [ 40.51848579, 40.63794176, 40.6930074 , ..., 40.83603721,\n", " 40.96158001, 41.20000058]]),\n", " array([[ 41.02840608, 40.97742881, 41.04879639, ..., 41.08703686,\n", " 41.13259893, 41.13751978],\n", " [ 41.06644308, 41.14932577, 41.14604797, ..., 41.28572476,\n", " 41.31572252, 41.31868877],\n", " [ 42.00121108, 41.91105222, 41.98860594, ..., 42.05340097,\n", " 42.0514623 , 42.07459136],\n", " ..., \n", " [ 41.61889522, 41.77265455, 42.134165 , ..., 42.26888054,\n", " 42.27023834, 42.27099558],\n", " [ 39.61382401, 39.3572463 , 38.99373902, ..., 39.08954502,\n", " 39.72855523, 40.20378919],\n", " [ 39.26326568, 38.77189241, 38.68857487, ..., 38.98425831,\n", " 39.33537682, 39.83910962]]),\n", " array([[ 40.47205982, 40.6031967 , 40.7555591 , ..., 41.30306999,\n", " 41.58849567, 42.20678238],\n", " [ 40.53496451, 40.74019047, 40.91134542, ..., 41.1356297 ,\n", " 41.85741949, 42.23975788],\n", " [ 40.68819248, 40.89227875, 40.86005788, ..., 41.29318408,\n", " 41.69474886, 41.93568032],\n", " ..., \n", " [ 32.58236996, 32.68722674, 32.94694616, ..., 33.68935864,\n", " 34.40763451, 35.0411307 ],\n", " [ 34.11827593, 34.29691869, 34.56631295, ..., 35.77380712,\n", " 36.1406701 , 36.65944805],\n", " [ 32.53922298, 32.93070035, 33.1267649 , ..., 33.88362425,\n", " 34.34724461, 35.05498163]]),\n", " array([[ 31.52461716, 31.57967856, 31.70310795, ..., 31.60969549,\n", " 31.97998058, 31.76583509],\n", " [ 32.56237362, 32.44398294, 32.30184175, ..., 32.87763302,\n", " 32.50008364, 32.21124309],\n", " [ 32.08373777, 32.0604223 , 32.18122015, ..., 32.3427488 ,\n", " 31.88531891, 32.15190584],\n", " ..., \n", " [ 36.47434384, 36.56338542, 36.61949077, ..., 36.48991746,\n", " 36.31746724, 36.40344402],\n", " [ 37.24605504, 37.18514913, 37.20037653, ..., 36.99259881,\n", " 36.96397396, 36.84186326],\n", " [ 37.03819783, 37.07523111, 37.0042887 , ..., 36.83422073,\n", " 36.62528101, 36.64031558]]),\n", " array([[ 37.15097768, 37.16165774, 37.0631008 , ..., 36.92139965,\n", " 36.90713708, 36.99238524],\n", " [ 36.81621957, 36.81704608, 36.83068939, ..., 36.76175825,\n", " 36.76190017, 36.74666901],\n", " [ 37.09933134, 37.1138151 , 37.12286448, ..., 37.17231345,\n", " 37.17322168, 37.11568705],\n", " ..., \n", " [ 25.7344187 , 26.06591327, 26.15460221, ..., 27.08788596,\n", " 27.12449494, 27.39248972],\n", " [ 22.49560126, 22.71537861, 22.34032905, ..., 22.91827229,\n", " 22.94172241, 24.24507425],\n", " [ 24.54302106, 24.12607841, 24.37067691, ..., 24.36400232,\n", " 25.51053396, 26.15846606]]),\n", " array([[ 24.79977904, 24.69590721, 24.0883611 , ..., 24.91928808,\n", " 25.20504994, 25.25962951],\n", " [ 23.1419501 , 22.66726302, 21.87925864, ..., 23.11620493,\n", " 22.89603025, 23.68080167],\n", " [ 23.12996329, 22.22263254, 23.34052642, ..., 23.00870146,\n", " 23.76270941, 23.85789826],\n", " ..., \n", " [ 35.2820164 , 35.36034423, 35.48074954, ..., 35.78691612,\n", " 35.82649512, 35.96429514],\n", " [ 35.47454644, 35.55712141, 35.53895006, ..., 35.77111792,\n", " 35.8272775 , 36.00105157],\n", " [ 35.59562223, 35.77160935, 35.9847767 , ..., 36.14101777,\n", " 36.22937931, 36.35845682]]),\n", " array([[ 34.87543571, 35.05866248, 34.96081266, ..., 34.91188916,\n", " 34.8865196 , 35.09534966],\n", " [ 34.07850517, 34.09411023, 33.94862945, ..., 33.7652154 ,\n", " 33.70499976, 34.01118595],\n", " [ 33.74560074, 33.59630762, 33.55275587, ..., 33.25894686,\n", " 33.44248384, 33.64523254],\n", " ..., \n", " [ 34.37043957, 34.49072721, 34.46713889, ..., 34.61641291,\n", " 34.6316781 , 34.65009482],\n", " [ 34.34755901, 34.44125379, 34.69034084, ..., 34.58201637,\n", " 34.64234545, 34.57663455],\n", " [ 34.57448406, 34.80322892, 34.60662199, ..., 34.71353755,\n", " 34.54698945, 34.75533398]]),\n", " array([[ 34.48058576, 34.46931947, 34.39645689, ..., 34.56175966,\n", " 34.60120682, 34.6889119 ],\n", " [ 34.42459542, 34.4041518 , 34.59273011, ..., 34.71655572,\n", " 34.77569208, 34.91001211],\n", " [ 34.02746584, 34.17503955, 34.19326864, ..., 34.41906863,\n", " 34.49378041, 34.54149122],\n", " ..., \n", " [ 34.26729796, 34.33198393, 34.52037656, ..., 34.26471212,\n", " 34.32199879, 34.43204531],\n", " [ 33.37651991, 33.60677572, 33.52148382, ..., 33.42863803,\n", " 33.44812737, 33.44797037],\n", " [ 33.77101123, 33.70474743, 33.57014533, ..., 33.57211048,\n", " 33.6467882 , 33.75261216]]),\n", " array([[ 33.53133289, 33.43869191, 33.37263046, ..., 33.32649401,\n", " 33.31416629, 33.19199006],\n", " [ 33.46584109, 33.39713333, 33.33327354, ..., 33.28221668,\n", " 33.15383874, 33.13431947],\n", " [ 34.41622601, 34.29761196, 34.4366854 , ..., 34.39820455,\n", " 34.52023716, 34.3539505 ],\n", " ..., \n", " [ 34.78692903, 34.73536166, 34.73454473, ..., 34.35468426,\n", " 34.27153208, 34.18379174],\n", " [ 35.01790079, 34.99299477, 34.80046662, ..., 34.59019432,\n", " 34.47643505, 34.32671027],\n", " [ 34.93577164, 34.68553218, 34.54299772, ..., 34.42529695,\n", " 34.26793524, 34.20209156]]),\n", " array([[ 34.97898179, 34.98256211, 35.07425527, ..., 35.19605749,\n", " 35.29951325, 35.34528396],\n", " [ 35.01624583, 35.10178264, 35.12680389, ..., 35.30594613,\n", " 35.35298146, 35.4299613 ],\n", " [ 34.93937399, 34.9619017 , 35.07676871, ..., 35.17815547,\n", " 35.28027676, 35.31059197],\n", " ..., \n", " [ 44.10058135, 43.8139945 , 43.50204997, ..., 42.79200923,\n", " 42.46908938, 42.18424781],\n", " [ 43.92034495, 43.61468664, 43.30103441, ..., 42.6139226 ,\n", " 42.32034584, 42.01517437],\n", " [ 44.03369297, 43.71493941, 43.41566069, ..., 42.70811157,\n", " 42.40436291, 42.15296897]]),\n", " array([[ 44.26824904, 44.22815477, 44.2189972 , ..., 44.12417068,\n", " 44.16232578, 44.12297489],\n", " [ 43.86504688, 43.81346145, 43.79542729, ..., 43.81453745,\n", " 43.80092968, 43.78132118],\n", " [ 44.17142766, 44.10927042, 44.07602426, ..., 44.01900881,\n", " 44.03224618, 44.05145594],\n", " ..., \n", " [ 34.95488639, 35.16294448, 35.49386909, ..., 35.56308703,\n", " 35.46595545, 35.52188355],\n", " [ 36.1446683 , 36.4019933 , 36.67338125, ..., 36.68118139,\n", " 36.80819138, 36.84463694],\n", " [ 35.82839891, 35.92646934, 36.05010142, ..., 36.31325315,\n", " 36.35564094, 36.41780309]])]" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract predictions. \n", "# `execute_viz` function appends predictions to `predictions_800_off`.\n", "execute_viz(steps=35)\n", "predictions_800_off" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7000\n" ] }, { "data": { "text/plain": [ "[7.9386586814575164,\n", " 7.9385203217998654,\n", " 7.924249146106483,\n", " 7.9012922230048002,\n", " 7.9694966896901072,\n", " 7.9379066283830166,\n", " 7.9033436487609698,\n", " 7.9624823177768214,\n", " 7.9797023821236319,\n", " 8.0022559969116571,\n", " 8.0346843791736688,\n", " 8.0165273954102201,\n", " 8.0478567389874343,\n", " 8.0175318531137716,\n", " 8.1207363588667363,\n", " 8.3027967645395577,\n", " 8.3830578303821088,\n", " 8.433113998415509,\n", " 8.3680978432868649,\n", " 8.3471882088960587,\n", " 8.1889879868111279,\n", " 8.1863491608515524,\n", " 8.4241681316139623,\n", " 8.418357801473503,\n", " 8.5213388551832345,\n", " 8.3832348535517571,\n", " 8.1961078162144627,\n", " 8.0712254420379281,\n", " 7.8577649445467834,\n", " 7.8242291698881647,\n", " 7.8212444345901204,\n", " 7.7634359328571501,\n", " 7.9755668055243518,\n", " 8.0341178823289692,\n", " 7.8730729840682745,\n", " 7.8744687301826684,\n", " 8.053238381571342,\n", " 8.0217328098924536,\n", " 8.0288730932490946,\n", " 7.7596041420852018,\n", " 7.4272558470725887,\n", " 7.6045342781236531,\n", " 7.5541483821835058,\n", " 7.6921907134941465,\n", " 7.8355729543313348,\n", " 7.5862038765559605,\n", " 7.3265133334045185,\n", " 7.3144934353553213,\n", " 7.3500829043810105,\n", " 7.3510859878584105,\n", " 7.4282522099924249,\n", " 7.37924055474861,\n", " 7.4078716362153223,\n", " 7.6956865693848453,\n", " 7.7665983163343082,\n", " 7.7437631679078303,\n", " 7.9610193388681854,\n", " 8.0008118350990696,\n", " 7.9373151329248639,\n", " 8.0235718872491102,\n", " 7.9163579791227132,\n", " 7.8450888166196311,\n", " 7.7645800745267728,\n", " 7.8200451803263924,\n", " 7.8416342933699266,\n", " 7.8434909561987745,\n", " 7.8382321920669131,\n", " 7.8685651108740355,\n", " 7.9846856131927062,\n", " 8.0088802813229911,\n", " 7.865448180200195,\n", " 7.9267289179245122,\n", " 7.8755502361625265,\n", " 7.7186662517603013,\n", " 7.9199563662611236,\n", " 7.9782845980081945,\n", " 7.9338153744603783,\n", " 7.9077209067781506,\n", " 7.8805941466182876,\n", " 7.804253716325892,\n", " 7.8490373611580342,\n", " 7.8753824102238852,\n", " 7.8915503700812,\n", " 7.877443173859108,\n", " 7.7895429137186358,\n", " 7.7513428027436122,\n", " 7.7149487495816276,\n", " 7.5523444523503853,\n", " 7.4303808282737211,\n", " 7.0821673891687666,\n", " 5.9677691947169427,\n", " 5.1362911464119145,\n", " 5.5574575276275731,\n", " 5.2818650930534563,\n", " 5.4744499091450667,\n", " 5.3094567735870584,\n", " 5.0301794949373013,\n", " 5.1123900154976303,\n", " 5.4867000687863783,\n", " 5.2783798151050974,\n", " 5.5429067215920238,\n", " 5.2856207494813647,\n", " 5.2600922736577882,\n", " 5.3795144576904841,\n", " 5.3226781806849388,\n", " 5.3103028948361795,\n", " 5.3168439182747154,\n", " 5.3543485747309898,\n", " 5.3950525100208226,\n", " 5.345318857173547,\n", " 5.3198220678787616,\n", " 5.4133559584263899,\n", " 5.3843395565582757,\n", " 5.5139377070660638,\n", " 5.6091792949613897,\n", " 5.6306767189261206,\n", " 5.7172608253593893,\n", " 5.7317686562106136,\n", " 5.7259383971371589,\n", " 5.492856834747605,\n", " 5.4135359809230312,\n", " 5.362572896424024,\n", " 5.3979066269629259,\n", " 5.4939663284969846,\n", " 5.6319808805005911,\n", " 5.6411152173746011,\n", " 5.6758521237026303,\n", " 5.5963907615876654,\n", " 5.7466509186675312,\n", " 5.6527778014805667,\n", " 5.5911499582756194,\n", " 5.5687781331245487,\n", " 5.436830255690305,\n", " 5.4554965703535103,\n", " 5.7195278095458084,\n", " 5.7427309518459584,\n", " 5.9606798799275227,\n", " 5.9384989424349897,\n", " 5.7778385648473565,\n", " 5.6901466393148805,\n", " 5.9579184804955743,\n", " 5.8436553203737107,\n", " 6.1517305136993015,\n", " 6.1555230756912005,\n", " 6.1184355998723934,\n", " 6.0827708197957993,\n", " 5.8898273456745862,\n", " 5.8970123526576721,\n", " 5.8540476000295616,\n", " 5.8947781345973125,\n", " 5.8988450139051256,\n", " 5.9144672991265015,\n", " 5.8782232003546042,\n", " 5.751470819801737,\n", " 5.6138833941332598,\n", " 5.7077101710774851,\n", " 5.8340908464301124,\n", " 5.8308013171332744,\n", " 5.8327581835573215,\n", " 5.8519904841862331,\n", " 6.0306902932743567,\n", " 5.9651639045282563,\n", " 5.9024180741927683,\n", " 5.905254944675784,\n", " 5.8274018484276713,\n", " 5.8672542702992745,\n", " 5.7672014808651406,\n", " 5.6255380091922573,\n", " 5.6900808085978474,\n", " 5.7491740048308451,\n", " 5.7679135053569599,\n", " 5.7921074313959346,\n", " 5.7529437138169861,\n", " 5.7453901557846443,\n", " 5.7549205739837044,\n", " 5.6990868193754816,\n", " 5.8251170153492167,\n", " 5.8273091752505657,\n", " 5.7601002273888726,\n", " 5.8233125011725528,\n", " 5.7657222040117455,\n", " 5.6902374599790972,\n", " 5.7354608350877712,\n", " 5.8177104411454748,\n", " 5.7374285740025925,\n", " 5.7577836964541582,\n", " 5.9131196878942065,\n", " 6.0303952627288453,\n", " 6.0860790674585017,\n", " 6.523352100466882,\n", " 6.5176956991855022,\n", " 6.3933007815776115,\n", " 6.3835975284975151,\n", " 6.4078502003894933,\n", " 6.3637590570703271,\n", " 6.5949673261789989,\n", " 6.5455806185616092,\n", " 6.4751872040984262,\n", " 6.5195002081104771,\n", " 6.3264696997486274,\n", " 6.0807016653319117,\n", " 6.1408127499487541,\n", " 6.219018322737476,\n", " 6.1846771780336889,\n", " 6.1968487923542526,\n", " 6.1407414692183888,\n", " 6.1799911998396553,\n", " 6.2249280967765133,\n", " 6.2936809105776534,\n", " 6.4090332930535974,\n", " 6.6308038648546219,\n", " 6.5138903921171174,\n", " 6.5528890032476212,\n", " 6.4015883914550091,\n", " 6.4307525014847942,\n", " 6.6354753933126718,\n", " 6.6776841894164463,\n", " 6.6257053006111022,\n", " 6.5979277591120677,\n", " 6.5177020655583062,\n", " 6.4639621922853854,\n", " 6.5929430396185502,\n", " 6.563617827386925,\n", " 6.5303849680219948,\n", " 6.4995593769216953,\n", " 6.4649624362380536,\n", " 6.5278670522895528,\n", " 6.3057793819307069,\n", " 6.3585309273105324,\n", " 6.3898301080010222,\n", " 6.4109942891001142,\n", " 6.4160272080079075,\n", " 6.3290462648771761,\n", " 6.3437505325128685,\n", " 6.4353914645100412,\n", " 6.3846107235843457,\n", " 6.3345204796076109,\n", " 6.1894686224716153,\n", " 6.2157073895180872,\n", " 6.2486000973397662,\n", " 6.2368927411923671,\n", " 6.3432386601776685,\n", " 6.3379977975373869,\n", " 6.2523736617222125,\n", " 6.2063880601390755,\n", " 6.2004624044192527,\n", " 6.2274621198667726,\n", " 6.1435489361737572,\n", " 6.2171136176098889,\n", " 6.2762419621511194,\n", " 6.2082569735496369,\n", " 6.2434735901984277,\n", " 6.2285656669525213,\n", " 6.339001638826165,\n", " 6.2277719563607379,\n", " 6.2288520447248956,\n", " 6.2365459050280343,\n", " 6.0893816610840972,\n", " 6.0374599279207759,\n", " 6.0264675246684556,\n", " 6.1137591008762504,\n", " 6.0592710923379505,\n", " 5.9711306319655613,\n", " 5.7513733266823639,\n", " 5.5097994661055463,\n", " 5.6962746683908954,\n", " 5.6915570017391728,\n", " 5.6848440041287835,\n", " 5.6832244978989124,\n", " 5.750705474799763,\n", " 5.8113211743784543,\n", " 5.8016871915600143,\n", " 5.7972938306995045,\n", " 5.7972083706741921,\n", " 5.6453255228951784,\n", " 5.6749863348097422,\n", " 5.6996741266188975,\n", " 5.5675009534560509,\n", " 5.6021289487784047,\n", " 5.6022023704383761,\n", " 5.7929905942999023,\n", " 5.7600080508509617,\n", " 5.6803857091223806,\n", " 5.7001653286947382,\n", " 5.628053946210775,\n", " 5.7397504025018833,\n", " 5.7488611551852298,\n", " 5.7884776433347263,\n", " 5.7606480893760974,\n", " 5.7232441999062003,\n", " 5.7390025629080252,\n", " 5.6898914943350904,\n", " 5.5913404105092237,\n", " 5.6429359360509661,\n", " 5.6245308816441879,\n", " 5.521229202338322,\n", " 5.6702633627264429,\n", " 5.6416480607131669,\n", " 5.5986566920550347,\n", " 5.6172741720165718,\n", " 5.623086217458237,\n", " 5.6246064977859165,\n", " 5.6653931448466528,\n", " 5.4608227015679969,\n", " 5.3966586488185202,\n", " 5.4289511411185103,\n", " 5.2875078547393901,\n", " 5.2847054810112235,\n", " 5.3373680496133895,\n", " 5.2762810454534268,\n", " 5.2750734296384039,\n", " 5.1959823860369054,\n", " 5.2827342978803458,\n", " 5.4710139571842973,\n", " 5.3300835355799663,\n", " 5.2970530689830815,\n", " 5.2985848476817736,\n", " 5.3305227087546792,\n", " 5.3663885542906495,\n", " 5.3759541957048853,\n", " 5.4322736425101743,\n", " 5.4220898474720185,\n", " 5.3905230414398773,\n", " 5.4458845984162574,\n", " 5.4705876696812235,\n", " 5.3943082767618771,\n", " 5.4052406528858148,\n", " 5.4362040742190922,\n", " 5.4640939263392863,\n", " 5.4051135025701749,\n", " 5.4741070501629476,\n", " 5.3940804759505001,\n", " 5.2765852999039407,\n", " 5.2367939145239086,\n", " 5.3135569615141129,\n", " 5.3711115812887265,\n", " 5.3801967917752913,\n", " 5.3885632691395839,\n", " 5.3309693678326386,\n", " 5.2689932543645357,\n", " 5.3557540160890884,\n", " 5.5215502002634196,\n", " 5.6763469115788743,\n", " 5.6275036264298288,\n", " 5.5790831372201453,\n", " 5.5845116651871987,\n", " 5.5322635927423747,\n", " 5.4275658988016069,\n", " 5.55966343140968,\n", " 5.6129061682784309,\n", " 5.6316581658716416,\n", " 5.6462540778406192,\n", " 5.598136919296274,\n", " 5.6571348286246561,\n", " 5.6359001873908632,\n", " 5.7277202299609788,\n", " 5.6740846350932692,\n", " 5.6799922954066577,\n", " 5.7594643478485308,\n", " 5.7271271693549277,\n", " 5.7967246479761405,\n", " 5.6902957053480048,\n", " 5.7481933912333032,\n", " 5.776096557452461,\n", " 5.7617121849113948,\n", " 5.8393455241629351,\n", " 5.80851365580238,\n", " 5.7061651224700221,\n", " 5.7463001838894643,\n", " 5.8459095214973518,\n", " 5.8129708972445027,\n", " 5.7289537224283746,\n", " 5.7635394830243891,\n", " 5.7798753607785249,\n", " 5.760361358559452,\n", " 5.7352354078773384,\n", " 5.8116352347282767,\n", " 5.8429041999416764,\n", " 5.8151036523615378,\n", " 5.78702086082113,\n", " 5.8210950505819294,\n", " 5.8882420455009639,\n", " 5.8628804827773484,\n", " 6.0480230583435945,\n", " 6.0152743474266623,\n", " 6.0384255844887509,\n", " 6.0212276415691575,\n", " 5.9373441582168853,\n", " 5.9386898388109204,\n", " 5.7265774770612952,\n", " 5.8058124065141357,\n", " 5.8309416828753804,\n", " 5.806825128711198,\n", " 5.8609904639039865,\n", " 5.8103033501851673,\n", " 5.899075710547133,\n", " 5.8957817233608933,\n", " 5.8774063086352131,\n", " 5.8863750678935238,\n", " 5.9047815232695564,\n", " 5.8772748371652774,\n", " 5.9080492770719681,\n", " 5.9553407787211086,\n", " 5.9539213164617859,\n", " 5.9474931006010614,\n", " 5.8824304350302858,\n", " 5.9246357303227732,\n", " 5.9966512718277771,\n", " 6.1830447741650625,\n", " 6.1328495597379868,\n", " 6.1648144070294419,\n", " 6.0655478905435771,\n", " 6.1017832651817727,\n", " 6.1675802992967839,\n", " 6.31166827776266,\n", " 6.3916595515334285,\n", " 6.2929588458907384,\n", " 6.2468526458728455,\n", " 6.2573973153866271,\n", " 6.1080822368652887,\n", " 6.1801817058435908,\n", " 6.1874435542180333,\n", " 6.1350554316167294,\n", " 6.0669973296916986,\n", " 6.0475437364201925,\n", " 6.1625560989227237,\n", " 6.2144637250854933,\n", " 6.1360530433596248,\n", " 6.1616971499738726,\n", " 6.162973598717806,\n", " 6.0741678423814678,\n", " 6.0596716303603868,\n", " 6.0415228476100937,\n", " 6.0584859422238981,\n", " 6.0317058123404124,\n", " 5.9932926460257168,\n", " 6.0560413661011907,\n", " 6.0989702709130871,\n", " 6.2309670013660554,\n", " 6.2005731621493752,\n", " 6.165409758191255,\n", " 6.1311294067934936,\n", " 6.0906456841662697,\n", " 6.1555500785503412,\n", " 6.2323054704055867,\n", " 6.4881160956818604,\n", " 6.6342351373521016,\n", " 6.4570445412912933,\n", " 6.374866042053406,\n", " 6.4308433625467396,\n", " 6.3734370573236641,\n", " 6.403447253121584,\n", " 6.436265969918189,\n", " 6.3590009819059148,\n", " 6.3961207763580941,\n", " 6.1724201549414683,\n", " 6.2769197073061669,\n", " 6.2851321353926437,\n", " 6.3128169127219014,\n", " 6.3081045394587481,\n", " 6.1950091414851673,\n", " 6.1408556719668068,\n", " 6.0633621949316598,\n", " 6.0881970236622189,\n", " 6.1073369206643013,\n", " 5.9588693113440678,\n", " 6.1175907639469376,\n", " 6.1372956140145734,\n", " 6.2946030931079147,\n", " 6.3439360660854538,\n", " 6.2612379585117202,\n", " 6.2581080316719033,\n", " 6.2563896000018691,\n", " 6.2072595691211578,\n", " 6.3080575540291051,\n", " 6.3459910132352366,\n", " 6.3501889363780117,\n", " 6.3105526963978145,\n", " 6.2589070066815893,\n", " 6.2311725027310167,\n", " 6.2194414241635601,\n", " 6.2260806644232733,\n", " 6.064356694106241,\n", " 6.0569670539878011,\n", " 6.0360820200847431,\n", " 6.0306526347561622,\n", " 6.10963306558555,\n", " 6.1197242278900479,\n", " 6.0840258823582527,\n", " 6.0907413639358587,\n", " 6.1439408348711586,\n", " 6.1601605760088054,\n", " 6.0746815738915974,\n", " 5.8478758489596752,\n", " 5.9261799695037238,\n", " 5.9563496161725427,\n", " 5.9888011699820742,\n", " 5.9312195708763165,\n", " 5.9706724129626032,\n", " 5.9933024864740227,\n", " 5.9867673200914338,\n", " 5.8462362349739472,\n", " 5.9601537526648034,\n", " 5.9947582922473552,\n", " 6.003057420843751,\n", " 5.9846443000312544,\n", " 5.9730104266088659,\n", " 5.9523187593356379,\n", " 5.9463690122944595,\n", " 5.9744223995801935,\n", " 5.939786744728857,\n", " 5.9826215361874091,\n", " 5.939582759766612,\n", " 5.9888134963242665,\n", " 6.0360791469381807,\n", " 6.0211579926374652,\n", " 6.0288817551633125,\n", " 6.2414042550326423,\n", " 6.187163845104128,\n", " 6.0519093619819317,\n", " 6.0220627521113963,\n", " 6.1415191929752213,\n", " 6.2190798550543382,\n", " 6.1596585446123315,\n", " 6.3441677016418678,\n", " 6.3298115176501053,\n", " 6.4282979048325384,\n", " 6.424476408727922,\n", " 6.3926797855142894,\n", " 6.3964736095324044,\n", " 6.4309222704303508,\n", " 6.4470428619492104,\n", " 6.597800571524612,\n", " 6.5303882717602022,\n", " 6.5082277797125911,\n", " 6.4270857231766456,\n", " 6.4280481825694959,\n", " 6.4917677985204172,\n", " 6.5034166775764621,\n", " 6.5314044539772151,\n", " 6.4837296606382804,\n", " 6.454390809817399,\n", " 6.4916832355943601,\n", " 6.3007656633067493,\n", " 6.3505162371615906,\n", " 6.3777252483749614,\n", " 6.4000177307712267,\n", " 6.3744653862664533,\n", " 6.3526573477015882,\n", " 6.2204218426367976,\n", " 6.1601168553797816,\n", " 6.1357619573139441,\n", " 6.2557727237074658,\n", " 6.167742089596838,\n", " 6.2587492973828391,\n", " 6.1016104108795437,\n", " 6.1198442383635463,\n", " 6.1495833296504987,\n", " 6.2104622960501796,\n", " 6.3339111604633027,\n", " 6.2809282570745042,\n", " 6.2876242414388512,\n", " 6.2570788764030008,\n", " 6.2033487804901064,\n", " 6.2705460448924306,\n", " 6.2850656101178455,\n", " 6.2239789058183588,\n", " 6.3938717421479074,\n", " 6.5437888896406857,\n", " 6.4274379632568737,\n", " 6.4566503260158292,\n", " 6.5911292572436331,\n", " 6.5176506312491016,\n", " 6.4449942789804293,\n", " 6.5680941377072877,\n", " 6.4967225254631238,\n", " 6.5211041469949542,\n", " 6.5064621824467359,\n", " 6.480709131233116,\n", " 6.4566845587051755,\n", " 6.442262406589645,\n", " 6.4255759662780054,\n", " 6.2656812077390098,\n", " 6.3326998793779747,\n", " 6.3605331189005687,\n", " 6.4384627842288777,\n", " 6.4182529242340722,\n", " 6.3521926479634994,\n", " 6.3548838182060834,\n", " 6.2062493660098026,\n", " 6.1227534193402322,\n", " 6.1735780907244342,\n", " 6.257880580049517,\n", " 6.1715395829319775,\n", " 6.0964155135202915,\n", " 6.0253029706579264,\n", " 6.2279525671036495,\n", " 6.2832281365796092,\n", " 6.2449293342950511,\n", " 6.2961635274504477,\n", " 6.1546491347218293,\n", " 6.1829646029905909,\n", " 5.8795387296098784,\n", " 5.865635708643282,\n", " 5.9808970294014356,\n", " 6.1233726326465199,\n", " 6.1475733627792479,\n", " 6.1234137034614715,\n", " 6.1820172411545045,\n", " 6.110953603406112,\n", " 6.2301473140168921,\n", " 6.2909630759115895,\n", " 6.2296161049651513,\n", " 6.2549459330259936,\n", " 6.2373482726972096,\n", " 6.2483758660354063,\n", " 6.2136703788104803,\n", " 6.2104630252886199,\n", " 6.2273990415426388,\n", " 6.1087535952540319,\n", " 6.1529684320528553,\n", " 6.2322211056114236,\n", " 6.3655802441960807,\n", " 6.3948997516109243,\n", " 6.4151474712194867,\n", " 6.3925188418026853,\n", " 6.3981933492676948,\n", " 6.4473398997059395,\n", " 6.4744905381026641,\n", " 6.5274246800210474,\n", " 6.6117935320756445,\n", " 6.7194849132268351,\n", " 6.9065916735152806,\n", " 6.8569523133756771,\n", " 7.093649832044397,\n", " 7.1146614486597333,\n", " 6.959046564567581,\n", " 6.8971847300462166,\n", " 6.8718920640936894,\n", " 6.8892431482389771,\n", " 6.9093609232819713,\n", " 6.9342292846106615,\n", " 6.9050223003563289,\n", " 6.9568955928567116,\n", " 7.0621991213880539,\n", " 7.0144742262601563,\n", " 7.0902069086374846,\n", " 7.0928409263184173,\n", " 7.1213566373017265,\n", " 7.1094460551202339,\n", " 7.1264856050282752,\n", " 7.1652686399345962,\n", " 7.1338122136285271,\n", " 7.0767649887730579,\n", " 7.1709408285468967,\n", " 7.0153013499499597,\n", " 6.9989558882842946,\n", " 7.0219877913103499,\n", " 7.0231120950138726,\n", " 6.9636665248807326,\n", " 6.9282749508431589,\n", " 6.7439350370019371,\n", " 6.7192000359220172,\n", " 6.6714688249428402,\n", " 6.8086869327901827,\n", " 7.0141874165476148,\n", " 7.2015380502578346,\n", " 7.2104397327448781,\n", " 7.4097307244234658,\n", " 7.4994811937661714,\n", " 7.5383955652596217,\n", " 7.5257598243247159,\n", " 7.4643927526662219,\n", " 7.419925051358887,\n", " 7.4250818221390835,\n", " 7.3873811927391833,\n", " 7.2617188504588261,\n", " 7.3738386857080407,\n", " 7.4131889877389785,\n", " 7.6126550414636469,\n", " 7.5654094819681772,\n", " 7.5157908776454461,\n", " 7.4497562244839779,\n", " 7.493839352409922,\n", " 7.3213402218210568,\n", " 7.3789381935771532,\n", " 7.4106714634786703,\n", " 7.3807416312214471,\n", " 7.3334474425140224,\n", " 7.3750624522642534,\n", " 7.1372007727528706,\n", " 7.1606881584684707,\n", " 7.1803672350699816,\n", " 7.3255470613039817,\n", " 6.9943591433109242,\n", " 6.9732675095448213,\n", " 6.8783565835878377,\n", " 6.98031341771956,\n", " 7.0696330413615396,\n", " 7.1607723114095014,\n", " 7.0449926166276597,\n", " 7.0414901962793346,\n", " 6.9804239710971157,\n", " 6.9562096900860082,\n", " 7.0210273090914965,\n", " 7.09478413240039,\n", " 7.012461803934074,\n", " 7.0590005713322466,\n", " 7.0127664831919914,\n", " 6.9826575725121636,\n", " 6.7550987187868294,\n", " 6.8455421117176369,\n", " 6.8003112684943243,\n", " 6.8145724087410535,\n", " 6.7527017284933013,\n", " 6.7705005164856784,\n", " 6.7455740696794591,\n", " 6.7090450939173296,\n", " 6.8174593561024039,\n", " 6.7561050422959914,\n", " 6.7685896090459821,\n", " 6.7212441360700428,\n", " 6.708807593216064,\n", " 6.7271014922594778,\n", " 6.6292978617777898,\n", " 6.6781841107789504,\n", " 6.6371342050968041,\n", " 6.5761833234625202,\n", " 6.4605090722697485,\n", " 6.4744029638508964,\n", " 6.5284606295299801,\n", " 6.6373386089196691,\n", " 6.7138169997656982,\n", " 6.9934142385080982,\n", " 7.0033428700723244,\n", " 6.9731492025766002,\n", " 6.903985690267298,\n", " 6.7763511117355106,\n", " 6.9286200126673725,\n", " 7.1000447927499133,\n", " 7.09345535511933,\n", " 7.2090938424918161,\n", " 7.3875787563479705,\n", " 7.2690978663524817,\n", " 7.0616455045616044,\n", " 7.2840816049333386,\n", " 7.1494006615636714,\n", " 7.0909212815348575,\n", " 6.9756315987328001,\n", " 7.1271611782983575,\n", " 7.3403473742641054,\n", " 7.2331691094700741,\n", " 7.2989727139133107,\n", " 7.2774514255596436,\n", " 7.1840288370307857,\n", " 7.0735299963138605,\n", " 7.0574518530785344,\n", " 7.0548456751269599,\n", " 7.0500731962669914,\n", " 7.1972686558377195,\n", " 7.3031413984761011,\n", " 7.3132245486697238,\n", " 7.2868563605187724,\n", " 7.1813517379585132,\n", " 7.2056567321774807,\n", " 7.2221203604976587,\n", " 7.303063402287032,\n", " 7.249336357764383,\n", " 7.3215974293986239,\n", " 7.3465744795495835,\n", " 7.2623125996367914,\n", " 7.1832045239247577,\n", " 7.2110622174023407,\n", " 7.2747432344764427,\n", " 7.2988475355933025,\n", " 7.2356259413900874,\n", " 7.3840689407557019,\n", " 7.4877323004681422,\n", " 7.4430426064260899,\n", " 7.547895511610589,\n", " 7.853534332512754,\n", " 7.8830789750244366,\n", " 7.9047336433194486,\n", " 7.8181639151809526,\n", " 7.7530848964388044,\n", " 7.7092626693515918,\n", " 7.7095797684844971,\n", " 7.7309297661935092,\n", " 8.0600143476631736,\n", " 8.0258230337079368,\n", " 7.9327871394336968,\n", " 7.9057457729556697,\n", " 7.9818310553921803,\n", " 8.0143330004230258,\n", " 8.1754728516629527,\n", " 8.7407287580604791,\n", " 8.7995995090737971,\n", " 8.867927942283929,\n", " 8.6887842580518946,\n", " 8.6983989242566118,\n", " 8.6945500631580295,\n", " 8.8441087150870885,\n", " 8.7258164661630744,\n", " 8.8024823054114449,\n", " 8.7787939745095258,\n", " 9.1172342120167613,\n", " 9.2680542237316139,\n", " 9.1650955209006391,\n", " 9.1386373110298855,\n", " 9.1268413609690526,\n", " 9.1291268207320435,\n", " 8.6960030096486172,\n", " 8.4810024645889115,\n", " 8.706283715671649,\n", " 8.5742443320341302,\n", " 8.6031961396124572,\n", " 8.7541019859943603,\n", " 8.8981049343881047,\n", " 9.1199557942662679,\n", " 9.0634315212467769,\n", " 9.0170817804556229,\n", " 8.936251707707612,\n", " 8.8447979331690725,\n", " 8.8924510671958963,\n", " 8.7791685153324366,\n", " 8.8370720416319664,\n", " 8.9438054404963623,\n", " 9.0455691462537509,\n", " 8.9756613136340881,\n", " 8.9782988128879637,\n", " 8.7991923503918912,\n", " 8.8319758268649018,\n", " 8.5466183148245918,\n", " 8.4355524888700018,\n", " 8.3217873270650173,\n", " 8.2988388549950294,\n", " 8.3065803960319577,\n", " 8.4021592910978384,\n", " 8.5870749537099229,\n", " 8.6557881491832518,\n", " 9.0317099927321145,\n", " 9.3410479073250805,\n", " 9.257132790073296,\n", " 9.1141185430142784,\n", " 9.0238654242010554,\n", " 8.9053677378521812,\n", " 8.7573052001405713,\n", " 8.5919558075387883,\n", " 8.5357095650479451,\n", " 8.5705348340574652,\n", " 8.5261801217514801,\n", " 8.455678023573725,\n", " 8.5249425070290421,\n", " 8.5236222570150524,\n", " 8.503959955965918,\n", " 8.4779948267985503,\n", " 8.5056881023953892,\n", " 8.5034824896200227,\n", " 8.4185489627222019,\n", " 8.3965397334449214,\n", " 8.4227469652387406,\n", " 8.6334553104145435,\n", " 8.5475481715345403,\n", " 8.6156735357205285,\n", " 8.4874570101510827,\n", " 8.5989568750146859,\n", " 8.4999619685108208,\n", " 8.4278022041539309,\n", " 8.2926979585328304,\n", " 8.2191610967032283,\n", " 8.2553098502367348,\n", " 8.3580209656298372,\n", " 8.3849307979197505,\n", " 8.5128770984646316,\n", " 8.6936671450390151,\n", " 8.7351396771845877,\n", " 8.9359409027146697,\n", " 8.7476072646596776,\n", " 8.760362013563892,\n", " 8.7813559838988837,\n", " 8.7019480478778419,\n", " 8.5962504827029846,\n", " 8.3097775815425656,\n", " 8.314351872071196,\n", " 8.3332544217005697,\n", " 8.177403143787636,\n", " 8.0370736920569641,\n", " 7.9955316026275227,\n", " 8.1135286130677589,\n", " 8.0999295185881248,\n", " 8.1323977424668836,\n", " 8.353558473235843,\n", " 8.3627913457939798,\n", " 8.2982673496554327,\n", " 8.239889751083922,\n", " 8.2794388368821039,\n", " 8.3151318186046659,\n", " 8.2878949770880226,\n", " 8.3145224376038662,\n", " 8.3217347747334678,\n", " 8.361261606969169,\n", " 8.2482657385797076,\n", " 8.1191631477612169,\n", " 8.0100525958385624,\n", " 7.9554902189860819,\n", " 7.9742993581720665,\n", " 7.8767152934545601,\n", " 7.9164994418923085,\n", " 7.9365820129852329,\n", " 7.9045451847957189,\n", " 7.8760165254064036,\n", " 7.7042965921734918,\n", " 7.6322132401307998,\n", " 7.4676383587877524,\n", " 7.5858334540930628,\n", " 7.5291781811296907,\n", " 7.6096179559688855,\n", " 7.630509550688771,\n", " 7.6094201957988741,\n", " 7.6641815079352149,\n", " 7.6848412585378814,\n", " 7.8911170276009788,\n", " 7.8190718466675859,\n", " 7.8330305627793999,\n", " 7.9387218052772308,\n", " 8.1745324941517552,\n", " 8.384695869685924,\n", " 8.3652442732570798,\n", " 8.398681958037912,\n", " 8.2744982214506173,\n", " 8.1104570473939859,\n", " 8.0677158919087297,\n", " 7.9424607383238817,\n", " 8.0678176000176194,\n", " 8.0501612723240346,\n", " 8.1853794404798172,\n", " 8.2151225058013857,\n", " 8.246360084538626,\n", " 8.1941068591003763,\n", " 8.4321177951631796,\n", " 8.4877223086359805,\n", " 8.4042422357193338,\n", " 8.3366053381759251,\n", " 8.4219905782303037,\n", " 8.397206008853054,\n", " 8.3405830860297705,\n", " 8.3534836349673398,\n", " 8.3344084410325863,\n", " 8.3679514733665776,\n", " 8.2150060140943069,\n", " 8.2782100074905181,\n", " 8.0397544097686939,\n", " 7.8083451503724639,\n", " 7.7759904510853541,\n", " 7.7659556863017114,\n", " 7.8816910861271836,\n", " 7.8284873779591297,\n", " 7.7491053833361532,\n", " 7.7384166631877536,\n", " 7.7749151618182237,\n", " 7.6598817571314335,\n", " 7.7044720656557004,\n", " 7.802719627179008,\n", " 7.826875388505754,\n", " 7.8818001021853403,\n", " 7.8003511199652689,\n", " 7.857051034205834,\n", " 7.7864747767375251,\n", " 7.7862678309626165,\n", " 8.133128993505311,\n", " 8.2698183444256976,\n", " 8.4167558575348203,\n", " 8.383077049640633,\n", " 8.3904754222121767,\n", " 8.1992277975189083,\n", " 7.9908745958752458,\n", " 7.7943533392336741,\n", " 7.8640805782897685,\n", " 7.7894779972708088,\n", " 7.709607920105328,\n", " 7.8026737473801102,\n", " 7.777483277159015,\n", " 7.8719721434556789,\n", " 7.9582558942923693,\n", " 8.1224926189577289,\n", " 8.0170409399506521,\n", " 8.0704090637939032,\n", " 8.079237085478379,\n", " 7.8730172640258562,\n", " 7.958210582937153,\n", " 7.8145807161893641,\n", " 7.7035187304274677,\n", " 7.5795677889528887,\n", " 7.5396208640973876,\n", " 7.653805772717047,\n", " 7.3691106847887298,\n", " 7.5347701137935541,\n", " 7.6050346596434109,\n", " 7.4913792400688708,\n", " 7.5104684964167978,\n", " ...]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Put all 7-days-ahead predictions into an array\n", "predictions_800_7thday = []\n", "for array in predictions_800_off:\n", " for week_prediction in array:\n", " predictions_800_7thday.append(week_prediction[6]) \n", "print(len(predictions_800_7thday))\n", "predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Prepare dataframe for visualisation\n", "# There are 7000 predictions\n", "bp_final_predictions = bp_ftse[800+6:806+7000]\n", "bp_final_predictions.loc[:,'7d Ahead Pred'] = predictions_800_7thday" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nKcj/A8gycsG+fw1+AAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual adjusted close prices\n", "bp_final_predictions.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plotting predictions compared with actual prices\n", "# Only first 200 predictions\n", "bp_preds_200 = bp_final_predictions[:200]\n", "bp_preds_200.plot(y=['Adj. Close','7d Ahead Pred'], x='Date').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/README.md ================================================ # MLND Capstone Project ### Machine Learning for Trading - an Exploratory Study Topic: Predicting Daily Adjusted Close Stock Prices ## Libraries used * sklearn (modules used listed below) * metrics * multioutput * linear\_model * svm * numpy * pandas * seaborn * matplotlib.pyplot Machine Learning ## Core Files * `report.md`: The project report. * `2-analysis-code-py2.ipynb`: Code for Section II: Analysis. * `3-methodology-results-conclusion-code-py2.ipynb` Code for Sections III - V: Methodology, Results and Conclusion. * There are Python 3 alternatives to the code files: `2-analysis-code-py3.ipynb` and `3-methodology-results-conclusion-code-py2.ipynb`. #### IMPORTANT: When running the `.ipynb` code files, you must replace the file path '~/lse-data/lse/WIKI\_20160909.csv' with the filepath to your copy of the dataset. (See Datasets used for instructions on how to obtain the dataset.) This file path is included once per `.ipynb` file near the top. ## Supplementary Files ### Datasets used * `WIKI_20160909.csv`: LSE (London Stock Exchange) stock prices from varying start dates till 2016-09-09. The database is over 1GB, so I have not included it in this directory. You can download it [here](https://www.quandl.com/api/v3/databases/WIKI/data?api_key=8TrqQtPwBTq_dZFASKFQ&trim_end=2016-09-09). * `ftse100-figures.csv`: FTSE100 prices from 1984-04-02 - 2016-09-09. * `list-of-all-securities-ex-debt.csv`: List of companies listed on the LSE. ### Helper scripts * `google-finance-scraper-py2.py`: Python script I used to scrape FTSE100 data from Google Finance. Not needed to run project. Written in Python 3 and converted print statements. (Python 3 alternative available at`google-finance-scraper.py`.) ================================================ FILE: p5-capstone/archive/.ipynb_checkpoints/Discarded Notes-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Discarded Notes\n", "\n", "The conversations online talk about how rubbish algorithms like KNN are when KNN was the example using in the ML for Trading class.\n", "\n", "'Unless you model the **Implied Volatility** of the stock, you cannot predict price. The stock price is function a various factors which are mostly known except the Implied volatility. You can model the implied vol using algorithms like **SVM** but not KNN.'[Source: Anoop Vasant Kumar](https://www.quora.com/How-effective-is-the-k-Nearest-Neighbor-algorithm-for-stock-price-prediction).\n", "\n", "THe class also discusses **Reinforcement Learning**, but since your actions don't change the environment...I guess you can model your rewards to be the amount of profit you make. And then it would kind of make sense.\n", "\n", "\n", "'The only machine-learning algorithms that I have found to actually work in trading are linear algorithms such as various incarnations of regressions. Everything else tend to overfit to noise. Remember, unlike in fields such as image or speech recognition, financial time series has very low signal-to-noise ratio, and more problematically, probability distributions in finance are often non-stationary. You can read more about this subject in my book Quantitative Trading.' [Source: Ernest Chan, author of Algorithmic Trading](https://www.quora.com/How-can-I-get-started-applying-machine-learning-to-algorithmic-trading).\n", "\n", "- Logistic Regression\n", "- Random Forests (DTs)\n", "\n", "\n", "logistic regression (fastest) and random forests (most accurate usually). There are others, such as support vector machines, boosted decision trees,\n", "3-layer neural networks, but these don't offer as good accuracy as random forests (and often slower as \n", "well) or as much speed as logistic regression. In my opinion, the best choice would simply be" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Interesting but not important:\n", "\n", "For example, in May 2010 the US S&P 500 dropped 5-6% in value within minutes. This was suspected to be because of bots. This was called the Flash Crash. [People have theorised](https://en.wikipedia.org/wiki/2010_Flash_Crash#Early_theories) that the Flash Crash was exacerbated by high-frequency traders, although this seems to have been disproved. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Benchmark for Trading Performance\n", "\n", "This benchmark is for trade recommendations.\n", "\n", "The standard benchmark in trading is buying and holding an index fund, which in this case could be the FTSE100, the FTSE250 or the FTSE500.\n", "\n", "I will use **buying and holding the FTSE100 as the benchmark** in this project. The FTSE100 (the Financial Times Stock Exchange 100 Index) is a share index of the 100 companies listed on the London Stock Exchange with the highest market capitalisation (market cap). Market cap = number of shares x price of each share. ([Source: Wikipedia](https://en.wikipedia.org/wiki/FTSE_100_Index)).\n", "\n", "**Specific methodology** Specifically, I will compare the performance of the trade recommendation (percentage gain of e.g. buying on the open (opening prirce) the first day and selling on the close of the day the model recommends to sell) to the percentage gain obtained by buying the FTSE100 on the open of the first day after the training date range and selling on the day the model recommends to sell. This **normalises the amount of capital available and the timeframe** in which the user has access to that capital." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wrong?\n", "\n", "```I expect the solution to correlate with other stocks in the same industry to some extent. Competitors should correlate with each other when there is industry-positive or industry-negative information, and not correlate positively with each other when there is firm-specific information.\n", "\n", "I expect it to correlate with but be more volatile than the FTSE indices.```" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/Discarded Notes.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "(1) Engineer dataset semi from scratch \n", "\n", "New questions:\n", "(1) Interesting: How will you predict multiple things. Went to http://scikit-learn.org/stable/modules/multiclass.html." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Discarded Notes\n", "\n", "The conversations online talk about how rubbish algorithms like KNN are when KNN was the example using in the ML for Trading class.\n", "\n", "'Unless you model the **Implied Volatility** of the stock, you cannot predict price. The stock price is function a various factors which are mostly known except the Implied volatility. You can model the implied vol using algorithms like **SVM** but not KNN.'[Source: Anoop Vasant Kumar](https://www.quora.com/How-effective-is-the-k-Nearest-Neighbor-algorithm-for-stock-price-prediction).\n", "\n", "THe class also discusses **Reinforcement Learning**, but since your actions don't change the environment...I guess you can model your rewards to be the amount of profit you make. And then it would kind of make sense.\n", "\n", "\n", "'The only machine-learning algorithms that I have found to actually work in trading are linear algorithms such as various incarnations of regressions. Everything else tend to overfit to noise. Remember, unlike in fields such as image or speech recognition, financial time series has very low signal-to-noise ratio, and more problematically, probability distributions in finance are often non-stationary. You can read more about this subject in my book Quantitative Trading.' [Source: Ernest Chan, author of Algorithmic Trading](https://www.quora.com/How-can-I-get-started-applying-machine-learning-to-algorithmic-trading).\n", "\n", "- Logistic Regression\n", "- Random Forests (DTs)\n", "\n", "\n", "logistic regression (fastest) and random forests (most accurate usually). There are others, such as support vector machines, boosted decision trees,\n", "3-layer neural networks, but these don't offer as good accuracy as random forests (and often slower as \n", "well) or as much speed as logistic regression. In my opinion, the best choice would simply be" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "FTSE figures\n", "\n", "\n", "7d\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]\n", "\n", "10d\n", "Mean daily error: [1.5306776509003057, 2.2298791354555303, 2.7432372747440339, 3.1872661210768669, 3.5736081411533376, 3.9102527805700995, 4.2356347997498514]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\"\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (no FTSE)7d (FTSE)10d (no FTSE)10d (FTSE)
11.669\"array1[0]1.7321.751
22.422\"array1[0]2.5432.467
32.968\"2.938\"3.1382.978
43.407\"3.424\"3.5793.479
53.834\"3.881\"3.9393.946
64.230\"4.294\"4.2694.368
74.590\"4.702\"4.5434.816
\n", "\n", "\n", "Mean daily error: [1.5184268057845014, 2.2215656688134744, 2.7330139530667314, 3.1790905154664935, 3.5454918293235806, 3.8569998349796148, 4.1624413332682346]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Refinement 2.1\n", "\n", "#### TODO: DELETE THIS AFTER USING FOR PLOT\n", "7d:\n", "1.669\n", "2.422\n", "2.968\n", "3.407\n", "3.834\n", "4.230\n", "4.590\n", "\n", "\n", "10d\n", "Mean daily error: [1.7321477061307597, 2.5432152188018913, 3.1383346165356416, 3.5793927574194155, 3.9394427230724309, 4.2692644737508925, 4.5432050435026108]\n", "\n", "14 days:\n", "Mean daily error: [1.7285404855953252, 2.5255007498628097, 3.1026280963920607, 3.5862999911658147, 4.0020669863612239, 4.3722863441980762, 4.701971393685997]\n", "\n", "21 days:\n", "Mean daily error: [1.7458324393865607, 2.5550697635040556, 3.1130306876040765, 3.5859111257648624, 3.9906346379964006, 4.3416348748811986, 4.6578080578960108]\n", "\n", "30 days:\n", "Mean daily error: [1.7839163888017815, 2.593162562286222, 3.1521417303676622, 3.6325948299484372, 4.0479378120671301, 4.3916975345657692, 4.7046907424412074]\n", "\n", "100 days:\n", "Mean daily error: [1.9238550915564432, 2.7676076433106056, 3.3695076303415705, 3.8902423145616098, 4.3550552824867319, 4.7687380251335467, 5.1629268283684322]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualisation 2: Plotting error for each day compared with percentage variation\n", "\n", "This graph visualises the 7th-day predictions compared with day-on-day percentage variation. The purpose is to see if predictions are less accurte when day-on-day percentage variation is greater.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### CUT: 2.1.2 X-day running averages (Cut down the number of features but try to provide the same information)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Interesting but not important:\n", "\n", "For example, in May 2010 the US S&P 500 dropped 5-6% in value within minutes. This was suspected to be because of bots. This was called the Flash Crash. [People have theorised](https://en.wikipedia.org/wiki/2010_Flash_Crash#Early_theories) that the Flash Crash was exacerbated by high-frequency traders, although this seems to have been disproved. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Benchmark for Trading Performance\n", "\n", "This benchmark is for trade recommendations.\n", "\n", "The standard benchmark in trading is buying and holding an index fund, which in this case could be the FTSE100, the FTSE250 or the FTSE500.\n", "\n", "I will use **buying and holding the FTSE100 as the benchmark** in this project. The FTSE100 (the Financial Times Stock Exchange 100 Index) is a share index of the 100 companies listed on the London Stock Exchange with the highest market capitalisation (market cap). Market cap = number of shares x price of each share. ([Source: Wikipedia](https://en.wikipedia.org/wiki/FTSE_100_Index)).\n", "\n", "**Specific methodology** Specifically, I will compare the performance of the trade recommendation (percentage gain of e.g. buying on the open (opening prirce) the first day and selling on the close of the day the model recommends to sell) to the percentage gain obtained by buying the FTSE100 on the open of the first day after the training date range and selling on the day the model recommends to sell. This **normalises the amount of capital available and the timeframe** in which the user has access to that capital." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wrong?\n", "\n", "```I expect the solution to correlate with other stocks in the same industry to some extent. Competitors should correlate with each other when there is industry-positive or industry-negative information, and not correlate positively with each other when there is firm-specific information.\n", "\n", "I expect it to correlate with but be more volatile than the FTSE indices.```" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/III. Methodology - Code-Copy1.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology: Code" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import modules\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Data Preprocessing" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "# Data Preprocessing: adding header to CSV\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.1 Examining Abnormalities" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Need to investigate previous observation that Opening, High, Low, Close prices have minimum of 0." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047195ARWR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047196ARWR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047197ARWR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047198ARWR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047199ARWR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
1047200ARWR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
7608983LFVN2003-04-300.00.000.00.006800.00.01.00.00.000.00.00000014.285714
7608984LFVN2003-05-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608985LFVN2003-05-020.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608986LFVN2003-05-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608987LFVN2003-05-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608988LFVN2003-05-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608989LFVN2003-05-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608990LFVN2003-05-090.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608991LFVN2003-05-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608992LFVN2003-05-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
9330994NUTR2008-09-120.00.000.012.150.00.01.00.00.000.011.4263550.000000
13614062VTNR2002-01-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614063VTNR2002-01-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614064VTNR2002-01-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614065VTNR2002-01-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614066VTNR2002-01-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614067VTNR2002-02-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614068VTNR2002-02-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614069VTNR2002-02-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614070VTNR2002-02-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614071VTNR2002-02-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
.............................................
13614242VTNR2002-10-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614243VTNR2002-10-140.00.000.00.0048000.00.01.00.00.000.00.000000800.000000
13614244VTNR2002-10-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614245VTNR2002-10-160.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614246VTNR2002-10-170.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614247VTNR2002-10-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614248VTNR2002-10-210.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614249VTNR2002-10-220.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614250VTNR2002-10-230.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614251VTNR2002-10-240.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614252VTNR2002-10-250.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614253VTNR2002-10-280.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614254VTNR2002-10-290.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614255VTNR2002-10-300.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614256VTNR2002-10-310.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614257VTNR2002-11-010.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614258VTNR2002-11-040.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614259VTNR2002-11-050.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614260VTNR2002-11-060.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614261VTNR2002-11-070.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614262VTNR2002-11-080.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614263VTNR2002-11-110.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614264VTNR2002-11-120.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614265VTNR2002-11-130.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614266VTNR2002-11-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614267VTNR2002-11-150.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614268VTNR2002-11-180.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614269VTNR2002-11-190.00.000.00.000.00.01.00.00.000.00.0000000.000000
13614270VTNR2002-11-200.00.000.00.0024000.00.01.00.00.000.00.000000400.000000
13614271VTNR2002-11-210.00.020.00.0224000.00.01.00.01.200.01.200000400.000000
\n", "

225 rows × 14 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1047193 ARWR 2002-10-11 0.0 0.00 0.0 0.00 65000.0 0.0 \n", "1047194 ARWR 2002-10-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047195 ARWR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047196 ARWR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047197 ARWR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047198 ARWR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047199 ARWR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "1047200 ARWR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608936 LFVN 2003-02-21 0.0 0.01 0.0 0.01 27200.0 0.0 \n", "7608983 LFVN 2003-04-30 0.0 0.00 0.0 0.00 6800.0 0.0 \n", "7608984 LFVN 2003-05-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608985 LFVN 2003-05-02 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608986 LFVN 2003-05-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608987 LFVN 2003-05-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608988 LFVN 2003-05-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608989 LFVN 2003-05-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608990 LFVN 2003-05-09 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608991 LFVN 2003-05-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "7608992 LFVN 2003-05-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "9330994 NUTR 2008-09-12 0.0 0.00 0.0 12.15 0.0 0.0 \n", "13614062 VTNR 2002-01-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614063 VTNR 2002-01-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614064 VTNR 2002-01-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614065 VTNR 2002-01-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614066 VTNR 2002-01-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614067 VTNR 2002-02-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614068 VTNR 2002-02-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614069 VTNR 2002-02-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614070 VTNR 2002-02-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614071 VTNR 2002-02-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "... ... ... ... ... ... ... ... ... \n", "13614242 VTNR 2002-10-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614243 VTNR 2002-10-14 0.0 0.00 0.0 0.00 48000.0 0.0 \n", "13614244 VTNR 2002-10-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614245 VTNR 2002-10-16 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614246 VTNR 2002-10-17 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614247 VTNR 2002-10-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614248 VTNR 2002-10-21 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614249 VTNR 2002-10-22 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614250 VTNR 2002-10-23 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614251 VTNR 2002-10-24 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614252 VTNR 2002-10-25 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614253 VTNR 2002-10-28 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614254 VTNR 2002-10-29 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614255 VTNR 2002-10-30 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614256 VTNR 2002-10-31 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614257 VTNR 2002-11-01 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614258 VTNR 2002-11-04 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614259 VTNR 2002-11-05 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614260 VTNR 2002-11-06 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614261 VTNR 2002-11-07 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614262 VTNR 2002-11-08 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614263 VTNR 2002-11-11 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614264 VTNR 2002-11-12 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614265 VTNR 2002-11-13 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614266 VTNR 2002-11-14 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614267 VTNR 2002-11-15 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614268 VTNR 2002-11-18 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614269 VTNR 2002-11-19 0.0 0.00 0.0 0.00 0.0 0.0 \n", "13614270 VTNR 2002-11-20 0.0 0.00 0.0 0.00 24000.0 0.0 \n", "13614271 VTNR 2002-11-21 0.0 0.02 0.0 0.02 24000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1047193 1.0 0.0 0.00 0.0 0.000000 100.000000 \n", "1047194 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047195 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047196 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047197 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047198 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047199 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "1047200 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608936 1.0 0.0 4.76 0.0 4.760000 57.142857 \n", "7608983 1.0 0.0 0.00 0.0 0.000000 14.285714 \n", "7608984 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608985 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608986 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608987 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608988 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608989 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608990 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608991 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "7608992 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "9330994 1.0 0.0 0.00 0.0 11.426355 0.000000 \n", "13614062 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614063 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614064 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614065 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614066 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614067 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614068 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614069 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614070 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614071 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "... ... ... ... ... ... ... \n", "13614242 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614243 1.0 0.0 0.00 0.0 0.000000 800.000000 \n", "13614244 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614245 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614246 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614247 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614248 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614249 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614250 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614251 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614252 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614253 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614254 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614255 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614256 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614257 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614258 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614259 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614260 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614261 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614262 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614263 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614264 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614265 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614266 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614267 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614268 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614269 1.0 0.0 0.00 0.0 0.000000 0.000000 \n", "13614270 1.0 0.0 0.00 0.0 0.000000 400.000000 \n", "13614271 1.0 0.0 1.20 0.0 1.200000 400.000000 \n", "\n", "[225 rows x 14 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['Open'] == 0]\n", "#['Symbol'].unique()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2 Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.1 Measures of variation" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Create additional features\n", "# These features are not used in the current model\n", "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']\n", "df.loc[:,'Percentage Variation'] = df.loc[:,'Daily Variation'] / df.loc[:,'Open'] * 100\n", "df.loc[:,'Adj. Daily Variation'] = df.loc[:,'Adj. High'] - df.loc[:,'Adj. Low']\n", "df.loc[:,'Adj. Percentage Variation'] = df.loc[:,'Adj. Daily Variation'] / df.loc[:,'Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2 Extracting specific stocks\n", "#### 1.2.2.1 BP" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.01.121.4640520.0291461.464052
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.01.251.6104100.0325291.610410
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.02.503.2467530.0650583.246753
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.01.001.3422820.0260231.342282
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00.761.0117150.0197781.011715
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1923099 1.12 1.464052 0.029146 \n", "1923100 1.25 1.610410 0.032529 \n", "1923101 2.50 3.246753 0.065058 \n", "1923102 1.00 1.342282 0.026023 \n", "1923103 0.76 1.011715 0.019778 \n", "\n", " Adj. Percentage Variation \n", "1923099 1.464052 \n", "1923100 1.610410 \n", "1923101 3.246753 \n", "1923102 1.342282 \n", "1923103 1.011715 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Extract BP data\n", "bp = df[df['Symbol'] == 'BP']\n", "bp.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.2 Stocks that are in the same group as BP:\n", "\n", "Found using the LSE stocks list (supplementary data source)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Company names and stock symbols\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Oil stocks in DF: ['GAIA']\n" ] } ], "source": [ "# See which stocks are in our dataset:\n", "oil_stocks = [\"SNP\", \"GAIA\", \"GAID\", \"GAZ\", \"81JK\", \"OGZD\", \"GDG\", \"98LQ\", \"HLPD\", \n", " \"LKOE\", \"LKOD\", \"LKOH\", \"MOLD\", \"MNMD\", \"05IS\", \"40XT\", \"ROSN\",\n", " \"RDSA\", \"RDSB\", \"SAC\", \"SGGD\", \"ATAD\"]\n", "oil_stocks_in_df = []\n", "for stock in oil_stocks:\n", " in_df = False\n", " if not df[df['Symbol'] == stock].empty:\n", " in_df = True\n", " oil_stocks_in_df.append(stock)\n", " # print(stock, in_df)\n", "print(\"Oil stocks in DF: \", oil_stocks_in_df)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
5391755GAIA1999-10-295.508.625.386.38895000.00.01.05.3031548.3114895.1874496.151659895000.03.2458.9090913.12404058.909091
5391756GAIA1999-11-016.626.946.506.88144900.00.01.06.3830696.6916176.2673646.633764144900.00.446.6465260.4242526.646526
5391757GAIA1999-11-026.916.946.506.62158000.00.01.06.6626906.6916176.2673646.383069158000.00.446.3675830.4242526.367583
5391758GAIA1999-11-036.566.756.566.6254500.00.01.06.3252176.5084176.3252176.38306954500.00.192.8963410.1832002.896341
5391759GAIA1999-11-046.626.696.566.5621000.00.01.06.3830696.4505646.3252176.32521721000.00.131.9637460.1253471.963746
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "5391755 GAIA 1999-10-29 5.50 8.62 5.38 6.38 895000.0 0.0 \n", "5391756 GAIA 1999-11-01 6.62 6.94 6.50 6.88 144900.0 0.0 \n", "5391757 GAIA 1999-11-02 6.91 6.94 6.50 6.62 158000.0 0.0 \n", "5391758 GAIA 1999-11-03 6.56 6.75 6.56 6.62 54500.0 0.0 \n", "5391759 GAIA 1999-11-04 6.62 6.69 6.56 6.56 21000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "5391755 1.0 5.303154 8.311489 5.187449 6.151659 895000.0 \n", "5391756 1.0 6.383069 6.691617 6.267364 6.633764 144900.0 \n", "5391757 1.0 6.662690 6.691617 6.267364 6.383069 158000.0 \n", "5391758 1.0 6.325217 6.508417 6.325217 6.383069 54500.0 \n", "5391759 1.0 6.383069 6.450564 6.325217 6.325217 21000.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "5391755 3.24 58.909091 3.124040 \n", "5391756 0.44 6.646526 0.424252 \n", "5391757 0.44 6.367583 0.424252 \n", "5391758 0.19 2.896341 0.183200 \n", "5391759 0.13 1.963746 0.125347 \n", "\n", " Adj. Percentage Variation \n", "5391755 58.909091 \n", "5391756 6.646526 \n", "5391757 6.367583 \n", "5391758 2.896341 \n", "5391759 1.963746 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gaia = df[df['Symbol'] == 'GAIA']\n", "gaia.head()\n", "# GAIA data is available from 1999-10-29 to 2016-09-09." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage Variation
1928868BP1999-10-2957.558.1257.3857.752688800.00.01.028.10684928.40991428.04819228.2290532688800.00.741.2869570.3617231.286957
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1928868 BP 1999-10-29 57.5 58.12 57.38 57.75 2688800.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1928868 1.0 28.106849 28.409914 28.048192 28.229053 \n", "\n", " Adj. Volume Daily Variation Percentage Variation \\\n", "1928868 2688800.0 0.74 1.286957 \n", "\n", " Adj. Daily Variation Adj. Percentage Variation \n", "1928868 0.361723 1.286957 " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.loc[bp['Date'] == '1999-10-29']" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "# Add GAIA figures to BP dataframe\n", "\n", "# GAIA data starts on 1999-10-29\n", "\n", "# Label for the BP row with date 1999-10-29\n", "bp_gaia_start = 1928868\n", "# Label for the GAIA row with date 1999-10-29\n", "gaia_start = 5391755\n", "\n", "data_to_copy = ['Date', 'Adj. Open', 'Adj. High', 'Adj. Low', 'Adj. Close']\n", "\n", "bp_gaia_intersect_length = 3753\n", "\n", "for i in range(bp_gaia_intersect_length):\n", " for col in data_to_copy:\n", " bp.loc[bp_gaia_start+i,'GAIA %s' % str(col)] = gaia.loc[gaia_start+i,'%s' % str(col)]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Symbol BP\n", "Date 2014-09-30\n", "Open 44.04\n", "High 44.22\n", "Low 43.8\n", "Close 43.95\n", "Volume 6.8345e+06\n", "Ex-Dividend 0\n", "Split Ratio 1\n", "Adj. Open 39.0862\n", "Adj. High 39.246\n", "Adj. Low 38.8732\n", "Adj. Close 39.0064\n", "Adj. Volume 6.8345e+06\n", "Daily Variation 0.42\n", "Percentage Variation 0.953678\n", "Adj. Daily Variation 0.372757\n", "Adj. Percentage Variation 0.953678\n", "GAIA Date 2014-09-30\n", "GAIA Adj. Open 6.61\n", "GAIA Adj. High 7.41\n", "GAIA Adj. Low 6.61\n", "GAIA Adj. Close 7.34\n", "Name: 1932620, dtype: object\n", "Symbol BP\n", "Date 2014-10-01\n", "Open 43.84\n", "High 44.14\n", "Low 43.57\n", "Close 43.68\n", "Volume 4.3236e+06\n", "Ex-Dividend 0\n", "Split Ratio 1\n", "Adj. Open 38.9087\n", "Adj. High 39.175\n", "Adj. Low 38.6691\n", "Adj. Close 38.7667\n", "Adj. Volume 4.3236e+06\n", "Daily Variation 0.57\n", "Percentage Variation 1.30018\n", "Adj. Daily Variation 0.505885\n", "Adj. Percentage Variation 1.30018\n", "GAIA Date NaN\n", "GAIA Adj. Open NaN\n", "GAIA Adj. High NaN\n", "GAIA Adj. Low NaN\n", "GAIA Adj. Close NaN\n", "Name: 1932621, dtype: object\n" ] } ], "source": [ "# OPTIONAL, MAY DELETE\n", "# Showing that `bp_gaia_intersect_length` is correct\n", "print(bp.loc[bp_gaia_start+bp_gaia_intersect_length-1])\n", "print(bp.loc[bp_gaia_start+bp_gaia_intersect_length])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.2.3 FTSE 100:\n", "\n", "Source: Scraped from Google Finance." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
02016-09-096858.706862.386762.306776.95
12016-09-086846.586889.646819.826858.70
22016-09-076826.056856.126814.876846.58
32016-09-066879.426887.926818.966826.05
42016-09-056894.606910.666867.086879.42
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 2016-09-09 6858.70 6862.38 6762.30 6776.95\n", "1 2016-09-08 6846.58 6889.64 6819.82 6858.70\n", "2 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "3 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "4 2016-09-05 6894.60 6910.66 6867.08 6879.42" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "ftse100_csv.head()" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sorted FTSE100 by date (ascending) to fit with LSE stock data\n", "\n", "# Date range from 1984-04-02 to 2016-09-09\n", "sorted_ftse100 = ftse100_csv.sort_values(by='Date')\n", "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...Adj. VolumeDaily VariationPercentage VariationAdj. Daily VariationAdj. Percentage VariationGAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. Close
1924931BP1984-04-0245.6246.3845.546.0209700.00.01.04.748742...838800.00.881.9289790.0916021.928979NaNNaNNaNNaNNaN
\n", "

1 rows × 23 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.5 46.0 209700.0 0.0 \n", "\n", " Split Ratio Adj. Open ... Adj. Volume \\\n", "1924931 1.0 4.748742 ... 838800.0 \n", "\n", " Daily Variation Percentage Variation Adj. Daily Variation \\\n", "1924931 0.88 1.928979 0.091602 \n", "\n", " Adj. Percentage Variation GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1924931 1.928979 NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close \n", "1924931 NaN NaN \n", "\n", "[1 rows x 23 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp[bp['Date'] == '1984-04-02']" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
81871984-04-021108.11108.11108.11108.1
81861984-04-031095.41095.41095.41095.4
81851984-04-041095.41095.41095.41095.4
81841984-04-051102.21102.21102.21102.2
81831984-04-061096.31096.31096.31096.3
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "8187 1984-04-02 1108.1 1108.1 1108.1 1108.1\n", "8186 1984-04-03 1095.4 1095.4 1095.4 1095.4\n", "8185 1984-04-04 1095.4 1095.4 1095.4 1095.4\n", "8184 1984-04-05 1102.2 1102.2 1102.2 1102.2\n", "8183 1984-04-06 1096.3 1096.3 1096.3 1096.3" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sorted_ftse100.head()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:288: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[key] = _infer_fill_value(value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:16: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1933114NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN2016-09-056894.606910.666867.086879.42
1933115NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN2016-09-066879.426887.926818.966826.05
1933116NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN2016-09-076826.056856.126814.876846.58
1933117NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN2016-09-086846.586889.646819.826858.70
1933118NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaN2016-09-096858.706862.386762.306776.95
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend Split Ratio \\\n", "1933114 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "1933115 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "1933116 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "1933117 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "1933118 NaN NaN NaN NaN NaN NaN NaN NaN NaN \n", "\n", " Adj. Open ... GAIA Date GAIA Adj. Open GAIA Adj. High \\\n", "1933114 NaN ... NaN NaN NaN \n", "1933115 NaN ... NaN NaN NaN \n", "1933116 NaN ... NaN NaN NaN \n", "1933117 NaN ... NaN NaN NaN \n", "1933118 NaN ... NaN NaN NaN \n", "\n", " GAIA Adj. Low GAIA Adj. Close FTSE Date FTSE Open FTSE High \\\n", "1933114 NaN NaN 2016-09-05 6894.60 6910.66 \n", "1933115 NaN NaN 2016-09-06 6879.42 6887.92 \n", "1933116 NaN NaN 2016-09-07 6826.05 6856.12 \n", "1933117 NaN NaN 2016-09-08 6846.58 6889.64 \n", "1933118 NaN NaN 2016-09-09 6858.70 6862.38 \n", "\n", " FTSE Low FTSE Close \n", "1933114 6867.08 6879.42 \n", "1933115 6818.96 6826.05 \n", "1933116 6814.87 6846.58 \n", "1933117 6819.82 6858.70 \n", "1933118 6762.30 6776.95 \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Add FTSE data to BP dataframe\n", "\n", "# FTSE data starts on 1984-04-02\n", "\n", "# Label for the BP row with date 1984-04-02\n", "bp_ftse_start = 1924931\n", "# Label for the GAIA row with date 1984-04-02\n", "ftse_start = 8187\n", "\n", "ftse_data_to_copy = ['Date', 'Open', 'High', 'Low', 'Close']\n", "\n", "ftse_gaia_intersect_length = len(ftse100_csv)\n", "\n", "for i in range(ftse_gaia_intersect_length):\n", " for col in ftse_data_to_copy:\n", " bp.loc[bp_ftse_start+i,'FTSE %s' % str(col)] = sorted_ftse100.loc[ftse_start-i,'%s' % str(col)]\n", "\n", "bp.tail()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "BP: 1984-04-23 FTSE: 1984-04-20\n", "BP: 1984-04-24 FTSE: 1984-04-23\n", "BP: 1984-04-25 FTSE: 1984-04-24\n", "BP: 1984-04-26 FTSE: 1984-04-25\n", "BP: 1984-04-27 FTSE: 1984-04-26\n", "BP: 1984-05-02 FTSE: 1984-05-03\n", "BP: 1984-05-03 FTSE: 1984-05-04\n", "BP: 1984-05-04 FTSE: 1984-05-08\n", "BP: 1984-05-07 FTSE: 1984-05-09\n", "BP: 1984-05-08 FTSE: 1984-05-10\n", "BP: 1984-05-09 FTSE: 1984-05-11\n", "BP: 1984-05-10 FTSE: 1984-05-14\n", "BP: 1984-05-11 FTSE: 1984-05-15\n", "BP: 1984-05-14 FTSE: 1984-05-16\n", "BP: 1984-05-15 FTSE: 1984-05-17\n", "BP: 1984-05-16 FTSE: 1984-05-18\n", "BP: 1984-05-17 FTSE: 1984-05-21\n", "BP: 1984-05-18 FTSE: 1984-05-22\n", "BP: 1984-05-21 FTSE: 1984-05-23\n", "BP: 1984-05-22 FTSE: 1984-05-24\n", "BP: 1984-05-23 FTSE: 1984-05-25\n", "BP: 1984-05-24 FTSE: 1984-05-30\n", "BP: 1984-05-25 FTSE: 1984-05-31\n", "BP: 1984-05-29 FTSE: 1984-06-01\n", "BP: 1984-05-30 FTSE: 1984-06-04\n", "BP: 1984-05-31 FTSE: 1984-06-05\n", "BP: 1984-06-01 FTSE: 1984-06-06\n", "BP: 1984-06-04 FTSE: 1984-06-07\n", "BP: 1984-06-05 FTSE: 1984-06-08\n", "BP: 1984-06-06 FTSE: 1984-06-11\n", "BP: 1984-06-07 FTSE: 1984-06-12\n", "BP: 1984-06-08 FTSE: 1984-06-13\n", "BP: 1984-06-11 FTSE: 1984-06-14\n", "BP: 1984-06-12 FTSE: 1984-06-15\n", "BP: 1984-06-13 FTSE: 1984-06-18\n", "BP: 1984-06-14 FTSE: 1984-06-19\n", "BP: 1984-06-15 FTSE: 1984-06-20\n", "BP: 1984-06-18 FTSE: 1984-06-21\n", "BP: 1984-06-19 FTSE: 1984-06-22\n", "BP: 1984-06-20 FTSE: 1984-06-25\n", "BP: 1984-06-21 FTSE: 1984-06-26\n", "BP: 1984-06-22 FTSE: 1984-06-27\n", "BP: 1984-06-25 FTSE: 1984-06-28\n", "BP: 1984-06-26 FTSE: 1984-06-29\n", "BP: 1984-06-27 FTSE: 1984-07-02\n", "BP: 1984-06-28 FTSE: 1984-07-03\n", "BP: 1984-06-29 FTSE: 1984-07-04\n", "BP: 1984-07-02 FTSE: 1984-07-05\n", "BP: 1984-07-03 FTSE: 1984-07-06\n", "BP: 1984-07-05 FTSE: 1984-07-09\n", "BP: 1984-07-06 FTSE: 1984-07-10\n", "BP: 1984-07-09 FTSE: 1984-07-11\n", "BP: 1984-07-10 FTSE: 1984-07-12\n", "BP: 1984-07-11 FTSE: 1984-07-13\n", "BP: 1984-07-12 FTSE: 1984-07-16\n", "BP: 1984-07-13 FTSE: 1984-07-17\n", "BP: 1984-07-16 FTSE: 1984-07-18\n", "BP: 1984-07-17 FTSE: 1984-07-19\n", "BP: 1984-07-18 FTSE: 1984-07-20\n", "BP: 1984-07-19 FTSE: 1984-07-23\n", "BP: 1984-07-20 FTSE: 1984-07-24\n", "BP: 1984-07-23 FTSE: 1984-07-25\n", "BP: 1984-07-24 FTSE: 1984-07-26\n", "BP: 1984-07-25 FTSE: 1984-07-27\n", "BP: 1984-07-26 FTSE: 1984-07-30\n", "BP: 1984-07-27 FTSE: 1984-07-31\n", "BP: 1984-07-30 FTSE: 1984-08-01\n", "BP: 1984-07-31 FTSE: 1984-08-02\n", "BP: 1984-08-01 FTSE: 1984-08-03\n", "BP: 1984-08-02 FTSE: 1984-08-06\n", "BP: 1984-08-03 FTSE: 1984-08-07\n", "BP: 1984-08-06 FTSE: 1984-08-08\n", "BP: 1984-08-07 FTSE: 1984-08-09\n", "BP: 1984-08-08 FTSE: 1984-08-10\n", "BP: 1984-08-09 FTSE: 1984-08-13\n", "BP: 1984-08-10 FTSE: 1984-08-14\n", "BP: 1984-08-13 FTSE: 1984-08-15\n", "BP: 1984-08-14 FTSE: 1984-08-16\n", "BP: 1984-08-15 FTSE: 1984-08-17\n", "BP: 1984-08-16 FTSE: 1984-08-20\n", "BP: 1984-08-17 FTSE: 1984-08-21\n", "BP: 1984-08-20 FTSE: 1984-08-22\n", "BP: 1984-08-21 FTSE: 1984-08-23\n", "BP: 1984-08-22 FTSE: 1984-08-24\n", "BP: 1984-08-23 FTSE: 1984-08-28\n", "BP: 1984-08-24 FTSE: 1984-08-29\n", "BP: 1984-08-27 FTSE: 1984-08-30\n", "BP: 1984-08-28 FTSE: 1984-08-31\n", "BP: 1984-08-29 FTSE: 1984-09-03\n", "BP: 1984-08-30 FTSE: 1984-09-04\n", "BP: 1984-08-31 FTSE: 1984-09-05\n", "BP: 1984-09-04 FTSE: 1984-09-06\n", "BP: 1984-09-05 FTSE: 1984-09-07\n", "BP: 1984-09-06 FTSE: 1984-09-10\n", "BP: 1984-09-07 FTSE: 1984-09-11\n", "BP: 1984-09-10 FTSE: 1984-09-12\n", "BP: 1984-09-11 FTSE: 1984-09-13\n", "BP: 1984-09-12 FTSE: 1984-09-14\n", "BP: 1984-09-13 FTSE: 1984-09-17\n", "BP: 1984-09-14 FTSE: 1984-09-18\n", "BP: 1984-09-17 FTSE: 1984-09-19\n", "BP: 1984-09-18 FTSE: 1984-09-20\n", "BP: 1984-09-19 FTSE: 1984-09-21\n", "BP: 1984-09-20 FTSE: 1984-09-24\n", "BP: 1984-09-21 FTSE: 1984-09-25\n", "BP: 1984-09-24 FTSE: 1984-09-26\n", "BP: 1984-09-25 FTSE: 1984-09-27\n", "BP: 1984-09-26 FTSE: 1984-09-28\n", "BP: 1984-09-27 FTSE: 1984-10-01\n", "BP: 1984-09-28 FTSE: 1984-10-02\n", "BP: 1984-10-01 FTSE: 1984-10-03\n", "BP: 1984-10-02 FTSE: 1984-10-04\n", "BP: 1984-10-03 FTSE: 1984-10-05\n", "BP: 1984-10-04 FTSE: 1984-10-08\n", "BP: 1984-10-05 FTSE: 1984-10-09\n", "BP: 1984-10-08 FTSE: 1984-10-10\n", "BP: 1984-10-09 FTSE: 1984-10-11\n", "BP: 1984-10-10 FTSE: 1984-10-12\n", "BP: 1984-10-11 FTSE: 1984-10-15\n", "BP: 1984-10-12 FTSE: 1984-10-16\n", "BP: 1984-10-15 FTSE: 1984-10-17\n", "BP: 1984-10-16 FTSE: 1984-10-18\n", "BP: 1984-10-17 FTSE: 1984-10-19\n", "BP: 1984-10-18 FTSE: 1984-10-22\n", "BP: 1984-10-19 FTSE: 1984-10-23\n", "BP: 1984-10-22 FTSE: 1984-10-24\n", "BP: 1984-10-23 FTSE: 1984-10-25\n", "BP: 1984-10-24 FTSE: 1984-10-26\n", "BP: 1984-10-25 FTSE: 1984-10-29\n", "BP: 1984-10-26 FTSE: 1984-10-30\n", "BP: 1984-10-29 FTSE: 1984-10-31\n", "BP: 1984-10-30 FTSE: 1984-11-01\n", "BP: 1984-10-31 FTSE: 1984-11-02\n", "BP: 1984-11-01 FTSE: 1984-11-05\n", "BP: 1984-11-02 FTSE: 1984-11-06\n", "BP: 1984-11-05 FTSE: 1984-11-07\n", "BP: 1984-11-06 FTSE: 1984-11-08\n", "BP: 1984-11-07 FTSE: 1984-11-09\n", "BP: 1984-11-08 FTSE: 1984-11-12\n", "BP: 1984-11-09 FTSE: 1984-11-13\n", "BP: 1984-11-12 FTSE: 1984-11-14\n", "BP: 1984-11-13 FTSE: 1984-11-15\n", "BP: 1984-11-14 FTSE: 1984-11-16\n", "BP: 1984-11-15 FTSE: 1984-11-19\n", "BP: 1984-11-16 FTSE: 1984-11-20\n", "BP: 1984-11-19 FTSE: 1984-11-21\n", "BP: 1984-11-20 FTSE: 1984-11-22\n", "BP: 1984-11-21 FTSE: 1984-11-23\n", "BP: 1984-11-23 FTSE: 1984-11-26\n", "BP: 1984-11-26 FTSE: 1984-11-27\n", "BP: 1984-11-27 FTSE: 1984-11-28\n", "BP: 1984-11-28 FTSE: 1984-11-29\n", "BP: 1984-11-29 FTSE: 1984-11-30\n", "BP: 1984-11-30 FTSE: 1984-12-03\n", "BP: 1984-12-03 FTSE: 1984-12-04\n", "BP: 1984-12-04 FTSE: 1984-12-05\n", "BP: 1984-12-05 FTSE: 1984-12-06\n", "BP: 1984-12-06 FTSE: 1984-12-07\n", "BP: 1984-12-07 FTSE: 1984-12-10\n", "BP: 1984-12-10 FTSE: 1984-12-11\n", "BP: 1984-12-11 FTSE: 1984-12-12\n", "BP: 1984-12-12 FTSE: 1984-12-13\n", "BP: 1984-12-13 FTSE: 1984-12-14\n", "BP: 1984-12-14 FTSE: 1984-12-17\n", "BP: 1984-12-17 FTSE: 1984-12-18\n", "BP: 1984-12-18 FTSE: 1984-12-19\n", "BP: 1984-12-19 FTSE: 1984-12-20\n", "BP: 1984-12-20 FTSE: 1984-12-21\n", "BP: 1984-12-21 FTSE: 1984-12-24\n", "BP: 1984-12-24 FTSE: 1984-12-27\n", "BP: 1984-12-26 FTSE: 1984-12-28\n", "BP: 1984-12-27 FTSE: 1984-12-31\n", "BP: 1984-12-28 FTSE: 1985-01-02\n", "BP: 1984-12-31 FTSE: 1985-01-03\n", "BP: 1985-01-02 FTSE: 1985-01-04\n", "BP: 1985-01-03 FTSE: 1985-01-07\n", "BP: 1985-01-04 FTSE: 1985-01-08\n", "BP: 1985-01-07 FTSE: 1985-01-09\n", "BP: 1985-01-08 FTSE: 1985-01-10\n", "BP: 1985-01-09 FTSE: 1985-01-11\n", "BP: 1985-01-10 FTSE: 1985-01-14\n", "BP: 1985-01-11 FTSE: 1985-01-15\n", "BP: 1985-01-14 FTSE: 1985-01-16\n", "BP: 1985-01-15 FTSE: 1985-01-17\n", "BP: 1985-01-16 FTSE: 1985-01-18\n", "BP: 1985-01-17 FTSE: 1985-01-21\n", "BP: 1985-01-18 FTSE: 1985-01-22\n", "BP: 1985-01-21 FTSE: 1985-01-23\n", "BP: 1985-01-22 FTSE: 1985-01-24\n", "BP: 1985-01-23 FTSE: 1985-01-25\n", "BP: 1985-01-24 FTSE: 1985-01-28\n", "BP: 1985-01-25 FTSE: 1985-01-29\n", "BP: 1985-01-28 FTSE: 1985-01-30\n", "BP: 1985-01-29 FTSE: 1985-01-31\n", "BP: 1985-01-30 FTSE: 1985-02-01\n", "BP: 1985-01-31 FTSE: 1985-02-04\n", "BP: 1985-02-01 FTSE: 1985-02-05\n", "BP: 1985-02-04 FTSE: 1985-02-06\n", "BP: 1985-02-05 FTSE: 1985-02-07\n", "BP: 1985-02-06 FTSE: 1985-02-08\n", "BP: 1985-02-07 FTSE: 1985-02-11\n", "BP: 1985-02-08 FTSE: 1985-02-12\n", "BP: 1985-02-11 FTSE: 1985-02-13\n", "BP: 1985-02-12 FTSE: 1985-02-14\n", "BP: 1985-02-13 FTSE: 1985-02-15\n", "BP: 1985-02-14 FTSE: 1985-02-18\n", "BP: 1985-02-15 FTSE: 1985-02-19\n", "BP: 1985-02-19 FTSE: 1985-02-20\n", "BP: 1985-02-20 FTSE: 1985-02-21\n", "BP: 1985-02-21 FTSE: 1985-02-22\n", "BP: 1985-02-22 FTSE: 1985-02-25\n", "BP: 1985-02-25 FTSE: 1985-02-26\n", "BP: 1985-02-26 FTSE: 1985-02-27\n", "BP: 1985-02-27 FTSE: 1985-02-28\n", "BP: 1985-02-28 FTSE: 1985-03-01\n", "BP: 1985-03-01 FTSE: 1985-03-04\n", "BP: 1985-03-04 FTSE: 1985-03-05\n", "BP: 1985-03-05 FTSE: 1985-03-06\n", "BP: 1985-03-06 FTSE: 1985-03-07\n", "BP: 1985-03-07 FTSE: 1985-03-08\n", "BP: 1985-03-08 FTSE: 1985-03-11\n", "BP: 1985-03-11 FTSE: 1985-03-12\n", "BP: 1985-03-12 FTSE: 1985-03-13\n", "BP: 1985-03-13 FTSE: 1985-03-14\n", "BP: 1985-03-14 FTSE: 1985-03-15\n", "BP: 1985-03-15 FTSE: 1985-03-18\n", "BP: 1985-03-18 FTSE: 1985-03-19\n", "BP: 1985-03-19 FTSE: 1985-03-20\n", "BP: 1985-03-20 FTSE: 1985-03-21\n", "BP: 1985-03-21 FTSE: 1985-03-22\n", "BP: 1985-03-22 FTSE: 1985-03-25\n", "BP: 1985-03-25 FTSE: 1985-03-26\n", "BP: 1985-03-26 FTSE: 1985-03-27\n", "BP: 1985-03-27 FTSE: 1985-03-28\n", "BP: 1985-03-28 FTSE: 1985-03-29\n", "BP: 1985-03-29 FTSE: 1985-04-01\n", "BP: 1985-04-01 FTSE: 1985-04-02\n", "BP: 1985-04-02 FTSE: 1985-04-03\n", "BP: 1985-04-03 FTSE: 1985-04-04\n", "BP: 1985-04-04 FTSE: 1985-04-09\n", "BP: 1985-04-08 FTSE: 1985-04-10\n", "BP: 1985-04-09 FTSE: 1985-04-11\n", "BP: 1985-04-10 FTSE: 1985-04-12\n", "BP: 1985-04-11 FTSE: 1985-04-15\n", "BP: 1985-04-12 FTSE: 1985-04-16\n", "BP: 1985-04-15 FTSE: 1985-04-17\n", "BP: 1985-04-16 FTSE: 1985-04-18\n", "BP: 1985-04-17 FTSE: 1985-04-19\n", "BP: 1985-04-18 FTSE: 1985-04-22\n", "BP: 1985-04-19 FTSE: 1985-04-23\n", "BP: 1985-04-22 FTSE: 1985-04-24\n", "BP: 1985-04-23 FTSE: 1985-04-25\n", "BP: 1985-04-24 FTSE: 1985-04-26\n", "BP: 1985-04-25 FTSE: 1985-04-29\n", "BP: 1985-04-26 FTSE: 1985-04-30\n", "BP: 1985-04-29 FTSE: 1985-05-01\n", "BP: 1985-04-30 FTSE: 1985-05-02\n", "BP: 1985-05-01 FTSE: 1985-05-03\n", "BP: 1985-05-02 FTSE: 1985-05-07\n", "BP: 1985-05-03 FTSE: 1985-05-08\n", "BP: 1985-05-06 FTSE: 1985-05-09\n", "BP: 1985-05-07 FTSE: 1985-05-10\n", "BP: 1985-05-08 FTSE: 1985-05-13\n", "BP: 1985-05-09 FTSE: 1985-05-14\n", "BP: 1985-05-10 FTSE: 1985-05-15\n", "BP: 1985-05-13 FTSE: 1985-05-16\n", "BP: 1985-05-14 FTSE: 1985-05-17\n", "BP: 1985-05-15 FTSE: 1985-05-20\n", "BP: 1985-05-16 FTSE: 1985-05-21\n", "BP: 1985-05-17 FTSE: 1985-05-22\n", "BP: 1985-05-20 FTSE: 1985-05-23\n", "BP: 1985-05-21 FTSE: 1985-05-24\n", "BP: 1985-05-22 FTSE: 1985-05-28\n", "BP: 1985-05-23 FTSE: 1985-05-29\n", "BP: 1985-05-24 FTSE: 1985-05-30\n", "BP: 1985-05-28 FTSE: 1985-05-31\n", "BP: 1985-05-29 FTSE: 1985-06-03\n", "BP: 1985-05-30 FTSE: 1985-06-04\n", "BP: 1985-05-31 FTSE: 1985-06-05\n", "BP: 1985-06-03 FTSE: 1985-06-06\n", "BP: 1985-06-04 FTSE: 1985-06-07\n", "BP: 1985-06-05 FTSE: 1985-06-10\n", "BP: 1985-06-06 FTSE: 1985-06-11\n", "BP: 1985-06-07 FTSE: 1985-06-12\n", "BP: 1985-06-10 FTSE: 1985-06-13\n", "BP: 1985-06-11 FTSE: 1985-06-14\n", "BP: 1985-06-12 FTSE: 1985-06-17\n", "BP: 1985-06-13 FTSE: 1985-06-18\n", "BP: 1985-06-14 FTSE: 1985-06-19\n", "BP: 1985-06-17 FTSE: 1985-06-20\n", "BP: 1985-06-18 FTSE: 1985-06-21\n", "BP: 1985-06-19 FTSE: 1985-06-24\n", "BP: 1985-06-20 FTSE: 1985-06-25\n", "BP: 1985-06-21 FTSE: 1985-06-26\n", "BP: 1985-06-24 FTSE: 1985-06-27\n", "BP: 1985-06-25 FTSE: 1985-06-28\n", "BP: 1985-06-26 FTSE: 1985-07-01\n", "BP: 1985-06-27 FTSE: 1985-07-02\n", "BP: 1985-06-28 FTSE: 1985-07-03\n", "BP: 1985-07-01 FTSE: 1985-07-04\n", "BP: 1985-07-02 FTSE: 1985-07-05\n", "BP: 1985-07-03 FTSE: 1985-07-08\n", "BP: 1985-07-05 FTSE: 1985-07-09\n", "BP: 1985-07-08 FTSE: 1985-07-10\n", "BP: 1985-07-09 FTSE: 1985-07-11\n", "BP: 1985-07-10 FTSE: 1985-07-12\n", "BP: 1985-07-11 FTSE: 1985-07-15\n", "BP: 1985-07-12 FTSE: 1985-07-16\n", "BP: 1985-07-15 FTSE: 1985-07-17\n", "BP: 1985-07-16 FTSE: 1985-07-18\n", "BP: 1985-07-17 FTSE: 1985-07-19\n", "BP: 1985-07-18 FTSE: 1985-07-22\n", "BP: 1985-07-19 FTSE: 1985-07-23\n", "BP: 1985-07-22 FTSE: 1985-07-24\n", "BP: 1985-07-23 FTSE: 1985-07-25\n", "BP: 1985-07-24 FTSE: 1985-07-26\n", "BP: 1985-07-25 FTSE: 1985-07-29\n", "BP: 1985-07-26 FTSE: 1985-07-30\n", "BP: 1985-07-29 FTSE: 1985-07-31\n", "BP: 1985-07-30 FTSE: 1985-08-01\n", "BP: 1985-07-31 FTSE: 1985-08-02\n", "BP: 1985-08-01 FTSE: 1985-08-05\n", "BP: 1985-08-02 FTSE: 1985-08-06\n", "BP: 1985-08-05 FTSE: 1985-08-07\n", "BP: 1985-08-06 FTSE: 1985-08-08\n", "BP: 1985-08-07 FTSE: 1985-08-09\n", "BP: 1985-08-08 FTSE: 1985-08-12\n", "BP: 1985-08-09 FTSE: 1985-08-13\n", "BP: 1985-08-12 FTSE: 1985-08-14\n", "BP: 1985-08-13 FTSE: 1985-08-15\n", "BP: 1985-08-14 FTSE: 1985-08-16\n", "BP: 1985-08-15 FTSE: 1985-08-19\n", "BP: 1985-08-16 FTSE: 1985-08-20\n", "BP: 1985-08-19 FTSE: 1985-08-21\n", "BP: 1985-08-20 FTSE: 1985-08-22\n", "BP: 1985-08-21 FTSE: 1985-08-23\n", "BP: 1985-08-22 FTSE: 1985-08-27\n", "BP: 1985-08-23 FTSE: 1985-08-28\n", "BP: 1985-08-26 FTSE: 1985-08-29\n", "BP: 1985-08-27 FTSE: 1985-08-30\n", "BP: 1985-08-28 FTSE: 1985-09-02\n", "BP: 1985-08-29 FTSE: 1985-09-03\n", "BP: 1985-08-30 FTSE: 1985-09-04\n", "BP: 1985-09-03 FTSE: 1985-09-05\n", "BP: 1985-09-04 FTSE: 1985-09-06\n", "BP: 1985-09-05 FTSE: 1985-09-09\n", "BP: 1985-09-06 FTSE: 1985-09-10\n", "BP: 1985-09-09 FTSE: 1985-09-11\n", "BP: 1985-09-10 FTSE: 1985-09-12\n", "BP: 1985-09-11 FTSE: 1985-09-13\n", "BP: 1985-09-12 FTSE: 1985-09-16\n", "BP: 1985-09-13 FTSE: 1985-09-17\n", "BP: 1985-09-16 FTSE: 1985-09-18\n", "BP: 1985-09-17 FTSE: 1985-09-19\n", "BP: 1985-09-18 FTSE: 1985-09-20\n", "BP: 1985-09-19 FTSE: 1985-09-23\n", "BP: 1985-09-20 FTSE: 1985-09-24\n", "BP: 1985-09-23 FTSE: 1985-09-25\n", "BP: 1985-09-24 FTSE: 1985-09-26\n", "BP: 1985-09-25 FTSE: 1985-09-27\n", "BP: 1985-09-26 FTSE: 1985-09-30\n", "BP: 1985-09-30 FTSE: 1985-10-01\n", "BP: 1985-10-01 FTSE: 1985-10-02\n", "BP: 1985-10-02 FTSE: 1985-10-03\n", "BP: 1985-10-03 FTSE: 1985-10-04\n", "BP: 1985-10-04 FTSE: 1985-10-07\n", "BP: 1985-10-07 FTSE: 1985-10-08\n", "BP: 1985-10-08 FTSE: 1985-10-09\n", "BP: 1985-10-09 FTSE: 1985-10-10\n", "BP: 1985-10-10 FTSE: 1985-10-11\n", "BP: 1985-10-11 FTSE: 1985-10-14\n", "BP: 1985-10-14 FTSE: 1985-10-15\n", "BP: 1985-10-15 FTSE: 1985-10-16\n", "BP: 1985-10-16 FTSE: 1985-10-17\n", "BP: 1985-10-17 FTSE: 1985-10-18\n", "BP: 1985-10-18 FTSE: 1985-10-21\n", "BP: 1985-10-21 FTSE: 1985-10-22\n", "BP: 1985-10-22 FTSE: 1985-10-23\n", "BP: 1985-10-23 FTSE: 1985-10-24\n", "BP: 1985-10-24 FTSE: 1985-10-25\n", "BP: 1985-10-25 FTSE: 1985-10-28\n", "BP: 1985-10-28 FTSE: 1985-10-29\n", "BP: 1985-10-29 FTSE: 1985-10-30\n", "BP: 1985-10-30 FTSE: 1985-10-31\n", "BP: 1985-10-31 FTSE: 1985-11-01\n", "BP: 1985-11-01 FTSE: 1985-11-04\n", "BP: 1985-11-04 FTSE: 1985-11-05\n", "BP: 1985-11-05 FTSE: 1985-11-06\n", "BP: 1985-11-06 FTSE: 1985-11-07\n", "BP: 1985-11-07 FTSE: 1985-11-08\n", "BP: 1985-11-08 FTSE: 1985-11-11\n", "BP: 1985-11-11 FTSE: 1985-11-12\n", "BP: 1985-11-12 FTSE: 1985-11-13\n", "BP: 1985-11-13 FTSE: 1985-11-14\n", "BP: 1985-11-14 FTSE: 1985-11-15\n", "BP: 1985-11-15 FTSE: 1985-11-18\n", "BP: 1985-11-18 FTSE: 1985-11-19\n", "BP: 1985-11-19 FTSE: 1985-11-20\n", "BP: 1985-11-20 FTSE: 1985-11-21\n", "BP: 1985-11-21 FTSE: 1985-11-22\n", "BP: 1985-11-22 FTSE: 1985-11-25\n", "BP: 1985-11-25 FTSE: 1985-11-26\n", "BP: 1985-11-26 FTSE: 1985-11-27\n", "BP: 1985-11-27 FTSE: 1985-11-28\n", "BP: 1985-12-26 FTSE: 1985-12-27\n", "BP: 1985-12-27 FTSE: 1985-12-30\n", "BP: 1985-12-30 FTSE: 1985-12-31\n", "BP: 1985-12-31 FTSE: 1986-01-02\n", "BP: 1986-01-02 FTSE: 1986-01-03\n", "BP: 1986-01-03 FTSE: 1986-01-06\n", "BP: 1986-01-06 FTSE: 1986-01-07\n", "BP: 1986-01-07 FTSE: 1986-01-08\n", "BP: 1986-01-08 FTSE: 1986-01-09\n", "BP: 1986-01-09 FTSE: 1986-01-10\n", "BP: 1986-01-10 FTSE: 1986-01-13\n", "BP: 1986-01-13 FTSE: 1986-01-14\n", "BP: 1986-01-14 FTSE: 1986-01-15\n", "BP: 1986-01-15 FTSE: 1986-01-16\n", "BP: 1986-01-16 FTSE: 1986-01-17\n", "BP: 1986-01-17 FTSE: 1986-01-20\n", "BP: 1986-01-20 FTSE: 1986-01-21\n", "BP: 1986-01-21 FTSE: 1986-01-22\n", "BP: 1986-01-22 FTSE: 1986-01-23\n", "BP: 1986-01-23 FTSE: 1986-01-24\n", "BP: 1986-01-24 FTSE: 1986-01-27\n", "BP: 1986-01-27 FTSE: 1986-01-28\n", "BP: 1986-01-28 FTSE: 1986-01-29\n", "BP: 1986-01-29 FTSE: 1986-01-30\n", "BP: 1986-01-30 FTSE: 1986-01-31\n", "BP: 1986-01-31 FTSE: 1986-02-03\n", "BP: 1986-02-03 FTSE: 1986-02-04\n", "BP: 1986-02-04 FTSE: 1986-02-05\n", "BP: 1986-02-05 FTSE: 1986-02-06\n", "BP: 1986-02-06 FTSE: 1986-02-07\n", "BP: 1986-02-07 FTSE: 1986-02-10\n", "BP: 1986-02-10 FTSE: 1986-02-11\n", "BP: 1986-02-11 FTSE: 1986-02-12\n", "BP: 1986-02-12 FTSE: 1986-02-13\n", "BP: 1986-02-13 FTSE: 1986-02-14\n", "BP: 1986-02-14 FTSE: 1986-02-17\n", "BP: 1986-03-31 FTSE: 1986-04-01\n", "BP: 1986-04-01 FTSE: 1986-04-02\n", "BP: 1986-04-02 FTSE: 1986-04-03\n", "BP: 1986-04-03 FTSE: 1986-04-04\n", "BP: 1986-04-04 FTSE: 1986-04-07\n", "BP: 1986-04-07 FTSE: 1986-04-08\n", "BP: 1986-04-08 FTSE: 1986-04-09\n", "BP: 1986-04-09 FTSE: 1986-04-10\n", "BP: 1986-04-10 FTSE: 1986-04-11\n", "BP: 1986-04-11 FTSE: 1986-04-14\n", "BP: 1986-04-14 FTSE: 1986-04-15\n", "BP: 1986-04-15 FTSE: 1986-04-16\n", "BP: 1986-04-16 FTSE: 1986-04-17\n", "BP: 1986-04-17 FTSE: 1986-04-18\n", "BP: 1986-04-18 FTSE: 1986-04-21\n", "BP: 1986-04-21 FTSE: 1986-04-22\n", "BP: 1986-04-22 FTSE: 1986-04-23\n", "BP: 1986-04-23 FTSE: 1986-04-24\n", "BP: 1986-04-24 FTSE: 1986-04-25\n", "BP: 1986-04-25 FTSE: 1986-04-28\n", "BP: 1986-04-28 FTSE: 1986-04-29\n", "BP: 1986-04-29 FTSE: 1986-04-30\n", "BP: 1986-04-30 FTSE: 1986-05-01\n", "BP: 1986-05-01 FTSE: 1986-05-02\n", "BP: 1986-05-02 FTSE: 1986-05-06\n", "BP: 1986-05-05 FTSE: 1986-05-07\n", "BP: 1986-05-06 FTSE: 1986-05-08\n", "BP: 1986-05-07 FTSE: 1986-05-09\n", "BP: 1986-05-08 FTSE: 1986-05-12\n", "BP: 1986-05-09 FTSE: 1986-05-13\n", "BP: 1986-05-12 FTSE: 1986-05-14\n", "BP: 1986-05-13 FTSE: 1986-05-15\n", "BP: 1986-05-14 FTSE: 1986-05-16\n", "BP: 1986-05-15 FTSE: 1986-05-19\n", "BP: 1986-05-16 FTSE: 1986-05-20\n", "BP: 1986-05-19 FTSE: 1986-05-21\n", "BP: 1986-05-20 FTSE: 1986-05-22\n", "BP: 1986-05-21 FTSE: 1986-05-23\n", "BP: 1986-05-22 FTSE: 1986-05-27\n", "BP: 1986-05-23 FTSE: 1986-05-28\n", "BP: 1986-05-27 FTSE: 1986-05-29\n", "BP: 1986-05-28 FTSE: 1986-05-30\n", "BP: 1986-05-29 FTSE: 1986-06-02\n", "BP: 1986-05-30 FTSE: 1986-06-03\n", "BP: 1986-06-02 FTSE: 1986-06-04\n", "BP: 1986-06-03 FTSE: 1986-06-05\n", "BP: 1986-06-04 FTSE: 1986-06-06\n", "BP: 1986-06-05 FTSE: 1986-06-09\n", "BP: 1986-06-06 FTSE: 1986-06-10\n", "BP: 1986-06-09 FTSE: 1986-06-11\n", "BP: 1986-06-10 FTSE: 1986-06-12\n", "BP: 1986-06-11 FTSE: 1986-06-13\n", "BP: 1986-06-12 FTSE: 1986-06-16\n", "BP: 1986-06-13 FTSE: 1986-06-17\n", "BP: 1986-06-16 FTSE: 1986-06-18\n", "BP: 1986-06-17 FTSE: 1986-06-19\n", "BP: 1986-06-18 FTSE: 1986-06-20\n", "BP: 1986-06-19 FTSE: 1986-06-23\n", "BP: 1986-06-20 FTSE: 1986-06-24\n", "BP: 1986-06-23 FTSE: 1986-06-25\n", "BP: 1986-06-24 FTSE: 1986-06-26\n", "BP: 1986-06-25 FTSE: 1986-06-27\n", "BP: 1986-06-26 FTSE: 1986-06-30\n", "BP: 1986-06-27 FTSE: 1986-07-01\n", "BP: 1986-06-30 FTSE: 1986-07-02\n", "BP: 1986-07-01 FTSE: 1986-07-03\n", "BP: 1986-07-02 FTSE: 1986-07-04\n", "BP: 1986-07-03 FTSE: 1986-07-07\n", "BP: 1986-07-07 FTSE: 1986-07-08\n", "BP: 1986-07-08 FTSE: 1986-07-09\n", "BP: 1986-07-09 FTSE: 1986-07-10\n", "BP: 1986-07-10 FTSE: 1986-07-11\n", "BP: 1986-07-11 FTSE: 1986-07-14\n", "BP: 1986-07-14 FTSE: 1986-07-15\n", "BP: 1986-07-15 FTSE: 1986-07-16\n", "BP: 1986-07-16 FTSE: 1986-07-17\n", "BP: 1986-07-17 FTSE: 1986-07-18\n", "BP: 1986-07-18 FTSE: 1986-07-21\n", "BP: 1986-07-21 FTSE: 1986-07-22\n", "BP: 1986-07-22 FTSE: 1986-07-23\n", "BP: 1986-07-23 FTSE: 1986-07-24\n", "BP: 1986-07-24 FTSE: 1986-07-25\n", "BP: 1986-07-25 FTSE: 1986-07-28\n", "BP: 1986-07-28 FTSE: 1986-07-29\n", "BP: 1986-07-29 FTSE: 1986-07-30\n", "BP: 1986-07-30 FTSE: 1986-07-31\n", "BP: 1986-07-31 FTSE: 1986-08-01\n", "BP: 1986-08-01 FTSE: 1986-08-04\n", "BP: 1986-08-04 FTSE: 1986-08-05\n", "BP: 1986-08-05 FTSE: 1986-08-06\n", "BP: 1986-08-06 FTSE: 1986-08-07\n", "BP: 1986-08-07 FTSE: 1986-08-08\n", "BP: 1986-08-08 FTSE: 1986-08-11\n", "BP: 1986-08-11 FTSE: 1986-08-12\n", "BP: 1986-08-12 FTSE: 1986-08-13\n", "BP: 1986-08-13 FTSE: 1986-08-14\n", "BP: 1986-08-14 FTSE: 1986-08-15\n", "BP: 1986-08-15 FTSE: 1986-08-18\n", "BP: 1986-08-18 FTSE: 1986-08-19\n", "BP: 1986-08-19 FTSE: 1986-08-20\n", "BP: 1986-08-20 FTSE: 1986-08-21\n", "BP: 1986-08-21 FTSE: 1986-08-22\n", "BP: 1986-08-22 FTSE: 1986-08-26\n", "BP: 1986-08-25 FTSE: 1986-08-27\n", "BP: 1986-08-26 FTSE: 1986-08-28\n", "BP: 1986-08-27 FTSE: 1986-08-29\n", "BP: 1986-08-28 FTSE: 1986-09-01\n", "BP: 1986-08-29 FTSE: 1986-09-02\n", "BP: 1986-09-02 FTSE: 1986-09-03\n", "BP: 1986-09-03 FTSE: 1986-09-04\n", "BP: 1986-09-04 FTSE: 1986-09-05\n", "BP: 1986-09-05 FTSE: 1986-09-08\n", "BP: 1986-09-08 FTSE: 1986-09-09\n", "BP: 1986-09-09 FTSE: 1986-09-10\n", "BP: 1986-09-10 FTSE: 1986-09-11\n", "BP: 1986-09-11 FTSE: 1986-09-12\n", "BP: 1986-09-12 FTSE: 1986-09-15\n", "BP: 1986-09-15 FTSE: 1986-09-16\n", "BP: 1986-09-16 FTSE: 1986-09-17\n", "BP: 1986-09-17 FTSE: 1986-09-18\n", "BP: 1986-09-18 FTSE: 1986-09-19\n", "BP: 1986-09-19 FTSE: 1986-09-22\n", "BP: 1986-09-22 FTSE: 1986-09-23\n", "BP: 1986-09-23 FTSE: 1986-09-24\n", "BP: 1986-09-24 FTSE: 1986-09-25\n", "BP: 1986-09-25 FTSE: 1986-09-26\n", "BP: 1986-09-26 FTSE: 1986-09-29\n", "BP: 1986-09-29 FTSE: 1986-09-30\n", "BP: 1986-09-30 FTSE: 1986-10-01\n", "BP: 1986-10-01 FTSE: 1986-10-02\n", "BP: 1986-10-02 FTSE: 1986-10-03\n", "BP: 1986-10-03 FTSE: 1986-10-06\n", "BP: 1986-10-06 FTSE: 1986-10-07\n", "BP: 1986-10-07 FTSE: 1986-10-08\n", "BP: 1986-10-08 FTSE: 1986-10-09\n", "BP: 1986-10-09 FTSE: 1986-10-10\n", "BP: 1986-10-10 FTSE: 1986-10-13\n", "BP: 1986-10-13 FTSE: 1986-10-14\n", "BP: 1986-10-14 FTSE: 1986-10-15\n", "BP: 1986-10-15 FTSE: 1986-10-16\n", "BP: 1986-10-16 FTSE: 1986-10-17\n", "BP: 1986-10-17 FTSE: 1986-10-20\n", "BP: 1986-10-20 FTSE: 1986-10-21\n", "BP: 1986-10-21 FTSE: 1986-10-22\n", "BP: 1986-10-22 FTSE: 1986-10-23\n", "BP: 1986-10-23 FTSE: 1986-10-24\n", "BP: 1986-10-24 FTSE: 1986-10-27\n", "BP: 1986-10-27 FTSE: 1986-10-28\n", "BP: 1986-10-28 FTSE: 1986-10-29\n", "BP: 1986-10-29 FTSE: 1986-10-30\n", "BP: 1986-10-30 FTSE: 1986-10-31\n", "BP: 1986-10-31 FTSE: 1986-11-03\n", "BP: 1986-11-03 FTSE: 1986-11-04\n", "BP: 1986-11-04 FTSE: 1986-11-05\n", "BP: 1986-11-05 FTSE: 1986-11-06\n", "BP: 1986-11-06 FTSE: 1986-11-07\n", "BP: 1986-11-07 FTSE: 1986-11-10\n", "BP: 1986-11-10 FTSE: 1986-11-11\n", "BP: 1986-11-11 FTSE: 1986-11-12\n", "BP: 1986-11-12 FTSE: 1986-11-13\n", "BP: 1986-11-13 FTSE: 1986-11-14\n", "BP: 1986-11-14 FTSE: 1986-11-17\n", "BP: 1986-11-17 FTSE: 1986-11-18\n", "BP: 1986-11-18 FTSE: 1986-11-19\n", "BP: 1986-11-19 FTSE: 1986-11-20\n", "BP: 1986-11-20 FTSE: 1986-11-21\n", "BP: 1986-11-21 FTSE: 1986-11-24\n", "BP: 1986-11-24 FTSE: 1986-11-25\n", "BP: 1986-11-25 FTSE: 1986-11-26\n", "BP: 1986-11-26 FTSE: 1986-11-27\n", "BP: 1986-12-26 FTSE: 1986-12-29\n", "BP: 1986-12-29 FTSE: 1986-12-30\n", "BP: 1986-12-30 FTSE: 1986-12-31\n", "BP: 1986-12-31 FTSE: 1987-01-02\n", "BP: 1987-01-02 FTSE: 1987-01-05\n", "BP: 1987-01-05 FTSE: 1987-01-06\n", "BP: 1987-01-06 FTSE: 1987-01-07\n", "BP: 1987-01-07 FTSE: 1987-01-08\n", "BP: 1987-01-08 FTSE: 1987-01-09\n", "BP: 1987-01-09 FTSE: 1987-01-12\n", "BP: 1987-01-12 FTSE: 1987-01-13\n", "BP: 1987-01-13 FTSE: 1987-01-14\n", "BP: 1987-01-14 FTSE: 1987-01-15\n", "BP: 1987-01-15 FTSE: 1987-01-16\n", "BP: 1987-01-16 FTSE: 1987-01-19\n", "BP: 1987-01-19 FTSE: 1987-01-20\n", "BP: 1987-01-20 FTSE: 1987-01-21\n", "BP: 1987-01-21 FTSE: 1987-01-22\n", "BP: 1987-01-22 FTSE: 1987-01-23\n", "BP: 1987-01-23 FTSE: 1987-01-26\n", "BP: 1987-01-26 FTSE: 1987-01-27\n", "BP: 1987-01-27 FTSE: 1987-01-28\n", "BP: 1987-01-28 FTSE: 1987-01-29\n", "BP: 1987-01-29 FTSE: 1987-01-30\n", "BP: 1987-01-30 FTSE: 1987-02-02\n", "BP: 1987-02-02 FTSE: 1987-02-03\n", "BP: 1987-02-03 FTSE: 1987-02-04\n", "BP: 1987-02-04 FTSE: 1987-02-05\n", "BP: 1987-02-05 FTSE: 1987-02-06\n", "BP: 1987-02-06 FTSE: 1987-02-09\n", "BP: 1987-02-09 FTSE: 1987-02-10\n", "BP: 1987-02-10 FTSE: 1987-02-11\n", "BP: 1987-02-11 FTSE: 1987-02-12\n", "BP: 1987-02-12 FTSE: 1987-02-13\n", "BP: 1987-02-13 FTSE: 1987-02-16\n", "BP: 1987-04-20 FTSE: 1987-04-21\n", "BP: 1987-04-21 FTSE: 1987-04-22\n", "BP: 1987-04-22 FTSE: 1987-04-23\n", "BP: 1987-04-23 FTSE: 1987-04-24\n", "BP: 1987-04-24 FTSE: 1987-04-27\n", "BP: 1987-04-27 FTSE: 1987-04-28\n", "BP: 1987-04-28 FTSE: 1987-04-29\n", "BP: 1987-04-29 FTSE: 1987-04-30\n", "BP: 1987-04-30 FTSE: 1987-05-01\n", "BP: 1987-05-01 FTSE: 1987-05-05\n", "BP: 1987-05-04 FTSE: 1987-05-06\n", "BP: 1987-05-05 FTSE: 1987-05-07\n", "BP: 1987-05-06 FTSE: 1987-05-08\n", "BP: 1987-05-07 FTSE: 1987-05-11\n", "BP: 1987-05-08 FTSE: 1987-05-12\n", "BP: 1987-05-11 FTSE: 1987-05-13\n", "BP: 1987-05-12 FTSE: 1987-05-14\n", "BP: 1987-05-13 FTSE: 1987-05-15\n", "BP: 1987-05-14 FTSE: 1987-05-18\n", "BP: 1987-05-15 FTSE: 1987-05-19\n", "BP: 1987-05-18 FTSE: 1987-05-20\n", "BP: 1987-05-19 FTSE: 1987-05-21\n", "BP: 1987-05-20 FTSE: 1987-05-22\n", "BP: 1987-05-21 FTSE: 1987-05-26\n", "BP: 1987-05-22 FTSE: 1987-05-27\n", "BP: 1987-05-26 FTSE: 1987-05-28\n", "BP: 1987-05-27 FTSE: 1987-05-29\n", "BP: 1987-05-28 FTSE: 1987-06-01\n", "BP: 1987-05-29 FTSE: 1987-06-02\n", "BP: 1987-06-01 FTSE: 1987-06-03\n", "BP: 1987-06-02 FTSE: 1987-06-04\n", "BP: 1987-06-03 FTSE: 1987-06-05\n", "BP: 1987-06-04 FTSE: 1987-06-08\n", "BP: 1987-06-05 FTSE: 1987-06-09\n", "BP: 1987-06-08 FTSE: 1987-06-10\n", "BP: 1987-06-09 FTSE: 1987-06-11\n", "BP: 1987-06-10 FTSE: 1987-06-12\n", "BP: 1987-06-11 FTSE: 1987-06-15\n", "BP: 1987-06-12 FTSE: 1987-06-16\n", "BP: 1987-06-15 FTSE: 1987-06-17\n", "BP: 1987-06-16 FTSE: 1987-06-18\n", "BP: 1987-06-17 FTSE: 1987-06-19\n", "BP: 1987-06-18 FTSE: 1987-06-22\n", "BP: 1987-06-19 FTSE: 1987-06-23\n", "BP: 1987-06-22 FTSE: 1987-06-24\n", "BP: 1987-06-23 FTSE: 1987-06-25\n", "BP: 1987-06-24 FTSE: 1987-06-26\n", "BP: 1987-06-25 FTSE: 1987-06-29\n", "BP: 1987-06-26 FTSE: 1987-06-30\n", "BP: 1987-06-29 FTSE: 1987-07-01\n", "BP: 1987-06-30 FTSE: 1987-07-02\n", "BP: 1987-07-01 FTSE: 1987-07-03\n", "BP: 1987-07-02 FTSE: 1987-07-06\n", "BP: 1987-07-06 FTSE: 1987-07-07\n", "BP: 1987-07-07 FTSE: 1987-07-08\n", "BP: 1987-07-08 FTSE: 1987-07-09\n", "BP: 1987-07-09 FTSE: 1987-07-10\n", "BP: 1987-07-10 FTSE: 1987-07-13\n", "BP: 1987-07-13 FTSE: 1987-07-14\n", "BP: 1987-07-14 FTSE: 1987-07-15\n", "BP: 1987-07-15 FTSE: 1987-07-16\n", "BP: 1987-07-16 FTSE: 1987-07-17\n", "BP: 1987-07-17 FTSE: 1987-07-20\n", "BP: 1987-07-20 FTSE: 1987-07-21\n", "BP: 1987-07-21 FTSE: 1987-07-22\n", "BP: 1987-07-22 FTSE: 1987-07-23\n", "BP: 1987-07-23 FTSE: 1987-07-24\n", "BP: 1987-07-24 FTSE: 1987-07-27\n", "BP: 1987-07-27 FTSE: 1987-07-28\n", "BP: 1987-07-28 FTSE: 1987-07-29\n", "BP: 1987-07-29 FTSE: 1987-07-30\n", "BP: 1987-07-30 FTSE: 1987-07-31\n", "BP: 1987-07-31 FTSE: 1987-08-03\n", "BP: 1987-08-03 FTSE: 1987-08-04\n", "BP: 1987-08-04 FTSE: 1987-08-05\n", "BP: 1987-08-05 FTSE: 1987-08-06\n", "BP: 1987-08-06 FTSE: 1987-08-07\n", "BP: 1987-08-07 FTSE: 1987-08-10\n", "BP: 1987-08-10 FTSE: 1987-08-11\n", "BP: 1987-08-11 FTSE: 1987-08-12\n", "BP: 1987-08-12 FTSE: 1987-08-13\n", "BP: 1987-08-13 FTSE: 1987-08-14\n", "BP: 1987-08-14 FTSE: 1987-08-17\n", "BP: 1987-08-17 FTSE: 1987-08-18\n", "BP: 1987-08-18 FTSE: 1987-08-19\n", "BP: 1987-08-19 FTSE: 1987-08-20\n", "BP: 1987-08-20 FTSE: 1987-08-21\n", "BP: 1987-08-21 FTSE: 1987-08-24\n", "BP: 1987-08-24 FTSE: 1987-08-25\n", "BP: 1987-08-25 FTSE: 1987-08-26\n", "BP: 1987-08-26 FTSE: 1987-08-27\n", "BP: 1987-08-27 FTSE: 1987-08-28\n", "BP: 1987-08-28 FTSE: 1987-09-01\n", "BP: 1987-08-31 FTSE: 1987-09-02\n", "BP: 1987-09-01 FTSE: 1987-09-03\n", "BP: 1987-09-02 FTSE: 1987-09-04\n", "BP: 1987-09-03 FTSE: 1987-09-07\n", "BP: 1987-09-04 FTSE: 1987-09-08\n", "BP: 1987-09-08 FTSE: 1987-09-09\n", "BP: 1987-09-09 FTSE: 1987-09-10\n", "BP: 1987-09-10 FTSE: 1987-09-11\n", "BP: 1987-09-11 FTSE: 1987-09-14\n", "BP: 1987-09-14 FTSE: 1987-09-15\n", "BP: 1987-09-15 FTSE: 1987-09-16\n", "BP: 1987-09-16 FTSE: 1987-09-17\n", "BP: 1987-09-17 FTSE: 1987-09-18\n", "BP: 1987-09-18 FTSE: 1987-09-21\n", "BP: 1987-09-21 FTSE: 1987-09-22\n", "BP: 1987-09-22 FTSE: 1987-09-23\n", "BP: 1987-09-23 FTSE: 1987-09-24\n", "BP: 1987-09-24 FTSE: 1987-09-25\n", "BP: 1987-09-25 FTSE: 1987-09-28\n", "BP: 1987-09-28 FTSE: 1987-09-29\n", "BP: 1987-09-29 FTSE: 1987-09-30\n", "BP: 1987-09-30 FTSE: 1987-10-01\n", "BP: 1987-10-01 FTSE: 1987-10-02\n", "BP: 1987-10-02 FTSE: 1987-10-05\n", "BP: 1987-10-05 FTSE: 1987-10-06\n", "BP: 1987-10-06 FTSE: 1987-10-07\n", "BP: 1987-10-07 FTSE: 1987-10-08\n", "BP: 1987-10-08 FTSE: 1987-10-09\n", "BP: 1987-10-09 FTSE: 1987-10-12\n", "BP: 1987-10-12 FTSE: 1987-10-13\n", "BP: 1987-10-13 FTSE: 1987-10-14\n", "BP: 1987-10-14 FTSE: 1987-10-15\n", "BP: 1987-10-15 FTSE: 1987-10-16\n", "BP: 1987-10-16 FTSE: 1987-10-19\n", "BP: 1987-10-19 FTSE: 1987-10-20\n", "BP: 1987-10-20 FTSE: 1987-10-21\n", "BP: 1987-10-21 FTSE: 1987-10-22\n", "BP: 1987-10-22 FTSE: 1987-10-23\n", "BP: 1987-10-23 FTSE: 1987-10-26\n", "BP: 1987-10-26 FTSE: 1987-10-27\n", "BP: 1987-10-27 FTSE: 1987-10-28\n", "BP: 1987-10-28 FTSE: 1987-10-29\n", "BP: 1987-10-29 FTSE: 1987-10-30\n", "BP: 1987-10-30 FTSE: 1987-11-02\n", "BP: 1987-11-02 FTSE: 1987-11-03\n", "BP: 1987-11-03 FTSE: 1987-11-04\n", "BP: 1987-11-04 FTSE: 1987-11-05\n", "BP: 1987-11-05 FTSE: 1987-11-06\n", "BP: 1987-11-06 FTSE: 1987-11-09\n", "BP: 1987-11-09 FTSE: 1987-11-10\n", "BP: 1987-11-10 FTSE: 1987-11-11\n", "BP: 1987-11-11 FTSE: 1987-11-12\n", "BP: 1987-11-12 FTSE: 1987-11-13\n", "BP: 1987-11-13 FTSE: 1987-11-16\n", "BP: 1987-11-16 FTSE: 1987-11-17\n", "BP: 1987-11-17 FTSE: 1987-11-18\n", "BP: 1987-11-18 FTSE: 1987-11-19\n", "BP: 1987-11-19 FTSE: 1987-11-20\n", "BP: 1987-11-20 FTSE: 1987-11-23\n", "BP: 1987-11-23 FTSE: 1987-11-24\n", "BP: 1987-11-24 FTSE: 1987-11-25\n", "BP: 1987-11-25 FTSE: 1987-11-26\n", "BP: 1987-12-28 FTSE: 1987-12-29\n", "BP: 1987-12-29 FTSE: 1987-12-30\n", "BP: 1987-12-30 FTSE: 1987-12-31\n", "BP: 1987-12-31 FTSE: 1988-01-04\n", "BP: 1988-01-04 FTSE: 1988-01-05\n", "BP: 1988-01-05 FTSE: 1988-01-06\n", "BP: 1988-01-06 FTSE: 1988-01-07\n", "BP: 1988-01-07 FTSE: 1988-01-08\n", "BP: 1988-01-08 FTSE: 1988-01-11\n", "BP: 1988-01-11 FTSE: 1988-01-12\n", "BP: 1988-01-12 FTSE: 1988-01-13\n", "BP: 1988-01-13 FTSE: 1988-01-14\n", "BP: 1988-01-14 FTSE: 1988-01-15\n", "BP: 1988-01-15 FTSE: 1988-01-18\n", "BP: 1988-01-18 FTSE: 1988-01-19\n", "BP: 1988-01-19 FTSE: 1988-01-20\n", "BP: 1988-01-20 FTSE: 1988-01-21\n", "BP: 1988-01-21 FTSE: 1988-01-22\n", "BP: 1988-01-22 FTSE: 1988-01-25\n", "BP: 1988-01-25 FTSE: 1988-01-26\n", "BP: 1988-01-26 FTSE: 1988-01-27\n", "BP: 1988-01-27 FTSE: 1988-01-28\n", "BP: 1988-01-28 FTSE: 1988-01-29\n", "BP: 1988-01-29 FTSE: 1988-02-01\n", "BP: 1988-02-01 FTSE: 1988-02-02\n", "BP: 1988-02-02 FTSE: 1988-02-03\n", "BP: 1988-02-03 FTSE: 1988-02-04\n", "BP: 1988-02-04 FTSE: 1988-02-05\n", "BP: 1988-02-05 FTSE: 1988-02-08\n", "BP: 1988-02-08 FTSE: 1988-02-09\n", "BP: 1988-02-09 FTSE: 1988-02-10\n", "BP: 1988-02-10 FTSE: 1988-02-11\n", "BP: 1988-02-11 FTSE: 1988-02-12\n", "BP: 1988-02-12 FTSE: 1988-02-15\n", "BP: 1988-04-04 FTSE: 1988-04-05\n", "BP: 1988-04-05 FTSE: 1988-04-06\n", "BP: 1988-04-06 FTSE: 1988-04-07\n", "BP: 1988-04-07 FTSE: 1988-04-08\n", "BP: 1988-04-08 FTSE: 1988-04-11\n", "BP: 1988-04-11 FTSE: 1988-04-12\n", "BP: 1988-04-12 FTSE: 1988-04-13\n", "BP: 1988-04-13 FTSE: 1988-04-14\n", "BP: 1988-04-14 FTSE: 1988-04-15\n", "BP: 1988-04-15 FTSE: 1988-04-18\n", "BP: 1988-04-18 FTSE: 1988-04-19\n", "BP: 1988-04-19 FTSE: 1988-04-20\n", "BP: 1988-04-20 FTSE: 1988-04-21\n", "BP: 1988-04-21 FTSE: 1988-04-22\n", "BP: 1988-04-22 FTSE: 1988-04-25\n", "BP: 1988-04-25 FTSE: 1988-04-26\n", "BP: 1988-04-26 FTSE: 1988-04-27\n", "BP: 1988-04-27 FTSE: 1988-04-28\n", "BP: 1988-04-28 FTSE: 1988-04-29\n", "BP: 1988-04-29 FTSE: 1988-05-03\n", "BP: 1988-05-02 FTSE: 1988-05-04\n", "BP: 1988-05-03 FTSE: 1988-05-05\n", "BP: 1988-05-04 FTSE: 1988-05-06\n", "BP: 1988-05-05 FTSE: 1988-05-09\n", "BP: 1988-05-06 FTSE: 1988-05-10\n", "BP: 1988-05-09 FTSE: 1988-05-11\n", "BP: 1988-05-10 FTSE: 1988-05-12\n", "BP: 1988-05-11 FTSE: 1988-05-13\n", "BP: 1988-05-12 FTSE: 1988-05-16\n", "BP: 1988-05-13 FTSE: 1988-05-17\n", "BP: 1988-05-16 FTSE: 1988-05-18\n", "BP: 1988-05-17 FTSE: 1988-05-19\n", "BP: 1988-05-18 FTSE: 1988-05-20\n", "BP: 1988-05-19 FTSE: 1988-05-23\n", "BP: 1988-05-20 FTSE: 1988-05-24\n", "BP: 1988-05-23 FTSE: 1988-05-25\n", "BP: 1988-05-24 FTSE: 1988-05-26\n", "BP: 1988-05-25 FTSE: 1988-05-27\n", "BP: 1988-05-26 FTSE: 1988-05-31\n", "BP: 1988-05-27 FTSE: 1988-06-01\n", "BP: 1988-05-31 FTSE: 1988-06-02\n", "BP: 1988-06-01 FTSE: 1988-06-03\n", "BP: 1988-06-02 FTSE: 1988-06-06\n", "BP: 1988-06-03 FTSE: 1988-06-07\n", "BP: 1988-06-06 FTSE: 1988-06-08\n", "BP: 1988-06-07 FTSE: 1988-06-09\n", "BP: 1988-06-08 FTSE: 1988-06-10\n", "BP: 1988-06-09 FTSE: 1988-06-13\n", "BP: 1988-06-10 FTSE: 1988-06-14\n", "BP: 1988-06-13 FTSE: 1988-06-15\n", "BP: 1988-06-14 FTSE: 1988-06-16\n", "BP: 1988-06-15 FTSE: 1988-06-17\n", "BP: 1988-06-16 FTSE: 1988-06-20\n", "BP: 1988-06-17 FTSE: 1988-06-21\n", "BP: 1988-06-20 FTSE: 1988-06-22\n", "BP: 1988-06-21 FTSE: 1988-06-23\n", "BP: 1988-06-22 FTSE: 1988-06-24\n", "BP: 1988-06-23 FTSE: 1988-06-27\n", "BP: 1988-06-24 FTSE: 1988-06-28\n", "BP: 1988-06-27 FTSE: 1988-06-29\n", "BP: 1988-06-28 FTSE: 1988-06-30\n", "BP: 1988-06-29 FTSE: 1988-07-01\n", "BP: 1988-06-30 FTSE: 1988-07-04\n", "BP: 1988-07-01 FTSE: 1988-07-05\n", "BP: 1988-07-05 FTSE: 1988-07-06\n", "BP: 1988-07-06 FTSE: 1988-07-07\n", "BP: 1988-07-07 FTSE: 1988-07-08\n", "BP: 1988-07-08 FTSE: 1988-07-11\n", "BP: 1988-07-11 FTSE: 1988-07-12\n", "BP: 1988-07-12 FTSE: 1988-07-13\n", "BP: 1988-07-13 FTSE: 1988-07-14\n", "BP: 1988-07-14 FTSE: 1988-07-15\n", "BP: 1988-07-15 FTSE: 1988-07-18\n", "BP: 1988-07-18 FTSE: 1988-07-19\n", "BP: 1988-07-19 FTSE: 1988-07-20\n", "BP: 1988-07-20 FTSE: 1988-07-21\n", "BP: 1988-07-21 FTSE: 1988-07-22\n", "BP: 1988-07-22 FTSE: 1988-07-25\n", "BP: 1988-07-25 FTSE: 1988-07-26\n", "BP: 1988-07-26 FTSE: 1988-07-27\n", "BP: 1988-07-27 FTSE: 1988-07-28\n", "BP: 1988-07-28 FTSE: 1988-07-29\n", "BP: 1988-07-29 FTSE: 1988-08-01\n", "BP: 1988-08-01 FTSE: 1988-08-02\n", "BP: 1988-08-02 FTSE: 1988-08-03\n", "BP: 1988-08-03 FTSE: 1988-08-04\n", "BP: 1988-08-04 FTSE: 1988-08-05\n", "BP: 1988-08-05 FTSE: 1988-08-08\n", "BP: 1988-08-08 FTSE: 1988-08-09\n", "BP: 1988-08-09 FTSE: 1988-08-10\n", "BP: 1988-08-10 FTSE: 1988-08-11\n", "BP: 1988-08-11 FTSE: 1988-08-12\n", "BP: 1988-08-12 FTSE: 1988-08-15\n", "BP: 1988-08-15 FTSE: 1988-08-16\n", "BP: 1988-08-16 FTSE: 1988-08-17\n", "BP: 1988-08-17 FTSE: 1988-08-18\n", "BP: 1988-08-18 FTSE: 1988-08-19\n", "BP: 1988-08-19 FTSE: 1988-08-22\n", "BP: 1988-08-22 FTSE: 1988-08-23\n", "BP: 1988-08-23 FTSE: 1988-08-24\n", "BP: 1988-08-24 FTSE: 1988-08-25\n", "BP: 1988-08-25 FTSE: 1988-08-26\n", "BP: 1988-08-26 FTSE: 1988-08-30\n", "BP: 1988-08-29 FTSE: 1988-08-31\n", "BP: 1988-08-30 FTSE: 1988-09-01\n", "BP: 1988-08-31 FTSE: 1988-09-02\n", "BP: 1988-09-01 FTSE: 1988-09-05\n", "BP: 1988-09-02 FTSE: 1988-09-06\n", "BP: 1988-09-06 FTSE: 1988-09-07\n", "BP: 1988-09-07 FTSE: 1988-09-08\n", "BP: 1988-09-08 FTSE: 1988-09-09\n", "BP: 1988-09-09 FTSE: 1988-09-12\n", "BP: 1988-09-12 FTSE: 1988-09-13\n", "BP: 1988-09-13 FTSE: 1988-09-14\n", "BP: 1988-09-14 FTSE: 1988-09-15\n", "BP: 1988-09-15 FTSE: 1988-09-16\n", "BP: 1988-09-16 FTSE: 1988-09-19\n", "BP: 1988-09-19 FTSE: 1988-09-20\n", "BP: 1988-09-20 FTSE: 1988-09-21\n", "BP: 1988-09-21 FTSE: 1988-09-22\n", "BP: 1988-09-22 FTSE: 1988-09-23\n", "BP: 1988-09-23 FTSE: 1988-09-26\n", "BP: 1988-09-26 FTSE: 1988-09-27\n", "BP: 1988-09-27 FTSE: 1988-09-28\n", "BP: 1988-09-28 FTSE: 1988-09-29\n", "BP: 1988-09-29 FTSE: 1988-09-30\n", "BP: 1988-09-30 FTSE: 1988-10-03\n", "BP: 1988-10-03 FTSE: 1988-10-04\n", "BP: 1988-10-04 FTSE: 1988-10-05\n", "BP: 1988-10-05 FTSE: 1988-10-06\n", "BP: 1988-10-06 FTSE: 1988-10-07\n", "BP: 1988-10-07 FTSE: 1988-10-10\n", "BP: 1988-10-10 FTSE: 1988-10-11\n", "BP: 1988-10-11 FTSE: 1988-10-12\n", "BP: 1988-10-12 FTSE: 1988-10-13\n", "BP: 1988-10-13 FTSE: 1988-10-14\n", "BP: 1988-10-14 FTSE: 1988-10-17\n", "BP: 1988-10-17 FTSE: 1988-10-18\n", "BP: 1988-10-18 FTSE: 1988-10-19\n", "BP: 1988-10-19 FTSE: 1988-10-20\n", "BP: 1988-10-20 FTSE: 1988-10-21\n", "BP: 1988-10-21 FTSE: 1988-10-24\n", "BP: 1988-10-24 FTSE: 1988-10-25\n", "BP: 1988-10-25 FTSE: 1988-10-26\n", "BP: 1988-10-26 FTSE: 1988-10-27\n", "BP: 1988-10-27 FTSE: 1988-10-28\n", "BP: 1988-10-28 FTSE: 1988-10-31\n", "BP: 1988-10-31 FTSE: 1988-11-01\n", "BP: 1988-11-01 FTSE: 1988-11-02\n", "BP: 1988-11-02 FTSE: 1988-11-03\n", "BP: 1988-11-03 FTSE: 1988-11-04\n", "BP: 1988-11-04 FTSE: 1988-11-07\n", "BP: 1988-11-07 FTSE: 1988-11-08\n", "BP: 1988-11-08 FTSE: 1988-11-09\n", "BP: 1988-11-09 FTSE: 1988-11-10\n", "BP: 1988-11-10 FTSE: 1988-11-11\n", "BP: 1988-11-11 FTSE: 1988-11-14\n", "BP: 1988-11-14 FTSE: 1988-11-15\n", "BP: 1988-11-15 FTSE: 1988-11-16\n", "BP: 1988-11-16 FTSE: 1988-11-17\n", "BP: 1988-11-17 FTSE: 1988-11-18\n", "BP: 1988-11-18 FTSE: 1988-11-21\n", "BP: 1988-11-21 FTSE: 1988-11-22\n", "BP: 1988-11-22 FTSE: 1988-11-23\n", "BP: 1988-11-23 FTSE: 1988-11-24\n", "BP: 1988-12-27 FTSE: 1988-12-28\n", "BP: 1988-12-28 FTSE: 1988-12-29\n", "BP: 1988-12-29 FTSE: 1988-12-30\n", "BP: 1988-12-30 FTSE: 1989-01-03\n", "BP: 1989-01-03 FTSE: 1989-01-04\n", "BP: 1989-01-04 FTSE: 1989-01-05\n", "BP: 1989-01-05 FTSE: 1989-01-06\n", "BP: 1989-01-06 FTSE: 1989-01-09\n", "BP: 1989-01-09 FTSE: 1989-01-10\n", "BP: 1989-01-10 FTSE: 1989-01-11\n", "BP: 1989-01-11 FTSE: 1989-01-12\n", "BP: 1989-01-12 FTSE: 1989-01-13\n", "BP: 1989-01-13 FTSE: 1989-01-16\n", "BP: 1989-01-16 FTSE: 1989-01-17\n", "BP: 1989-01-17 FTSE: 1989-01-18\n", "BP: 1989-01-18 FTSE: 1989-01-19\n", "BP: 1989-01-19 FTSE: 1989-01-20\n", "BP: 1989-01-20 FTSE: 1989-01-23\n", "BP: 1989-01-23 FTSE: 1989-01-24\n", "BP: 1989-01-24 FTSE: 1989-01-25\n", "BP: 1989-01-25 FTSE: 1989-01-26\n", "BP: 1989-01-26 FTSE: 1989-01-27\n", "BP: 1989-01-27 FTSE: 1989-01-30\n", "BP: 1989-01-30 FTSE: 1989-01-31\n", "BP: 1989-01-31 FTSE: 1989-02-01\n", "BP: 1989-02-01 FTSE: 1989-02-02\n", "BP: 1989-02-02 FTSE: 1989-02-03\n", "BP: 1989-02-03 FTSE: 1989-02-06\n", "BP: 1989-02-06 FTSE: 1989-02-07\n", "BP: 1989-02-07 FTSE: 1989-02-08\n", "BP: 1989-02-08 FTSE: 1989-02-09\n", "BP: 1989-02-09 FTSE: 1989-02-10\n", "BP: 1989-02-10 FTSE: 1989-02-13\n", "BP: 1989-02-13 FTSE: 1989-02-14\n", "BP: 1989-02-14 FTSE: 1989-02-15\n", "BP: 1989-02-15 FTSE: 1989-02-16\n", "BP: 1989-02-16 FTSE: 1989-02-17\n", "BP: 1989-02-17 FTSE: 1989-02-20\n", "BP: 1989-03-27 FTSE: 1989-03-28\n", "BP: 1989-03-28 FTSE: 1989-03-29\n", "BP: 1989-03-29 FTSE: 1989-03-30\n", "BP: 1989-03-30 FTSE: 1989-03-31\n", "BP: 1989-03-31 FTSE: 1989-04-03\n", "BP: 1989-04-03 FTSE: 1989-04-04\n", "BP: 1989-04-04 FTSE: 1989-04-05\n", "BP: 1989-04-05 FTSE: 1989-04-06\n", "BP: 1989-04-06 FTSE: 1989-04-07\n", "BP: 1989-04-07 FTSE: 1989-04-10\n", "BP: 1989-04-10 FTSE: 1989-04-11\n", "BP: 1989-04-11 FTSE: 1989-04-12\n", "BP: 1989-04-12 FTSE: 1989-04-13\n", "BP: 1989-04-13 FTSE: 1989-04-14\n", "BP: 1989-04-14 FTSE: 1989-04-17\n", "BP: 1989-04-17 FTSE: 1989-04-18\n", "BP: 1989-04-18 FTSE: 1989-04-19\n", "BP: 1989-04-19 FTSE: 1989-04-20\n", "BP: 1989-04-20 FTSE: 1989-04-21\n", "BP: 1989-04-21 FTSE: 1989-04-24\n", "BP: 1989-04-24 FTSE: 1989-04-25\n", "BP: 1989-04-25 FTSE: 1989-04-26\n", "BP: 1989-04-26 FTSE: 1989-04-27\n", "BP: 1989-04-27 FTSE: 1989-04-28\n", "BP: 1989-04-28 FTSE: 1989-05-02\n", "BP: 1989-05-01 FTSE: 1989-05-03\n", "BP: 1989-05-02 FTSE: 1989-05-04\n", "BP: 1989-05-03 FTSE: 1989-05-05\n", "BP: 1989-05-04 FTSE: 1989-05-08\n", "BP: 1989-05-05 FTSE: 1989-05-09\n", "BP: 1989-05-08 FTSE: 1989-05-10\n", "BP: 1989-05-09 FTSE: 1989-05-11\n", "BP: 1989-05-10 FTSE: 1989-05-12\n", "BP: 1989-05-11 FTSE: 1989-05-15\n", "BP: 1989-05-12 FTSE: 1989-05-16\n", "BP: 1989-05-15 FTSE: 1989-05-17\n", "BP: 1989-05-16 FTSE: 1989-05-18\n", "BP: 1989-05-17 FTSE: 1989-05-19\n", "BP: 1989-05-18 FTSE: 1989-05-22\n", "BP: 1989-05-19 FTSE: 1989-05-23\n", "BP: 1989-05-22 FTSE: 1989-05-24\n", "BP: 1989-05-23 FTSE: 1989-05-25\n", "BP: 1989-05-24 FTSE: 1989-05-26\n", "BP: 1989-05-25 FTSE: 1989-05-30\n", "BP: 1989-05-26 FTSE: 1989-05-31\n", "BP: 1989-05-30 FTSE: 1989-06-01\n", "BP: 1989-05-31 FTSE: 1989-06-02\n", "BP: 1989-06-01 FTSE: 1989-06-05\n", "BP: 1989-06-02 FTSE: 1989-06-06\n", "BP: 1989-06-05 FTSE: 1989-06-07\n", "BP: 1989-06-06 FTSE: 1989-06-08\n", "BP: 1989-06-07 FTSE: 1989-06-09\n", "BP: 1989-06-08 FTSE: 1989-06-12\n", "BP: 1989-06-09 FTSE: 1989-06-13\n", "BP: 1989-06-12 FTSE: 1989-06-14\n", "BP: 1989-06-13 FTSE: 1989-06-15\n", "BP: 1989-06-14 FTSE: 1989-06-16\n", "BP: 1989-06-15 FTSE: 1989-06-19\n", "BP: 1989-06-16 FTSE: 1989-06-20\n", "BP: 1989-06-19 FTSE: 1989-06-21\n", "BP: 1989-06-20 FTSE: 1989-06-22\n", "BP: 1989-06-21 FTSE: 1989-06-23\n", "BP: 1989-06-22 FTSE: 1989-06-26\n", "BP: 1989-06-23 FTSE: 1989-06-27\n", "BP: 1989-06-26 FTSE: 1989-06-28\n", "BP: 1989-06-27 FTSE: 1989-06-29\n", "BP: 1989-06-28 FTSE: 1989-06-30\n", "BP: 1989-06-29 FTSE: 1989-07-03\n", "BP: 1989-06-30 FTSE: 1989-07-04\n", "BP: 1989-07-03 FTSE: 1989-07-05\n", "BP: 1989-07-05 FTSE: 1989-07-06\n", "BP: 1989-07-06 FTSE: 1989-07-07\n", "BP: 1989-07-07 FTSE: 1989-07-10\n", "BP: 1989-07-10 FTSE: 1989-07-11\n", "BP: 1989-07-11 FTSE: 1989-07-12\n", "BP: 1989-07-12 FTSE: 1989-07-13\n", "BP: 1989-07-13 FTSE: 1989-07-14\n", "BP: 1989-07-14 FTSE: 1989-07-17\n", "BP: 1989-07-17 FTSE: 1989-07-18\n", "BP: 1989-07-18 FTSE: 1989-07-19\n", "BP: 1989-07-19 FTSE: 1989-07-20\n", "BP: 1989-07-20 FTSE: 1989-07-21\n", "BP: 1989-07-21 FTSE: 1989-07-24\n", "BP: 1989-07-24 FTSE: 1989-07-25\n", "BP: 1989-07-25 FTSE: 1989-07-26\n", "BP: 1989-07-26 FTSE: 1989-07-27\n", "BP: 1989-07-27 FTSE: 1989-07-28\n", "BP: 1989-07-28 FTSE: 1989-07-31\n", "BP: 1989-07-31 FTSE: 1989-08-01\n", "BP: 1989-08-01 FTSE: 1989-08-02\n", "BP: 1989-08-02 FTSE: 1989-08-03\n", "BP: 1989-08-03 FTSE: 1989-08-04\n", "BP: 1989-08-04 FTSE: 1989-08-07\n", "BP: 1989-08-07 FTSE: 1989-08-08\n", "BP: 1989-08-08 FTSE: 1989-08-09\n", "BP: 1989-08-09 FTSE: 1989-08-10\n", "BP: 1989-08-10 FTSE: 1989-08-11\n", "BP: 1989-08-11 FTSE: 1989-08-14\n", "BP: 1989-08-14 FTSE: 1989-08-15\n", "BP: 1989-08-15 FTSE: 1989-08-16\n", "BP: 1989-08-16 FTSE: 1989-08-17\n", "BP: 1989-08-17 FTSE: 1989-08-18\n", "BP: 1989-08-18 FTSE: 1989-08-21\n", "BP: 1989-08-21 FTSE: 1989-08-22\n", "BP: 1989-08-22 FTSE: 1989-08-23\n", "BP: 1989-08-23 FTSE: 1989-08-24\n", "BP: 1989-08-24 FTSE: 1989-08-25\n", "BP: 1989-08-25 FTSE: 1989-08-29\n", "BP: 1989-08-28 FTSE: 1989-08-30\n", "BP: 1989-08-29 FTSE: 1989-08-31\n", "BP: 1989-08-30 FTSE: 1989-09-01\n", "BP: 1989-08-31 FTSE: 1989-09-04\n", "BP: 1989-09-01 FTSE: 1989-09-05\n", "BP: 1989-09-05 FTSE: 1989-09-06\n", "BP: 1989-09-06 FTSE: 1989-09-07\n", "BP: 1989-09-07 FTSE: 1989-09-08\n", "BP: 1989-09-08 FTSE: 1989-09-11\n", "BP: 1989-09-11 FTSE: 1989-09-12\n", "BP: 1989-09-12 FTSE: 1989-09-13\n", "BP: 1989-09-13 FTSE: 1989-09-14\n", "BP: 1989-09-14 FTSE: 1989-09-15\n", "BP: 1989-09-15 FTSE: 1989-09-18\n", "BP: 1989-09-18 FTSE: 1989-09-19\n", "BP: 1989-09-19 FTSE: 1989-09-20\n", "BP: 1989-09-20 FTSE: 1989-09-21\n", "BP: 1989-09-21 FTSE: 1989-09-22\n", "BP: 1989-09-22 FTSE: 1989-09-25\n", "BP: 1989-09-25 FTSE: 1989-09-26\n", "BP: 1989-09-26 FTSE: 1989-09-27\n", "BP: 1989-09-27 FTSE: 1989-09-28\n", "BP: 1989-09-28 FTSE: 1989-09-29\n", "BP: 1989-09-29 FTSE: 1989-10-02\n", "BP: 1989-10-02 FTSE: 1989-10-03\n", "BP: 1989-10-03 FTSE: 1989-10-04\n", "BP: 1989-10-04 FTSE: 1989-10-05\n", "BP: 1989-10-05 FTSE: 1989-10-06\n", "BP: 1989-10-06 FTSE: 1989-10-09\n", "BP: 1989-10-09 FTSE: 1989-10-10\n", "BP: 1989-10-10 FTSE: 1989-10-11\n", "BP: 1989-10-11 FTSE: 1989-10-12\n", "BP: 1989-10-12 FTSE: 1989-10-13\n", "BP: 1989-10-13 FTSE: 1989-10-16\n", "BP: 1989-10-16 FTSE: 1989-10-17\n", "BP: 1989-10-17 FTSE: 1989-10-18\n", "BP: 1989-10-18 FTSE: 1989-10-19\n", "BP: 1989-10-19 FTSE: 1989-10-20\n", "BP: 1989-10-20 FTSE: 1989-10-23\n", "BP: 1989-10-23 FTSE: 1989-10-24\n", "BP: 1989-10-24 FTSE: 1989-10-25\n", "BP: 1989-10-25 FTSE: 1989-10-26\n", "BP: 1989-10-26 FTSE: 1989-10-27\n", "BP: 1989-10-27 FTSE: 1989-10-30\n", "BP: 1989-10-30 FTSE: 1989-10-31\n", "BP: 1989-10-31 FTSE: 1989-11-01\n", "BP: 1989-11-01 FTSE: 1989-11-02\n", "BP: 1989-11-02 FTSE: 1989-11-03\n", "BP: 1989-11-03 FTSE: 1989-11-06\n", "BP: 1989-11-06 FTSE: 1989-11-07\n", "BP: 1989-11-07 FTSE: 1989-11-08\n", "BP: 1989-11-08 FTSE: 1989-11-09\n", "BP: 1989-11-09 FTSE: 1989-11-10\n", "BP: 1989-11-10 FTSE: 1989-11-13\n", "BP: 1989-11-13 FTSE: 1989-11-14\n", "BP: 1989-11-14 FTSE: 1989-11-15\n", "BP: 1989-11-15 FTSE: 1989-11-16\n", "BP: 1989-11-16 FTSE: 1989-11-17\n", "BP: 1989-11-17 FTSE: 1989-11-20\n", "BP: 1989-11-20 FTSE: 1989-11-21\n", "BP: 1989-11-21 FTSE: 1989-11-22\n", "BP: 1989-11-22 FTSE: 1989-11-23\n", "BP: 1989-12-26 FTSE: 1989-12-27\n", "BP: 1989-12-27 FTSE: 1989-12-28\n", "BP: 1989-12-28 FTSE: 1989-12-29\n", "BP: 1989-12-29 FTSE: 1990-01-02\n", "BP: 1990-01-02 FTSE: 1990-01-03\n", "BP: 1990-01-03 FTSE: 1990-01-04\n", "BP: 1990-01-04 FTSE: 1990-01-05\n", "BP: 1990-01-05 FTSE: 1990-01-08\n", "BP: 1990-01-08 FTSE: 1990-01-09\n", "BP: 1990-01-09 FTSE: 1990-01-10\n", "BP: 1990-01-10 FTSE: 1990-01-11\n", "BP: 1990-01-11 FTSE: 1990-01-12\n", "BP: 1990-01-12 FTSE: 1990-01-15\n", "BP: 1990-01-15 FTSE: 1990-01-16\n", "BP: 1990-01-16 FTSE: 1990-01-17\n", "BP: 1990-01-17 FTSE: 1990-01-18\n", "BP: 1990-01-18 FTSE: 1990-01-19\n", "BP: 1990-01-19 FTSE: 1990-01-22\n", "BP: 1990-01-22 FTSE: 1990-01-23\n", "BP: 1990-01-23 FTSE: 1990-01-24\n", "BP: 1990-01-24 FTSE: 1990-01-25\n", "BP: 1990-01-25 FTSE: 1990-01-26\n", "BP: 1990-01-26 FTSE: 1990-01-29\n", "BP: 1990-01-29 FTSE: 1990-01-30\n", "BP: 1990-01-30 FTSE: 1990-01-31\n", "BP: 1990-01-31 FTSE: 1990-02-01\n", "BP: 1990-02-01 FTSE: 1990-02-02\n", "BP: 1990-02-02 FTSE: 1990-02-05\n", "BP: 1990-02-05 FTSE: 1990-02-06\n", "BP: 1990-02-06 FTSE: 1990-02-07\n", "BP: 1990-02-07 FTSE: 1990-02-08\n", "BP: 1990-02-08 FTSE: 1990-02-09\n", "BP: 1990-02-09 FTSE: 1990-02-12\n", "BP: 1990-02-12 FTSE: 1990-02-13\n", "BP: 1990-02-13 FTSE: 1990-02-14\n", "BP: 1990-02-14 FTSE: 1990-02-15\n", "BP: 1990-02-15 FTSE: 1990-02-16\n", "BP: 1990-02-16 FTSE: 1990-02-19\n", "BP: 1990-04-16 FTSE: 1990-04-17\n", "BP: 1990-04-17 FTSE: 1990-04-18\n", "BP: 1990-04-18 FTSE: 1990-04-19\n", "BP: 1990-04-19 FTSE: 1990-04-20\n", "BP: 1990-04-20 FTSE: 1990-04-23\n", "BP: 1990-04-23 FTSE: 1990-04-24\n", "BP: 1990-04-24 FTSE: 1990-04-25\n", "BP: 1990-04-25 FTSE: 1990-04-26\n", "BP: 1990-04-26 FTSE: 1990-04-27\n", "BP: 1990-04-27 FTSE: 1990-04-30\n", "BP: 1990-04-30 FTSE: 1990-05-01\n", "BP: 1990-05-01 FTSE: 1990-05-02\n", "BP: 1990-05-02 FTSE: 1990-05-03\n", "BP: 1990-05-03 FTSE: 1990-05-04\n", "BP: 1990-05-04 FTSE: 1990-05-08\n", "BP: 1990-05-07 FTSE: 1990-05-09\n", "BP: 1990-05-08 FTSE: 1990-05-10\n", "BP: 1990-05-09 FTSE: 1990-05-11\n", "BP: 1990-05-10 FTSE: 1990-05-14\n", "BP: 1990-05-11 FTSE: 1990-05-15\n", "BP: 1990-05-14 FTSE: 1990-05-16\n", "BP: 1990-05-15 FTSE: 1990-05-17\n", "BP: 1990-05-16 FTSE: 1990-05-18\n", "BP: 1990-05-17 FTSE: 1990-05-21\n", "BP: 1990-05-18 FTSE: 1990-05-22\n", "BP: 1990-05-21 FTSE: 1990-05-23\n", "BP: 1990-05-22 FTSE: 1990-05-24\n", "BP: 1990-05-23 FTSE: 1990-05-25\n", "BP: 1990-05-24 FTSE: 1990-05-29\n", "BP: 1990-05-25 FTSE: 1990-05-30\n", "BP: 1990-05-29 FTSE: 1990-05-31\n", "BP: 1990-05-30 FTSE: 1990-06-01\n", "BP: 1990-05-31 FTSE: 1990-06-04\n", "BP: 1990-06-01 FTSE: 1990-06-05\n", "BP: 1990-06-04 FTSE: 1990-06-06\n", "BP: 1990-06-05 FTSE: 1990-06-07\n", "BP: 1990-06-06 FTSE: 1990-06-08\n", "BP: 1990-06-07 FTSE: 1990-06-11\n", "BP: 1990-06-08 FTSE: 1990-06-12\n", "BP: 1990-06-11 FTSE: 1990-06-13\n", "BP: 1990-06-12 FTSE: 1990-06-14\n", "BP: 1990-06-13 FTSE: 1990-06-15\n", "BP: 1990-06-14 FTSE: 1990-06-18\n", "BP: 1990-06-15 FTSE: 1990-06-19\n", "BP: 1990-06-18 FTSE: 1990-06-20\n", "BP: 1990-06-19 FTSE: 1990-06-21\n", "BP: 1990-06-20 FTSE: 1990-06-22\n", "BP: 1990-06-21 FTSE: 1990-06-25\n", "BP: 1990-06-22 FTSE: 1990-06-26\n", "BP: 1990-06-25 FTSE: 1990-06-27\n", "BP: 1990-06-26 FTSE: 1990-06-28\n", "BP: 1990-06-27 FTSE: 1990-06-29\n", "BP: 1990-06-28 FTSE: 1990-07-02\n", "BP: 1990-06-29 FTSE: 1990-07-03\n", "BP: 1990-07-02 FTSE: 1990-07-04\n", "BP: 1990-07-03 FTSE: 1990-07-05\n", "BP: 1990-07-05 FTSE: 1990-07-06\n", "BP: 1990-07-06 FTSE: 1990-07-09\n", "BP: 1990-07-09 FTSE: 1990-07-10\n", "BP: 1990-07-10 FTSE: 1990-07-11\n", "BP: 1990-07-11 FTSE: 1990-07-12\n", "BP: 1990-07-12 FTSE: 1990-07-13\n", "BP: 1990-07-13 FTSE: 1990-07-16\n", "BP: 1990-07-16 FTSE: 1990-07-17\n", "BP: 1990-07-17 FTSE: 1990-07-18\n", "BP: 1990-07-18 FTSE: 1990-07-19\n", "BP: 1990-07-19 FTSE: 1990-07-20\n", "BP: 1990-07-20 FTSE: 1990-07-23\n", "BP: 1990-07-23 FTSE: 1990-07-24\n", "BP: 1990-07-24 FTSE: 1990-07-25\n", "BP: 1990-07-25 FTSE: 1990-07-26\n", "BP: 1990-07-26 FTSE: 1990-07-27\n", "BP: 1990-07-27 FTSE: 1990-07-30\n", "BP: 1990-07-30 FTSE: 1990-07-31\n", "BP: 1990-07-31 FTSE: 1990-08-01\n", "BP: 1990-08-01 FTSE: 1990-08-02\n", "BP: 1990-08-02 FTSE: 1990-08-03\n", "BP: 1990-08-03 FTSE: 1990-08-06\n", "BP: 1990-08-06 FTSE: 1990-08-07\n", "BP: 1990-08-07 FTSE: 1990-08-08\n", "BP: 1990-08-08 FTSE: 1990-08-09\n", "BP: 1990-08-09 FTSE: 1990-08-10\n", "BP: 1990-08-10 FTSE: 1990-08-13\n", "BP: 1990-08-13 FTSE: 1990-08-14\n", "BP: 1990-08-14 FTSE: 1990-08-15\n", "BP: 1990-08-15 FTSE: 1990-08-16\n", "BP: 1990-08-16 FTSE: 1990-08-17\n", "BP: 1990-08-17 FTSE: 1990-08-20\n", "BP: 1990-08-20 FTSE: 1990-08-21\n", "BP: 1990-08-21 FTSE: 1990-08-22\n", "BP: 1990-08-22 FTSE: 1990-08-23\n", "BP: 1990-08-23 FTSE: 1990-08-24\n", "BP: 1990-08-24 FTSE: 1990-08-28\n", "BP: 1990-08-27 FTSE: 1990-08-29\n", "BP: 1990-08-28 FTSE: 1990-08-30\n", "BP: 1990-08-29 FTSE: 1990-08-31\n", "BP: 1990-08-30 FTSE: 1990-09-03\n", "BP: 1990-08-31 FTSE: 1990-09-04\n", "BP: 1990-09-04 FTSE: 1990-09-05\n", "BP: 1990-09-05 FTSE: 1990-09-06\n", "BP: 1990-09-06 FTSE: 1990-09-07\n", "BP: 1990-09-07 FTSE: 1990-09-10\n", "BP: 1990-09-10 FTSE: 1990-09-11\n", "BP: 1990-09-11 FTSE: 1990-09-12\n", "BP: 1990-09-12 FTSE: 1990-09-13\n", "BP: 1990-09-13 FTSE: 1990-09-14\n", "BP: 1990-09-14 FTSE: 1990-09-17\n", "BP: 1990-09-17 FTSE: 1990-09-18\n", "BP: 1990-09-18 FTSE: 1990-09-19\n", "BP: 1990-09-19 FTSE: 1990-09-20\n", "BP: 1990-09-20 FTSE: 1990-09-21\n", "BP: 1990-09-21 FTSE: 1990-09-24\n", "BP: 1990-09-24 FTSE: 1990-09-25\n", "BP: 1990-09-25 FTSE: 1990-09-26\n", "BP: 1990-09-26 FTSE: 1990-09-27\n", "BP: 1990-09-27 FTSE: 1990-09-28\n", "BP: 1990-09-28 FTSE: 1990-10-01\n", "BP: 1990-10-01 FTSE: 1990-10-02\n", "BP: 1990-10-02 FTSE: 1990-10-03\n", "BP: 1990-10-03 FTSE: 1990-10-04\n", "BP: 1990-10-04 FTSE: 1990-10-05\n", "BP: 1990-10-05 FTSE: 1990-10-08\n", "BP: 1990-10-08 FTSE: 1990-10-09\n", "BP: 1990-10-09 FTSE: 1990-10-10\n", "BP: 1990-10-10 FTSE: 1990-10-11\n", "BP: 1990-10-11 FTSE: 1990-10-12\n", "BP: 1990-10-12 FTSE: 1990-10-15\n", "BP: 1990-10-15 FTSE: 1990-10-16\n", "BP: 1990-10-16 FTSE: 1990-10-17\n", "BP: 1990-10-17 FTSE: 1990-10-18\n", "BP: 1990-10-18 FTSE: 1990-10-19\n", "BP: 1990-10-19 FTSE: 1990-10-22\n", "BP: 1990-10-22 FTSE: 1990-10-23\n", "BP: 1990-10-23 FTSE: 1990-10-24\n", "BP: 1990-10-24 FTSE: 1990-10-25\n", "BP: 1990-10-25 FTSE: 1990-10-26\n", "BP: 1990-10-26 FTSE: 1990-10-29\n", "BP: 1990-10-29 FTSE: 1990-10-30\n", "BP: 1990-10-30 FTSE: 1990-10-31\n", "BP: 1990-10-31 FTSE: 1990-11-01\n", "BP: 1990-11-01 FTSE: 1990-11-02\n", "BP: 1990-11-02 FTSE: 1990-11-05\n", "BP: 1990-11-05 FTSE: 1990-11-06\n", "BP: 1990-11-06 FTSE: 1990-11-07\n", "BP: 1990-11-07 FTSE: 1990-11-08\n", "BP: 1990-11-08 FTSE: 1990-11-09\n", "BP: 1990-11-09 FTSE: 1990-11-12\n", "BP: 1990-11-12 FTSE: 1990-11-13\n", "BP: 1990-11-13 FTSE: 1990-11-14\n", "BP: 1990-11-14 FTSE: 1990-11-15\n", "BP: 1990-11-15 FTSE: 1990-11-16\n", "BP: 1990-11-16 FTSE: 1990-11-19\n", "BP: 1990-11-19 FTSE: 1990-11-20\n", "BP: 1990-11-20 FTSE: 1990-11-21\n", "BP: 1990-11-21 FTSE: 1990-11-22\n", "BP: 1990-12-26 FTSE: 1990-12-27\n", "BP: 1990-12-27 FTSE: 1990-12-28\n", "BP: 1990-12-28 FTSE: 1990-12-31\n", "BP: 1990-12-31 FTSE: 1991-01-02\n", "BP: 1991-01-02 FTSE: 1991-01-03\n", "BP: 1991-01-03 FTSE: 1991-01-04\n", "BP: 1991-01-04 FTSE: 1991-01-07\n", "BP: 1991-01-07 FTSE: 1991-01-08\n", "BP: 1991-01-08 FTSE: 1991-01-09\n", "BP: 1991-01-09 FTSE: 1991-01-10\n", "BP: 1991-01-10 FTSE: 1991-01-11\n", "BP: 1991-01-11 FTSE: 1991-01-14\n", "BP: 1991-01-14 FTSE: 1991-01-15\n", "BP: 1991-01-15 FTSE: 1991-01-16\n", "BP: 1991-01-16 FTSE: 1991-01-17\n", "BP: 1991-01-17 FTSE: 1991-01-18\n", "BP: 1991-01-18 FTSE: 1991-01-21\n", "BP: 1991-01-21 FTSE: 1991-01-22\n", "BP: 1991-01-22 FTSE: 1991-01-23\n", "BP: 1991-01-23 FTSE: 1991-01-24\n", "BP: 1991-01-24 FTSE: 1991-01-25\n", "BP: 1991-01-25 FTSE: 1991-01-28\n", "BP: 1991-01-28 FTSE: 1991-01-29\n", "BP: 1991-01-29 FTSE: 1991-01-30\n", "BP: 1991-01-30 FTSE: 1991-01-31\n", "BP: 1991-01-31 FTSE: 1991-02-01\n", "BP: 1991-02-01 FTSE: 1991-02-04\n", "BP: 1991-02-04 FTSE: 1991-02-05\n", "BP: 1991-02-05 FTSE: 1991-02-06\n", "BP: 1991-02-06 FTSE: 1991-02-07\n", "BP: 1991-02-07 FTSE: 1991-02-08\n", "BP: 1991-02-08 FTSE: 1991-02-11\n", "BP: 1991-02-11 FTSE: 1991-02-12\n", "BP: 1991-02-12 FTSE: 1991-02-13\n", "BP: 1991-02-13 FTSE: 1991-02-14\n", "BP: 1991-02-14 FTSE: 1991-02-15\n", "BP: 1991-02-15 FTSE: 1991-02-18\n", "BP: 1991-04-01 FTSE: 1991-04-02\n", "BP: 1991-04-02 FTSE: 1991-04-03\n", "BP: 1991-04-03 FTSE: 1991-04-04\n", "BP: 1991-04-04 FTSE: 1991-04-05\n", "BP: 1991-04-05 FTSE: 1991-04-08\n", "BP: 1991-04-08 FTSE: 1991-04-09\n", "BP: 1991-04-09 FTSE: 1991-04-10\n", "BP: 1991-04-10 FTSE: 1991-04-11\n", "BP: 1991-04-11 FTSE: 1991-04-12\n", "BP: 1991-04-12 FTSE: 1991-04-15\n", "BP: 1991-04-15 FTSE: 1991-04-16\n", "BP: 1991-04-16 FTSE: 1991-04-17\n", "BP: 1991-04-17 FTSE: 1991-04-18\n", "BP: 1991-04-18 FTSE: 1991-04-19\n", "BP: 1991-04-19 FTSE: 1991-04-22\n", "BP: 1991-04-22 FTSE: 1991-04-23\n", "BP: 1991-04-23 FTSE: 1991-04-24\n", "BP: 1991-04-24 FTSE: 1991-04-25\n", "BP: 1991-04-25 FTSE: 1991-04-26\n", "BP: 1991-04-26 FTSE: 1991-04-29\n", "BP: 1991-04-29 FTSE: 1991-04-30\n", "BP: 1991-04-30 FTSE: 1991-05-01\n", "BP: 1991-05-01 FTSE: 1991-05-02\n", "BP: 1991-05-02 FTSE: 1991-05-03\n", "BP: 1991-05-03 FTSE: 1991-05-07\n", "BP: 1991-05-06 FTSE: 1991-05-08\n", "BP: 1991-05-07 FTSE: 1991-05-09\n", "BP: 1991-05-08 FTSE: 1991-05-10\n", "BP: 1991-05-09 FTSE: 1991-05-13\n", "BP: 1991-05-10 FTSE: 1991-05-14\n", "BP: 1991-05-13 FTSE: 1991-05-15\n", "BP: 1991-05-14 FTSE: 1991-05-16\n", "BP: 1991-05-15 FTSE: 1991-05-17\n", "BP: 1991-05-16 FTSE: 1991-05-20\n", "BP: 1991-05-17 FTSE: 1991-05-21\n", "BP: 1991-05-20 FTSE: 1991-05-22\n", "BP: 1991-05-21 FTSE: 1991-05-23\n", "BP: 1991-05-22 FTSE: 1991-05-24\n", "BP: 1991-05-23 FTSE: 1991-05-28\n", "BP: 1991-05-24 FTSE: 1991-05-29\n", "BP: 1991-05-28 FTSE: 1991-05-30\n", "BP: 1991-05-29 FTSE: 1991-05-31\n", "BP: 1991-05-30 FTSE: 1991-06-03\n", "BP: 1991-05-31 FTSE: 1991-06-04\n", "BP: 1991-06-03 FTSE: 1991-06-05\n", "BP: 1991-06-04 FTSE: 1991-06-06\n", "BP: 1991-06-05 FTSE: 1991-06-07\n", "BP: 1991-06-06 FTSE: 1991-06-10\n", "BP: 1991-06-07 FTSE: 1991-06-11\n", "BP: 1991-06-10 FTSE: 1991-06-12\n", "BP: 1991-06-11 FTSE: 1991-06-13\n", "BP: 1991-06-12 FTSE: 1991-06-14\n", "BP: 1991-06-13 FTSE: 1991-06-17\n", "BP: 1991-06-14 FTSE: 1991-06-18\n", "BP: 1991-06-17 FTSE: 1991-06-19\n", "BP: 1991-06-18 FTSE: 1991-06-20\n", "BP: 1991-06-19 FTSE: 1991-06-21\n", "BP: 1991-06-20 FTSE: 1991-06-24\n", "BP: 1991-06-21 FTSE: 1991-06-25\n", "BP: 1991-06-24 FTSE: 1991-06-26\n", "BP: 1991-06-25 FTSE: 1991-06-27\n", "BP: 1991-06-26 FTSE: 1991-06-28\n", "BP: 1991-06-27 FTSE: 1991-07-01\n", "BP: 1991-06-28 FTSE: 1991-07-02\n", "BP: 1991-07-01 FTSE: 1991-07-03\n", "BP: 1991-07-02 FTSE: 1991-07-04\n", "BP: 1991-07-03 FTSE: 1991-07-05\n", "BP: 1991-07-05 FTSE: 1991-07-08\n", "BP: 1991-07-08 FTSE: 1991-07-09\n", "BP: 1991-07-09 FTSE: 1991-07-10\n", "BP: 1991-07-10 FTSE: 1991-07-11\n", "BP: 1991-07-11 FTSE: 1991-07-12\n", "BP: 1991-07-12 FTSE: 1991-07-15\n", "BP: 1991-07-15 FTSE: 1991-07-16\n", "BP: 1991-07-16 FTSE: 1991-07-17\n", "BP: 1991-07-17 FTSE: 1991-07-18\n", "BP: 1991-07-18 FTSE: 1991-07-19\n", "BP: 1991-07-19 FTSE: 1991-07-22\n", "BP: 1991-07-22 FTSE: 1991-07-23\n", "BP: 1991-07-23 FTSE: 1991-07-24\n", "BP: 1991-07-24 FTSE: 1991-07-25\n", "BP: 1991-07-25 FTSE: 1991-07-26\n", "BP: 1991-07-26 FTSE: 1991-07-29\n", "BP: 1991-07-29 FTSE: 1991-07-30\n", "BP: 1991-07-30 FTSE: 1991-07-31\n", "BP: 1991-07-31 FTSE: 1991-08-01\n", "BP: 1991-08-01 FTSE: 1991-08-02\n", "BP: 1991-08-02 FTSE: 1991-08-05\n", "BP: 1991-08-05 FTSE: 1991-08-06\n", "BP: 1991-08-06 FTSE: 1991-08-07\n", "BP: 1991-08-07 FTSE: 1991-08-08\n", "BP: 1991-08-08 FTSE: 1991-08-09\n", "BP: 1991-08-09 FTSE: 1991-08-12\n", "BP: 1991-08-12 FTSE: 1991-08-13\n", "BP: 1991-08-13 FTSE: 1991-08-14\n", "BP: 1991-08-14 FTSE: 1991-08-15\n", "BP: 1991-08-15 FTSE: 1991-08-16\n", "BP: 1991-08-16 FTSE: 1991-08-19\n", "BP: 1991-08-19 FTSE: 1991-08-20\n", "BP: 1991-08-20 FTSE: 1991-08-21\n", "BP: 1991-08-21 FTSE: 1991-08-22\n", "BP: 1991-08-22 FTSE: 1991-08-23\n", "BP: 1991-08-23 FTSE: 1991-08-27\n", "BP: 1991-08-26 FTSE: 1991-08-28\n", "BP: 1991-08-27 FTSE: 1991-08-29\n", "BP: 1991-08-28 FTSE: 1991-08-30\n", "BP: 1991-08-29 FTSE: 1991-09-02\n", "BP: 1991-08-30 FTSE: 1991-09-03\n", "BP: 1991-09-03 FTSE: 1991-09-04\n", "BP: 1991-09-04 FTSE: 1991-09-05\n", "BP: 1991-09-05 FTSE: 1991-09-06\n", "BP: 1991-09-06 FTSE: 1991-09-09\n", "BP: 1991-09-09 FTSE: 1991-09-10\n", "BP: 1991-09-10 FTSE: 1991-09-11\n", "BP: 1991-09-11 FTSE: 1991-09-12\n", "BP: 1991-09-12 FTSE: 1991-09-13\n", "BP: 1991-09-13 FTSE: 1991-09-16\n", "BP: 1991-09-16 FTSE: 1991-09-17\n", "BP: 1991-09-17 FTSE: 1991-09-18\n", "BP: 1991-09-18 FTSE: 1991-09-19\n", "BP: 1991-09-19 FTSE: 1991-09-20\n", "BP: 1991-09-20 FTSE: 1991-09-23\n", "BP: 1991-09-23 FTSE: 1991-09-24\n", "BP: 1991-09-24 FTSE: 1991-09-25\n", "BP: 1991-09-25 FTSE: 1991-09-26\n", "BP: 1991-09-26 FTSE: 1991-09-27\n", "BP: 1991-09-27 FTSE: 1991-09-30\n", "BP: 1991-09-30 FTSE: 1991-10-01\n", "BP: 1991-10-01 FTSE: 1991-10-02\n", "BP: 1991-10-02 FTSE: 1991-10-03\n", "BP: 1991-10-03 FTSE: 1991-10-04\n", "BP: 1991-10-04 FTSE: 1991-10-07\n", "BP: 1991-10-07 FTSE: 1991-10-08\n", "BP: 1991-10-08 FTSE: 1991-10-09\n", "BP: 1991-10-09 FTSE: 1991-10-10\n", "BP: 1991-10-10 FTSE: 1991-10-11\n", "BP: 1991-10-11 FTSE: 1991-10-14\n", "BP: 1991-10-14 FTSE: 1991-10-15\n", "BP: 1991-10-15 FTSE: 1991-10-16\n", "BP: 1991-10-16 FTSE: 1991-10-17\n", "BP: 1991-10-17 FTSE: 1991-10-18\n", "BP: 1991-10-18 FTSE: 1991-10-21\n", "BP: 1991-10-21 FTSE: 1991-10-22\n", "BP: 1991-10-22 FTSE: 1991-10-23\n", "BP: 1991-10-23 FTSE: 1991-10-24\n", "BP: 1991-10-24 FTSE: 1991-10-25\n", "BP: 1991-10-25 FTSE: 1991-10-28\n", "BP: 1991-10-28 FTSE: 1991-10-29\n", "BP: 1991-10-29 FTSE: 1991-10-30\n", "BP: 1991-10-30 FTSE: 1991-10-31\n", "BP: 1991-10-31 FTSE: 1991-11-01\n", "BP: 1991-11-01 FTSE: 1991-11-04\n", "BP: 1991-11-04 FTSE: 1991-11-05\n", "BP: 1991-11-05 FTSE: 1991-11-06\n", "BP: 1991-11-06 FTSE: 1991-11-07\n", "BP: 1991-11-07 FTSE: 1991-11-08\n", "BP: 1991-11-08 FTSE: 1991-11-11\n", "BP: 1991-11-11 FTSE: 1991-11-12\n", "BP: 1991-11-12 FTSE: 1991-11-13\n", "BP: 1991-11-13 FTSE: 1991-11-14\n", "BP: 1991-11-14 FTSE: 1991-11-15\n", "BP: 1991-11-15 FTSE: 1991-11-18\n", "BP: 1991-11-18 FTSE: 1991-11-19\n", "BP: 1991-11-19 FTSE: 1991-11-20\n", "BP: 1991-11-20 FTSE: 1991-11-21\n", "BP: 1991-11-21 FTSE: 1991-11-22\n", "BP: 1991-11-22 FTSE: 1991-11-25\n", "BP: 1991-11-25 FTSE: 1991-11-26\n", "BP: 1991-11-26 FTSE: 1991-11-27\n", "BP: 1991-11-27 FTSE: 1991-11-28\n", "BP: 1991-12-26 FTSE: 1991-12-27\n", "BP: 1991-12-27 FTSE: 1991-12-30\n", "BP: 1991-12-30 FTSE: 1991-12-31\n", "BP: 1991-12-31 FTSE: 1992-01-02\n", "BP: 1992-01-02 FTSE: 1992-01-03\n", "BP: 1992-01-03 FTSE: 1992-01-06\n", "BP: 1992-01-06 FTSE: 1992-01-07\n", "BP: 1992-01-07 FTSE: 1992-01-08\n", "BP: 1992-01-08 FTSE: 1992-01-09\n", "BP: 1992-01-09 FTSE: 1992-01-10\n", "BP: 1992-01-10 FTSE: 1992-01-13\n", "BP: 1992-01-13 FTSE: 1992-01-14\n", "BP: 1992-01-14 FTSE: 1992-01-15\n", "BP: 1992-01-15 FTSE: 1992-01-16\n", "BP: 1992-01-16 FTSE: 1992-01-17\n", "BP: 1992-01-17 FTSE: 1992-01-20\n", "BP: 1992-01-20 FTSE: 1992-01-21\n", "BP: 1992-01-21 FTSE: 1992-01-22\n", "BP: 1992-01-22 FTSE: 1992-01-23\n", "BP: 1992-01-23 FTSE: 1992-01-24\n", "BP: 1992-01-24 FTSE: 1992-01-27\n", "BP: 1992-01-27 FTSE: 1992-01-28\n", "BP: 1992-01-28 FTSE: 1992-01-29\n", "BP: 1992-01-29 FTSE: 1992-01-30\n", "BP: 1992-01-30 FTSE: 1992-01-31\n", "BP: 1992-01-31 FTSE: 1992-02-03\n", "BP: 1992-02-03 FTSE: 1992-02-04\n", "BP: 1992-02-04 FTSE: 1992-02-05\n", "BP: 1992-02-05 FTSE: 1992-02-06\n", "BP: 1992-02-06 FTSE: 1992-02-07\n", "BP: 1992-02-07 FTSE: 1992-02-10\n", "BP: 1992-02-10 FTSE: 1992-02-11\n", "BP: 1992-02-11 FTSE: 1992-02-12\n", "BP: 1992-02-12 FTSE: 1992-02-13\n", "BP: 1992-02-13 FTSE: 1992-02-14\n", "BP: 1992-02-14 FTSE: 1992-02-17\n", "BP: 1992-04-20 FTSE: 1992-04-21\n", "BP: 1992-04-21 FTSE: 1992-04-22\n", "BP: 1992-04-22 FTSE: 1992-04-23\n", "BP: 1992-04-23 FTSE: 1992-04-24\n", "BP: 1992-04-24 FTSE: 1992-04-27\n", "BP: 1992-04-27 FTSE: 1992-04-28\n", "BP: 1992-04-28 FTSE: 1992-04-29\n", "BP: 1992-04-29 FTSE: 1992-04-30\n", "BP: 1992-04-30 FTSE: 1992-05-01\n", "BP: 1992-05-01 FTSE: 1992-05-05\n", "BP: 1992-05-04 FTSE: 1992-05-06\n", "BP: 1992-05-05 FTSE: 1992-05-07\n", "BP: 1992-05-06 FTSE: 1992-05-08\n", "BP: 1992-05-07 FTSE: 1992-05-11\n", "BP: 1992-05-08 FTSE: 1992-05-12\n", "BP: 1992-05-11 FTSE: 1992-05-13\n", "BP: 1992-05-12 FTSE: 1992-05-14\n", "BP: 1992-05-13 FTSE: 1992-05-15\n", "BP: 1992-05-14 FTSE: 1992-05-18\n", "BP: 1992-05-15 FTSE: 1992-05-19\n", "BP: 1992-05-18 FTSE: 1992-05-20\n", "BP: 1992-05-19 FTSE: 1992-05-21\n", "BP: 1992-05-20 FTSE: 1992-05-22\n", "BP: 1992-05-21 FTSE: 1992-05-26\n", "BP: 1992-05-22 FTSE: 1992-05-27\n", "BP: 1992-05-26 FTSE: 1992-05-28\n", "BP: 1992-05-27 FTSE: 1992-05-29\n", "BP: 1992-05-28 FTSE: 1992-06-01\n", "BP: 1992-05-29 FTSE: 1992-06-02\n", "BP: 1992-06-01 FTSE: 1992-06-03\n", "BP: 1992-06-02 FTSE: 1992-06-04\n", "BP: 1992-06-03 FTSE: 1992-06-05\n", "BP: 1992-06-04 FTSE: 1992-06-08\n", "BP: 1992-06-05 FTSE: 1992-06-09\n", "BP: 1992-06-08 FTSE: 1992-06-10\n", "BP: 1992-06-09 FTSE: 1992-06-11\n", "BP: 1992-06-10 FTSE: 1992-06-12\n", "BP: 1992-06-11 FTSE: 1992-06-15\n", "BP: 1992-06-12 FTSE: 1992-06-16\n", "BP: 1992-06-15 FTSE: 1992-06-17\n", "BP: 1992-06-16 FTSE: 1992-06-18\n", "BP: 1992-06-17 FTSE: 1992-06-19\n", "BP: 1992-06-18 FTSE: 1992-06-22\n", "BP: 1992-06-19 FTSE: 1992-06-23\n", "BP: 1992-06-22 FTSE: 1992-06-24\n", "BP: 1992-06-23 FTSE: 1992-06-25\n", "BP: 1992-06-24 FTSE: 1992-06-26\n", "BP: 1992-06-25 FTSE: 1992-06-29\n", "BP: 1992-06-26 FTSE: 1992-06-30\n", "BP: 1992-06-29 FTSE: 1992-07-01\n", "BP: 1992-06-30 FTSE: 1992-07-02\n", "BP: 1992-07-01 FTSE: 1992-07-03\n", "BP: 1992-07-02 FTSE: 1992-07-06\n", "BP: 1992-07-06 FTSE: 1992-07-07\n", "BP: 1992-07-07 FTSE: 1992-07-08\n", "BP: 1992-07-08 FTSE: 1992-07-09\n", "BP: 1992-07-09 FTSE: 1992-07-10\n", "BP: 1992-07-10 FTSE: 1992-07-13\n", "BP: 1992-07-13 FTSE: 1992-07-14\n", "BP: 1992-07-14 FTSE: 1992-07-15\n", "BP: 1992-07-15 FTSE: 1992-07-16\n", "BP: 1992-07-16 FTSE: 1992-07-17\n", "BP: 1992-07-17 FTSE: 1992-07-20\n", "BP: 1992-07-20 FTSE: 1992-07-21\n", "BP: 1992-07-21 FTSE: 1992-07-22\n", "BP: 1992-07-22 FTSE: 1992-07-23\n", "BP: 1992-07-23 FTSE: 1992-07-24\n", "BP: 1992-07-24 FTSE: 1992-07-27\n", "BP: 1992-07-27 FTSE: 1992-07-28\n", "BP: 1992-07-28 FTSE: 1992-07-29\n", "BP: 1992-07-29 FTSE: 1992-07-30\n", "BP: 1992-07-30 FTSE: 1992-07-31\n", "BP: 1992-07-31 FTSE: 1992-08-03\n", "BP: 1992-08-03 FTSE: 1992-08-04\n", "BP: 1992-08-04 FTSE: 1992-08-05\n", "BP: 1992-08-05 FTSE: 1992-08-06\n", "BP: 1992-08-06 FTSE: 1992-08-07\n", "BP: 1992-08-07 FTSE: 1992-08-10\n", "BP: 1992-08-10 FTSE: 1992-08-11\n", "BP: 1992-08-11 FTSE: 1992-08-12\n", "BP: 1992-08-12 FTSE: 1992-08-13\n", "BP: 1992-08-13 FTSE: 1992-08-14\n", "BP: 1992-08-14 FTSE: 1992-08-17\n", "BP: 1992-08-17 FTSE: 1992-08-18\n", "BP: 1992-08-18 FTSE: 1992-08-19\n", "BP: 1992-08-19 FTSE: 1992-08-20\n", "BP: 1992-08-20 FTSE: 1992-08-21\n", "BP: 1992-08-21 FTSE: 1992-08-24\n", "BP: 1992-08-24 FTSE: 1992-08-25\n", "BP: 1992-08-25 FTSE: 1992-08-26\n", "BP: 1992-08-26 FTSE: 1992-08-27\n", "BP: 1992-08-27 FTSE: 1992-08-28\n", "BP: 1992-08-28 FTSE: 1992-09-01\n", "BP: 1992-08-31 FTSE: 1992-09-02\n", "BP: 1992-09-01 FTSE: 1992-09-03\n", "BP: 1992-09-02 FTSE: 1992-09-04\n", "BP: 1992-09-03 FTSE: 1992-09-07\n", "BP: 1992-09-04 FTSE: 1992-09-08\n", "BP: 1992-09-08 FTSE: 1992-09-09\n", "BP: 1992-09-09 FTSE: 1992-09-10\n", "BP: 1992-09-10 FTSE: 1992-09-11\n", "BP: 1992-09-11 FTSE: 1992-09-14\n", "BP: 1992-09-14 FTSE: 1992-09-15\n", "BP: 1992-09-15 FTSE: 1992-09-16\n", "BP: 1992-09-16 FTSE: 1992-09-17\n", "BP: 1992-09-17 FTSE: 1992-09-18\n", "BP: 1992-09-18 FTSE: 1992-09-21\n", "BP: 1992-09-21 FTSE: 1992-09-22\n", "BP: 1992-09-22 FTSE: 1992-09-23\n", "BP: 1992-09-23 FTSE: 1992-09-24\n", "BP: 1992-09-24 FTSE: 1992-09-25\n", "BP: 1992-09-25 FTSE: 1992-09-28\n", "BP: 1992-09-28 FTSE: 1992-09-29\n", "BP: 1992-09-29 FTSE: 1992-09-30\n", "BP: 1992-09-30 FTSE: 1992-10-01\n", "BP: 1992-10-01 FTSE: 1992-10-02\n", "BP: 1992-10-02 FTSE: 1992-10-05\n", "BP: 1992-10-05 FTSE: 1992-10-06\n", "BP: 1992-10-06 FTSE: 1992-10-07\n", "BP: 1992-10-07 FTSE: 1992-10-08\n", "BP: 1992-10-08 FTSE: 1992-10-09\n", "BP: 1992-10-09 FTSE: 1992-10-12\n", "BP: 1992-10-12 FTSE: 1992-10-13\n", "BP: 1992-10-13 FTSE: 1992-10-14\n", "BP: 1992-10-14 FTSE: 1992-10-15\n", "BP: 1992-10-15 FTSE: 1992-10-16\n", "BP: 1992-10-16 FTSE: 1992-10-19\n", "BP: 1992-10-19 FTSE: 1992-10-20\n", "BP: 1992-10-20 FTSE: 1992-10-21\n", "BP: 1992-10-21 FTSE: 1992-10-22\n", "BP: 1992-10-22 FTSE: 1992-10-23\n", "BP: 1992-10-23 FTSE: 1992-10-26\n", "BP: 1992-10-26 FTSE: 1992-10-27\n", "BP: 1992-10-27 FTSE: 1992-10-28\n", "BP: 1992-10-28 FTSE: 1992-10-29\n", "BP: 1992-10-29 FTSE: 1992-10-30\n", "BP: 1992-10-30 FTSE: 1992-11-02\n", "BP: 1992-11-02 FTSE: 1992-11-03\n", "BP: 1992-11-03 FTSE: 1992-11-04\n", "BP: 1992-11-04 FTSE: 1992-11-05\n", "BP: 1992-11-05 FTSE: 1992-11-06\n", "BP: 1992-11-06 FTSE: 1992-11-09\n", "BP: 1992-11-09 FTSE: 1992-11-10\n", "BP: 1992-11-10 FTSE: 1992-11-11\n", "BP: 1992-11-11 FTSE: 1992-11-12\n", "BP: 1992-11-12 FTSE: 1992-11-13\n", "BP: 1992-11-13 FTSE: 1992-11-16\n", "BP: 1992-11-16 FTSE: 1992-11-17\n", "BP: 1992-11-17 FTSE: 1992-11-18\n", "BP: 1992-11-18 FTSE: 1992-11-19\n", "BP: 1992-11-19 FTSE: 1992-11-20\n", "BP: 1992-11-20 FTSE: 1992-11-23\n", "BP: 1992-11-23 FTSE: 1992-11-24\n", "BP: 1992-11-24 FTSE: 1992-11-25\n", "BP: 1992-11-25 FTSE: 1992-11-26\n", "BP: 1992-12-28 FTSE: 1992-12-29\n", "BP: 1992-12-29 FTSE: 1992-12-30\n", "BP: 1992-12-30 FTSE: 1992-12-31\n", "BP: 1992-12-31 FTSE: 1993-01-04\n", "BP: 1993-01-04 FTSE: 1993-01-05\n", "BP: 1993-01-05 FTSE: 1993-01-06\n", "BP: 1993-01-06 FTSE: 1993-01-07\n", "BP: 1993-01-07 FTSE: 1993-01-08\n", "BP: 1993-01-08 FTSE: 1993-01-11\n", "BP: 1993-01-11 FTSE: 1993-01-12\n", "BP: 1993-01-12 FTSE: 1993-01-13\n", "BP: 1993-01-13 FTSE: 1993-01-14\n", "BP: 1993-01-14 FTSE: 1993-01-15\n", "BP: 1993-01-15 FTSE: 1993-01-18\n", "BP: 1993-01-18 FTSE: 1993-01-19\n", "BP: 1993-01-19 FTSE: 1993-01-20\n", "BP: 1993-01-20 FTSE: 1993-01-21\n", "BP: 1993-01-21 FTSE: 1993-01-22\n", "BP: 1993-01-22 FTSE: 1993-01-25\n", "BP: 1993-01-25 FTSE: 1993-01-26\n", "BP: 1993-01-26 FTSE: 1993-01-27\n", "BP: 1993-01-27 FTSE: 1993-01-28\n", "BP: 1993-01-28 FTSE: 1993-01-29\n", "BP: 1993-01-29 FTSE: 1993-02-01\n", "BP: 1993-02-01 FTSE: 1993-02-02\n", "BP: 1993-02-02 FTSE: 1993-02-03\n", "BP: 1993-02-03 FTSE: 1993-02-04\n", "BP: 1993-02-04 FTSE: 1993-02-05\n", "BP: 1993-02-05 FTSE: 1993-02-08\n", "BP: 1993-02-08 FTSE: 1993-02-09\n", "BP: 1993-02-09 FTSE: 1993-02-10\n", "BP: 1993-02-10 FTSE: 1993-02-11\n", "BP: 1993-02-11 FTSE: 1993-02-12\n", "BP: 1993-02-12 FTSE: 1993-02-15\n", "BP: 1993-04-12 FTSE: 1993-04-13\n", "BP: 1993-04-13 FTSE: 1993-04-14\n", "BP: 1993-04-14 FTSE: 1993-04-15\n", "BP: 1993-04-15 FTSE: 1993-04-16\n", "BP: 1993-04-16 FTSE: 1993-04-19\n", "BP: 1993-04-19 FTSE: 1993-04-20\n", "BP: 1993-04-20 FTSE: 1993-04-21\n", "BP: 1993-04-21 FTSE: 1993-04-22\n", "BP: 1993-04-22 FTSE: 1993-04-23\n", "BP: 1993-04-23 FTSE: 1993-04-26\n", "BP: 1993-04-26 FTSE: 1993-04-27\n", "BP: 1993-04-27 FTSE: 1993-04-28\n", "BP: 1993-04-28 FTSE: 1993-04-29\n", "BP: 1993-04-29 FTSE: 1993-04-30\n", "BP: 1993-04-30 FTSE: 1993-05-04\n", "BP: 1993-05-03 FTSE: 1993-05-05\n", "BP: 1993-05-04 FTSE: 1993-05-06\n", "BP: 1993-05-05 FTSE: 1993-05-07\n", "BP: 1993-05-06 FTSE: 1993-05-10\n", "BP: 1993-05-07 FTSE: 1993-05-11\n", "BP: 1993-05-10 FTSE: 1993-05-12\n", "BP: 1993-05-11 FTSE: 1993-05-13\n", "BP: 1993-05-12 FTSE: 1993-05-14\n", "BP: 1993-05-13 FTSE: 1993-05-17\n", "BP: 1993-05-14 FTSE: 1993-05-18\n", "BP: 1993-05-17 FTSE: 1993-05-19\n", "BP: 1993-05-18 FTSE: 1993-05-20\n", "BP: 1993-05-19 FTSE: 1993-05-21\n", "BP: 1993-05-20 FTSE: 1993-05-24\n", "BP: 1993-05-21 FTSE: 1993-05-25\n", "BP: 1993-05-24 FTSE: 1993-05-26\n", "BP: 1993-05-25 FTSE: 1993-05-27\n", "BP: 1993-05-26 FTSE: 1993-05-28\n", "BP: 1993-05-27 FTSE: 1993-06-01\n", "BP: 1993-05-28 FTSE: 1993-06-02\n", "BP: 1993-06-01 FTSE: 1993-06-03\n", "BP: 1993-06-02 FTSE: 1993-06-04\n", "BP: 1993-06-03 FTSE: 1993-06-07\n", "BP: 1993-06-04 FTSE: 1993-06-08\n", "BP: 1993-06-07 FTSE: 1993-06-09\n", "BP: 1993-06-08 FTSE: 1993-06-10\n", "BP: 1993-06-09 FTSE: 1993-06-11\n", "BP: 1993-06-10 FTSE: 1993-06-14\n", "BP: 1993-06-11 FTSE: 1993-06-15\n", "BP: 1993-06-14 FTSE: 1993-06-16\n", "BP: 1993-06-15 FTSE: 1993-06-17\n", "BP: 1993-06-16 FTSE: 1993-06-18\n", "BP: 1993-06-17 FTSE: 1993-06-21\n", "BP: 1993-06-18 FTSE: 1993-06-22\n", "BP: 1993-06-21 FTSE: 1993-06-23\n", "BP: 1993-06-22 FTSE: 1993-06-24\n", "BP: 1993-06-23 FTSE: 1993-06-25\n", "BP: 1993-06-24 FTSE: 1993-06-28\n", "BP: 1993-06-25 FTSE: 1993-06-29\n", "BP: 1993-06-28 FTSE: 1993-06-30\n", "BP: 1993-06-29 FTSE: 1993-07-01\n", "BP: 1993-06-30 FTSE: 1993-07-02\n", "BP: 1993-07-01 FTSE: 1993-07-05\n", "BP: 1993-07-02 FTSE: 1993-07-06\n", "BP: 1993-07-06 FTSE: 1993-07-07\n", "BP: 1993-07-07 FTSE: 1993-07-08\n", "BP: 1993-07-08 FTSE: 1993-07-09\n", "BP: 1993-07-09 FTSE: 1993-07-12\n", "BP: 1993-07-12 FTSE: 1993-07-13\n", "BP: 1993-07-13 FTSE: 1993-07-14\n", "BP: 1993-07-14 FTSE: 1993-07-15\n", "BP: 1993-07-15 FTSE: 1993-07-16\n", "BP: 1993-07-16 FTSE: 1993-07-19\n", "BP: 1993-07-19 FTSE: 1993-07-20\n", "BP: 1993-07-20 FTSE: 1993-07-21\n", "BP: 1993-07-21 FTSE: 1993-07-22\n", "BP: 1993-07-22 FTSE: 1993-07-23\n", "BP: 1993-07-23 FTSE: 1993-07-26\n", "BP: 1993-07-26 FTSE: 1993-07-27\n", "BP: 1993-07-27 FTSE: 1993-07-28\n", "BP: 1993-07-28 FTSE: 1993-07-29\n", "BP: 1993-07-29 FTSE: 1993-07-30\n", "BP: 1993-07-30 FTSE: 1993-08-02\n", "BP: 1993-08-02 FTSE: 1993-08-03\n", "BP: 1993-08-03 FTSE: 1993-08-04\n", "BP: 1993-08-04 FTSE: 1993-08-05\n", "BP: 1993-08-05 FTSE: 1993-08-06\n", "BP: 1993-08-06 FTSE: 1993-08-09\n", "BP: 1993-08-09 FTSE: 1993-08-10\n", "BP: 1993-08-10 FTSE: 1993-08-11\n", "BP: 1993-08-11 FTSE: 1993-08-12\n", "BP: 1993-08-12 FTSE: 1993-08-13\n", "BP: 1993-08-13 FTSE: 1993-08-16\n", "BP: 1993-08-16 FTSE: 1993-08-17\n", "BP: 1993-08-17 FTSE: 1993-08-18\n", "BP: 1993-08-18 FTSE: 1993-08-19\n", "BP: 1993-08-19 FTSE: 1993-08-20\n", "BP: 1993-08-20 FTSE: 1993-08-23\n", "BP: 1993-08-23 FTSE: 1993-08-24\n", "BP: 1993-08-24 FTSE: 1993-08-25\n", "BP: 1993-08-25 FTSE: 1993-08-26\n", "BP: 1993-08-26 FTSE: 1993-08-27\n", "BP: 1993-08-27 FTSE: 1993-08-31\n", "BP: 1993-08-30 FTSE: 1993-09-01\n", "BP: 1993-08-31 FTSE: 1993-09-02\n", "BP: 1993-09-01 FTSE: 1993-09-03\n", "BP: 1993-09-02 FTSE: 1993-09-06\n", "BP: 1993-09-03 FTSE: 1993-09-07\n", "BP: 1993-09-07 FTSE: 1993-09-08\n", "BP: 1993-09-08 FTSE: 1993-09-09\n", "BP: 1993-09-09 FTSE: 1993-09-10\n", "BP: 1993-09-10 FTSE: 1993-09-13\n", "BP: 1993-09-13 FTSE: 1993-09-14\n", "BP: 1993-09-14 FTSE: 1993-09-15\n", "BP: 1993-09-15 FTSE: 1993-09-16\n", "BP: 1993-09-16 FTSE: 1993-09-17\n", "BP: 1993-09-17 FTSE: 1993-09-20\n", "BP: 1993-09-20 FTSE: 1993-09-21\n", "BP: 1993-09-21 FTSE: 1993-09-22\n", "BP: 1993-09-22 FTSE: 1993-09-23\n", "BP: 1993-09-23 FTSE: 1993-09-24\n", "BP: 1993-09-24 FTSE: 1993-09-27\n", "BP: 1993-09-27 FTSE: 1993-09-28\n", "BP: 1993-09-28 FTSE: 1993-09-29\n", "BP: 1993-09-29 FTSE: 1993-09-30\n", "BP: 1993-09-30 FTSE: 1993-10-01\n", "BP: 1993-10-01 FTSE: 1993-10-04\n", "BP: 1993-10-04 FTSE: 1993-10-05\n", "BP: 1993-10-05 FTSE: 1993-10-06\n", "BP: 1993-10-06 FTSE: 1993-10-07\n", "BP: 1993-10-07 FTSE: 1993-10-08\n", "BP: 1993-10-08 FTSE: 1993-10-11\n", "BP: 1993-10-11 FTSE: 1993-10-12\n", "BP: 1993-10-12 FTSE: 1993-10-13\n", "BP: 1993-10-13 FTSE: 1993-10-14\n", "BP: 1993-10-14 FTSE: 1993-10-15\n", "BP: 1993-10-15 FTSE: 1993-10-18\n", "BP: 1993-10-18 FTSE: 1993-10-19\n", "BP: 1993-10-19 FTSE: 1993-10-20\n", "BP: 1993-10-20 FTSE: 1993-10-21\n", "BP: 1993-10-21 FTSE: 1993-10-22\n", "BP: 1993-10-22 FTSE: 1993-10-25\n", "BP: 1993-10-25 FTSE: 1993-10-26\n", "BP: 1993-10-26 FTSE: 1993-10-27\n", "BP: 1993-10-27 FTSE: 1993-10-28\n", "BP: 1993-10-28 FTSE: 1993-10-29\n", "BP: 1993-10-29 FTSE: 1993-11-01\n", "BP: 1993-11-01 FTSE: 1993-11-02\n", "BP: 1993-11-02 FTSE: 1993-11-03\n", "BP: 1993-11-03 FTSE: 1993-11-04\n", "BP: 1993-11-04 FTSE: 1993-11-05\n", "BP: 1993-11-05 FTSE: 1993-11-08\n", "BP: 1993-11-08 FTSE: 1993-11-09\n", "BP: 1993-11-09 FTSE: 1993-11-10\n", "BP: 1993-11-10 FTSE: 1993-11-11\n", "BP: 1993-11-11 FTSE: 1993-11-12\n", "BP: 1993-11-12 FTSE: 1993-11-15\n", "BP: 1993-11-15 FTSE: 1993-11-16\n", "BP: 1993-11-16 FTSE: 1993-11-17\n", "BP: 1993-11-17 FTSE: 1993-11-18\n", "BP: 1993-11-18 FTSE: 1993-11-19\n", "BP: 1993-11-19 FTSE: 1993-11-22\n", "BP: 1993-11-22 FTSE: 1993-11-23\n", "BP: 1993-11-23 FTSE: 1993-11-24\n", "BP: 1993-11-24 FTSE: 1993-11-25\n", "BP: 1993-12-27 FTSE: 1993-12-24\n", "BP: 1993-12-28 FTSE: 1993-12-29\n", "BP: 1993-12-29 FTSE: 1993-12-30\n", "BP: 1993-12-30 FTSE: 1993-12-31\n", "BP: 1993-12-31 FTSE: 1994-01-04\n", "BP: 1994-01-03 FTSE: 1994-01-05\n", "BP: 1994-01-04 FTSE: 1994-01-06\n", "BP: 1994-01-05 FTSE: 1994-01-07\n", "BP: 1994-01-06 FTSE: 1994-01-10\n", "BP: 1994-01-07 FTSE: 1994-01-11\n", "BP: 1994-01-10 FTSE: 1994-01-12\n", "BP: 1994-01-11 FTSE: 1994-01-13\n", "BP: 1994-01-12 FTSE: 1994-01-14\n", "BP: 1994-01-13 FTSE: 1994-01-17\n", "BP: 1994-01-14 FTSE: 1994-01-18\n", "BP: 1994-01-17 FTSE: 1994-01-19\n", "BP: 1994-01-18 FTSE: 1994-01-20\n", "BP: 1994-01-19 FTSE: 1994-01-21\n", "BP: 1994-01-20 FTSE: 1994-01-24\n", "BP: 1994-01-21 FTSE: 1994-01-25\n", "BP: 1994-01-24 FTSE: 1994-01-26\n", "BP: 1994-01-25 FTSE: 1994-01-27\n", "BP: 1994-01-26 FTSE: 1994-01-28\n", "BP: 1994-01-27 FTSE: 1994-01-31\n", "BP: 1994-01-28 FTSE: 1994-02-01\n", "BP: 1994-01-31 FTSE: 1994-02-02\n", "BP: 1994-02-01 FTSE: 1994-02-03\n", "BP: 1994-02-02 FTSE: 1994-02-04\n", "BP: 1994-02-03 FTSE: 1994-02-07\n", "BP: 1994-02-04 FTSE: 1994-02-08\n", "BP: 1994-02-07 FTSE: 1994-02-09\n", "BP: 1994-02-08 FTSE: 1994-02-10\n", "BP: 1994-02-09 FTSE: 1994-02-11\n", "BP: 1994-02-10 FTSE: 1994-02-14\n", "BP: 1994-02-11 FTSE: 1994-02-15\n", "BP: 1994-02-14 FTSE: 1994-02-16\n", "BP: 1994-02-15 FTSE: 1994-02-17\n", "BP: 1994-02-16 FTSE: 1994-02-18\n", "BP: 1994-02-17 FTSE: 1994-02-21\n", "BP: 1994-02-18 FTSE: 1994-02-22\n", "BP: 1994-02-22 FTSE: 1994-02-23\n", "BP: 1994-02-23 FTSE: 1994-02-24\n", "BP: 1994-02-24 FTSE: 1994-02-25\n", "BP: 1994-02-25 FTSE: 1994-02-28\n", "BP: 1994-02-28 FTSE: 1994-03-01\n", "BP: 1994-03-01 FTSE: 1994-03-02\n", "BP: 1994-03-02 FTSE: 1994-03-03\n", "BP: 1994-03-03 FTSE: 1994-03-04\n", "BP: 1994-03-04 FTSE: 1994-03-07\n", "BP: 1994-03-07 FTSE: 1994-03-08\n", "BP: 1994-03-08 FTSE: 1994-03-09\n", "BP: 1994-03-09 FTSE: 1994-03-10\n", "BP: 1994-03-10 FTSE: 1994-03-11\n", "BP: 1994-03-11 FTSE: 1994-03-14\n", "BP: 1994-03-14 FTSE: 1994-03-15\n", "BP: 1994-03-15 FTSE: 1994-03-16\n", "BP: 1994-03-16 FTSE: 1994-03-17\n", "BP: 1994-03-17 FTSE: 1994-03-18\n", "BP: 1994-03-18 FTSE: 1994-03-21\n", "BP: 1994-03-21 FTSE: 1994-03-22\n", "BP: 1994-03-22 FTSE: 1994-03-23\n", "BP: 1994-03-23 FTSE: 1994-03-24\n", "BP: 1994-03-24 FTSE: 1994-03-25\n", "BP: 1994-03-25 FTSE: 1994-03-28\n", "BP: 1994-03-28 FTSE: 1994-03-29\n", "BP: 1994-03-29 FTSE: 1994-03-30\n", "BP: 1994-03-30 FTSE: 1994-03-31\n", "BP: 1994-03-31 FTSE: 1994-04-05\n", "BP: 1994-04-04 FTSE: 1994-04-06\n", "BP: 1994-04-05 FTSE: 1994-04-07\n", "BP: 1994-04-06 FTSE: 1994-04-08\n", "BP: 1994-04-07 FTSE: 1994-04-11\n", "BP: 1994-04-08 FTSE: 1994-04-12\n", "BP: 1994-04-11 FTSE: 1994-04-13\n", "BP: 1994-04-12 FTSE: 1994-04-14\n", "BP: 1994-04-13 FTSE: 1994-04-15\n", "BP: 1994-04-14 FTSE: 1994-04-18\n", "BP: 1994-04-15 FTSE: 1994-04-19\n", "BP: 1994-04-18 FTSE: 1994-04-20\n", "BP: 1994-04-19 FTSE: 1994-04-21\n", "BP: 1994-04-20 FTSE: 1994-04-22\n", "BP: 1994-04-21 FTSE: 1994-04-25\n", "BP: 1994-04-22 FTSE: 1994-04-26\n", "BP: 1994-04-25 FTSE: 1994-04-27\n", "BP: 1994-04-26 FTSE: 1994-04-28\n", "BP: 1994-04-28 FTSE: 1994-04-29\n", "BP: 1994-04-29 FTSE: 1994-05-03\n", "BP: 1994-05-02 FTSE: 1994-05-04\n", "BP: 1994-05-03 FTSE: 1994-05-05\n", "BP: 1994-05-04 FTSE: 1994-05-06\n", "BP: 1994-05-05 FTSE: 1994-05-09\n", "BP: 1994-05-06 FTSE: 1994-05-10\n", "BP: 1994-05-09 FTSE: 1994-05-11\n", "BP: 1994-05-10 FTSE: 1994-05-12\n", "BP: 1994-05-11 FTSE: 1994-05-13\n", "BP: 1994-05-12 FTSE: 1994-05-16\n", "BP: 1994-05-13 FTSE: 1994-05-17\n", "BP: 1994-05-16 FTSE: 1994-05-18\n", "BP: 1994-05-17 FTSE: 1994-05-19\n", "BP: 1994-05-18 FTSE: 1994-05-20\n", "BP: 1994-05-19 FTSE: 1994-05-23\n", "BP: 1994-05-20 FTSE: 1994-05-24\n", "BP: 1994-05-23 FTSE: 1994-05-25\n", "BP: 1994-05-24 FTSE: 1994-05-26\n", "BP: 1994-05-25 FTSE: 1994-05-27\n", "BP: 1994-05-26 FTSE: 1994-05-31\n", "BP: 1994-05-27 FTSE: 1994-06-01\n", "BP: 1994-05-31 FTSE: 1994-06-02\n", "BP: 1994-06-01 FTSE: 1994-06-03\n", "BP: 1994-06-02 FTSE: 1994-06-06\n", "BP: 1994-06-03 FTSE: 1994-06-07\n", "BP: 1994-06-06 FTSE: 1994-06-08\n", "BP: 1994-06-07 FTSE: 1994-06-09\n", "BP: 1994-06-08 FTSE: 1994-06-10\n", "BP: 1994-06-09 FTSE: 1994-06-13\n", "BP: 1994-06-10 FTSE: 1994-06-14\n", "BP: 1994-06-13 FTSE: 1994-06-15\n", "BP: 1994-06-14 FTSE: 1994-06-16\n", "BP: 1994-06-15 FTSE: 1994-06-17\n", "BP: 1994-06-16 FTSE: 1994-06-20\n", "BP: 1994-06-17 FTSE: 1994-06-21\n", "BP: 1994-06-20 FTSE: 1994-06-22\n", "BP: 1994-06-21 FTSE: 1994-06-23\n", "BP: 1994-06-22 FTSE: 1994-06-24\n", "BP: 1994-06-23 FTSE: 1994-06-27\n", "BP: 1994-06-24 FTSE: 1994-06-28\n", "BP: 1994-06-27 FTSE: 1994-06-29\n", "BP: 1994-06-28 FTSE: 1994-06-30\n", "BP: 1994-06-29 FTSE: 1994-07-01\n", "BP: 1994-06-30 FTSE: 1994-07-04\n", "BP: 1994-07-01 FTSE: 1994-07-05\n", "BP: 1994-07-05 FTSE: 1994-07-06\n", "BP: 1994-07-06 FTSE: 1994-07-07\n", "BP: 1994-07-07 FTSE: 1994-07-08\n", "BP: 1994-07-08 FTSE: 1994-07-11\n", "BP: 1994-07-11 FTSE: 1994-07-12\n", "BP: 1994-07-12 FTSE: 1994-07-13\n", "BP: 1994-07-13 FTSE: 1994-07-14\n", "BP: 1994-07-14 FTSE: 1994-07-15\n", "BP: 1994-07-15 FTSE: 1994-07-18\n", "BP: 1994-07-18 FTSE: 1994-07-19\n", "BP: 1994-07-19 FTSE: 1994-07-20\n", "BP: 1994-07-20 FTSE: 1994-07-21\n", "BP: 1994-07-21 FTSE: 1994-07-22\n", "BP: 1994-07-22 FTSE: 1994-07-25\n", "BP: 1994-07-25 FTSE: 1994-07-26\n", "BP: 1994-07-26 FTSE: 1994-07-27\n", "BP: 1994-07-27 FTSE: 1994-07-28\n", "BP: 1994-07-28 FTSE: 1994-07-29\n", "BP: 1994-07-29 FTSE: 1994-08-01\n", "BP: 1994-08-01 FTSE: 1994-08-02\n", "BP: 1994-08-02 FTSE: 1994-08-03\n", "BP: 1994-08-03 FTSE: 1994-08-04\n", "BP: 1994-08-04 FTSE: 1994-08-05\n", "BP: 1994-08-05 FTSE: 1994-08-08\n", "BP: 1994-08-08 FTSE: 1994-08-09\n", "BP: 1994-08-09 FTSE: 1994-08-10\n", "BP: 1994-08-10 FTSE: 1994-08-11\n", "BP: 1994-08-11 FTSE: 1994-08-12\n", "BP: 1994-08-12 FTSE: 1994-08-15\n", "BP: 1994-08-15 FTSE: 1994-08-16\n", "BP: 1994-08-16 FTSE: 1994-08-17\n", "BP: 1994-08-17 FTSE: 1994-08-18\n", "BP: 1994-08-18 FTSE: 1994-08-19\n", "BP: 1994-08-19 FTSE: 1994-08-22\n", "BP: 1994-08-22 FTSE: 1994-08-23\n", "BP: 1994-08-23 FTSE: 1994-08-24\n", "BP: 1994-08-24 FTSE: 1994-08-25\n", "BP: 1994-08-25 FTSE: 1994-08-26\n", "BP: 1994-08-26 FTSE: 1994-08-30\n", "BP: 1994-08-29 FTSE: 1994-08-31\n", "BP: 1994-08-30 FTSE: 1994-09-01\n", "BP: 1994-08-31 FTSE: 1994-09-02\n", "BP: 1994-09-01 FTSE: 1994-09-05\n", "BP: 1994-09-02 FTSE: 1994-09-06\n", "BP: 1994-09-06 FTSE: 1994-09-07\n", "BP: 1994-09-07 FTSE: 1994-09-08\n", "BP: 1994-09-08 FTSE: 1994-09-09\n", "BP: 1994-09-09 FTSE: 1994-09-12\n", "BP: 1994-09-12 FTSE: 1994-09-13\n", "BP: 1994-09-13 FTSE: 1994-09-14\n", "BP: 1994-09-14 FTSE: 1994-09-15\n", "BP: 1994-09-15 FTSE: 1994-09-16\n", "BP: 1994-09-16 FTSE: 1994-09-19\n", "BP: 1994-09-19 FTSE: 1994-09-20\n", "BP: 1994-09-20 FTSE: 1994-09-21\n", "BP: 1994-09-21 FTSE: 1994-09-22\n", "BP: 1994-09-22 FTSE: 1994-09-23\n", "BP: 1994-09-23 FTSE: 1994-09-26\n", "BP: 1994-09-26 FTSE: 1994-09-27\n", "BP: 1994-09-27 FTSE: 1994-09-28\n", "BP: 1994-09-28 FTSE: 1994-09-29\n", "BP: 1994-09-29 FTSE: 1994-09-30\n", "BP: 1994-09-30 FTSE: 1994-10-03\n", "BP: 1994-10-03 FTSE: 1994-10-04\n", "BP: 1994-10-04 FTSE: 1994-10-05\n", "BP: 1994-10-05 FTSE: 1994-10-06\n", "BP: 1994-10-06 FTSE: 1994-10-07\n", "BP: 1994-10-07 FTSE: 1994-10-10\n", "BP: 1994-10-10 FTSE: 1994-10-11\n", "BP: 1994-10-11 FTSE: 1994-10-12\n", "BP: 1994-10-12 FTSE: 1994-10-13\n", "BP: 1994-10-13 FTSE: 1994-10-14\n", "BP: 1994-10-14 FTSE: 1994-10-17\n", "BP: 1994-10-17 FTSE: 1994-10-18\n", "BP: 1994-10-18 FTSE: 1994-10-19\n", "BP: 1994-10-19 FTSE: 1994-10-20\n", "BP: 1994-10-20 FTSE: 1994-10-21\n", "BP: 1994-10-21 FTSE: 1994-10-24\n", "BP: 1994-10-24 FTSE: 1994-10-25\n", "BP: 1994-10-25 FTSE: 1994-10-26\n", "BP: 1994-10-26 FTSE: 1994-10-27\n", "BP: 1994-10-27 FTSE: 1994-10-28\n", "BP: 1994-10-28 FTSE: 1994-10-31\n", "BP: 1994-10-31 FTSE: 1994-11-01\n", "BP: 1994-11-01 FTSE: 1994-11-02\n", "BP: 1994-11-02 FTSE: 1994-11-03\n", "BP: 1994-11-03 FTSE: 1994-11-04\n", "BP: 1994-11-04 FTSE: 1994-11-07\n", "BP: 1994-11-07 FTSE: 1994-11-08\n", "BP: 1994-11-08 FTSE: 1994-11-09\n", "BP: 1994-11-09 FTSE: 1994-11-10\n", "BP: 1994-11-10 FTSE: 1994-11-11\n", "BP: 1994-11-11 FTSE: 1994-11-14\n", "BP: 1994-11-14 FTSE: 1994-11-15\n", "BP: 1994-11-15 FTSE: 1994-11-16\n", "BP: 1994-11-16 FTSE: 1994-11-17\n", "BP: 1994-11-17 FTSE: 1994-11-18\n", "BP: 1994-11-18 FTSE: 1994-11-21\n", "BP: 1994-11-21 FTSE: 1994-11-22\n", "BP: 1994-11-22 FTSE: 1994-11-23\n", "BP: 1994-11-23 FTSE: 1994-11-24\n", "BP: 1994-12-27 FTSE: 1994-12-28\n", "BP: 1994-12-28 FTSE: 1994-12-29\n", "BP: 1994-12-29 FTSE: 1994-12-30\n", "BP: 1994-12-30 FTSE: 1995-01-03\n", "BP: 1995-01-03 FTSE: 1995-01-04\n", "BP: 1995-01-04 FTSE: 1995-01-05\n", "BP: 1995-01-05 FTSE: 1995-01-06\n", "BP: 1995-01-06 FTSE: 1995-01-09\n", "BP: 1995-01-09 FTSE: 1995-01-10\n", "BP: 1995-01-10 FTSE: 1995-01-11\n", "BP: 1995-01-11 FTSE: 1995-01-12\n", "BP: 1995-01-12 FTSE: 1995-01-13\n", "BP: 1995-01-13 FTSE: 1995-01-16\n", "BP: 1995-01-16 FTSE: 1995-01-17\n", "BP: 1995-01-17 FTSE: 1995-01-18\n", "BP: 1995-01-18 FTSE: 1995-01-19\n", "BP: 1995-01-19 FTSE: 1995-01-20\n", "BP: 1995-01-20 FTSE: 1995-01-23\n", "BP: 1995-01-23 FTSE: 1995-01-24\n", "BP: 1995-01-24 FTSE: 1995-01-25\n", "BP: 1995-01-25 FTSE: 1995-01-26\n", "BP: 1995-01-26 FTSE: 1995-01-27\n", "BP: 1995-01-27 FTSE: 1995-01-30\n", "BP: 1995-01-30 FTSE: 1995-01-31\n", "BP: 1995-01-31 FTSE: 1995-02-01\n", "BP: 1995-02-01 FTSE: 1995-02-02\n", "BP: 1995-02-02 FTSE: 1995-02-03\n", "BP: 1995-02-03 FTSE: 1995-02-06\n", "BP: 1995-02-06 FTSE: 1995-02-07\n", "BP: 1995-02-07 FTSE: 1995-02-08\n", "BP: 1995-02-08 FTSE: 1995-02-09\n", "BP: 1995-02-09 FTSE: 1995-02-10\n", "BP: 1995-02-10 FTSE: 1995-02-13\n", "BP: 1995-02-13 FTSE: 1995-02-14\n", "BP: 1995-02-14 FTSE: 1995-02-15\n", "BP: 1995-02-15 FTSE: 1995-02-16\n", "BP: 1995-02-16 FTSE: 1995-02-17\n", "BP: 1995-02-17 FTSE: 1995-02-20\n", "BP: 1995-04-17 FTSE: 1995-04-18\n", "BP: 1995-04-18 FTSE: 1995-04-19\n", "BP: 1995-04-19 FTSE: 1995-04-20\n", "BP: 1995-04-20 FTSE: 1995-04-21\n", "BP: 1995-04-21 FTSE: 1995-04-24\n", "BP: 1995-04-24 FTSE: 1995-04-25\n", "BP: 1995-04-25 FTSE: 1995-04-26\n", "BP: 1995-04-26 FTSE: 1995-04-27\n", "BP: 1995-04-27 FTSE: 1995-04-28\n", "BP: 1995-04-28 FTSE: 1995-05-01\n", "BP: 1995-05-01 FTSE: 1995-05-02\n", "BP: 1995-05-02 FTSE: 1995-05-03\n", "BP: 1995-05-03 FTSE: 1995-05-04\n", "BP: 1995-05-04 FTSE: 1995-05-05\n", "BP: 1995-05-05 FTSE: 1995-05-09\n", "BP: 1995-05-08 FTSE: 1995-05-10\n", "BP: 1995-05-09 FTSE: 1995-05-11\n", "BP: 1995-05-10 FTSE: 1995-05-12\n", "BP: 1995-05-11 FTSE: 1995-05-15\n", "BP: 1995-05-12 FTSE: 1995-05-16\n", "BP: 1995-05-15 FTSE: 1995-05-17\n", "BP: 1995-05-16 FTSE: 1995-05-18\n", "BP: 1995-05-17 FTSE: 1995-05-19\n", "BP: 1995-05-18 FTSE: 1995-05-22\n", "BP: 1995-05-19 FTSE: 1995-05-23\n", "BP: 1995-05-22 FTSE: 1995-05-24\n", "BP: 1995-05-23 FTSE: 1995-05-25\n", "BP: 1995-05-24 FTSE: 1995-05-26\n", "BP: 1995-05-25 FTSE: 1995-05-30\n", "BP: 1995-05-26 FTSE: 1995-05-31\n", "BP: 1995-05-30 FTSE: 1995-06-01\n", "BP: 1995-05-31 FTSE: 1995-06-02\n", "BP: 1995-06-01 FTSE: 1995-06-05\n", "BP: 1995-06-02 FTSE: 1995-06-06\n", "BP: 1995-06-05 FTSE: 1995-06-07\n", "BP: 1995-06-06 FTSE: 1995-06-08\n", "BP: 1995-06-07 FTSE: 1995-06-09\n", "BP: 1995-06-08 FTSE: 1995-06-12\n", "BP: 1995-06-09 FTSE: 1995-06-13\n", "BP: 1995-06-12 FTSE: 1995-06-14\n", "BP: 1995-06-13 FTSE: 1995-06-15\n", "BP: 1995-06-14 FTSE: 1995-06-16\n", "BP: 1995-06-15 FTSE: 1995-06-19\n", "BP: 1995-06-16 FTSE: 1995-06-20\n", "BP: 1995-06-19 FTSE: 1995-06-21\n", "BP: 1995-06-20 FTSE: 1995-06-22\n", "BP: 1995-06-21 FTSE: 1995-06-23\n", "BP: 1995-06-22 FTSE: 1995-06-26\n", "BP: 1995-06-23 FTSE: 1995-06-27\n", "BP: 1995-06-26 FTSE: 1995-06-28\n", "BP: 1995-06-27 FTSE: 1995-06-29\n", "BP: 1995-06-28 FTSE: 1995-06-30\n", "BP: 1995-06-29 FTSE: 1995-07-03\n", "BP: 1995-06-30 FTSE: 1995-07-04\n", "BP: 1995-07-03 FTSE: 1995-07-05\n", "BP: 1995-07-05 FTSE: 1995-07-06\n", "BP: 1995-07-06 FTSE: 1995-07-07\n", "BP: 1995-07-07 FTSE: 1995-07-10\n", "BP: 1995-07-10 FTSE: 1995-07-11\n", "BP: 1995-07-11 FTSE: 1995-07-12\n", "BP: 1995-07-12 FTSE: 1995-07-13\n", "BP: 1995-07-13 FTSE: 1995-07-14\n", "BP: 1995-07-14 FTSE: 1995-07-17\n", "BP: 1995-07-17 FTSE: 1995-07-18\n", "BP: 1995-07-18 FTSE: 1995-07-19\n", "BP: 1995-07-19 FTSE: 1995-07-20\n", "BP: 1995-07-20 FTSE: 1995-07-21\n", "BP: 1995-07-21 FTSE: 1995-07-24\n", "BP: 1995-07-24 FTSE: 1995-07-25\n", "BP: 1995-07-25 FTSE: 1995-07-26\n", "BP: 1995-07-26 FTSE: 1995-07-27\n", "BP: 1995-07-27 FTSE: 1995-07-28\n", "BP: 1995-07-28 FTSE: 1995-07-31\n", "BP: 1995-07-31 FTSE: 1995-08-01\n", "BP: 1995-08-01 FTSE: 1995-08-02\n", "BP: 1995-08-02 FTSE: 1995-08-03\n", "BP: 1995-08-03 FTSE: 1995-08-04\n", "BP: 1995-08-04 FTSE: 1995-08-07\n", "BP: 1995-08-07 FTSE: 1995-08-08\n", "BP: 1995-08-08 FTSE: 1995-08-09\n", "BP: 1995-08-09 FTSE: 1995-08-10\n", "BP: 1995-08-10 FTSE: 1995-08-11\n", "BP: 1995-08-11 FTSE: 1995-08-14\n", "BP: 1995-08-14 FTSE: 1995-08-15\n", "BP: 1995-08-15 FTSE: 1995-08-16\n", "BP: 1995-08-16 FTSE: 1995-08-17\n", "BP: 1995-08-17 FTSE: 1995-08-18\n", "BP: 1995-08-18 FTSE: 1995-08-21\n", "BP: 1995-08-21 FTSE: 1995-08-22\n", "BP: 1995-08-22 FTSE: 1995-08-23\n", "BP: 1995-08-23 FTSE: 1995-08-24\n", "BP: 1995-08-24 FTSE: 1995-08-25\n", "BP: 1995-08-25 FTSE: 1995-08-29\n", "BP: 1995-08-28 FTSE: 1995-08-30\n", "BP: 1995-08-29 FTSE: 1995-08-31\n", "BP: 1995-08-30 FTSE: 1995-09-01\n", "BP: 1995-08-31 FTSE: 1995-09-04\n", "BP: 1995-09-01 FTSE: 1995-09-05\n", "BP: 1995-09-05 FTSE: 1995-09-06\n", "BP: 1995-09-06 FTSE: 1995-09-07\n", "BP: 1995-09-07 FTSE: 1995-09-08\n", "BP: 1995-09-08 FTSE: 1995-09-11\n", "BP: 1995-09-11 FTSE: 1995-09-12\n", "BP: 1995-09-12 FTSE: 1995-09-13\n", "BP: 1995-09-13 FTSE: 1995-09-14\n", "BP: 1995-09-14 FTSE: 1995-09-15\n", "BP: 1995-09-15 FTSE: 1995-09-18\n", "BP: 1995-09-18 FTSE: 1995-09-19\n", "BP: 1995-09-19 FTSE: 1995-09-20\n", "BP: 1995-09-20 FTSE: 1995-09-21\n", "BP: 1995-09-21 FTSE: 1995-09-22\n", "BP: 1995-09-22 FTSE: 1995-09-25\n", "BP: 1995-09-25 FTSE: 1995-09-26\n", "BP: 1995-09-26 FTSE: 1995-09-27\n", "BP: 1995-09-27 FTSE: 1995-09-28\n", "BP: 1995-09-28 FTSE: 1995-09-29\n", "BP: 1995-09-29 FTSE: 1995-10-02\n", "BP: 1995-10-02 FTSE: 1995-10-03\n", "BP: 1995-10-03 FTSE: 1995-10-04\n", "BP: 1995-10-04 FTSE: 1995-10-05\n", "BP: 1995-10-05 FTSE: 1995-10-06\n", "BP: 1995-10-06 FTSE: 1995-10-09\n", "BP: 1995-10-09 FTSE: 1995-10-10\n", "BP: 1995-10-10 FTSE: 1995-10-11\n", "BP: 1995-10-11 FTSE: 1995-10-12\n", "BP: 1995-10-12 FTSE: 1995-10-13\n", "BP: 1995-10-13 FTSE: 1995-10-16\n", "BP: 1995-10-16 FTSE: 1995-10-17\n", "BP: 1995-10-17 FTSE: 1995-10-18\n", "BP: 1995-10-18 FTSE: 1995-10-19\n", "BP: 1995-10-19 FTSE: 1995-10-20\n", "BP: 1995-10-20 FTSE: 1995-10-23\n", "BP: 1995-10-23 FTSE: 1995-10-24\n", "BP: 1995-10-24 FTSE: 1995-10-25\n", "BP: 1995-10-25 FTSE: 1995-10-26\n", "BP: 1995-10-26 FTSE: 1995-10-27\n", "BP: 1995-10-27 FTSE: 1995-10-30\n", "BP: 1995-10-30 FTSE: 1995-10-31\n", "BP: 1995-10-31 FTSE: 1995-11-01\n", "BP: 1995-11-01 FTSE: 1995-11-02\n", "BP: 1995-11-02 FTSE: 1995-11-03\n", "BP: 1995-11-03 FTSE: 1995-11-06\n", "BP: 1995-11-06 FTSE: 1995-11-07\n", "BP: 1995-11-07 FTSE: 1995-11-08\n", "BP: 1995-11-08 FTSE: 1995-11-09\n", "BP: 1995-11-09 FTSE: 1995-11-10\n", "BP: 1995-11-10 FTSE: 1995-11-13\n", "BP: 1995-11-13 FTSE: 1995-11-14\n", "BP: 1995-11-14 FTSE: 1995-11-15\n", "BP: 1995-11-15 FTSE: 1995-11-16\n", "BP: 1995-11-16 FTSE: 1995-11-17\n", "BP: 1995-11-17 FTSE: 1995-11-20\n", "BP: 1995-11-20 FTSE: 1995-11-21\n", "BP: 1995-11-21 FTSE: 1995-11-22\n", "BP: 1995-11-22 FTSE: 1995-11-23\n", "BP: 1995-12-26 FTSE: 1995-12-27\n", "BP: 1995-12-27 FTSE: 1995-12-28\n", "BP: 1995-12-28 FTSE: 1995-12-29\n", "BP: 1995-12-29 FTSE: 1996-01-02\n", "BP: 1996-01-02 FTSE: 1996-01-03\n", "BP: 1996-01-03 FTSE: 1996-01-04\n", "BP: 1996-01-04 FTSE: 1996-01-05\n", "BP: 1996-01-05 FTSE: 1996-01-08\n", "BP: 1996-01-08 FTSE: 1996-01-09\n", "BP: 1996-01-09 FTSE: 1996-01-10\n", "BP: 1996-01-10 FTSE: 1996-01-11\n", "BP: 1996-01-11 FTSE: 1996-01-12\n", "BP: 1996-01-12 FTSE: 1996-01-15\n", "BP: 1996-01-15 FTSE: 1996-01-16\n", "BP: 1996-01-16 FTSE: 1996-01-17\n", "BP: 1996-01-17 FTSE: 1996-01-18\n", "BP: 1996-01-18 FTSE: 1996-01-19\n", "BP: 1996-01-19 FTSE: 1996-01-22\n", "BP: 1996-01-22 FTSE: 1996-01-23\n", "BP: 1996-01-23 FTSE: 1996-01-24\n", "BP: 1996-01-24 FTSE: 1996-01-25\n", "BP: 1996-01-25 FTSE: 1996-01-26\n", "BP: 1996-01-26 FTSE: 1996-01-29\n", "BP: 1996-01-29 FTSE: 1996-01-30\n", "BP: 1996-01-30 FTSE: 1996-01-31\n", "BP: 1996-01-31 FTSE: 1996-02-01\n", "BP: 1996-02-01 FTSE: 1996-02-02\n", "BP: 1996-02-02 FTSE: 1996-02-05\n", "BP: 1996-02-05 FTSE: 1996-02-06\n", "BP: 1996-02-06 FTSE: 1996-02-07\n", "BP: 1996-02-07 FTSE: 1996-02-08\n", "BP: 1996-02-08 FTSE: 1996-02-09\n", "BP: 1996-02-09 FTSE: 1996-02-12\n", "BP: 1996-02-12 FTSE: 1996-02-13\n", "BP: 1996-02-13 FTSE: 1996-02-14\n", "BP: 1996-02-14 FTSE: 1996-02-15\n", "BP: 1996-02-15 FTSE: 1996-02-16\n", "BP: 1996-02-16 FTSE: 1996-02-19\n", "BP: 1996-04-08 FTSE: 1996-04-09\n", "BP: 1996-04-09 FTSE: 1996-04-10\n", "BP: 1996-04-10 FTSE: 1996-04-11\n", "BP: 1996-04-11 FTSE: 1996-04-12\n", "BP: 1996-04-12 FTSE: 1996-04-15\n", "BP: 1996-04-15 FTSE: 1996-04-16\n", "BP: 1996-04-16 FTSE: 1996-04-17\n", "BP: 1996-04-17 FTSE: 1996-04-18\n", "BP: 1996-04-18 FTSE: 1996-04-19\n", "BP: 1996-04-19 FTSE: 1996-04-22\n", "BP: 1996-04-22 FTSE: 1996-04-23\n", "BP: 1996-04-23 FTSE: 1996-04-24\n", "BP: 1996-04-24 FTSE: 1996-04-25\n", "BP: 1996-04-25 FTSE: 1996-04-26\n", "BP: 1996-04-26 FTSE: 1996-04-29\n", "BP: 1996-04-29 FTSE: 1996-04-30\n", "BP: 1996-04-30 FTSE: 1996-05-01\n", "BP: 1996-05-01 FTSE: 1996-05-02\n", "BP: 1996-05-02 FTSE: 1996-05-03\n", "BP: 1996-05-03 FTSE: 1996-05-07\n", "BP: 1996-05-06 FTSE: 1996-05-08\n", "BP: 1996-05-07 FTSE: 1996-05-09\n", "BP: 1996-05-08 FTSE: 1996-05-10\n", "BP: 1996-05-09 FTSE: 1996-05-13\n", "BP: 1996-05-10 FTSE: 1996-05-14\n", "BP: 1996-05-13 FTSE: 1996-05-15\n", "BP: 1996-05-14 FTSE: 1996-05-16\n", "BP: 1996-05-15 FTSE: 1996-05-17\n", "BP: 1996-05-16 FTSE: 1996-05-20\n", "BP: 1996-05-17 FTSE: 1996-05-21\n", "BP: 1996-05-20 FTSE: 1996-05-22\n", "BP: 1996-05-21 FTSE: 1996-05-23\n", "BP: 1996-05-22 FTSE: 1996-05-24\n", "BP: 1996-05-23 FTSE: 1996-05-28\n", "BP: 1996-05-24 FTSE: 1996-05-29\n", "BP: 1996-05-28 FTSE: 1996-05-30\n", "BP: 1996-05-29 FTSE: 1996-05-31\n", "BP: 1996-05-30 FTSE: 1996-06-03\n", "BP: 1996-05-31 FTSE: 1996-06-04\n", "BP: 1996-06-03 FTSE: 1996-06-05\n", "BP: 1996-06-04 FTSE: 1996-06-06\n", "BP: 1996-06-05 FTSE: 1996-06-07\n", "BP: 1996-06-06 FTSE: 1996-06-10\n", "BP: 1996-06-07 FTSE: 1996-06-11\n", "BP: 1996-06-10 FTSE: 1996-06-12\n", "BP: 1996-06-11 FTSE: 1996-06-13\n", "BP: 1996-06-12 FTSE: 1996-06-14\n", "BP: 1996-06-13 FTSE: 1996-06-17\n", "BP: 1996-06-14 FTSE: 1996-06-18\n", "BP: 1996-06-17 FTSE: 1996-06-19\n", "BP: 1996-06-18 FTSE: 1996-06-20\n", "BP: 1996-06-19 FTSE: 1996-06-21\n", "BP: 1996-06-20 FTSE: 1996-06-24\n", "BP: 1996-06-21 FTSE: 1996-06-25\n", "BP: 1996-06-24 FTSE: 1996-06-26\n", "BP: 1996-06-25 FTSE: 1996-06-27\n", "BP: 1996-06-26 FTSE: 1996-06-28\n", "BP: 1996-06-27 FTSE: 1996-07-01\n", "BP: 1996-06-28 FTSE: 1996-07-02\n", "BP: 1996-07-01 FTSE: 1996-07-03\n", "BP: 1996-07-02 FTSE: 1996-07-04\n", "BP: 1996-07-03 FTSE: 1996-07-05\n", "BP: 1996-07-05 FTSE: 1996-07-08\n", "BP: 1996-07-08 FTSE: 1996-07-09\n", "BP: 1996-07-09 FTSE: 1996-07-10\n", "BP: 1996-07-10 FTSE: 1996-07-11\n", "BP: 1996-07-11 FTSE: 1996-07-12\n", "BP: 1996-07-12 FTSE: 1996-07-15\n", "BP: 1996-07-15 FTSE: 1996-07-16\n", "BP: 1996-07-16 FTSE: 1996-07-17\n", "BP: 1996-07-17 FTSE: 1996-07-18\n", "BP: 1996-07-18 FTSE: 1996-07-19\n", "BP: 1996-07-19 FTSE: 1996-07-22\n", "BP: 1996-07-22 FTSE: 1996-07-23\n", "BP: 1996-07-23 FTSE: 1996-07-24\n", "BP: 1996-07-24 FTSE: 1996-07-25\n", "BP: 1996-07-25 FTSE: 1996-07-26\n", "BP: 1996-07-26 FTSE: 1996-07-29\n", "BP: 1996-07-29 FTSE: 1996-07-30\n", "BP: 1996-07-30 FTSE: 1996-07-31\n", "BP: 1996-07-31 FTSE: 1996-08-01\n", "BP: 1996-08-01 FTSE: 1996-08-02\n", "BP: 1996-08-02 FTSE: 1996-08-05\n", "BP: 1996-08-05 FTSE: 1996-08-06\n", "BP: 1996-08-06 FTSE: 1996-08-07\n", "BP: 1996-08-07 FTSE: 1996-08-08\n", "BP: 1996-08-08 FTSE: 1996-08-09\n", "BP: 1996-08-09 FTSE: 1996-08-12\n", "BP: 1996-08-12 FTSE: 1996-08-13\n", "BP: 1996-08-13 FTSE: 1996-08-14\n", "BP: 1996-08-14 FTSE: 1996-08-15\n", "BP: 1996-08-15 FTSE: 1996-08-16\n", "BP: 1996-08-16 FTSE: 1996-08-19\n", "BP: 1996-08-19 FTSE: 1996-08-20\n", "BP: 1996-08-20 FTSE: 1996-08-21\n", "BP: 1996-08-21 FTSE: 1996-08-22\n", "BP: 1996-08-22 FTSE: 1996-08-23\n", "BP: 1996-08-23 FTSE: 1996-08-27\n", "BP: 1996-08-26 FTSE: 1996-08-28\n", "BP: 1996-08-27 FTSE: 1996-08-29\n", "BP: 1996-08-28 FTSE: 1996-08-30\n", "BP: 1996-08-29 FTSE: 1996-09-02\n", "BP: 1996-08-30 FTSE: 1996-09-03\n", "BP: 1996-09-03 FTSE: 1996-09-04\n", "BP: 1996-09-04 FTSE: 1996-09-05\n", "BP: 1996-09-05 FTSE: 1996-09-06\n", "BP: 1996-09-06 FTSE: 1996-09-09\n", "BP: 1996-09-09 FTSE: 1996-09-10\n", "BP: 1996-09-10 FTSE: 1996-09-11\n", "BP: 1996-09-11 FTSE: 1996-09-12\n", "BP: 1996-09-12 FTSE: 1996-09-13\n", "BP: 1996-09-13 FTSE: 1996-09-16\n", "BP: 1996-09-16 FTSE: 1996-09-17\n", "BP: 1996-09-17 FTSE: 1996-09-18\n", "BP: 1996-09-18 FTSE: 1996-09-19\n", "BP: 1996-09-19 FTSE: 1996-09-20\n", "BP: 1996-09-20 FTSE: 1996-09-23\n", "BP: 1996-09-23 FTSE: 1996-09-24\n", "BP: 1996-09-24 FTSE: 1996-09-25\n", "BP: 1996-09-25 FTSE: 1996-09-26\n", "BP: 1996-09-26 FTSE: 1996-09-27\n", "BP: 1996-09-27 FTSE: 1996-09-30\n", "BP: 1996-09-30 FTSE: 1996-10-01\n", "BP: 1996-10-01 FTSE: 1996-10-02\n", "BP: 1996-10-02 FTSE: 1996-10-03\n", "BP: 1996-10-03 FTSE: 1996-10-04\n", "BP: 1996-10-04 FTSE: 1996-10-07\n", "BP: 1996-10-07 FTSE: 1996-10-08\n", "BP: 1996-10-08 FTSE: 1996-10-09\n", "BP: 1996-10-09 FTSE: 1996-10-10\n", "BP: 1996-10-10 FTSE: 1996-10-11\n", "BP: 1996-10-11 FTSE: 1996-10-14\n", "BP: 1996-10-14 FTSE: 1996-10-15\n", "BP: 1996-10-15 FTSE: 1996-10-16\n", "BP: 1996-10-16 FTSE: 1996-10-17\n", "BP: 1996-10-17 FTSE: 1996-10-18\n", "BP: 1996-10-18 FTSE: 1996-10-21\n", "BP: 1996-10-21 FTSE: 1996-10-22\n", "BP: 1996-10-22 FTSE: 1996-10-23\n", "BP: 1996-10-23 FTSE: 1996-10-24\n", "BP: 1996-10-24 FTSE: 1996-10-25\n", "BP: 1996-10-25 FTSE: 1996-10-28\n", "BP: 1996-10-28 FTSE: 1996-10-29\n", "BP: 1996-10-29 FTSE: 1996-10-30\n", "BP: 1996-10-30 FTSE: 1996-10-31\n", "BP: 1996-10-31 FTSE: 1996-11-01\n", "BP: 1996-11-01 FTSE: 1996-11-04\n", "BP: 1996-11-04 FTSE: 1996-11-05\n", "BP: 1996-11-05 FTSE: 1996-11-06\n", "BP: 1996-11-06 FTSE: 1996-11-07\n", "BP: 1996-11-07 FTSE: 1996-11-08\n", "BP: 1996-11-08 FTSE: 1996-11-11\n", "BP: 1996-11-11 FTSE: 1996-11-12\n", "BP: 1996-11-12 FTSE: 1996-11-13\n", "BP: 1996-11-13 FTSE: 1996-11-14\n", "BP: 1996-11-14 FTSE: 1996-11-15\n", "BP: 1996-11-15 FTSE: 1996-11-18\n", "BP: 1996-11-18 FTSE: 1996-11-19\n", "BP: 1996-11-19 FTSE: 1996-11-20\n", "BP: 1996-11-20 FTSE: 1996-11-21\n", "BP: 1996-11-21 FTSE: 1996-11-22\n", "BP: 1996-11-22 FTSE: 1996-11-25\n", "BP: 1996-11-25 FTSE: 1996-11-26\n", "BP: 1996-11-26 FTSE: 1996-11-27\n", "BP: 1996-11-27 FTSE: 1996-11-28\n", "BP: 1996-12-26 FTSE: 1996-12-27\n", "BP: 1996-12-27 FTSE: 1996-12-30\n", "BP: 1996-12-30 FTSE: 1996-12-31\n", "BP: 1996-12-31 FTSE: 1997-01-02\n", "BP: 1997-01-02 FTSE: 1997-01-03\n", "BP: 1997-01-03 FTSE: 1997-01-06\n", "BP: 1997-01-06 FTSE: 1997-01-07\n", "BP: 1997-01-07 FTSE: 1997-01-08\n", "BP: 1997-01-08 FTSE: 1997-01-09\n", "BP: 1997-01-09 FTSE: 1997-01-10\n", "BP: 1997-01-10 FTSE: 1997-01-13\n", "BP: 1997-01-13 FTSE: 1997-01-14\n", "BP: 1997-01-14 FTSE: 1997-01-15\n", "BP: 1997-01-15 FTSE: 1997-01-16\n", "BP: 1997-01-16 FTSE: 1997-01-17\n", "BP: 1997-01-17 FTSE: 1997-01-20\n", "BP: 1997-01-20 FTSE: 1997-01-21\n", "BP: 1997-01-21 FTSE: 1997-01-22\n", "BP: 1997-01-22 FTSE: 1997-01-23\n", "BP: 1997-01-23 FTSE: 1997-01-24\n", "BP: 1997-01-24 FTSE: 1997-01-27\n", "BP: 1997-01-27 FTSE: 1997-01-28\n", "BP: 1997-01-28 FTSE: 1997-01-29\n", "BP: 1997-01-29 FTSE: 1997-01-30\n", "BP: 1997-01-30 FTSE: 1997-01-31\n", "BP: 1997-01-31 FTSE: 1997-02-03\n", "BP: 1997-02-03 FTSE: 1997-02-04\n", "BP: 1997-02-04 FTSE: 1997-02-05\n", "BP: 1997-02-05 FTSE: 1997-02-06\n", "BP: 1997-02-06 FTSE: 1997-02-07\n", "BP: 1997-02-07 FTSE: 1997-02-10\n", "BP: 1997-02-10 FTSE: 1997-02-11\n", "BP: 1997-02-11 FTSE: 1997-02-12\n", "BP: 1997-02-12 FTSE: 1997-02-13\n", "BP: 1997-02-13 FTSE: 1997-02-14\n", "BP: 1997-02-14 FTSE: 1997-02-17\n", "BP: 1997-03-31 FTSE: 1997-04-01\n", "BP: 1997-04-01 FTSE: 1997-04-02\n", "BP: 1997-04-02 FTSE: 1997-04-03\n", "BP: 1997-04-03 FTSE: 1997-04-04\n", "BP: 1997-04-04 FTSE: 1997-04-07\n", "BP: 1997-04-07 FTSE: 1997-04-08\n", "BP: 1997-04-08 FTSE: 1997-04-09\n", "BP: 1997-04-09 FTSE: 1997-04-10\n", "BP: 1997-04-10 FTSE: 1997-04-11\n", "BP: 1997-04-11 FTSE: 1997-04-14\n", "BP: 1997-04-14 FTSE: 1997-04-15\n", "BP: 1997-04-15 FTSE: 1997-04-16\n", "BP: 1997-04-16 FTSE: 1997-04-17\n", "BP: 1997-04-17 FTSE: 1997-04-18\n", "BP: 1997-04-18 FTSE: 1997-04-21\n", "BP: 1997-04-21 FTSE: 1997-04-22\n", "BP: 1997-04-22 FTSE: 1997-04-23\n", "BP: 1997-04-23 FTSE: 1997-04-24\n", "BP: 1997-04-24 FTSE: 1997-04-25\n", "BP: 1997-04-25 FTSE: 1997-04-28\n", "BP: 1997-04-28 FTSE: 1997-04-29\n", "BP: 1997-04-29 FTSE: 1997-04-30\n", "BP: 1997-04-30 FTSE: 1997-05-01\n", "BP: 1997-05-01 FTSE: 1997-05-02\n", "BP: 1997-05-02 FTSE: 1997-05-06\n", "BP: 1997-05-05 FTSE: 1997-05-07\n", "BP: 1997-05-06 FTSE: 1997-05-08\n", "BP: 1997-05-07 FTSE: 1997-05-09\n", "BP: 1997-05-08 FTSE: 1997-05-12\n", "BP: 1997-05-09 FTSE: 1997-05-13\n", "BP: 1997-05-12 FTSE: 1997-05-14\n", "BP: 1997-05-13 FTSE: 1997-05-15\n", "BP: 1997-05-14 FTSE: 1997-05-16\n", "BP: 1997-05-15 FTSE: 1997-05-19\n", "BP: 1997-05-16 FTSE: 1997-05-20\n", "BP: 1997-05-19 FTSE: 1997-05-21\n", "BP: 1997-05-20 FTSE: 1997-05-22\n", "BP: 1997-05-21 FTSE: 1997-05-23\n", "BP: 1997-05-22 FTSE: 1997-05-27\n", "BP: 1997-05-23 FTSE: 1997-05-28\n", "BP: 1997-05-27 FTSE: 1997-05-29\n", "BP: 1997-05-28 FTSE: 1997-05-30\n", "BP: 1997-05-29 FTSE: 1997-06-02\n", "BP: 1997-05-30 FTSE: 1997-06-03\n", "BP: 1997-06-02 FTSE: 1997-06-04\n", "BP: 1997-06-03 FTSE: 1997-06-05\n", "BP: 1997-06-04 FTSE: 1997-06-06\n", "BP: 1997-06-05 FTSE: 1997-06-09\n", "BP: 1997-06-06 FTSE: 1997-06-10\n", "BP: 1997-06-09 FTSE: 1997-06-11\n", "BP: 1997-06-10 FTSE: 1997-06-12\n", "BP: 1997-06-11 FTSE: 1997-06-13\n", "BP: 1997-06-12 FTSE: 1997-06-16\n", "BP: 1997-06-13 FTSE: 1997-06-17\n", "BP: 1997-06-16 FTSE: 1997-06-18\n", "BP: 1997-06-17 FTSE: 1997-06-19\n", "BP: 1997-06-18 FTSE: 1997-06-20\n", "BP: 1997-06-19 FTSE: 1997-06-23\n", "BP: 1997-06-20 FTSE: 1997-06-24\n", "BP: 1997-06-23 FTSE: 1997-06-25\n", "BP: 1997-06-24 FTSE: 1997-06-26\n", "BP: 1997-06-25 FTSE: 1997-06-27\n", "BP: 1997-06-26 FTSE: 1997-06-30\n", "BP: 1997-06-27 FTSE: 1997-07-01\n", "BP: 1997-06-30 FTSE: 1997-07-02\n", "BP: 1997-07-01 FTSE: 1997-07-03\n", "BP: 1997-07-02 FTSE: 1997-07-04\n", "BP: 1997-07-03 FTSE: 1997-07-07\n", "BP: 1997-07-07 FTSE: 1997-07-08\n", "BP: 1997-07-08 FTSE: 1997-07-09\n", "BP: 1997-07-09 FTSE: 1997-07-10\n", "BP: 1997-07-10 FTSE: 1997-07-11\n", "BP: 1997-07-11 FTSE: 1997-07-14\n", "BP: 1997-07-14 FTSE: 1997-07-15\n", "BP: 1997-07-15 FTSE: 1997-07-16\n", "BP: 1997-07-16 FTSE: 1997-07-17\n", "BP: 1997-07-17 FTSE: 1997-07-18\n", "BP: 1997-07-18 FTSE: 1997-07-21\n", "BP: 1997-07-21 FTSE: 1997-07-22\n", "BP: 1997-07-22 FTSE: 1997-07-23\n", "BP: 1997-07-23 FTSE: 1997-07-24\n", "BP: 1997-07-24 FTSE: 1997-07-25\n", "BP: 1997-07-25 FTSE: 1997-07-28\n", "BP: 1997-07-28 FTSE: 1997-07-29\n", "BP: 1997-07-29 FTSE: 1997-07-30\n", "BP: 1997-07-30 FTSE: 1997-07-31\n", "BP: 1997-07-31 FTSE: 1997-08-01\n", "BP: 1997-08-01 FTSE: 1997-08-04\n", "BP: 1997-08-04 FTSE: 1997-08-05\n", "BP: 1997-08-05 FTSE: 1997-08-06\n", "BP: 1997-08-06 FTSE: 1997-08-07\n", "BP: 1997-08-07 FTSE: 1997-08-08\n", "BP: 1997-08-08 FTSE: 1997-08-11\n", "BP: 1997-08-11 FTSE: 1997-08-12\n", "BP: 1997-08-12 FTSE: 1997-08-13\n", "BP: 1997-08-13 FTSE: 1997-08-14\n", "BP: 1997-08-14 FTSE: 1997-08-15\n", "BP: 1997-08-15 FTSE: 1997-08-18\n", "BP: 1997-08-18 FTSE: 1997-08-19\n", "BP: 1997-08-19 FTSE: 1997-08-20\n", "BP: 1997-08-20 FTSE: 1997-08-21\n", "BP: 1997-08-21 FTSE: 1997-08-22\n", "BP: 1997-08-22 FTSE: 1997-08-26\n", "BP: 1997-08-25 FTSE: 1997-08-27\n", "BP: 1997-08-26 FTSE: 1997-08-28\n", "BP: 1997-08-27 FTSE: 1997-08-29\n", "BP: 1997-08-28 FTSE: 1997-09-01\n", "BP: 1997-08-29 FTSE: 1997-09-02\n", "BP: 1997-09-02 FTSE: 1997-09-03\n", "BP: 1997-09-03 FTSE: 1997-09-04\n", "BP: 1997-09-04 FTSE: 1997-09-05\n", "BP: 1997-09-05 FTSE: 1997-09-08\n", "BP: 1997-09-08 FTSE: 1997-09-09\n", "BP: 1997-09-09 FTSE: 1997-09-10\n", "BP: 1997-09-10 FTSE: 1997-09-11\n", "BP: 1997-09-11 FTSE: 1997-09-12\n", "BP: 1997-09-12 FTSE: 1997-09-15\n", "BP: 1997-09-15 FTSE: 1997-09-16\n", "BP: 1997-09-16 FTSE: 1997-09-17\n", "BP: 1997-09-17 FTSE: 1997-09-18\n", "BP: 1997-09-18 FTSE: 1997-09-19\n", "BP: 1997-09-19 FTSE: 1997-09-22\n", "BP: 1997-09-22 FTSE: 1997-09-23\n", "BP: 1997-09-23 FTSE: 1997-09-24\n", "BP: 1997-09-24 FTSE: 1997-09-25\n", "BP: 1997-09-25 FTSE: 1997-09-26\n", "BP: 1997-09-26 FTSE: 1997-09-29\n", "BP: 1997-09-29 FTSE: 1997-09-30\n", "BP: 1997-09-30 FTSE: 1997-10-01\n", "BP: 1997-10-01 FTSE: 1997-10-02\n", "BP: 1997-10-02 FTSE: 1997-10-03\n", "BP: 1997-10-03 FTSE: 1997-10-06\n", "BP: 1997-10-06 FTSE: 1997-10-07\n", "BP: 1997-10-07 FTSE: 1997-10-08\n", "BP: 1997-10-08 FTSE: 1997-10-09\n", "BP: 1997-10-09 FTSE: 1997-10-10\n", "BP: 1997-10-10 FTSE: 1997-10-13\n", "BP: 1997-10-13 FTSE: 1997-10-14\n", "BP: 1997-10-14 FTSE: 1997-10-15\n", "BP: 1997-10-15 FTSE: 1997-10-16\n", "BP: 1997-10-16 FTSE: 1997-10-17\n", "BP: 1997-10-17 FTSE: 1997-10-20\n", "BP: 1997-10-20 FTSE: 1997-10-21\n", "BP: 1997-10-21 FTSE: 1997-10-22\n", "BP: 1997-10-22 FTSE: 1997-10-23\n", "BP: 1997-10-23 FTSE: 1997-10-24\n", "BP: 1997-10-24 FTSE: 1997-10-27\n", "BP: 1997-10-27 FTSE: 1997-10-28\n", "BP: 1997-10-28 FTSE: 1997-10-29\n", "BP: 1997-10-29 FTSE: 1997-10-30\n", "BP: 1997-10-30 FTSE: 1997-10-31\n", "BP: 1997-10-31 FTSE: 1997-11-03\n", "BP: 1997-11-03 FTSE: 1997-11-04\n", "BP: 1997-11-04 FTSE: 1997-11-05\n", "BP: 1997-11-05 FTSE: 1997-11-06\n", "BP: 1997-11-06 FTSE: 1997-11-07\n", "BP: 1997-11-07 FTSE: 1997-11-10\n", "BP: 1997-11-10 FTSE: 1997-11-11\n", "BP: 1997-11-11 FTSE: 1997-11-12\n", "BP: 1997-11-12 FTSE: 1997-11-13\n", "BP: 1997-11-13 FTSE: 1997-11-14\n", "BP: 1997-11-14 FTSE: 1997-11-17\n", "BP: 1997-11-17 FTSE: 1997-11-18\n", "BP: 1997-11-18 FTSE: 1997-11-19\n", "BP: 1997-11-19 FTSE: 1997-11-20\n", "BP: 1997-11-20 FTSE: 1997-11-21\n", "BP: 1997-11-21 FTSE: 1997-11-24\n", "BP: 1997-11-24 FTSE: 1997-11-25\n", "BP: 1997-11-25 FTSE: 1997-11-26\n", "BP: 1997-11-26 FTSE: 1997-11-27\n", "BP: 1997-12-26 FTSE: 1997-12-29\n", "BP: 1997-12-29 FTSE: 1997-12-30\n", "BP: 1997-12-30 FTSE: 1997-12-31\n", "BP: 1997-12-31 FTSE: 1998-01-02\n", "BP: 1998-01-02 FTSE: 1998-01-05\n", "BP: 1998-01-05 FTSE: 1998-01-06\n", "BP: 1998-01-06 FTSE: 1998-01-07\n", "BP: 1998-01-07 FTSE: 1998-01-08\n", "BP: 1998-01-08 FTSE: 1998-01-09\n", "BP: 1998-01-09 FTSE: 1998-01-12\n", "BP: 1998-01-12 FTSE: 1998-01-13\n", "BP: 1998-01-13 FTSE: 1998-01-14\n", "BP: 1998-01-14 FTSE: 1998-01-15\n", "BP: 1998-01-15 FTSE: 1998-01-16\n", "BP: 1998-01-16 FTSE: 1998-01-19\n", "BP: 1998-02-17 FTSE: 1998-02-16\n", "BP: 1998-02-18 FTSE: 1998-02-17\n", "BP: 1998-02-19 FTSE: 1998-02-18\n", "BP: 1998-02-20 FTSE: 1998-02-19\n", "BP: 1998-02-23 FTSE: 1998-02-20\n", "BP: 1998-02-24 FTSE: 1998-02-23\n", "BP: 1998-02-25 FTSE: 1998-02-24\n", "BP: 1998-02-26 FTSE: 1998-02-25\n", "BP: 1998-02-27 FTSE: 1998-02-26\n", "BP: 1998-03-02 FTSE: 1998-02-27\n", "BP: 1998-03-03 FTSE: 1998-03-02\n", "BP: 1998-03-04 FTSE: 1998-03-03\n", "BP: 1998-03-05 FTSE: 1998-03-04\n", "BP: 1998-03-06 FTSE: 1998-03-05\n", "BP: 1998-03-09 FTSE: 1998-03-06\n", "BP: 1998-03-10 FTSE: 1998-03-09\n", "BP: 1998-03-11 FTSE: 1998-03-10\n", "BP: 1998-03-12 FTSE: 1998-03-11\n", "BP: 1998-03-13 FTSE: 1998-03-12\n", "BP: 1998-03-16 FTSE: 1998-03-13\n", "BP: 1998-03-17 FTSE: 1998-03-16\n", "BP: 1998-03-18 FTSE: 1998-03-17\n", "BP: 1998-03-19 FTSE: 1998-03-18\n", "BP: 1998-03-20 FTSE: 1998-03-19\n", "BP: 1998-03-23 FTSE: 1998-03-20\n", "BP: 1998-03-24 FTSE: 1998-03-23\n", "BP: 1998-03-25 FTSE: 1998-03-24\n", "BP: 1998-03-26 FTSE: 1998-03-25\n", "BP: 1998-03-27 FTSE: 1998-03-26\n", "BP: 1998-03-30 FTSE: 1998-03-27\n", "BP: 1998-03-31 FTSE: 1998-03-30\n", "BP: 1998-04-01 FTSE: 1998-03-31\n", "BP: 1998-04-02 FTSE: 1998-04-01\n", "BP: 1998-04-03 FTSE: 1998-04-02\n", "BP: 1998-04-06 FTSE: 1998-04-03\n", "BP: 1998-04-07 FTSE: 1998-04-06\n", "BP: 1998-04-08 FTSE: 1998-04-07\n", "BP: 1998-04-09 FTSE: 1998-04-08\n", "BP: 1998-04-13 FTSE: 1998-04-09\n", "BP: 1998-05-04 FTSE: 1998-05-05\n", "BP: 1998-05-05 FTSE: 1998-05-06\n", "BP: 1998-05-06 FTSE: 1998-05-07\n", "BP: 1998-05-07 FTSE: 1998-05-08\n", "BP: 1998-05-08 FTSE: 1998-05-11\n", "BP: 1998-05-11 FTSE: 1998-05-12\n", "BP: 1998-05-12 FTSE: 1998-05-13\n", "BP: 1998-05-13 FTSE: 1998-05-14\n", "BP: 1998-05-14 FTSE: 1998-05-15\n", "BP: 1998-05-15 FTSE: 1998-05-18\n", "BP: 1998-05-18 FTSE: 1998-05-19\n", "BP: 1998-05-19 FTSE: 1998-05-20\n", "BP: 1998-05-20 FTSE: 1998-05-21\n", "BP: 1998-05-21 FTSE: 1998-05-22\n", "BP: 1998-05-22 FTSE: 1998-05-26\n", "BP: 1998-05-26 FTSE: 1998-05-27\n", "BP: 1998-05-27 FTSE: 1998-05-28\n", "BP: 1998-05-28 FTSE: 1998-05-29\n", "BP: 1998-05-29 FTSE: 1998-06-01\n", "BP: 1998-06-01 FTSE: 1998-06-02\n", "BP: 1998-06-02 FTSE: 1998-06-03\n", "BP: 1998-06-03 FTSE: 1998-06-04\n", "BP: 1998-06-04 FTSE: 1998-06-05\n", "BP: 1998-06-05 FTSE: 1998-06-08\n", "BP: 1998-06-08 FTSE: 1998-06-09\n", "BP: 1998-06-09 FTSE: 1998-06-10\n", "BP: 1998-06-10 FTSE: 1998-06-11\n", "BP: 1998-06-11 FTSE: 1998-06-12\n", "BP: 1998-06-12 FTSE: 1998-06-15\n", "BP: 1998-06-15 FTSE: 1998-06-16\n", "BP: 1998-06-16 FTSE: 1998-06-17\n", "BP: 1998-06-17 FTSE: 1998-06-18\n", "BP: 1998-06-18 FTSE: 1998-06-19\n", "BP: 1998-06-19 FTSE: 1998-06-22\n", "BP: 1998-06-22 FTSE: 1998-06-23\n", "BP: 1998-06-23 FTSE: 1998-06-24\n", "BP: 1998-06-24 FTSE: 1998-06-25\n", "BP: 1998-06-25 FTSE: 1998-06-26\n", "BP: 1998-06-26 FTSE: 1998-06-29\n", "BP: 1998-06-29 FTSE: 1998-06-30\n", "BP: 1998-06-30 FTSE: 1998-07-01\n", "BP: 1998-07-01 FTSE: 1998-07-02\n", "BP: 1998-07-02 FTSE: 1998-07-03\n", "BP: 1998-08-31 FTSE: 1998-09-01\n", "BP: 1998-09-01 FTSE: 1998-09-02\n", "BP: 1998-09-02 FTSE: 1998-09-03\n", "BP: 1998-09-03 FTSE: 1998-09-04\n", "BP: 1998-09-04 FTSE: 1998-09-07\n", "BP: 1998-11-27 FTSE: 1998-11-26\n", "BP: 1998-11-30 FTSE: 1998-11-27\n", "BP: 1998-12-01 FTSE: 1998-11-30\n", "BP: 1998-12-02 FTSE: 1998-12-01\n", "BP: 1998-12-03 FTSE: 1998-12-02\n", "BP: 1998-12-04 FTSE: 1998-12-03\n", "BP: 1998-12-07 FTSE: 1998-12-04\n", "BP: 1998-12-08 FTSE: 1998-12-07\n", "BP: 1998-12-09 FTSE: 1998-12-08\n", "BP: 1998-12-10 FTSE: 1998-12-09\n", "BP: 1998-12-11 FTSE: 1998-12-10\n", "BP: 1998-12-14 FTSE: 1998-12-11\n", "BP: 1998-12-15 FTSE: 1998-12-14\n", "BP: 1998-12-16 FTSE: 1998-12-15\n", "BP: 1998-12-17 FTSE: 1998-12-16\n", "BP: 1998-12-18 FTSE: 1998-12-17\n", "BP: 1998-12-21 FTSE: 1998-12-18\n", "BP: 1998-12-22 FTSE: 1998-12-21\n", "BP: 1998-12-23 FTSE: 1998-12-22\n", "BP: 1998-12-24 FTSE: 1998-12-23\n", "BP: 1998-12-28 FTSE: 1998-12-24\n", "BP: 1998-12-31 FTSE: 1999-01-04\n", "BP: 1999-01-04 FTSE: 1999-01-05\n", "BP: 1999-01-05 FTSE: 1999-01-06\n", "BP: 1999-01-06 FTSE: 1999-01-07\n", "BP: 1999-01-07 FTSE: 1999-01-08\n", "BP: 1999-01-08 FTSE: 1999-01-11\n", "BP: 1999-01-11 FTSE: 1999-01-12\n", "BP: 1999-01-12 FTSE: 1999-01-13\n", "BP: 1999-01-13 FTSE: 1999-01-14\n", "BP: 1999-01-14 FTSE: 1999-01-15\n", "BP: 1999-01-15 FTSE: 1999-01-18\n", "BP: 1999-02-16 FTSE: 1999-02-15\n", "BP: 1999-02-17 FTSE: 1999-02-16\n", "BP: 1999-02-18 FTSE: 1999-02-17\n", "BP: 1999-02-19 FTSE: 1999-02-18\n", "BP: 1999-02-22 FTSE: 1999-02-19\n", "BP: 1999-02-23 FTSE: 1999-02-22\n", "BP: 1999-02-24 FTSE: 1999-02-23\n", "BP: 1999-02-25 FTSE: 1999-02-24\n", "BP: 1999-02-26 FTSE: 1999-02-25\n", "BP: 1999-03-01 FTSE: 1999-02-26\n", "BP: 1999-03-02 FTSE: 1999-03-01\n", "BP: 1999-03-03 FTSE: 1999-03-02\n", "BP: 1999-03-04 FTSE: 1999-03-03\n", "BP: 1999-03-05 FTSE: 1999-03-04\n", "BP: 1999-03-08 FTSE: 1999-03-05\n", "BP: 1999-03-09 FTSE: 1999-03-08\n", "BP: 1999-03-10 FTSE: 1999-03-09\n", "BP: 1999-03-11 FTSE: 1999-03-10\n", "BP: 1999-03-12 FTSE: 1999-03-11\n", "BP: 1999-03-15 FTSE: 1999-03-12\n", "BP: 1999-03-16 FTSE: 1999-03-15\n", "BP: 1999-03-17 FTSE: 1999-03-16\n", "BP: 1999-03-18 FTSE: 1999-03-17\n", "BP: 1999-03-19 FTSE: 1999-03-18\n", "BP: 1999-03-22 FTSE: 1999-03-19\n", "BP: 1999-03-23 FTSE: 1999-03-22\n", "BP: 1999-03-24 FTSE: 1999-03-23\n", "BP: 1999-03-25 FTSE: 1999-03-24\n", "BP: 1999-03-26 FTSE: 1999-03-25\n", "BP: 1999-03-29 FTSE: 1999-03-26\n", "BP: 1999-03-30 FTSE: 1999-03-29\n", "BP: 1999-03-31 FTSE: 1999-03-30\n", "BP: 1999-04-01 FTSE: 1999-03-31\n", "BP: 1999-04-05 FTSE: 1999-04-01\n", "BP: 1999-05-03 FTSE: 1999-05-04\n", "BP: 1999-05-04 FTSE: 1999-05-05\n", "BP: 1999-05-05 FTSE: 1999-05-06\n", "BP: 1999-05-06 FTSE: 1999-05-07\n", "BP: 1999-05-07 FTSE: 1999-05-10\n", "BP: 1999-05-10 FTSE: 1999-05-11\n", "BP: 1999-05-11 FTSE: 1999-05-12\n", "BP: 1999-05-12 FTSE: 1999-05-13\n", "BP: 1999-05-13 FTSE: 1999-05-14\n", "BP: 1999-05-14 FTSE: 1999-05-17\n", "BP: 1999-05-17 FTSE: 1999-05-18\n", "BP: 1999-05-18 FTSE: 1999-05-19\n", "BP: 1999-05-19 FTSE: 1999-05-20\n", "BP: 1999-05-20 FTSE: 1999-05-21\n", "BP: 1999-05-21 FTSE: 1999-05-24\n", "BP: 1999-05-24 FTSE: 1999-05-25\n", "BP: 1999-05-25 FTSE: 1999-05-26\n", "BP: 1999-05-26 FTSE: 1999-05-27\n", "BP: 1999-05-27 FTSE: 1999-05-28\n", "BP: 1999-05-28 FTSE: 1999-06-01\n", "BP: 1999-06-01 FTSE: 1999-06-02\n", "BP: 1999-06-02 FTSE: 1999-06-03\n", "BP: 1999-06-03 FTSE: 1999-06-04\n", "BP: 1999-06-04 FTSE: 1999-06-07\n", "BP: 1999-06-07 FTSE: 1999-06-08\n", "BP: 1999-06-08 FTSE: 1999-06-09\n", "BP: 1999-06-09 FTSE: 1999-06-10\n", "BP: 1999-06-10 FTSE: 1999-06-11\n", "BP: 1999-06-11 FTSE: 1999-06-14\n", "BP: 1999-06-14 FTSE: 1999-06-15\n", "BP: 1999-06-15 FTSE: 1999-06-16\n", "BP: 1999-06-16 FTSE: 1999-06-17\n", "BP: 1999-06-17 FTSE: 1999-06-18\n", "BP: 1999-06-18 FTSE: 1999-06-21\n", "BP: 1999-06-21 FTSE: 1999-06-22\n", "BP: 1999-06-22 FTSE: 1999-06-23\n", "BP: 1999-06-23 FTSE: 1999-06-24\n", "BP: 1999-06-24 FTSE: 1999-06-25\n", "BP: 1999-06-25 FTSE: 1999-06-28\n", "BP: 1999-06-28 FTSE: 1999-06-29\n", "BP: 1999-06-29 FTSE: 1999-06-30\n", "BP: 1999-06-30 FTSE: 1999-07-01\n", "BP: 1999-07-01 FTSE: 1999-07-02\n", "BP: 1999-07-02 FTSE: 1999-07-05\n", "BP: 1999-08-30 FTSE: 1999-08-31\n", "BP: 1999-08-31 FTSE: 1999-09-01\n", "BP: 1999-09-01 FTSE: 1999-09-02\n", "BP: 1999-09-02 FTSE: 1999-09-03\n", "BP: 1999-09-03 FTSE: 1999-09-06\n", "BP: 1999-11-26 FTSE: 1999-11-25\n", "BP: 1999-11-29 FTSE: 1999-11-26\n", "BP: 1999-11-30 FTSE: 1999-11-29\n", "BP: 1999-12-01 FTSE: 1999-11-30\n", "BP: 1999-12-02 FTSE: 1999-12-01\n", "BP: 1999-12-03 FTSE: 1999-12-02\n", "BP: 1999-12-06 FTSE: 1999-12-03\n", "BP: 1999-12-07 FTSE: 1999-12-06\n", "BP: 1999-12-08 FTSE: 1999-12-07\n", "BP: 1999-12-09 FTSE: 1999-12-08\n", "BP: 1999-12-10 FTSE: 1999-12-09\n", "BP: 1999-12-13 FTSE: 1999-12-10\n", "BP: 1999-12-14 FTSE: 1999-12-13\n", "BP: 1999-12-15 FTSE: 1999-12-14\n", "BP: 1999-12-16 FTSE: 1999-12-15\n", "BP: 1999-12-17 FTSE: 1999-12-16\n", "BP: 1999-12-20 FTSE: 1999-12-17\n", "BP: 1999-12-21 FTSE: 1999-12-20\n", "BP: 1999-12-22 FTSE: 1999-12-21\n", "BP: 1999-12-23 FTSE: 1999-12-22\n", "BP: 1999-12-27 FTSE: 1999-12-23\n", "BP: 1999-12-28 FTSE: 1999-12-24\n", "BP: 1999-12-31 FTSE: 2000-01-04\n", "BP: 2000-01-03 FTSE: 2000-01-05\n", "BP: 2000-01-04 FTSE: 2000-01-06\n", "BP: 2000-01-05 FTSE: 2000-01-07\n", "BP: 2000-01-06 FTSE: 2000-01-10\n", "BP: 2000-01-07 FTSE: 2000-01-11\n", "BP: 2000-01-10 FTSE: 2000-01-12\n", "BP: 2000-01-11 FTSE: 2000-01-13\n", "BP: 2000-01-12 FTSE: 2000-01-14\n", "BP: 2000-01-13 FTSE: 2000-01-17\n", "BP: 2000-01-14 FTSE: 2000-01-18\n", "BP: 2000-01-18 FTSE: 2000-01-19\n", "BP: 2000-01-19 FTSE: 2000-01-20\n", "BP: 2000-01-20 FTSE: 2000-01-21\n", "BP: 2000-01-21 FTSE: 2000-01-24\n", "BP: 2000-01-24 FTSE: 2000-01-25\n", "BP: 2000-01-25 FTSE: 2000-01-26\n", "BP: 2000-01-26 FTSE: 2000-01-27\n", "BP: 2000-01-27 FTSE: 2000-01-28\n", "BP: 2000-01-28 FTSE: 2000-01-31\n", "BP: 2000-01-31 FTSE: 2000-02-01\n", "BP: 2000-02-01 FTSE: 2000-02-02\n", "BP: 2000-02-02 FTSE: 2000-02-03\n", "BP: 2000-02-03 FTSE: 2000-02-04\n", "BP: 2000-02-04 FTSE: 2000-02-07\n", "BP: 2000-02-07 FTSE: 2000-02-08\n", "BP: 2000-02-08 FTSE: 2000-02-09\n", "BP: 2000-02-09 FTSE: 2000-02-10\n", "BP: 2000-02-10 FTSE: 2000-02-11\n", "BP: 2000-02-11 FTSE: 2000-02-14\n", "BP: 2000-02-14 FTSE: 2000-02-15\n", "BP: 2000-02-15 FTSE: 2000-02-16\n", "BP: 2000-02-16 FTSE: 2000-02-17\n", "BP: 2000-02-17 FTSE: 2000-02-18\n", "BP: 2000-02-18 FTSE: 2000-02-21\n", "BP: 2000-04-24 FTSE: 2000-04-25\n", "BP: 2000-04-25 FTSE: 2000-04-26\n", "BP: 2000-04-26 FTSE: 2000-04-27\n", "BP: 2000-04-27 FTSE: 2000-04-28\n", "BP: 2000-04-28 FTSE: 2000-05-02\n", "BP: 2000-05-01 FTSE: 2000-05-03\n", "BP: 2000-05-02 FTSE: 2000-05-04\n", "BP: 2000-05-03 FTSE: 2000-05-05\n", "BP: 2000-05-04 FTSE: 2000-05-08\n", "BP: 2000-05-05 FTSE: 2000-05-09\n", "BP: 2000-05-08 FTSE: 2000-05-10\n", "BP: 2000-05-09 FTSE: 2000-05-11\n", "BP: 2000-05-10 FTSE: 2000-05-12\n", "BP: 2000-05-11 FTSE: 2000-05-15\n", "BP: 2000-05-12 FTSE: 2000-05-16\n", "BP: 2000-05-15 FTSE: 2000-05-17\n", "BP: 2000-05-16 FTSE: 2000-05-18\n", "BP: 2000-05-17 FTSE: 2000-05-19\n", "BP: 2000-05-18 FTSE: 2000-05-22\n", "BP: 2000-05-19 FTSE: 2000-05-23\n", "BP: 2000-05-22 FTSE: 2000-05-24\n", "BP: 2000-05-23 FTSE: 2000-05-25\n", "BP: 2000-05-24 FTSE: 2000-05-26\n", "BP: 2000-05-25 FTSE: 2000-05-30\n", "BP: 2000-05-26 FTSE: 2000-05-31\n", "BP: 2000-05-30 FTSE: 2000-06-01\n", "BP: 2000-05-31 FTSE: 2000-06-02\n", "BP: 2000-06-01 FTSE: 2000-06-05\n", "BP: 2000-06-02 FTSE: 2000-06-06\n", "BP: 2000-06-05 FTSE: 2000-06-07\n", "BP: 2000-06-06 FTSE: 2000-06-08\n", "BP: 2000-06-07 FTSE: 2000-06-09\n", "BP: 2000-06-08 FTSE: 2000-06-12\n", "BP: 2000-06-09 FTSE: 2000-06-13\n", "BP: 2000-06-12 FTSE: 2000-06-14\n", "BP: 2000-06-13 FTSE: 2000-06-15\n", "BP: 2000-06-14 FTSE: 2000-06-16\n", "BP: 2000-06-15 FTSE: 2000-06-19\n", "BP: 2000-06-16 FTSE: 2000-06-20\n", "BP: 2000-06-19 FTSE: 2000-06-21\n", "BP: 2000-06-20 FTSE: 2000-06-22\n", "BP: 2000-06-21 FTSE: 2000-06-23\n", "BP: 2000-06-22 FTSE: 2000-06-26\n", "BP: 2000-06-23 FTSE: 2000-06-27\n", "BP: 2000-06-26 FTSE: 2000-06-28\n", "BP: 2000-06-27 FTSE: 2000-06-29\n", "BP: 2000-06-28 FTSE: 2000-06-30\n", "BP: 2000-06-29 FTSE: 2000-07-03\n", "BP: 2000-06-30 FTSE: 2000-07-04\n", "BP: 2000-07-03 FTSE: 2000-07-05\n", "BP: 2000-07-05 FTSE: 2000-07-06\n", "BP: 2000-07-06 FTSE: 2000-07-07\n", "BP: 2000-07-07 FTSE: 2000-07-10\n", "BP: 2000-07-10 FTSE: 2000-07-11\n", "BP: 2000-07-11 FTSE: 2000-07-12\n", "BP: 2000-07-12 FTSE: 2000-07-13\n", "BP: 2000-07-13 FTSE: 2000-07-14\n", "BP: 2000-07-14 FTSE: 2000-07-17\n", "BP: 2000-07-17 FTSE: 2000-07-18\n", "BP: 2000-07-18 FTSE: 2000-07-19\n", "BP: 2000-07-19 FTSE: 2000-07-20\n", "BP: 2000-07-20 FTSE: 2000-07-21\n", "BP: 2000-07-21 FTSE: 2000-07-24\n", "BP: 2000-07-24 FTSE: 2000-07-25\n", "BP: 2000-07-25 FTSE: 2000-07-26\n", "BP: 2000-07-26 FTSE: 2000-07-27\n", "BP: 2000-07-27 FTSE: 2000-07-28\n", "BP: 2000-07-28 FTSE: 2000-07-31\n", "BP: 2000-07-31 FTSE: 2000-08-01\n", "BP: 2000-08-01 FTSE: 2000-08-02\n", "BP: 2000-08-02 FTSE: 2000-08-03\n", "BP: 2000-08-03 FTSE: 2000-08-04\n", "BP: 2000-08-04 FTSE: 2000-08-07\n", "BP: 2000-08-07 FTSE: 2000-08-08\n", "BP: 2000-08-08 FTSE: 2000-08-09\n", "BP: 2000-08-09 FTSE: 2000-08-10\n", "BP: 2000-08-10 FTSE: 2000-08-11\n", "BP: 2000-08-11 FTSE: 2000-08-14\n", "BP: 2000-08-14 FTSE: 2000-08-15\n", "BP: 2000-08-15 FTSE: 2000-08-16\n", "BP: 2000-08-16 FTSE: 2000-08-17\n", "BP: 2000-08-17 FTSE: 2000-08-18\n", "BP: 2000-08-18 FTSE: 2000-08-21\n", "BP: 2000-08-21 FTSE: 2000-08-22\n", "BP: 2000-08-22 FTSE: 2000-08-23\n", "BP: 2000-08-23 FTSE: 2000-08-24\n", "BP: 2000-08-24 FTSE: 2000-08-25\n", "BP: 2000-08-25 FTSE: 2000-08-29\n", "BP: 2000-08-28 FTSE: 2000-08-30\n", "BP: 2000-08-29 FTSE: 2000-08-31\n", "BP: 2000-08-30 FTSE: 2000-09-01\n", "BP: 2000-08-31 FTSE: 2000-09-04\n", "BP: 2000-09-01 FTSE: 2000-09-05\n", "BP: 2000-09-05 FTSE: 2000-09-06\n", "BP: 2000-09-06 FTSE: 2000-09-07\n", "BP: 2000-09-07 FTSE: 2000-09-08\n", "BP: 2000-09-08 FTSE: 2000-09-11\n", "BP: 2000-09-11 FTSE: 2000-09-12\n", "BP: 2000-09-12 FTSE: 2000-09-13\n", "BP: 2000-09-13 FTSE: 2000-09-14\n", "BP: 2000-09-14 FTSE: 2000-09-15\n", "BP: 2000-09-15 FTSE: 2000-09-18\n", "BP: 2000-09-18 FTSE: 2000-09-19\n", "BP: 2000-09-19 FTSE: 2000-09-20\n", "BP: 2000-09-20 FTSE: 2000-09-21\n", "BP: 2000-09-21 FTSE: 2000-09-22\n", "BP: 2000-09-22 FTSE: 2000-09-25\n", "BP: 2000-09-25 FTSE: 2000-09-26\n", "BP: 2000-09-26 FTSE: 2000-09-27\n", "BP: 2000-09-27 FTSE: 2000-09-28\n", "BP: 2000-09-28 FTSE: 2000-09-29\n", "BP: 2000-09-29 FTSE: 2000-10-02\n", "BP: 2000-10-02 FTSE: 2000-10-03\n", "BP: 2000-10-03 FTSE: 2000-10-04\n", "BP: 2000-10-04 FTSE: 2000-10-05\n", "BP: 2000-10-05 FTSE: 2000-10-06\n", "BP: 2000-10-06 FTSE: 2000-10-09\n", "BP: 2000-10-09 FTSE: 2000-10-10\n", "BP: 2000-10-10 FTSE: 2000-10-11\n", "BP: 2000-10-11 FTSE: 2000-10-12\n", "BP: 2000-10-12 FTSE: 2000-10-13\n", "BP: 2000-10-13 FTSE: 2000-10-16\n", "BP: 2000-10-16 FTSE: 2000-10-17\n", "BP: 2000-10-17 FTSE: 2000-10-18\n", "BP: 2000-10-18 FTSE: 2000-10-19\n", "BP: 2000-10-19 FTSE: 2000-10-20\n", "BP: 2000-10-20 FTSE: 2000-10-23\n", "BP: 2000-10-23 FTSE: 2000-10-24\n", "BP: 2000-10-24 FTSE: 2000-10-25\n", "BP: 2000-10-25 FTSE: 2000-10-26\n", "BP: 2000-10-26 FTSE: 2000-10-27\n", "BP: 2000-10-27 FTSE: 2000-10-30\n", "BP: 2000-10-30 FTSE: 2000-10-31\n", "BP: 2000-10-31 FTSE: 2000-11-01\n", "BP: 2000-11-01 FTSE: 2000-11-02\n", "BP: 2000-11-02 FTSE: 2000-11-03\n", "BP: 2000-11-03 FTSE: 2000-11-06\n", "BP: 2000-11-06 FTSE: 2000-11-07\n", "BP: 2000-11-07 FTSE: 2000-11-08\n", "BP: 2000-11-08 FTSE: 2000-11-09\n", "BP: 2000-11-09 FTSE: 2000-11-10\n", "BP: 2000-11-10 FTSE: 2000-11-13\n", "BP: 2000-11-13 FTSE: 2000-11-14\n", "BP: 2000-11-14 FTSE: 2000-11-15\n", "BP: 2000-11-15 FTSE: 2000-11-16\n", "BP: 2000-11-16 FTSE: 2000-11-17\n", "BP: 2000-11-17 FTSE: 2000-11-20\n", "BP: 2000-11-20 FTSE: 2000-11-21\n", "BP: 2000-11-21 FTSE: 2000-11-22\n", "BP: 2000-11-22 FTSE: 2000-11-23\n", "BP: 2000-12-26 FTSE: 2000-12-27\n", "BP: 2000-12-27 FTSE: 2000-12-28\n", "BP: 2000-12-28 FTSE: 2000-12-29\n", "BP: 2000-12-29 FTSE: 2001-01-02\n", "BP: 2001-01-02 FTSE: 2001-01-03\n", "BP: 2001-01-03 FTSE: 2001-01-04\n", "BP: 2001-01-04 FTSE: 2001-01-05\n", "BP: 2001-01-05 FTSE: 2001-01-08\n", "BP: 2001-01-08 FTSE: 2001-01-09\n", "BP: 2001-01-09 FTSE: 2001-01-10\n", "BP: 2001-01-10 FTSE: 2001-01-11\n", "BP: 2001-01-11 FTSE: 2001-01-12\n", "BP: 2001-01-12 FTSE: 2001-01-15\n", "BP: 2001-02-20 FTSE: 2001-02-19\n", "BP: 2001-02-21 FTSE: 2001-02-20\n", "BP: 2001-02-22 FTSE: 2001-02-21\n", "BP: 2001-02-23 FTSE: 2001-02-22\n", "BP: 2001-02-26 FTSE: 2001-02-23\n", "BP: 2001-02-27 FTSE: 2001-02-26\n", "BP: 2001-02-28 FTSE: 2001-02-27\n", "BP: 2001-03-01 FTSE: 2001-02-28\n", "BP: 2001-03-02 FTSE: 2001-03-01\n", "BP: 2001-03-05 FTSE: 2001-03-02\n", "BP: 2001-03-06 FTSE: 2001-03-05\n", "BP: 2001-03-07 FTSE: 2001-03-06\n", "BP: 2001-03-08 FTSE: 2001-03-07\n", "BP: 2001-03-09 FTSE: 2001-03-08\n", "BP: 2001-03-12 FTSE: 2001-03-09\n", "BP: 2001-03-13 FTSE: 2001-03-12\n", "BP: 2001-03-14 FTSE: 2001-03-13\n", "BP: 2001-03-15 FTSE: 2001-03-14\n", "BP: 2001-03-16 FTSE: 2001-03-15\n", "BP: 2001-03-19 FTSE: 2001-03-16\n", "BP: 2001-03-20 FTSE: 2001-03-19\n", "BP: 2001-03-21 FTSE: 2001-03-20\n", "BP: 2001-03-22 FTSE: 2001-03-21\n", "BP: 2001-03-23 FTSE: 2001-03-22\n", "BP: 2001-03-26 FTSE: 2001-03-23\n", "BP: 2001-03-27 FTSE: 2001-03-26\n", "BP: 2001-03-28 FTSE: 2001-03-27\n", "BP: 2001-03-29 FTSE: 2001-03-28\n", "BP: 2001-03-30 FTSE: 2001-03-29\n", "BP: 2001-04-02 FTSE: 2001-03-30\n", "BP: 2001-04-03 FTSE: 2001-04-02\n", "BP: 2001-04-04 FTSE: 2001-04-03\n", "BP: 2001-04-05 FTSE: 2001-04-04\n", "BP: 2001-04-06 FTSE: 2001-04-05\n", "BP: 2001-04-09 FTSE: 2001-04-06\n", "BP: 2001-04-10 FTSE: 2001-04-09\n", "BP: 2001-04-11 FTSE: 2001-04-10\n", "BP: 2001-04-12 FTSE: 2001-04-11\n", "BP: 2001-04-16 FTSE: 2001-04-12\n", "BP: 2001-05-07 FTSE: 2001-05-08\n", "BP: 2001-05-08 FTSE: 2001-05-09\n", "BP: 2001-05-09 FTSE: 2001-05-10\n", "BP: 2001-05-10 FTSE: 2001-05-11\n", "BP: 2001-05-11 FTSE: 2001-05-14\n", "BP: 2001-05-14 FTSE: 2001-05-15\n", "BP: 2001-05-15 FTSE: 2001-05-16\n", "BP: 2001-05-16 FTSE: 2001-05-17\n", "BP: 2001-05-17 FTSE: 2001-05-18\n", "BP: 2001-05-18 FTSE: 2001-05-21\n", "BP: 2001-05-21 FTSE: 2001-05-22\n", "BP: 2001-05-22 FTSE: 2001-05-23\n", "BP: 2001-05-23 FTSE: 2001-05-24\n", "BP: 2001-05-24 FTSE: 2001-05-25\n", "BP: 2001-05-25 FTSE: 2001-05-29\n", "BP: 2001-05-29 FTSE: 2001-05-30\n", "BP: 2001-05-30 FTSE: 2001-05-31\n", "BP: 2001-05-31 FTSE: 2001-06-01\n", "BP: 2001-06-01 FTSE: 2001-06-04\n", "BP: 2001-06-04 FTSE: 2001-06-05\n", "BP: 2001-06-05 FTSE: 2001-06-06\n", "BP: 2001-06-06 FTSE: 2001-06-07\n", "BP: 2001-06-07 FTSE: 2001-06-08\n", "BP: 2001-06-08 FTSE: 2001-06-11\n", "BP: 2001-06-11 FTSE: 2001-06-12\n", "BP: 2001-06-12 FTSE: 2001-06-13\n", "BP: 2001-06-13 FTSE: 2001-06-14\n", "BP: 2001-06-14 FTSE: 2001-06-15\n", "BP: 2001-06-15 FTSE: 2001-06-18\n", "BP: 2001-06-18 FTSE: 2001-06-19\n", "BP: 2001-06-19 FTSE: 2001-06-20\n", "BP: 2001-06-20 FTSE: 2001-06-21\n", "BP: 2001-06-21 FTSE: 2001-06-22\n", "BP: 2001-06-22 FTSE: 2001-06-25\n", "BP: 2001-06-25 FTSE: 2001-06-26\n", "BP: 2001-06-26 FTSE: 2001-06-27\n", "BP: 2001-06-27 FTSE: 2001-06-28\n", "BP: 2001-06-28 FTSE: 2001-06-29\n", "BP: 2001-06-29 FTSE: 2001-07-02\n", "BP: 2001-07-02 FTSE: 2001-07-03\n", "BP: 2001-07-03 FTSE: 2001-07-04\n", "BP: 2001-08-27 FTSE: 2001-08-28\n", "BP: 2001-08-28 FTSE: 2001-08-29\n", "BP: 2001-08-29 FTSE: 2001-08-30\n", "BP: 2001-08-30 FTSE: 2001-08-31\n", "BP: 2001-08-31 FTSE: 2001-09-03\n", "BP: 2001-09-17 FTSE: 2001-09-11\n", "BP: 2001-09-18 FTSE: 2001-09-12\n", "BP: 2001-09-19 FTSE: 2001-09-13\n", "BP: 2001-09-20 FTSE: 2001-09-14\n", "BP: 2001-09-21 FTSE: 2001-09-17\n", "BP: 2001-09-24 FTSE: 2001-09-18\n", "BP: 2001-09-25 FTSE: 2001-09-19\n", "BP: 2001-09-26 FTSE: 2001-09-20\n", "BP: 2001-09-27 FTSE: 2001-09-21\n", "BP: 2001-09-28 FTSE: 2001-09-24\n", "BP: 2001-10-01 FTSE: 2001-09-25\n", "BP: 2001-10-02 FTSE: 2001-09-26\n", "BP: 2001-10-03 FTSE: 2001-09-27\n", "BP: 2001-10-04 FTSE: 2001-09-28\n", "BP: 2001-10-05 FTSE: 2001-10-01\n", "BP: 2001-10-08 FTSE: 2001-10-02\n", "BP: 2001-10-09 FTSE: 2001-10-03\n", "BP: 2001-10-10 FTSE: 2001-10-04\n", "BP: 2001-10-11 FTSE: 2001-10-05\n", "BP: 2001-10-12 FTSE: 2001-10-08\n", "BP: 2001-10-15 FTSE: 2001-10-09\n", "BP: 2001-10-16 FTSE: 2001-10-10\n", "BP: 2001-10-17 FTSE: 2001-10-11\n", "BP: 2001-10-18 FTSE: 2001-10-12\n", "BP: 2001-10-19 FTSE: 2001-10-15\n", "BP: 2001-10-22 FTSE: 2001-10-16\n", "BP: 2001-10-23 FTSE: 2001-10-17\n", "BP: 2001-10-24 FTSE: 2001-10-18\n", "BP: 2001-10-25 FTSE: 2001-10-19\n", "BP: 2001-10-26 FTSE: 2001-10-22\n", "BP: 2001-10-29 FTSE: 2001-10-23\n", "BP: 2001-10-30 FTSE: 2001-10-24\n", "BP: 2001-10-31 FTSE: 2001-10-25\n", "BP: 2001-11-01 FTSE: 2001-10-26\n", "BP: 2001-11-02 FTSE: 2001-10-29\n", "BP: 2001-11-05 FTSE: 2001-10-30\n", "BP: 2001-11-06 FTSE: 2001-10-31\n", "BP: 2001-11-07 FTSE: 2001-11-01\n", "BP: 2001-11-08 FTSE: 2001-11-02\n", "BP: 2001-11-09 FTSE: 2001-11-05\n", "BP: 2001-11-12 FTSE: 2001-11-06\n", "BP: 2001-11-13 FTSE: 2001-11-07\n", "BP: 2001-11-14 FTSE: 2001-11-08\n", "BP: 2001-11-15 FTSE: 2001-11-09\n", "BP: 2001-11-16 FTSE: 2001-11-12\n", "BP: 2001-11-19 FTSE: 2001-11-13\n", "BP: 2001-11-20 FTSE: 2001-11-14\n", "BP: 2001-11-21 FTSE: 2001-11-15\n", "BP: 2001-11-23 FTSE: 2001-11-16\n", "BP: 2001-11-26 FTSE: 2001-11-19\n", "BP: 2001-11-27 FTSE: 2001-11-20\n", "BP: 2001-11-28 FTSE: 2001-11-21\n", "BP: 2001-11-29 FTSE: 2001-11-22\n", "BP: 2001-11-30 FTSE: 2001-11-23\n", "BP: 2001-12-03 FTSE: 2001-11-26\n", "BP: 2001-12-04 FTSE: 2001-11-27\n", "BP: 2001-12-05 FTSE: 2001-11-28\n", "BP: 2001-12-06 FTSE: 2001-11-29\n", "BP: 2001-12-07 FTSE: 2001-11-30\n", "BP: 2001-12-10 FTSE: 2001-12-03\n", "BP: 2001-12-11 FTSE: 2001-12-04\n", "BP: 2001-12-12 FTSE: 2001-12-05\n", "BP: 2001-12-13 FTSE: 2001-12-06\n", "BP: 2001-12-14 FTSE: 2001-12-07\n", "BP: 2001-12-17 FTSE: 2001-12-10\n", "BP: 2001-12-18 FTSE: 2001-12-11\n", "BP: 2001-12-19 FTSE: 2001-12-12\n", "BP: 2001-12-20 FTSE: 2001-12-13\n", "BP: 2001-12-21 FTSE: 2001-12-14\n", "BP: 2001-12-24 FTSE: 2001-12-17\n", "BP: 2001-12-26 FTSE: 2001-12-18\n", "BP: 2001-12-27 FTSE: 2001-12-19\n", "BP: 2001-12-28 FTSE: 2001-12-20\n", "BP: 2001-12-31 FTSE: 2001-12-21\n", "BP: 2002-01-02 FTSE: 2001-12-24\n", "BP: 2002-01-03 FTSE: 2001-12-27\n", "BP: 2002-01-04 FTSE: 2001-12-28\n", "BP: 2002-01-07 FTSE: 2001-12-31\n", "BP: 2002-01-08 FTSE: 2002-01-02\n", "BP: 2002-01-09 FTSE: 2002-01-03\n", "BP: 2002-01-10 FTSE: 2002-01-04\n", "BP: 2002-01-11 FTSE: 2002-01-07\n", "BP: 2002-01-14 FTSE: 2002-01-08\n", "BP: 2002-01-15 FTSE: 2002-01-09\n", "BP: 2002-01-16 FTSE: 2002-01-10\n", "BP: 2002-01-17 FTSE: 2002-01-11\n", "BP: 2002-01-18 FTSE: 2002-01-14\n", "BP: 2002-01-22 FTSE: 2002-01-15\n", "BP: 2002-01-23 FTSE: 2002-01-16\n", "BP: 2002-01-24 FTSE: 2002-01-17\n", "BP: 2002-01-25 FTSE: 2002-01-18\n", "BP: 2002-01-28 FTSE: 2002-01-21\n", "BP: 2002-01-29 FTSE: 2002-01-22\n", "BP: 2002-01-30 FTSE: 2002-01-23\n", "BP: 2002-01-31 FTSE: 2002-01-24\n", "BP: 2002-02-01 FTSE: 2002-01-25\n", "BP: 2002-02-04 FTSE: 2002-01-28\n", "BP: 2002-02-05 FTSE: 2002-01-29\n", "BP: 2002-02-06 FTSE: 2002-01-30\n", "BP: 2002-02-07 FTSE: 2002-01-31\n", "BP: 2002-02-08 FTSE: 2002-02-01\n", "BP: 2002-02-11 FTSE: 2002-02-04\n", "BP: 2002-02-12 FTSE: 2002-02-05\n", "BP: 2002-02-13 FTSE: 2002-02-06\n", "BP: 2002-02-14 FTSE: 2002-02-07\n", "BP: 2002-02-15 FTSE: 2002-02-08\n", "BP: 2002-02-19 FTSE: 2002-02-11\n", "BP: 2002-02-20 FTSE: 2002-02-12\n", "BP: 2002-02-21 FTSE: 2002-02-13\n", "BP: 2002-02-22 FTSE: 2002-02-14\n", "BP: 2002-02-25 FTSE: 2002-02-15\n", "BP: 2002-02-26 FTSE: 2002-02-18\n", "BP: 2002-02-27 FTSE: 2002-02-19\n", "BP: 2002-02-28 FTSE: 2002-02-20\n", "BP: 2002-03-01 FTSE: 2002-02-21\n", "BP: 2002-03-04 FTSE: 2002-02-22\n", "BP: 2002-03-05 FTSE: 2002-02-25\n", "BP: 2002-03-06 FTSE: 2002-02-26\n", "BP: 2002-03-07 FTSE: 2002-02-27\n", "BP: 2002-03-08 FTSE: 2002-02-28\n", "BP: 2002-03-11 FTSE: 2002-03-01\n", "BP: 2002-03-12 FTSE: 2002-03-04\n", "BP: 2002-03-13 FTSE: 2002-03-05\n", "BP: 2002-03-14 FTSE: 2002-03-06\n", "BP: 2002-03-15 FTSE: 2002-03-07\n", "BP: 2002-03-18 FTSE: 2002-03-08\n", "BP: 2002-03-19 FTSE: 2002-03-11\n", "BP: 2002-03-20 FTSE: 2002-03-12\n", "BP: 2002-03-21 FTSE: 2002-03-13\n", "BP: 2002-03-22 FTSE: 2002-03-14\n", "BP: 2002-03-25 FTSE: 2002-03-15\n", "BP: 2002-03-26 FTSE: 2002-03-18\n", "BP: 2002-03-27 FTSE: 2002-03-19\n", "BP: 2002-03-28 FTSE: 2002-03-20\n", "BP: 2002-04-01 FTSE: 2002-03-21\n", "BP: 2002-04-02 FTSE: 2002-03-22\n", "BP: 2002-04-03 FTSE: 2002-03-25\n", "BP: 2002-04-04 FTSE: 2002-03-26\n", "BP: 2002-04-05 FTSE: 2002-03-27\n", "BP: 2002-04-08 FTSE: 2002-03-28\n", "BP: 2002-04-09 FTSE: 2002-04-02\n", "BP: 2002-04-10 FTSE: 2002-04-03\n", "BP: 2002-04-11 FTSE: 2002-04-04\n", "BP: 2002-04-12 FTSE: 2002-04-05\n", "BP: 2002-04-15 FTSE: 2002-04-08\n", "BP: 2002-04-16 FTSE: 2002-04-09\n", "BP: 2002-04-17 FTSE: 2002-04-10\n", "BP: 2002-04-18 FTSE: 2002-04-11\n", "BP: 2002-04-19 FTSE: 2002-04-12\n", "BP: 2002-04-22 FTSE: 2002-04-15\n", "BP: 2002-04-23 FTSE: 2002-04-16\n", "BP: 2002-04-24 FTSE: 2002-04-17\n", "BP: 2002-04-25 FTSE: 2002-04-18\n", "BP: 2002-04-26 FTSE: 2002-04-19\n", "BP: 2002-04-29 FTSE: 2002-04-22\n", "BP: 2002-04-30 FTSE: 2002-04-23\n", "BP: 2002-05-01 FTSE: 2002-04-24\n", "BP: 2002-05-02 FTSE: 2002-04-25\n", "BP: 2002-05-03 FTSE: 2002-04-26\n", "BP: 2002-05-06 FTSE: 2002-04-29\n", "BP: 2002-05-07 FTSE: 2002-04-30\n", "BP: 2002-05-08 FTSE: 2002-05-01\n", "BP: 2002-05-09 FTSE: 2002-05-02\n", "BP: 2002-05-10 FTSE: 2002-05-03\n", "BP: 2002-05-13 FTSE: 2002-05-07\n", "BP: 2002-05-14 FTSE: 2002-05-08\n", "BP: 2002-05-15 FTSE: 2002-05-09\n", "BP: 2002-05-16 FTSE: 2002-05-10\n", "BP: 2002-05-17 FTSE: 2002-05-13\n", "BP: 2002-05-20 FTSE: 2002-05-14\n", "BP: 2002-05-21 FTSE: 2002-05-15\n", "BP: 2002-05-22 FTSE: 2002-05-16\n", "BP: 2002-05-23 FTSE: 2002-05-17\n", "BP: 2002-05-24 FTSE: 2002-05-20\n", "BP: 2002-05-28 FTSE: 2002-05-21\n", "BP: 2002-05-29 FTSE: 2002-05-22\n", "BP: 2002-05-30 FTSE: 2002-05-23\n", "BP: 2002-05-31 FTSE: 2002-05-24\n", "BP: 2002-06-03 FTSE: 2002-05-27\n", "BP: 2002-06-04 FTSE: 2002-05-28\n", "BP: 2002-06-05 FTSE: 2002-05-29\n", "BP: 2002-06-06 FTSE: 2002-05-30\n", "BP: 2002-06-07 FTSE: 2002-05-31\n", "BP: 2002-06-10 FTSE: 2002-06-05\n", "BP: 2002-06-11 FTSE: 2002-06-06\n", "BP: 2002-06-12 FTSE: 2002-06-07\n", "BP: 2002-06-13 FTSE: 2002-06-10\n", "BP: 2002-06-14 FTSE: 2002-06-11\n", "BP: 2002-06-17 FTSE: 2002-06-12\n", "BP: 2002-06-18 FTSE: 2002-06-13\n", "BP: 2002-06-19 FTSE: 2002-06-14\n", "BP: 2002-06-20 FTSE: 2002-06-17\n", "BP: 2002-06-21 FTSE: 2002-06-18\n", "BP: 2002-06-24 FTSE: 2002-06-19\n", "BP: 2002-06-25 FTSE: 2002-06-20\n", "BP: 2002-06-26 FTSE: 2002-06-21\n", "BP: 2002-06-27 FTSE: 2002-06-24\n", "BP: 2002-06-28 FTSE: 2002-06-25\n", "BP: 2002-07-01 FTSE: 2002-06-26\n", "BP: 2002-07-02 FTSE: 2002-06-27\n", "BP: 2002-07-03 FTSE: 2002-06-28\n", "BP: 2002-07-05 FTSE: 2002-07-01\n", "BP: 2002-07-08 FTSE: 2002-07-02\n", "BP: 2002-07-09 FTSE: 2002-07-03\n", "BP: 2002-07-10 FTSE: 2002-07-04\n", "BP: 2002-07-11 FTSE: 2002-07-05\n", "BP: 2002-07-12 FTSE: 2002-07-08\n", "BP: 2002-07-15 FTSE: 2002-07-09\n", "BP: 2002-07-16 FTSE: 2002-07-10\n", "BP: 2002-07-17 FTSE: 2002-07-11\n", "BP: 2002-07-18 FTSE: 2002-07-12\n", "BP: 2002-07-19 FTSE: 2002-07-15\n", "BP: 2002-07-22 FTSE: 2002-07-16\n", "BP: 2002-07-23 FTSE: 2002-07-17\n", "BP: 2002-07-24 FTSE: 2002-07-18\n", "BP: 2002-07-25 FTSE: 2002-07-19\n", "BP: 2002-07-26 FTSE: 2002-07-22\n", "BP: 2002-07-29 FTSE: 2002-07-23\n", "BP: 2002-07-30 FTSE: 2002-07-24\n", "BP: 2002-07-31 FTSE: 2002-07-25\n", "BP: 2002-08-01 FTSE: 2002-07-26\n", "BP: 2002-08-02 FTSE: 2002-07-29\n", "BP: 2002-08-05 FTSE: 2002-07-30\n", "BP: 2002-08-06 FTSE: 2002-07-31\n", "BP: 2002-08-07 FTSE: 2002-08-01\n", "BP: 2002-08-08 FTSE: 2002-08-02\n", "BP: 2002-08-09 FTSE: 2002-08-05\n", "BP: 2002-08-12 FTSE: 2002-08-06\n", "BP: 2002-08-13 FTSE: 2002-08-07\n", "BP: 2002-08-14 FTSE: 2002-08-08\n", "BP: 2002-08-15 FTSE: 2002-08-09\n", "BP: 2002-08-16 FTSE: 2002-08-12\n", "BP: 2002-08-19 FTSE: 2002-08-13\n", "BP: 2002-08-20 FTSE: 2002-08-14\n", "BP: 2002-08-21 FTSE: 2002-08-15\n", "BP: 2002-08-22 FTSE: 2002-08-16\n", "BP: 2002-08-23 FTSE: 2002-08-19\n", "BP: 2002-08-26 FTSE: 2002-08-20\n", "BP: 2002-08-27 FTSE: 2002-08-21\n", "BP: 2002-08-28 FTSE: 2002-08-22\n", "BP: 2002-08-29 FTSE: 2002-08-23\n", "BP: 2002-08-30 FTSE: 2002-08-27\n", "BP: 2002-09-03 FTSE: 2002-08-28\n", "BP: 2002-09-04 FTSE: 2002-08-29\n", "BP: 2002-09-05 FTSE: 2002-08-30\n", "BP: 2002-09-06 FTSE: 2002-09-02\n", "BP: 2002-09-09 FTSE: 2002-09-03\n", "BP: 2002-09-10 FTSE: 2002-09-04\n", "BP: 2002-09-11 FTSE: 2002-09-05\n", "BP: 2002-09-12 FTSE: 2002-09-06\n", "BP: 2002-09-13 FTSE: 2002-09-09\n", "BP: 2002-09-16 FTSE: 2002-09-10\n", "BP: 2002-09-17 FTSE: 2002-09-11\n", "BP: 2002-09-18 FTSE: 2002-09-12\n", "BP: 2002-09-19 FTSE: 2002-09-13\n", "BP: 2002-09-20 FTSE: 2002-09-16\n", "BP: 2002-09-23 FTSE: 2002-09-17\n", "BP: 2002-09-24 FTSE: 2002-09-18\n", "BP: 2002-09-25 FTSE: 2002-09-19\n", "BP: 2002-09-26 FTSE: 2002-09-20\n", "BP: 2002-09-27 FTSE: 2002-09-23\n", "BP: 2002-09-30 FTSE: 2002-09-24\n", "BP: 2002-10-01 FTSE: 2002-09-25\n", "BP: 2002-10-02 FTSE: 2002-09-26\n", "BP: 2002-10-03 FTSE: 2002-09-27\n", "BP: 2002-10-04 FTSE: 2002-09-30\n", "BP: 2002-10-07 FTSE: 2002-10-01\n", "BP: 2002-10-08 FTSE: 2002-10-02\n", "BP: 2002-10-09 FTSE: 2002-10-03\n", "BP: 2002-10-10 FTSE: 2002-10-04\n", "BP: 2002-10-11 FTSE: 2002-10-07\n", "BP: 2002-10-14 FTSE: 2002-10-08\n", "BP: 2002-10-15 FTSE: 2002-10-09\n", "BP: 2002-10-16 FTSE: 2002-10-10\n", "BP: 2002-10-17 FTSE: 2002-10-11\n", "BP: 2002-10-18 FTSE: 2002-10-14\n", "BP: 2002-10-21 FTSE: 2002-10-15\n", "BP: 2002-10-22 FTSE: 2002-10-16\n", "BP: 2002-10-23 FTSE: 2002-10-17\n", "BP: 2002-10-24 FTSE: 2002-10-18\n", "BP: 2002-10-25 FTSE: 2002-10-21\n", "BP: 2002-10-28 FTSE: 2002-10-22\n", "BP: 2002-10-29 FTSE: 2002-10-23\n", "BP: 2002-10-30 FTSE: 2002-10-24\n", "BP: 2002-10-31 FTSE: 2002-10-25\n", "BP: 2002-11-01 FTSE: 2002-10-28\n", "BP: 2002-11-04 FTSE: 2002-10-29\n", "BP: 2002-11-05 FTSE: 2002-10-30\n", "BP: 2002-11-06 FTSE: 2002-10-31\n", "BP: 2002-11-07 FTSE: 2002-11-01\n", "BP: 2002-11-08 FTSE: 2002-11-04\n", "BP: 2002-11-11 FTSE: 2002-11-05\n", "BP: 2002-11-12 FTSE: 2002-11-06\n", "BP: 2002-11-13 FTSE: 2002-11-07\n", "BP: 2002-11-14 FTSE: 2002-11-08\n", "BP: 2002-11-15 FTSE: 2002-11-11\n", "BP: 2002-11-18 FTSE: 2002-11-12\n", "BP: 2002-11-19 FTSE: 2002-11-13\n", "BP: 2002-11-20 FTSE: 2002-11-14\n", "BP: 2002-11-21 FTSE: 2002-11-15\n", "BP: 2002-11-22 FTSE: 2002-11-18\n", "BP: 2002-11-25 FTSE: 2002-11-19\n", "BP: 2002-11-26 FTSE: 2002-11-20\n", "BP: 2002-11-27 FTSE: 2002-11-21\n", "BP: 2002-11-29 FTSE: 2002-11-22\n", "BP: 2002-12-02 FTSE: 2002-11-25\n", "BP: 2002-12-03 FTSE: 2002-11-26\n", "BP: 2002-12-04 FTSE: 2002-11-27\n", "BP: 2002-12-05 FTSE: 2002-11-28\n", "BP: 2002-12-06 FTSE: 2002-11-29\n", "BP: 2002-12-09 FTSE: 2002-12-02\n", "BP: 2002-12-10 FTSE: 2002-12-03\n", "BP: 2002-12-11 FTSE: 2002-12-04\n", "BP: 2002-12-12 FTSE: 2002-12-05\n", "BP: 2002-12-13 FTSE: 2002-12-06\n", "BP: 2002-12-16 FTSE: 2002-12-09\n", "BP: 2002-12-17 FTSE: 2002-12-10\n", "BP: 2002-12-18 FTSE: 2002-12-11\n", "BP: 2002-12-19 FTSE: 2002-12-12\n", "BP: 2002-12-20 FTSE: 2002-12-13\n", "BP: 2002-12-23 FTSE: 2002-12-16\n", "BP: 2002-12-24 FTSE: 2002-12-17\n", "BP: 2002-12-26 FTSE: 2002-12-18\n", "BP: 2002-12-27 FTSE: 2002-12-19\n", "BP: 2002-12-30 FTSE: 2002-12-20\n", "BP: 2002-12-31 FTSE: 2002-12-23\n", "BP: 2003-01-02 FTSE: 2002-12-24\n", "BP: 2003-01-03 FTSE: 2002-12-27\n", "BP: 2003-01-06 FTSE: 2002-12-30\n", "BP: 2003-01-07 FTSE: 2002-12-31\n", "BP: 2003-01-08 FTSE: 2003-01-02\n", "BP: 2003-01-09 FTSE: 2003-01-03\n", "BP: 2003-01-10 FTSE: 2003-01-06\n", "BP: 2003-01-13 FTSE: 2003-01-07\n", "BP: 2003-01-14 FTSE: 2003-01-08\n", "BP: 2003-01-15 FTSE: 2003-01-09\n", "BP: 2003-01-16 FTSE: 2003-01-10\n", "BP: 2003-01-17 FTSE: 2003-01-13\n", "BP: 2003-01-21 FTSE: 2003-01-14\n", "BP: 2003-01-22 FTSE: 2003-01-15\n", "BP: 2003-01-23 FTSE: 2003-01-16\n", "BP: 2003-01-24 FTSE: 2003-01-17\n", "BP: 2003-01-27 FTSE: 2003-01-20\n", "BP: 2003-01-28 FTSE: 2003-01-21\n", "BP: 2003-01-29 FTSE: 2003-01-22\n", "BP: 2003-01-30 FTSE: 2003-01-23\n", "BP: 2003-01-31 FTSE: 2003-01-24\n", "BP: 2003-02-03 FTSE: 2003-01-27\n", "BP: 2003-02-04 FTSE: 2003-01-28\n", "BP: 2003-02-05 FTSE: 2003-01-29\n", "BP: 2003-02-06 FTSE: 2003-01-30\n", "BP: 2003-02-07 FTSE: 2003-01-31\n", "BP: 2003-02-10 FTSE: 2003-02-03\n", "BP: 2003-02-11 FTSE: 2003-02-04\n", "BP: 2003-02-12 FTSE: 2003-02-05\n", "BP: 2003-02-13 FTSE: 2003-02-06\n", "BP: 2003-02-14 FTSE: 2003-02-07\n", "BP: 2003-02-18 FTSE: 2003-02-10\n", "BP: 2003-02-19 FTSE: 2003-02-11\n", "BP: 2003-02-20 FTSE: 2003-02-12\n", "BP: 2003-02-21 FTSE: 2003-02-13\n", "BP: 2003-02-24 FTSE: 2003-02-14\n", "BP: 2003-02-25 FTSE: 2003-02-17\n", "BP: 2003-02-26 FTSE: 2003-02-18\n", "BP: 2003-02-27 FTSE: 2003-02-19\n", "BP: 2003-02-28 FTSE: 2003-02-20\n", "BP: 2003-03-03 FTSE: 2003-02-21\n", "BP: 2003-03-04 FTSE: 2003-02-24\n", "BP: 2003-03-05 FTSE: 2003-02-25\n", "BP: 2003-03-06 FTSE: 2003-02-26\n", "BP: 2003-03-07 FTSE: 2003-02-27\n", "BP: 2003-03-10 FTSE: 2003-02-28\n", "BP: 2003-03-11 FTSE: 2003-03-03\n", "BP: 2003-03-12 FTSE: 2003-03-04\n", "BP: 2003-03-13 FTSE: 2003-03-05\n", "BP: 2003-03-14 FTSE: 2003-03-06\n", "BP: 2003-03-17 FTSE: 2003-03-07\n", "BP: 2003-03-18 FTSE: 2003-03-10\n", "BP: 2003-03-19 FTSE: 2003-03-11\n", "BP: 2003-03-20 FTSE: 2003-03-12\n", "BP: 2003-03-21 FTSE: 2003-03-13\n", "BP: 2003-03-24 FTSE: 2003-03-14\n", "BP: 2003-03-25 FTSE: 2003-03-17\n", "BP: 2003-03-26 FTSE: 2003-03-18\n", "BP: 2003-03-27 FTSE: 2003-03-19\n", "BP: 2003-03-28 FTSE: 2003-03-20\n", "BP: 2003-03-31 FTSE: 2003-03-21\n", "BP: 2003-04-01 FTSE: 2003-03-24\n", "BP: 2003-04-02 FTSE: 2003-03-25\n", "BP: 2003-04-03 FTSE: 2003-03-26\n", "BP: 2003-04-04 FTSE: 2003-03-27\n", "BP: 2003-04-07 FTSE: 2003-03-28\n", "BP: 2003-04-08 FTSE: 2003-03-31\n", "BP: 2003-04-09 FTSE: 2003-04-01\n", "BP: 2003-04-10 FTSE: 2003-04-02\n", "BP: 2003-04-11 FTSE: 2003-04-03\n", "BP: 2003-04-14 FTSE: 2003-04-04\n", "BP: 2003-04-15 FTSE: 2003-04-07\n", "BP: 2003-04-16 FTSE: 2003-04-08\n", "BP: 2003-04-17 FTSE: 2003-04-09\n", "BP: 2003-04-21 FTSE: 2003-04-10\n", "BP: 2003-04-22 FTSE: 2003-04-11\n", "BP: 2003-04-23 FTSE: 2003-04-14\n", "BP: 2003-04-24 FTSE: 2003-04-15\n", "BP: 2003-04-25 FTSE: 2003-04-16\n", "BP: 2003-04-28 FTSE: 2003-04-17\n", "BP: 2003-04-29 FTSE: 2003-04-22\n", "BP: 2003-04-30 FTSE: 2003-04-23\n", "BP: 2003-05-01 FTSE: 2003-04-24\n", "BP: 2003-05-02 FTSE: 2003-04-25\n", "BP: 2003-05-05 FTSE: 2003-04-28\n", "BP: 2003-05-06 FTSE: 2003-04-29\n", "BP: 2003-05-07 FTSE: 2003-04-30\n", "BP: 2003-05-08 FTSE: 2003-05-01\n", "BP: 2003-05-09 FTSE: 2003-05-02\n", "BP: 2003-05-12 FTSE: 2003-05-06\n", "BP: 2003-05-13 FTSE: 2003-05-07\n", "BP: 2003-05-14 FTSE: 2003-05-08\n", "BP: 2003-05-15 FTSE: 2003-05-09\n", "BP: 2003-05-16 FTSE: 2003-05-12\n", "BP: 2003-05-19 FTSE: 2003-05-13\n", "BP: 2003-05-20 FTSE: 2003-05-14\n", "BP: 2003-05-21 FTSE: 2003-05-15\n", "BP: 2003-05-22 FTSE: 2003-05-16\n", "BP: 2003-05-23 FTSE: 2003-05-19\n", "BP: 2003-05-27 FTSE: 2003-05-20\n", "BP: 2003-05-28 FTSE: 2003-05-21\n", "BP: 2003-05-29 FTSE: 2003-05-22\n", "BP: 2003-05-30 FTSE: 2003-05-23\n", "BP: 2003-06-02 FTSE: 2003-05-27\n", "BP: 2003-06-03 FTSE: 2003-05-28\n", "BP: 2003-06-04 FTSE: 2003-05-29\n", "BP: 2003-06-05 FTSE: 2003-05-30\n", "BP: 2003-06-06 FTSE: 2003-06-02\n", "BP: 2003-06-09 FTSE: 2003-06-03\n", "BP: 2003-06-10 FTSE: 2003-06-04\n", "BP: 2003-06-11 FTSE: 2003-06-05\n", "BP: 2003-06-12 FTSE: 2003-06-06\n", "BP: 2003-06-13 FTSE: 2003-06-09\n", "BP: 2003-06-16 FTSE: 2003-06-10\n", "BP: 2003-06-17 FTSE: 2003-06-11\n", "BP: 2003-06-18 FTSE: 2003-06-12\n", "BP: 2003-06-19 FTSE: 2003-06-13\n", "BP: 2003-06-20 FTSE: 2003-06-16\n", "BP: 2003-06-23 FTSE: 2003-06-17\n", "BP: 2003-06-24 FTSE: 2003-06-18\n", "BP: 2003-06-25 FTSE: 2003-06-19\n", "BP: 2003-06-26 FTSE: 2003-06-20\n", "BP: 2003-06-27 FTSE: 2003-06-23\n", "BP: 2003-06-30 FTSE: 2003-06-24\n", "BP: 2003-07-01 FTSE: 2003-06-25\n", "BP: 2003-07-02 FTSE: 2003-06-26\n", "BP: 2003-07-03 FTSE: 2003-06-27\n", "BP: 2003-07-07 FTSE: 2003-06-30\n", "BP: 2003-07-08 FTSE: 2003-07-01\n", "BP: 2003-07-09 FTSE: 2003-07-02\n", "BP: 2003-07-10 FTSE: 2003-07-03\n", "BP: 2003-07-11 FTSE: 2003-07-04\n", "BP: 2003-07-14 FTSE: 2003-07-07\n", "BP: 2003-07-15 FTSE: 2003-07-08\n", "BP: 2003-07-16 FTSE: 2003-07-09\n", "BP: 2003-07-17 FTSE: 2003-07-10\n", "BP: 2003-07-18 FTSE: 2003-07-11\n", "BP: 2003-07-21 FTSE: 2003-07-14\n", "BP: 2003-07-22 FTSE: 2003-07-15\n", "BP: 2003-07-23 FTSE: 2003-07-16\n", "BP: 2003-07-24 FTSE: 2003-07-17\n", "BP: 2003-07-25 FTSE: 2003-07-18\n", "BP: 2003-07-28 FTSE: 2003-07-21\n", "BP: 2003-07-29 FTSE: 2003-07-22\n", "BP: 2003-07-30 FTSE: 2003-07-23\n", "BP: 2003-07-31 FTSE: 2003-07-24\n", "BP: 2003-08-01 FTSE: 2003-07-25\n", "BP: 2003-08-04 FTSE: 2003-07-28\n", "BP: 2003-08-05 FTSE: 2003-07-29\n", "BP: 2003-08-06 FTSE: 2003-07-30\n", "BP: 2003-08-07 FTSE: 2003-07-31\n", "BP: 2003-08-08 FTSE: 2003-08-01\n", "BP: 2003-08-11 FTSE: 2003-08-04\n", "BP: 2003-08-12 FTSE: 2003-08-05\n", "BP: 2003-08-13 FTSE: 2003-08-06\n", "BP: 2003-08-14 FTSE: 2003-08-07\n", "BP: 2003-08-15 FTSE: 2003-08-08\n", "BP: 2003-08-18 FTSE: 2003-08-11\n", "BP: 2003-08-19 FTSE: 2003-08-12\n", "BP: 2003-08-20 FTSE: 2003-08-13\n", "BP: 2003-08-21 FTSE: 2003-08-14\n", "BP: 2003-08-22 FTSE: 2003-08-15\n", "BP: 2003-08-25 FTSE: 2003-08-18\n", "BP: 2003-08-26 FTSE: 2003-08-19\n", "BP: 2003-08-27 FTSE: 2003-08-20\n", "BP: 2003-08-28 FTSE: 2003-08-21\n", "BP: 2003-08-29 FTSE: 2003-08-22\n", "BP: 2003-09-02 FTSE: 2003-08-26\n", "BP: 2003-09-03 FTSE: 2003-08-27\n", "BP: 2003-09-04 FTSE: 2003-08-28\n", "BP: 2003-09-05 FTSE: 2003-08-29\n", "BP: 2003-09-08 FTSE: 2003-09-01\n", "BP: 2003-09-09 FTSE: 2003-09-02\n", "BP: 2003-09-10 FTSE: 2003-09-03\n", "BP: 2003-09-11 FTSE: 2003-09-04\n", "BP: 2003-09-12 FTSE: 2003-09-05\n", "BP: 2003-09-15 FTSE: 2003-09-08\n", "BP: 2003-09-16 FTSE: 2003-09-09\n", "BP: 2003-09-17 FTSE: 2003-09-10\n", "BP: 2003-09-18 FTSE: 2003-09-11\n", "BP: 2003-09-19 FTSE: 2003-09-12\n", "BP: 2003-09-22 FTSE: 2003-09-15\n", "BP: 2003-09-23 FTSE: 2003-09-16\n", "BP: 2003-09-24 FTSE: 2003-09-17\n", "BP: 2003-09-25 FTSE: 2003-09-18\n", "BP: 2003-09-26 FTSE: 2003-09-19\n", "BP: 2003-09-29 FTSE: 2003-09-22\n", "BP: 2003-09-30 FTSE: 2003-09-23\n", "BP: 2003-10-01 FTSE: 2003-09-24\n", "BP: 2003-10-02 FTSE: 2003-09-25\n", "BP: 2003-10-03 FTSE: 2003-09-26\n", "BP: 2003-10-06 FTSE: 2003-09-29\n", "BP: 2003-10-07 FTSE: 2003-09-30\n", "BP: 2003-10-08 FTSE: 2003-10-01\n", "BP: 2003-10-09 FTSE: 2003-10-02\n", "BP: 2003-10-10 FTSE: 2003-10-03\n", "BP: 2003-10-13 FTSE: 2003-10-06\n", "BP: 2003-10-14 FTSE: 2003-10-07\n", "BP: 2003-10-15 FTSE: 2003-10-08\n", "BP: 2003-10-16 FTSE: 2003-10-09\n", "BP: 2003-10-17 FTSE: 2003-10-10\n", "BP: 2003-10-20 FTSE: 2003-10-13\n", "BP: 2003-10-21 FTSE: 2003-10-14\n", "BP: 2003-10-22 FTSE: 2003-10-15\n", "BP: 2003-10-23 FTSE: 2003-10-16\n", "BP: 2003-10-24 FTSE: 2003-10-17\n", "BP: 2003-10-27 FTSE: 2003-10-20\n", "BP: 2003-10-28 FTSE: 2003-10-21\n", "BP: 2003-10-29 FTSE: 2003-10-22\n", "BP: 2003-10-30 FTSE: 2003-10-23\n", "BP: 2003-10-31 FTSE: 2003-10-24\n", "BP: 2003-11-03 FTSE: 2003-10-27\n", "BP: 2003-11-04 FTSE: 2003-10-28\n", "BP: 2003-11-05 FTSE: 2003-10-29\n", "BP: 2003-11-06 FTSE: 2003-10-30\n", "BP: 2003-11-07 FTSE: 2003-10-31\n", "BP: 2003-11-10 FTSE: 2003-11-03\n", "BP: 2003-11-11 FTSE: 2003-11-04\n", "BP: 2003-11-12 FTSE: 2003-11-05\n", "BP: 2003-11-13 FTSE: 2003-11-06\n", "BP: 2003-11-14 FTSE: 2003-11-07\n", "BP: 2003-11-17 FTSE: 2003-11-10\n", "BP: 2003-11-18 FTSE: 2003-11-11\n", "BP: 2003-11-19 FTSE: 2003-11-12\n", "BP: 2003-11-20 FTSE: 2003-11-13\n", "BP: 2003-11-21 FTSE: 2003-11-14\n", "BP: 2003-11-24 FTSE: 2003-11-17\n", "BP: 2003-11-25 FTSE: 2003-11-18\n", "BP: 2003-11-26 FTSE: 2003-11-19\n", "BP: 2003-11-28 FTSE: 2003-11-20\n", "BP: 2003-12-01 FTSE: 2003-11-21\n", "BP: 2003-12-02 FTSE: 2003-11-24\n", "BP: 2003-12-03 FTSE: 2003-11-25\n", "BP: 2003-12-04 FTSE: 2003-11-26\n", "BP: 2003-12-05 FTSE: 2003-11-27\n", "BP: 2003-12-08 FTSE: 2003-11-28\n", "BP: 2003-12-09 FTSE: 2003-12-01\n", "BP: 2003-12-10 FTSE: 2003-12-02\n", "BP: 2003-12-11 FTSE: 2003-12-03\n", "BP: 2003-12-12 FTSE: 2003-12-04\n", "BP: 2003-12-15 FTSE: 2003-12-05\n", "BP: 2003-12-16 FTSE: 2003-12-08\n", "BP: 2003-12-17 FTSE: 2003-12-09\n", "BP: 2003-12-18 FTSE: 2003-12-10\n", "BP: 2003-12-19 FTSE: 2003-12-11\n", "BP: 2003-12-22 FTSE: 2003-12-12\n", "BP: 2003-12-23 FTSE: 2003-12-15\n", "BP: 2003-12-24 FTSE: 2003-12-16\n", "BP: 2003-12-26 FTSE: 2003-12-17\n", "BP: 2003-12-29 FTSE: 2003-12-18\n", "BP: 2003-12-30 FTSE: 2003-12-19\n", "BP: 2003-12-31 FTSE: 2003-12-22\n", "BP: 2004-01-02 FTSE: 2003-12-23\n", "BP: 2004-01-05 FTSE: 2003-12-24\n", "BP: 2004-01-06 FTSE: 2003-12-29\n", "BP: 2004-01-07 FTSE: 2003-12-30\n", "BP: 2004-01-08 FTSE: 2003-12-31\n", "BP: 2004-01-09 FTSE: 2004-01-02\n", "BP: 2004-01-12 FTSE: 2004-01-05\n", "BP: 2004-01-13 FTSE: 2004-01-06\n", "BP: 2004-01-14 FTSE: 2004-01-07\n", "BP: 2004-01-15 FTSE: 2004-01-08\n", "BP: 2004-01-16 FTSE: 2004-01-09\n", "BP: 2004-01-20 FTSE: 2004-01-12\n", "BP: 2004-01-21 FTSE: 2004-01-13\n", "BP: 2004-01-22 FTSE: 2004-01-14\n", "BP: 2004-01-23 FTSE: 2004-01-15\n", "BP: 2004-01-26 FTSE: 2004-01-16\n", "BP: 2004-01-27 FTSE: 2004-01-19\n", "BP: 2004-01-28 FTSE: 2004-01-20\n", "BP: 2004-01-29 FTSE: 2004-01-21\n", "BP: 2004-01-30 FTSE: 2004-01-22\n", "BP: 2004-02-02 FTSE: 2004-01-23\n", "BP: 2004-02-03 FTSE: 2004-01-26\n", "BP: 2004-02-04 FTSE: 2004-01-27\n", "BP: 2004-02-05 FTSE: 2004-01-28\n", "BP: 2004-02-06 FTSE: 2004-01-29\n", "BP: 2004-02-09 FTSE: 2004-01-30\n", "BP: 2004-02-10 FTSE: 2004-02-02\n", "BP: 2004-02-11 FTSE: 2004-02-03\n", "BP: 2004-02-12 FTSE: 2004-02-04\n", "BP: 2004-02-13 FTSE: 2004-02-05\n", "BP: 2004-02-17 FTSE: 2004-02-06\n", "BP: 2004-02-18 FTSE: 2004-02-09\n", "BP: 2004-02-19 FTSE: 2004-02-10\n", "BP: 2004-02-20 FTSE: 2004-02-11\n", "BP: 2004-02-23 FTSE: 2004-02-12\n", "BP: 2004-02-24 FTSE: 2004-02-13\n", "BP: 2004-02-25 FTSE: 2004-02-16\n", "BP: 2004-02-26 FTSE: 2004-02-17\n", "BP: 2004-02-27 FTSE: 2004-02-18\n", "BP: 2004-03-01 FTSE: 2004-02-19\n", "BP: 2004-03-02 FTSE: 2004-02-20\n", "BP: 2004-03-03 FTSE: 2004-02-23\n", "BP: 2004-03-04 FTSE: 2004-02-24\n", "BP: 2004-03-05 FTSE: 2004-02-25\n", "BP: 2004-03-08 FTSE: 2004-02-26\n", "BP: 2004-03-09 FTSE: 2004-02-27\n", "BP: 2004-03-10 FTSE: 2004-03-01\n", "BP: 2004-03-11 FTSE: 2004-03-02\n", "BP: 2004-03-12 FTSE: 2004-03-03\n", "BP: 2004-03-15 FTSE: 2004-03-04\n", "BP: 2004-03-16 FTSE: 2004-03-05\n", "BP: 2004-03-17 FTSE: 2004-03-08\n", "BP: 2004-03-18 FTSE: 2004-03-09\n", "BP: 2004-03-19 FTSE: 2004-03-10\n", "BP: 2004-03-22 FTSE: 2004-03-11\n", "BP: 2004-03-23 FTSE: 2004-03-12\n", "BP: 2004-03-24 FTSE: 2004-03-15\n", "BP: 2004-03-25 FTSE: 2004-03-16\n", "BP: 2004-03-26 FTSE: 2004-03-17\n", "BP: 2004-03-29 FTSE: 2004-03-18\n", "BP: 2004-03-30 FTSE: 2004-03-19\n", "BP: 2004-03-31 FTSE: 2004-03-22\n", "BP: 2004-04-01 FTSE: 2004-03-23\n", "BP: 2004-04-02 FTSE: 2004-03-24\n", "BP: 2004-04-05 FTSE: 2004-03-25\n", "BP: 2004-04-06 FTSE: 2004-03-26\n", "BP: 2004-04-07 FTSE: 2004-03-29\n", "BP: 2004-04-08 FTSE: 2004-03-30\n", "BP: 2004-04-12 FTSE: 2004-03-31\n", "BP: 2004-04-13 FTSE: 2004-04-01\n", "BP: 2004-04-14 FTSE: 2004-04-02\n", "BP: 2004-04-15 FTSE: 2004-04-05\n", "BP: 2004-04-16 FTSE: 2004-04-06\n", "BP: 2004-04-19 FTSE: 2004-04-07\n", "BP: 2004-04-20 FTSE: 2004-04-08\n", "BP: 2004-04-21 FTSE: 2004-04-13\n", "BP: 2004-04-22 FTSE: 2004-04-14\n", "BP: 2004-04-23 FTSE: 2004-04-15\n", "BP: 2004-04-26 FTSE: 2004-04-16\n", "BP: 2004-04-27 FTSE: 2004-04-19\n", "BP: 2004-04-28 FTSE: 2004-04-20\n", "BP: 2004-04-29 FTSE: 2004-04-21\n", "BP: 2004-04-30 FTSE: 2004-04-22\n", "BP: 2004-05-03 FTSE: 2004-04-23\n", "BP: 2004-05-04 FTSE: 2004-04-26\n", "BP: 2004-05-05 FTSE: 2004-04-27\n", "BP: 2004-05-06 FTSE: 2004-04-28\n", "BP: 2004-05-07 FTSE: 2004-04-29\n", "BP: 2004-05-10 FTSE: 2004-04-30\n", "BP: 2004-05-11 FTSE: 2004-05-04\n", "BP: 2004-05-12 FTSE: 2004-05-05\n", "BP: 2004-05-13 FTSE: 2004-05-06\n", "BP: 2004-05-14 FTSE: 2004-05-07\n", "BP: 2004-05-17 FTSE: 2004-05-10\n", "BP: 2004-05-18 FTSE: 2004-05-11\n", "BP: 2004-05-19 FTSE: 2004-05-12\n", "BP: 2004-05-20 FTSE: 2004-05-13\n", "BP: 2004-05-21 FTSE: 2004-05-14\n", "BP: 2004-05-24 FTSE: 2004-05-17\n", "BP: 2004-05-25 FTSE: 2004-05-18\n", "BP: 2004-05-26 FTSE: 2004-05-19\n", "BP: 2004-05-27 FTSE: 2004-05-20\n", "BP: 2004-05-28 FTSE: 2004-05-21\n", "BP: 2004-06-01 FTSE: 2004-05-24\n", "BP: 2004-06-02 FTSE: 2004-05-25\n", "BP: 2004-06-03 FTSE: 2004-05-26\n", "BP: 2004-06-04 FTSE: 2004-05-27\n", "BP: 2004-06-07 FTSE: 2004-05-28\n", "BP: 2004-06-08 FTSE: 2004-06-01\n", "BP: 2004-06-09 FTSE: 2004-06-02\n", "BP: 2004-06-10 FTSE: 2004-06-03\n", "BP: 2004-06-14 FTSE: 2004-06-04\n", "BP: 2004-06-15 FTSE: 2004-06-07\n", "BP: 2004-06-16 FTSE: 2004-06-08\n", "BP: 2004-06-17 FTSE: 2004-06-09\n", "BP: 2004-06-18 FTSE: 2004-06-10\n", "BP: 2004-06-21 FTSE: 2004-06-11\n", "BP: 2004-06-22 FTSE: 2004-06-14\n", "BP: 2004-06-23 FTSE: 2004-06-15\n", "BP: 2004-06-24 FTSE: 2004-06-16\n", "BP: 2004-06-25 FTSE: 2004-06-17\n", "BP: 2004-06-28 FTSE: 2004-06-18\n", "BP: 2004-06-29 FTSE: 2004-06-21\n", "BP: 2004-06-30 FTSE: 2004-06-22\n", "BP: 2004-07-01 FTSE: 2004-06-23\n", "BP: 2004-07-02 FTSE: 2004-06-24\n", "BP: 2004-07-06 FTSE: 2004-06-25\n", "BP: 2004-07-07 FTSE: 2004-06-28\n", "BP: 2004-07-08 FTSE: 2004-06-29\n", "BP: 2004-07-09 FTSE: 2004-06-30\n", "BP: 2004-07-12 FTSE: 2004-07-01\n", "BP: 2004-07-13 FTSE: 2004-07-02\n", "BP: 2004-07-14 FTSE: 2004-07-05\n", "BP: 2004-07-15 FTSE: 2004-07-06\n", "BP: 2004-07-16 FTSE: 2004-07-07\n", "BP: 2004-07-19 FTSE: 2004-07-08\n", "BP: 2004-07-20 FTSE: 2004-07-09\n", "BP: 2004-07-21 FTSE: 2004-07-12\n", "BP: 2004-07-22 FTSE: 2004-07-13\n", "BP: 2004-07-23 FTSE: 2004-07-14\n", "BP: 2004-07-26 FTSE: 2004-07-15\n", "BP: 2004-07-27 FTSE: 2004-07-16\n", "BP: 2004-07-28 FTSE: 2004-07-19\n", "BP: 2004-07-29 FTSE: 2004-07-20\n", "BP: 2004-07-30 FTSE: 2004-07-21\n", "BP: 2004-08-02 FTSE: 2004-07-22\n", "BP: 2004-08-03 FTSE: 2004-07-23\n", "BP: 2004-08-04 FTSE: 2004-07-26\n", "BP: 2004-08-05 FTSE: 2004-07-27\n", "BP: 2004-08-06 FTSE: 2004-07-28\n", "BP: 2004-08-09 FTSE: 2004-07-29\n", "BP: 2004-08-10 FTSE: 2004-07-30\n", "BP: 2004-08-11 FTSE: 2004-08-02\n", "BP: 2004-08-12 FTSE: 2004-08-03\n", "BP: 2004-08-13 FTSE: 2004-08-04\n", "BP: 2004-08-16 FTSE: 2004-08-05\n", "BP: 2004-08-17 FTSE: 2004-08-06\n", "BP: 2004-08-18 FTSE: 2004-08-09\n", "BP: 2004-08-19 FTSE: 2004-08-10\n", "BP: 2004-08-20 FTSE: 2004-08-11\n", "BP: 2004-08-23 FTSE: 2004-08-12\n", "BP: 2004-08-24 FTSE: 2004-08-13\n", "BP: 2004-08-25 FTSE: 2004-08-16\n", "BP: 2004-08-26 FTSE: 2004-08-17\n", "BP: 2004-08-27 FTSE: 2004-08-18\n", "BP: 2004-08-30 FTSE: 2004-08-19\n", "BP: 2004-08-31 FTSE: 2004-08-20\n", "BP: 2004-09-01 FTSE: 2004-08-23\n", "BP: 2004-09-02 FTSE: 2004-08-24\n", "BP: 2004-09-03 FTSE: 2004-08-25\n", "BP: 2004-09-07 FTSE: 2004-08-26\n", "BP: 2004-09-08 FTSE: 2004-08-27\n", "BP: 2004-09-09 FTSE: 2004-08-31\n", "BP: 2004-09-10 FTSE: 2004-09-01\n", "BP: 2004-09-13 FTSE: 2004-09-02\n", "BP: 2004-09-14 FTSE: 2004-09-03\n", "BP: 2004-09-15 FTSE: 2004-09-06\n", "BP: 2004-09-16 FTSE: 2004-09-07\n", "BP: 2004-09-17 FTSE: 2004-09-08\n", "BP: 2004-09-20 FTSE: 2004-09-09\n", "BP: 2004-09-21 FTSE: 2004-09-10\n", "BP: 2004-09-22 FTSE: 2004-09-13\n", "BP: 2004-09-23 FTSE: 2004-09-14\n", "BP: 2004-09-24 FTSE: 2004-09-15\n", "BP: 2004-09-27 FTSE: 2004-09-16\n", "BP: 2004-09-28 FTSE: 2004-09-17\n", "BP: 2004-09-29 FTSE: 2004-09-20\n", "BP: 2004-09-30 FTSE: 2004-09-21\n", "BP: 2004-10-01 FTSE: 2004-09-22\n", "BP: 2004-10-04 FTSE: 2004-09-23\n", "BP: 2004-10-05 FTSE: 2004-09-24\n", "BP: 2004-10-06 FTSE: 2004-09-27\n", "BP: 2004-10-07 FTSE: 2004-09-28\n", "BP: 2004-10-08 FTSE: 2004-09-29\n", "BP: 2004-10-11 FTSE: 2004-09-30\n", "BP: 2004-10-12 FTSE: 2004-10-01\n", "BP: 2004-10-13 FTSE: 2004-10-04\n", "BP: 2004-10-14 FTSE: 2004-10-05\n", "BP: 2004-10-15 FTSE: 2004-10-06\n", "BP: 2004-10-18 FTSE: 2004-10-07\n", "BP: 2004-10-19 FTSE: 2004-10-08\n", "BP: 2004-10-20 FTSE: 2004-10-11\n", "BP: 2004-10-21 FTSE: 2004-10-12\n", "BP: 2004-10-22 FTSE: 2004-10-13\n", "BP: 2004-10-25 FTSE: 2004-10-14\n", "BP: 2004-10-26 FTSE: 2004-10-15\n", "BP: 2004-10-27 FTSE: 2004-10-18\n", "BP: 2004-10-28 FTSE: 2004-10-19\n", "BP: 2004-10-29 FTSE: 2004-10-20\n", "BP: 2004-11-01 FTSE: 2004-10-21\n", "BP: 2004-11-02 FTSE: 2004-10-22\n", "BP: 2004-11-03 FTSE: 2004-10-25\n", "BP: 2004-11-04 FTSE: 2004-10-26\n", "BP: 2004-11-05 FTSE: 2004-10-27\n", "BP: 2004-11-08 FTSE: 2004-10-28\n", "BP: 2004-11-09 FTSE: 2004-10-29\n", "BP: 2004-11-10 FTSE: 2004-11-01\n", "BP: 2004-11-11 FTSE: 2004-11-02\n", "BP: 2004-11-12 FTSE: 2004-11-03\n", "BP: 2004-11-15 FTSE: 2004-11-04\n", "BP: 2004-11-16 FTSE: 2004-11-05\n", "BP: 2004-11-17 FTSE: 2004-11-08\n", "BP: 2004-11-18 FTSE: 2004-11-09\n", "BP: 2004-11-19 FTSE: 2004-11-10\n", "BP: 2004-11-22 FTSE: 2004-11-11\n", "BP: 2004-11-23 FTSE: 2004-11-12\n", "BP: 2004-11-24 FTSE: 2004-11-15\n", "BP: 2004-11-26 FTSE: 2004-11-16\n", "BP: 2004-11-29 FTSE: 2004-11-17\n", "BP: 2004-11-30 FTSE: 2004-11-18\n", "BP: 2004-12-01 FTSE: 2004-11-19\n", "BP: 2004-12-02 FTSE: 2004-11-22\n", "BP: 2004-12-03 FTSE: 2004-11-23\n", "BP: 2004-12-06 FTSE: 2004-11-24\n", "BP: 2004-12-07 FTSE: 2004-11-25\n", "BP: 2004-12-08 FTSE: 2004-11-26\n", "BP: 2004-12-09 FTSE: 2004-11-29\n", "BP: 2004-12-10 FTSE: 2004-11-30\n", "BP: 2004-12-13 FTSE: 2004-12-01\n", "BP: 2004-12-14 FTSE: 2004-12-02\n", "BP: 2004-12-15 FTSE: 2004-12-03\n", "BP: 2004-12-16 FTSE: 2004-12-06\n", "BP: 2004-12-17 FTSE: 2004-12-07\n", "BP: 2004-12-20 FTSE: 2004-12-08\n", "BP: 2004-12-21 FTSE: 2004-12-09\n", "BP: 2004-12-22 FTSE: 2004-12-10\n", "BP: 2004-12-23 FTSE: 2004-12-13\n", "BP: 2004-12-27 FTSE: 2004-12-14\n", "BP: 2004-12-28 FTSE: 2004-12-15\n", "BP: 2004-12-29 FTSE: 2004-12-16\n", "BP: 2004-12-30 FTSE: 2004-12-17\n", "BP: 2004-12-31 FTSE: 2004-12-20\n", "BP: 2005-01-03 FTSE: 2004-12-21\n", "BP: 2005-01-04 FTSE: 2004-12-22\n", "BP: 2005-01-05 FTSE: 2004-12-23\n", "BP: 2005-01-06 FTSE: 2004-12-24\n", "BP: 2005-01-07 FTSE: 2004-12-29\n", "BP: 2005-01-10 FTSE: 2004-12-30\n", "BP: 2005-01-11 FTSE: 2004-12-31\n", "BP: 2005-01-12 FTSE: 2005-01-04\n", "BP: 2005-01-13 FTSE: 2005-01-05\n", "BP: 2005-01-14 FTSE: 2005-01-06\n", "BP: 2005-01-18 FTSE: 2005-01-07\n", "BP: 2005-01-19 FTSE: 2005-01-10\n", "BP: 2005-01-20 FTSE: 2005-01-11\n", "BP: 2005-01-21 FTSE: 2005-01-12\n", "BP: 2005-01-24 FTSE: 2005-01-13\n", "BP: 2005-01-25 FTSE: 2005-01-14\n", "BP: 2005-01-26 FTSE: 2005-01-17\n", "BP: 2005-01-27 FTSE: 2005-01-18\n", "BP: 2005-01-28 FTSE: 2005-01-19\n", "BP: 2005-01-31 FTSE: 2005-01-20\n", "BP: 2005-02-01 FTSE: 2005-01-21\n", "BP: 2005-02-02 FTSE: 2005-01-24\n", "BP: 2005-02-03 FTSE: 2005-01-25\n", "BP: 2005-02-04 FTSE: 2005-01-26\n", "BP: 2005-02-07 FTSE: 2005-01-27\n", "BP: 2005-02-08 FTSE: 2005-01-28\n", "BP: 2005-02-09 FTSE: 2005-01-31\n", "BP: 2005-02-10 FTSE: 2005-02-01\n", "BP: 2005-02-11 FTSE: 2005-02-02\n", "BP: 2005-02-14 FTSE: 2005-02-03\n", "BP: 2005-02-15 FTSE: 2005-02-04\n", "BP: 2005-02-16 FTSE: 2005-02-07\n", "BP: 2005-02-17 FTSE: 2005-02-08\n", "BP: 2005-02-18 FTSE: 2005-02-09\n", "BP: 2005-02-22 FTSE: 2005-02-10\n", "BP: 2005-02-23 FTSE: 2005-02-11\n", "BP: 2005-02-24 FTSE: 2005-02-14\n", "BP: 2005-02-25 FTSE: 2005-02-15\n", "BP: 2005-02-28 FTSE: 2005-02-16\n", "BP: 2005-03-01 FTSE: 2005-02-17\n", "BP: 2005-03-02 FTSE: 2005-02-18\n", "BP: 2005-03-03 FTSE: 2005-02-21\n", "BP: 2005-03-04 FTSE: 2005-02-22\n", "BP: 2005-03-07 FTSE: 2005-02-23\n", "BP: 2005-03-08 FTSE: 2005-02-24\n", "BP: 2005-03-09 FTSE: 2005-02-25\n", "BP: 2005-03-10 FTSE: 2005-02-28\n", "BP: 2005-03-11 FTSE: 2005-03-01\n", "BP: 2005-03-14 FTSE: 2005-03-02\n", "BP: 2005-03-15 FTSE: 2005-03-03\n", "BP: 2005-03-16 FTSE: 2005-03-04\n", "BP: 2005-03-17 FTSE: 2005-03-07\n", "BP: 2005-03-18 FTSE: 2005-03-08\n", "BP: 2005-03-21 FTSE: 2005-03-09\n", "BP: 2005-03-22 FTSE: 2005-03-10\n", "BP: 2005-03-23 FTSE: 2005-03-11\n", "BP: 2005-03-24 FTSE: 2005-03-14\n", "BP: 2005-03-28 FTSE: 2005-03-15\n", "BP: 2005-03-29 FTSE: 2005-03-16\n", "BP: 2005-03-30 FTSE: 2005-03-17\n", "BP: 2005-03-31 FTSE: 2005-03-18\n", "BP: 2005-04-01 FTSE: 2005-03-21\n", "BP: 2005-04-04 FTSE: 2005-03-22\n", "BP: 2005-04-05 FTSE: 2005-03-23\n", "BP: 2005-04-06 FTSE: 2005-03-24\n", "BP: 2005-04-07 FTSE: 2005-03-29\n", "BP: 2005-04-08 FTSE: 2005-03-30\n", "BP: 2005-04-11 FTSE: 2005-03-31\n", "BP: 2005-04-12 FTSE: 2005-04-01\n", "BP: 2005-04-13 FTSE: 2005-04-04\n", "BP: 2005-04-14 FTSE: 2005-04-05\n", "BP: 2005-04-15 FTSE: 2005-04-06\n", "BP: 2005-04-18 FTSE: 2005-04-07\n", "BP: 2005-04-19 FTSE: 2005-04-08\n", "BP: 2005-04-20 FTSE: 2005-04-11\n", "BP: 2005-04-21 FTSE: 2005-04-12\n", "BP: 2005-04-22 FTSE: 2005-04-13\n", "BP: 2005-04-25 FTSE: 2005-04-14\n", "BP: 2005-04-26 FTSE: 2005-04-15\n", "BP: 2005-04-27 FTSE: 2005-04-18\n", "BP: 2005-04-28 FTSE: 2005-04-19\n", "BP: 2005-04-29 FTSE: 2005-04-20\n", "BP: 2005-05-02 FTSE: 2005-04-21\n", "BP: 2005-05-03 FTSE: 2005-04-22\n", "BP: 2005-05-04 FTSE: 2005-04-25\n", "BP: 2005-05-05 FTSE: 2005-04-26\n", "BP: 2005-05-06 FTSE: 2005-04-27\n", "BP: 2005-05-09 FTSE: 2005-04-28\n", "BP: 2005-05-10 FTSE: 2005-04-29\n", "BP: 2005-05-11 FTSE: 2005-05-03\n", "BP: 2005-05-12 FTSE: 2005-05-04\n", "BP: 2005-05-13 FTSE: 2005-05-05\n", "BP: 2005-05-16 FTSE: 2005-05-06\n", "BP: 2005-05-17 FTSE: 2005-05-09\n", "BP: 2005-05-18 FTSE: 2005-05-10\n", "BP: 2005-05-19 FTSE: 2005-05-11\n", "BP: 2005-05-20 FTSE: 2005-05-12\n", "BP: 2005-05-23 FTSE: 2005-05-13\n", "BP: 2005-05-24 FTSE: 2005-05-16\n", "BP: 2005-05-25 FTSE: 2005-05-17\n", "BP: 2005-05-26 FTSE: 2005-05-18\n", "BP: 2005-05-27 FTSE: 2005-05-19\n", "BP: 2005-05-31 FTSE: 2005-05-20\n", "BP: 2005-06-01 FTSE: 2005-05-23\n", "BP: 2005-06-02 FTSE: 2005-05-24\n", "BP: 2005-06-03 FTSE: 2005-05-25\n", "BP: 2005-06-06 FTSE: 2005-05-26\n", "BP: 2005-06-07 FTSE: 2005-05-27\n", "BP: 2005-06-08 FTSE: 2005-05-31\n", "BP: 2005-06-09 FTSE: 2005-06-01\n", "BP: 2005-06-10 FTSE: 2005-06-02\n", "BP: 2005-06-13 FTSE: 2005-06-03\n", "BP: 2005-06-14 FTSE: 2005-06-06\n", "BP: 2005-06-15 FTSE: 2005-06-07\n", "BP: 2005-06-16 FTSE: 2005-06-08\n", "BP: 2005-06-17 FTSE: 2005-06-09\n", "BP: 2005-06-20 FTSE: 2005-06-10\n", "BP: 2005-06-21 FTSE: 2005-06-13\n", "BP: 2005-06-22 FTSE: 2005-06-14\n", "BP: 2005-06-23 FTSE: 2005-06-15\n", "BP: 2005-06-24 FTSE: 2005-06-16\n", "BP: 2005-06-27 FTSE: 2005-06-17\n", "BP: 2005-06-28 FTSE: 2005-06-20\n", "BP: 2005-06-29 FTSE: 2005-06-21\n", "BP: 2005-06-30 FTSE: 2005-06-22\n", "BP: 2005-07-01 FTSE: 2005-06-23\n", "BP: 2005-07-05 FTSE: 2005-06-24\n", "BP: 2005-07-06 FTSE: 2005-06-27\n", "BP: 2005-07-07 FTSE: 2005-06-28\n", "BP: 2005-07-08 FTSE: 2005-06-29\n", "BP: 2005-07-11 FTSE: 2005-06-30\n", "BP: 2005-07-12 FTSE: 2005-07-01\n", "BP: 2005-07-13 FTSE: 2005-07-04\n", "BP: 2005-07-14 FTSE: 2005-07-05\n", "BP: 2005-07-15 FTSE: 2005-07-06\n", "BP: 2005-07-18 FTSE: 2005-07-07\n", "BP: 2005-07-19 FTSE: 2005-07-08\n", "BP: 2005-07-20 FTSE: 2005-07-11\n", "BP: 2005-07-21 FTSE: 2005-07-12\n", "BP: 2005-07-22 FTSE: 2005-07-13\n", "BP: 2005-07-25 FTSE: 2005-07-14\n", "BP: 2005-07-26 FTSE: 2005-07-15\n", "BP: 2005-07-27 FTSE: 2005-07-18\n", "BP: 2005-07-28 FTSE: 2005-07-19\n", "BP: 2005-07-29 FTSE: 2005-07-20\n", "BP: 2005-08-01 FTSE: 2005-07-21\n", "BP: 2005-08-02 FTSE: 2005-07-22\n", "BP: 2005-08-03 FTSE: 2005-07-25\n", "BP: 2005-08-04 FTSE: 2005-07-26\n", "BP: 2005-08-05 FTSE: 2005-07-27\n", "BP: 2005-08-08 FTSE: 2005-07-28\n", "BP: 2005-08-09 FTSE: 2005-07-29\n", "BP: 2005-08-10 FTSE: 2005-08-01\n", "BP: 2005-08-11 FTSE: 2005-08-02\n", "BP: 2005-08-12 FTSE: 2005-08-03\n", "BP: 2005-08-15 FTSE: 2005-08-04\n", "BP: 2005-08-16 FTSE: 2005-08-05\n", "BP: 2005-08-17 FTSE: 2005-08-08\n", "BP: 2005-08-18 FTSE: 2005-08-09\n", "BP: 2005-08-19 FTSE: 2005-08-10\n", "BP: 2005-08-22 FTSE: 2005-08-11\n", "BP: 2005-08-23 FTSE: 2005-08-12\n", "BP: 2005-08-24 FTSE: 2005-08-15\n", "BP: 2005-08-25 FTSE: 2005-08-16\n", "BP: 2005-08-26 FTSE: 2005-08-17\n", "BP: 2005-08-29 FTSE: 2005-08-18\n", "BP: 2005-08-30 FTSE: 2005-08-19\n", "BP: 2005-08-31 FTSE: 2005-08-22\n", "BP: 2005-09-01 FTSE: 2005-08-23\n", "BP: 2005-09-02 FTSE: 2005-08-24\n", "BP: 2005-09-06 FTSE: 2005-08-25\n", "BP: 2005-09-07 FTSE: 2005-08-26\n", "BP: 2005-09-08 FTSE: 2005-08-30\n", "BP: 2005-09-09 FTSE: 2005-08-31\n", "BP: 2005-09-12 FTSE: 2005-09-01\n", "BP: 2005-09-13 FTSE: 2005-09-02\n", "BP: 2005-09-14 FTSE: 2005-09-05\n", "BP: 2005-09-15 FTSE: 2005-09-06\n", "BP: 2005-09-16 FTSE: 2005-09-07\n", "BP: 2005-09-19 FTSE: 2005-09-08\n", "BP: 2005-09-20 FTSE: 2005-09-09\n", "BP: 2005-09-21 FTSE: 2005-09-12\n", "BP: 2005-09-22 FTSE: 2005-09-13\n", "BP: 2005-09-23 FTSE: 2005-09-14\n", "BP: 2005-09-26 FTSE: 2005-09-15\n", "BP: 2005-09-27 FTSE: 2005-09-16\n", "BP: 2005-09-28 FTSE: 2005-09-19\n", "BP: 2005-09-29 FTSE: 2005-09-20\n", "BP: 2005-09-30 FTSE: 2005-09-21\n", "BP: 2005-10-03 FTSE: 2005-09-22\n", "BP: 2005-10-04 FTSE: 2005-09-23\n", "BP: 2005-10-05 FTSE: 2005-09-26\n", "BP: 2005-10-06 FTSE: 2005-09-27\n", "BP: 2005-10-07 FTSE: 2005-09-28\n", "BP: 2005-10-10 FTSE: 2005-09-29\n", "BP: 2005-10-11 FTSE: 2005-09-30\n", "BP: 2005-10-12 FTSE: 2005-10-03\n", "BP: 2005-10-13 FTSE: 2005-10-04\n", "BP: 2005-10-14 FTSE: 2005-10-05\n", "BP: 2005-10-17 FTSE: 2005-10-06\n", "BP: 2005-10-18 FTSE: 2005-10-07\n", "BP: 2005-10-19 FTSE: 2005-10-10\n", "BP: 2005-10-20 FTSE: 2005-10-11\n", "BP: 2005-10-21 FTSE: 2005-10-12\n", "BP: 2005-10-24 FTSE: 2005-10-13\n", "BP: 2005-10-25 FTSE: 2005-10-14\n", "BP: 2005-10-26 FTSE: 2005-10-17\n", "BP: 2005-10-27 FTSE: 2005-10-18\n", "BP: 2005-10-28 FTSE: 2005-10-19\n", "BP: 2005-10-31 FTSE: 2005-10-20\n", "BP: 2005-11-01 FTSE: 2005-10-21\n", "BP: 2005-11-02 FTSE: 2005-10-24\n", "BP: 2005-11-03 FTSE: 2005-10-25\n", "BP: 2005-11-04 FTSE: 2005-10-26\n", "BP: 2005-11-07 FTSE: 2005-10-27\n", "BP: 2005-11-08 FTSE: 2005-10-28\n", "BP: 2005-11-09 FTSE: 2005-10-31\n", "BP: 2005-11-10 FTSE: 2005-11-01\n", "BP: 2005-11-11 FTSE: 2005-11-02\n", "BP: 2005-11-14 FTSE: 2005-11-03\n", "BP: 2005-11-15 FTSE: 2005-11-04\n", "BP: 2005-11-16 FTSE: 2005-11-07\n", "BP: 2005-11-17 FTSE: 2005-11-08\n", "BP: 2005-11-18 FTSE: 2005-11-09\n", "BP: 2005-11-21 FTSE: 2005-11-10\n", "BP: 2005-11-22 FTSE: 2005-11-11\n", "BP: 2005-11-23 FTSE: 2005-11-14\n", "BP: 2005-11-25 FTSE: 2005-11-15\n", "BP: 2005-11-28 FTSE: 2005-11-16\n", "BP: 2005-11-29 FTSE: 2005-11-17\n", "BP: 2005-11-30 FTSE: 2005-11-18\n", "BP: 2005-12-01 FTSE: 2005-11-21\n", "BP: 2005-12-02 FTSE: 2005-11-22\n", "BP: 2005-12-05 FTSE: 2005-11-23\n", "BP: 2005-12-06 FTSE: 2005-11-24\n", "BP: 2005-12-07 FTSE: 2005-11-25\n", "BP: 2005-12-08 FTSE: 2005-11-28\n", "BP: 2005-12-09 FTSE: 2005-11-29\n", "BP: 2005-12-12 FTSE: 2005-11-30\n", "BP: 2005-12-13 FTSE: 2005-12-01\n", "BP: 2005-12-14 FTSE: 2005-12-02\n", "BP: 2005-12-15 FTSE: 2005-12-05\n", "BP: 2005-12-16 FTSE: 2005-12-06\n", "BP: 2005-12-19 FTSE: 2005-12-07\n", "BP: 2005-12-20 FTSE: 2005-12-08\n", "BP: 2005-12-21 FTSE: 2005-12-09\n", "BP: 2005-12-22 FTSE: 2005-12-12\n", "BP: 2005-12-23 FTSE: 2005-12-13\n", "BP: 2005-12-27 FTSE: 2005-12-14\n", "BP: 2005-12-28 FTSE: 2005-12-15\n", "BP: 2005-12-29 FTSE: 2005-12-16\n", "BP: 2005-12-30 FTSE: 2005-12-19\n", "BP: 2006-01-03 FTSE: 2005-12-20\n", "BP: 2006-01-04 FTSE: 2005-12-21\n", "BP: 2006-01-05 FTSE: 2005-12-22\n", "BP: 2006-01-06 FTSE: 2005-12-23\n", "BP: 2006-01-09 FTSE: 2005-12-28\n", "BP: 2006-01-10 FTSE: 2005-12-29\n", "BP: 2006-01-11 FTSE: 2005-12-30\n", "BP: 2006-01-12 FTSE: 2006-01-03\n", "BP: 2006-01-13 FTSE: 2006-01-04\n", "BP: 2006-01-17 FTSE: 2006-01-05\n", "BP: 2006-01-18 FTSE: 2006-01-06\n", "BP: 2006-01-19 FTSE: 2006-01-09\n", "BP: 2006-01-20 FTSE: 2006-01-10\n", "BP: 2006-01-23 FTSE: 2006-01-11\n", "BP: 2006-01-24 FTSE: 2006-01-12\n", "BP: 2006-01-25 FTSE: 2006-01-13\n", "BP: 2006-01-26 FTSE: 2006-01-16\n", "BP: 2006-01-27 FTSE: 2006-01-17\n", "BP: 2006-01-30 FTSE: 2006-01-18\n", "BP: 2006-01-31 FTSE: 2006-01-19\n", "BP: 2006-02-01 FTSE: 2006-01-20\n", "BP: 2006-02-02 FTSE: 2006-01-23\n", "BP: 2006-02-03 FTSE: 2006-01-24\n", "BP: 2006-02-06 FTSE: 2006-01-25\n", "BP: 2006-02-07 FTSE: 2006-01-26\n", "BP: 2006-02-08 FTSE: 2006-01-27\n", "BP: 2006-02-09 FTSE: 2006-01-30\n", "BP: 2006-02-10 FTSE: 2006-01-31\n", "BP: 2006-02-13 FTSE: 2006-02-01\n", "BP: 2006-02-14 FTSE: 2006-02-02\n", "BP: 2006-02-15 FTSE: 2006-02-03\n", "BP: 2006-02-16 FTSE: 2006-02-06\n", "BP: 2006-02-17 FTSE: 2006-02-07\n", "BP: 2006-02-21 FTSE: 2006-02-08\n", "BP: 2006-02-22 FTSE: 2006-02-09\n", "BP: 2006-02-23 FTSE: 2006-02-10\n", "BP: 2006-02-24 FTSE: 2006-02-13\n", "BP: 2006-02-27 FTSE: 2006-02-14\n", "BP: 2006-02-28 FTSE: 2006-02-15\n", "BP: 2006-03-01 FTSE: 2006-02-16\n", "BP: 2006-03-02 FTSE: 2006-02-17\n", "BP: 2006-03-03 FTSE: 2006-02-20\n", "BP: 2006-03-06 FTSE: 2006-02-21\n", "BP: 2006-03-07 FTSE: 2006-02-22\n", "BP: 2006-03-08 FTSE: 2006-02-23\n", "BP: 2006-03-09 FTSE: 2006-02-24\n", "BP: 2006-03-10 FTSE: 2006-02-27\n", "BP: 2006-03-13 FTSE: 2006-02-28\n", "BP: 2006-03-14 FTSE: 2006-03-01\n", "BP: 2006-03-15 FTSE: 2006-03-02\n", "BP: 2006-03-16 FTSE: 2006-03-03\n", "BP: 2006-03-17 FTSE: 2006-03-06\n", "BP: 2006-03-20 FTSE: 2006-03-07\n", "BP: 2006-03-21 FTSE: 2006-03-08\n", "BP: 2006-03-22 FTSE: 2006-03-09\n", "BP: 2006-03-23 FTSE: 2006-03-10\n", "BP: 2006-03-24 FTSE: 2006-03-13\n", "BP: 2006-03-27 FTSE: 2006-03-14\n", "BP: 2006-03-28 FTSE: 2006-03-15\n", "BP: 2006-03-29 FTSE: 2006-03-16\n", "BP: 2006-03-30 FTSE: 2006-03-17\n", "BP: 2006-03-31 FTSE: 2006-03-20\n", "BP: 2006-04-03 FTSE: 2006-03-21\n", "BP: 2006-04-04 FTSE: 2006-03-22\n", "BP: 2006-04-05 FTSE: 2006-03-23\n", "BP: 2006-04-06 FTSE: 2006-03-24\n", "BP: 2006-04-07 FTSE: 2006-03-27\n", "BP: 2006-04-10 FTSE: 2006-03-28\n", "BP: 2006-04-11 FTSE: 2006-03-29\n", "BP: 2006-04-12 FTSE: 2006-03-30\n", "BP: 2006-04-13 FTSE: 2006-03-31\n", "BP: 2006-04-17 FTSE: 2006-04-03\n", "BP: 2006-04-18 FTSE: 2006-04-04\n", "BP: 2006-04-19 FTSE: 2006-04-05\n", "BP: 2006-04-20 FTSE: 2006-04-06\n", "BP: 2006-04-21 FTSE: 2006-04-07\n", "BP: 2006-04-24 FTSE: 2006-04-10\n", "BP: 2006-04-25 FTSE: 2006-04-11\n", "BP: 2006-04-26 FTSE: 2006-04-12\n", "BP: 2006-04-27 FTSE: 2006-04-13\n", "BP: 2006-04-28 FTSE: 2006-04-18\n", "BP: 2006-05-01 FTSE: 2006-04-19\n", "BP: 2006-05-02 FTSE: 2006-04-20\n", "BP: 2006-05-03 FTSE: 2006-04-21\n", "BP: 2006-05-04 FTSE: 2006-04-24\n", "BP: 2006-05-05 FTSE: 2006-04-25\n", "BP: 2006-05-08 FTSE: 2006-04-26\n", "BP: 2006-05-09 FTSE: 2006-04-27\n", "BP: 2006-05-10 FTSE: 2006-04-28\n", "BP: 2006-05-11 FTSE: 2006-05-02\n", "BP: 2006-05-12 FTSE: 2006-05-03\n", "BP: 2006-05-15 FTSE: 2006-05-04\n", "BP: 2006-05-16 FTSE: 2006-05-05\n", "BP: 2006-05-17 FTSE: 2006-05-08\n", "BP: 2006-05-18 FTSE: 2006-05-09\n", "BP: 2006-05-19 FTSE: 2006-05-10\n", "BP: 2006-05-22 FTSE: 2006-05-11\n", "BP: 2006-05-23 FTSE: 2006-05-12\n", "BP: 2006-05-24 FTSE: 2006-05-15\n", "BP: 2006-05-25 FTSE: 2006-05-16\n", "BP: 2006-05-26 FTSE: 2006-05-17\n", "BP: 2006-05-30 FTSE: 2006-05-18\n", "BP: 2006-05-31 FTSE: 2006-05-19\n", "BP: 2006-06-01 FTSE: 2006-05-22\n", "BP: 2006-06-02 FTSE: 2006-05-23\n", "BP: 2006-06-05 FTSE: 2006-05-24\n", "BP: 2006-06-06 FTSE: 2006-05-25\n", "BP: 2006-06-07 FTSE: 2006-05-26\n", "BP: 2006-06-08 FTSE: 2006-05-30\n", "BP: 2006-06-09 FTSE: 2006-05-31\n", "BP: 2006-06-12 FTSE: 2006-06-01\n", "BP: 2006-06-13 FTSE: 2006-06-02\n", "BP: 2006-06-14 FTSE: 2006-06-05\n", "BP: 2006-06-15 FTSE: 2006-06-06\n", "BP: 2006-06-16 FTSE: 2006-06-07\n", "BP: 2006-06-19 FTSE: 2006-06-08\n", "BP: 2006-06-20 FTSE: 2006-06-09\n", "BP: 2006-06-21 FTSE: 2006-06-12\n", "BP: 2006-06-22 FTSE: 2006-06-13\n", "BP: 2006-06-23 FTSE: 2006-06-14\n", "BP: 2006-06-26 FTSE: 2006-06-15\n", "BP: 2006-06-27 FTSE: 2006-06-16\n", "BP: 2006-06-28 FTSE: 2006-06-19\n", "BP: 2006-06-29 FTSE: 2006-06-20\n", "BP: 2006-06-30 FTSE: 2006-06-21\n", "BP: 2006-07-03 FTSE: 2006-06-22\n", "BP: 2006-07-05 FTSE: 2006-06-23\n", "BP: 2006-07-06 FTSE: 2006-06-26\n", "BP: 2006-07-07 FTSE: 2006-06-27\n", "BP: 2006-07-10 FTSE: 2006-06-28\n", "BP: 2006-07-11 FTSE: 2006-06-29\n", "BP: 2006-07-12 FTSE: 2006-06-30\n", "BP: 2006-07-13 FTSE: 2006-07-03\n", "BP: 2006-07-14 FTSE: 2006-07-04\n", "BP: 2006-07-17 FTSE: 2006-07-05\n", "BP: 2006-07-18 FTSE: 2006-07-06\n", "BP: 2006-07-19 FTSE: 2006-07-07\n", "BP: 2006-07-20 FTSE: 2006-07-10\n", "BP: 2006-07-21 FTSE: 2006-07-11\n", "BP: 2006-07-24 FTSE: 2006-07-12\n", "BP: 2006-07-25 FTSE: 2006-07-13\n", "BP: 2006-07-26 FTSE: 2006-07-14\n", "BP: 2006-07-27 FTSE: 2006-07-17\n", "BP: 2006-07-28 FTSE: 2006-07-18\n", "BP: 2006-07-31 FTSE: 2006-07-19\n", "BP: 2006-08-01 FTSE: 2006-07-20\n", "BP: 2006-08-02 FTSE: 2006-07-21\n", "BP: 2006-08-03 FTSE: 2006-07-24\n", "BP: 2006-08-04 FTSE: 2006-07-25\n", "BP: 2006-08-07 FTSE: 2006-07-26\n", "BP: 2006-08-08 FTSE: 2006-07-27\n", "BP: 2006-08-09 FTSE: 2006-07-28\n", "BP: 2006-08-10 FTSE: 2006-07-31\n", "BP: 2006-08-11 FTSE: 2006-08-01\n", "BP: 2006-08-14 FTSE: 2006-08-02\n", "BP: 2006-08-15 FTSE: 2006-08-03\n", "BP: 2006-08-16 FTSE: 2006-08-04\n", "BP: 2006-08-17 FTSE: 2006-08-07\n", "BP: 2006-08-18 FTSE: 2006-08-08\n", "BP: 2006-08-21 FTSE: 2006-08-09\n", "BP: 2006-08-22 FTSE: 2006-08-10\n", "BP: 2006-08-23 FTSE: 2006-08-11\n", "BP: 2006-08-24 FTSE: 2006-08-14\n", "BP: 2006-08-25 FTSE: 2006-08-15\n", "BP: 2006-08-28 FTSE: 2006-08-16\n", "BP: 2006-08-29 FTSE: 2006-08-17\n", "BP: 2006-08-30 FTSE: 2006-08-18\n", "BP: 2006-08-31 FTSE: 2006-08-21\n", "BP: 2006-09-01 FTSE: 2006-08-22\n", "BP: 2006-09-05 FTSE: 2006-08-23\n", "BP: 2006-09-06 FTSE: 2006-08-24\n", "BP: 2006-09-07 FTSE: 2006-08-25\n", "BP: 2006-09-08 FTSE: 2006-08-29\n", "BP: 2006-09-11 FTSE: 2006-08-30\n", "BP: 2006-09-12 FTSE: 2006-08-31\n", "BP: 2006-09-13 FTSE: 2006-09-01\n", "BP: 2006-09-14 FTSE: 2006-09-04\n", "BP: 2006-09-15 FTSE: 2006-09-05\n", "BP: 2006-09-18 FTSE: 2006-09-06\n", "BP: 2006-09-19 FTSE: 2006-09-07\n", "BP: 2006-09-20 FTSE: 2006-09-08\n", "BP: 2006-09-21 FTSE: 2006-09-11\n", "BP: 2006-09-22 FTSE: 2006-09-12\n", "BP: 2006-09-25 FTSE: 2006-09-13\n", "BP: 2006-09-26 FTSE: 2006-09-14\n", "BP: 2006-09-27 FTSE: 2006-09-15\n", "BP: 2006-09-28 FTSE: 2006-09-18\n", "BP: 2006-09-29 FTSE: 2006-09-19\n", "BP: 2006-10-02 FTSE: 2006-09-20\n", "BP: 2006-10-03 FTSE: 2006-09-21\n", "BP: 2006-10-04 FTSE: 2006-09-22\n", "BP: 2006-10-05 FTSE: 2006-09-25\n", "BP: 2006-10-06 FTSE: 2006-09-26\n", "BP: 2006-10-09 FTSE: 2006-09-27\n", "BP: 2006-10-10 FTSE: 2006-09-28\n", "BP: 2006-10-11 FTSE: 2006-09-29\n", "BP: 2006-10-12 FTSE: 2006-10-02\n", "BP: 2006-10-13 FTSE: 2006-10-03\n", "BP: 2006-10-16 FTSE: 2006-10-04\n", "BP: 2006-10-17 FTSE: 2006-10-05\n", "BP: 2006-10-18 FTSE: 2006-10-06\n", "BP: 2006-10-19 FTSE: 2006-10-09\n", "BP: 2006-10-20 FTSE: 2006-10-10\n", "BP: 2006-10-23 FTSE: 2006-10-11\n", "BP: 2006-10-24 FTSE: 2006-10-12\n", "BP: 2006-10-25 FTSE: 2006-10-13\n", "BP: 2006-10-26 FTSE: 2006-10-16\n", "BP: 2006-10-27 FTSE: 2006-10-17\n", "BP: 2006-10-30 FTSE: 2006-10-18\n", "BP: 2006-10-31 FTSE: 2006-10-19\n", "BP: 2006-11-01 FTSE: 2006-10-20\n", "BP: 2006-11-02 FTSE: 2006-10-23\n", "BP: 2006-11-03 FTSE: 2006-10-24\n", "BP: 2006-11-06 FTSE: 2006-10-25\n", "BP: 2006-11-07 FTSE: 2006-10-26\n", "BP: 2006-11-08 FTSE: 2006-10-27\n", "BP: 2006-11-09 FTSE: 2006-10-30\n", "BP: 2006-11-10 FTSE: 2006-10-31\n", "BP: 2006-11-13 FTSE: 2006-11-01\n", "BP: 2006-11-14 FTSE: 2006-11-02\n", "BP: 2006-11-15 FTSE: 2006-11-03\n", "BP: 2006-11-16 FTSE: 2006-11-06\n", "BP: 2006-11-17 FTSE: 2006-11-07\n", "BP: 2006-11-20 FTSE: 2006-11-08\n", "BP: 2006-11-21 FTSE: 2006-11-09\n", "BP: 2006-11-22 FTSE: 2006-11-10\n", "BP: 2006-11-24 FTSE: 2006-11-13\n", "BP: 2006-11-27 FTSE: 2006-11-14\n", "BP: 2006-11-28 FTSE: 2006-11-15\n", "BP: 2006-11-29 FTSE: 2006-11-16\n", "BP: 2006-11-30 FTSE: 2006-11-17\n", "BP: 2006-12-01 FTSE: 2006-11-20\n", "BP: 2006-12-04 FTSE: 2006-11-21\n", "BP: 2006-12-05 FTSE: 2006-11-22\n", "BP: 2006-12-06 FTSE: 2006-11-23\n", "BP: 2006-12-07 FTSE: 2006-11-24\n", "BP: 2006-12-08 FTSE: 2006-11-27\n", "BP: 2006-12-11 FTSE: 2006-11-28\n", "BP: 2006-12-12 FTSE: 2006-11-29\n", "BP: 2006-12-13 FTSE: 2006-11-30\n", "BP: 2006-12-14 FTSE: 2006-12-01\n", "BP: 2006-12-15 FTSE: 2006-12-04\n", "BP: 2006-12-18 FTSE: 2006-12-05\n", "BP: 2006-12-19 FTSE: 2006-12-06\n", "BP: 2006-12-20 FTSE: 2006-12-07\n", "BP: 2006-12-21 FTSE: 2006-12-08\n", "BP: 2006-12-22 FTSE: 2006-12-11\n", "BP: 2006-12-26 FTSE: 2006-12-12\n", "BP: 2006-12-27 FTSE: 2006-12-13\n", "BP: 2006-12-28 FTSE: 2006-12-14\n", "BP: 2006-12-29 FTSE: 2006-12-15\n", "BP: 2007-01-03 FTSE: 2006-12-18\n", "BP: 2007-01-04 FTSE: 2006-12-19\n", "BP: 2007-01-05 FTSE: 2006-12-20\n", "BP: 2007-01-08 FTSE: 2006-12-21\n", "BP: 2007-01-09 FTSE: 2006-12-22\n", "BP: 2007-01-10 FTSE: 2006-12-27\n", "BP: 2007-01-11 FTSE: 2006-12-28\n", "BP: 2007-01-12 FTSE: 2006-12-29\n", "BP: 2007-01-16 FTSE: 2007-01-02\n", "BP: 2007-01-17 FTSE: 2007-01-03\n", "BP: 2007-01-18 FTSE: 2007-01-04\n", "BP: 2007-01-19 FTSE: 2007-01-05\n", "BP: 2007-01-22 FTSE: 2007-01-08\n", "BP: 2007-01-23 FTSE: 2007-01-09\n", "BP: 2007-01-24 FTSE: 2007-01-10\n", "BP: 2007-01-25 FTSE: 2007-01-11\n", "BP: 2007-01-26 FTSE: 2007-01-12\n", "BP: 2007-01-29 FTSE: 2007-01-15\n", "BP: 2007-01-30 FTSE: 2007-01-16\n", "BP: 2007-01-31 FTSE: 2007-01-17\n", "BP: 2007-02-01 FTSE: 2007-01-18\n", "BP: 2007-02-02 FTSE: 2007-01-19\n", "BP: 2007-02-05 FTSE: 2007-01-22\n", "BP: 2007-02-06 FTSE: 2007-01-23\n", "BP: 2007-02-07 FTSE: 2007-01-24\n", "BP: 2007-02-08 FTSE: 2007-01-25\n", "BP: 2007-02-09 FTSE: 2007-01-26\n", "BP: 2007-02-12 FTSE: 2007-01-29\n", "BP: 2007-02-13 FTSE: 2007-01-30\n", "BP: 2007-02-14 FTSE: 2007-01-31\n", "BP: 2007-02-15 FTSE: 2007-02-01\n", "BP: 2007-02-16 FTSE: 2007-02-02\n", "BP: 2007-02-20 FTSE: 2007-02-05\n", "BP: 2007-02-21 FTSE: 2007-02-06\n", "BP: 2007-02-22 FTSE: 2007-02-07\n", "BP: 2007-02-23 FTSE: 2007-02-08\n", "BP: 2007-02-26 FTSE: 2007-02-09\n", "BP: 2007-02-27 FTSE: 2007-02-12\n", "BP: 2007-02-28 FTSE: 2007-02-13\n", "BP: 2007-03-01 FTSE: 2007-02-14\n", "BP: 2007-03-02 FTSE: 2007-02-15\n", "BP: 2007-03-05 FTSE: 2007-02-16\n", "BP: 2007-03-06 FTSE: 2007-02-19\n", "BP: 2007-03-07 FTSE: 2007-02-20\n", "BP: 2007-03-08 FTSE: 2007-02-21\n", "BP: 2007-03-09 FTSE: 2007-02-22\n", "BP: 2007-03-12 FTSE: 2007-02-23\n", "BP: 2007-03-13 FTSE: 2007-02-26\n", "BP: 2007-03-14 FTSE: 2007-02-27\n", "BP: 2007-03-15 FTSE: 2007-02-28\n", "BP: 2007-03-16 FTSE: 2007-03-01\n", "BP: 2007-03-19 FTSE: 2007-03-02\n", "BP: 2007-03-20 FTSE: 2007-03-05\n", "BP: 2007-03-21 FTSE: 2007-03-06\n", "BP: 2007-03-22 FTSE: 2007-03-07\n", "BP: 2007-03-23 FTSE: 2007-03-08\n", "BP: 2007-03-26 FTSE: 2007-03-09\n", "BP: 2007-03-27 FTSE: 2007-03-12\n", "BP: 2007-03-28 FTSE: 2007-03-13\n", "BP: 2007-03-29 FTSE: 2007-03-14\n", "BP: 2007-03-30 FTSE: 2007-03-15\n", "BP: 2007-04-02 FTSE: 2007-03-16\n", "BP: 2007-04-03 FTSE: 2007-03-19\n", "BP: 2007-04-04 FTSE: 2007-03-20\n", "BP: 2007-04-05 FTSE: 2007-03-21\n", "BP: 2007-04-09 FTSE: 2007-03-22\n", "BP: 2007-04-10 FTSE: 2007-03-23\n", "BP: 2007-04-11 FTSE: 2007-03-26\n", "BP: 2007-04-12 FTSE: 2007-03-27\n", "BP: 2007-04-13 FTSE: 2007-03-28\n", "BP: 2007-04-16 FTSE: 2007-03-29\n", "BP: 2007-04-17 FTSE: 2007-03-30\n", "BP: 2007-04-18 FTSE: 2007-04-02\n", "BP: 2007-04-19 FTSE: 2007-04-03\n", "BP: 2007-04-20 FTSE: 2007-04-04\n", "BP: 2007-04-23 FTSE: 2007-04-05\n", "BP: 2007-04-24 FTSE: 2007-04-10\n", "BP: 2007-04-25 FTSE: 2007-04-11\n", "BP: 2007-04-26 FTSE: 2007-04-12\n", "BP: 2007-04-27 FTSE: 2007-04-13\n", "BP: 2007-04-30 FTSE: 2007-04-16\n", "BP: 2007-05-01 FTSE: 2007-04-17\n", "BP: 2007-05-02 FTSE: 2007-04-18\n", "BP: 2007-05-03 FTSE: 2007-04-19\n", "BP: 2007-05-04 FTSE: 2007-04-20\n", "BP: 2007-05-07 FTSE: 2007-04-23\n", "BP: 2007-05-08 FTSE: 2007-04-24\n", "BP: 2007-05-09 FTSE: 2007-04-25\n", "BP: 2007-05-10 FTSE: 2007-04-26\n", "BP: 2007-05-11 FTSE: 2007-04-27\n", "BP: 2007-05-14 FTSE: 2007-04-30\n", "BP: 2007-05-15 FTSE: 2007-05-01\n", "BP: 2007-05-16 FTSE: 2007-05-02\n", "BP: 2007-05-17 FTSE: 2007-05-03\n", "BP: 2007-05-18 FTSE: 2007-05-04\n", "BP: 2007-05-21 FTSE: 2007-05-08\n", "BP: 2007-05-22 FTSE: 2007-05-09\n", "BP: 2007-05-23 FTSE: 2007-05-10\n", "BP: 2007-05-24 FTSE: 2007-05-11\n", "BP: 2007-05-25 FTSE: 2007-05-14\n", "BP: 2007-05-29 FTSE: 2007-05-15\n", "BP: 2007-05-30 FTSE: 2007-05-16\n", "BP: 2007-05-31 FTSE: 2007-05-17\n", "BP: 2007-06-01 FTSE: 2007-05-18\n", "BP: 2007-06-04 FTSE: 2007-05-21\n", "BP: 2007-06-05 FTSE: 2007-05-22\n", "BP: 2007-06-06 FTSE: 2007-05-23\n", "BP: 2007-06-07 FTSE: 2007-05-24\n", "BP: 2007-06-08 FTSE: 2007-05-25\n", "BP: 2007-06-11 FTSE: 2007-05-29\n", "BP: 2007-06-12 FTSE: 2007-05-30\n", "BP: 2007-06-13 FTSE: 2007-05-31\n", "BP: 2007-06-14 FTSE: 2007-06-01\n", "BP: 2007-06-15 FTSE: 2007-06-04\n", "BP: 2007-06-18 FTSE: 2007-06-05\n", "BP: 2007-06-19 FTSE: 2007-06-06\n", "BP: 2007-06-20 FTSE: 2007-06-07\n", "BP: 2007-06-21 FTSE: 2007-06-08\n", "BP: 2007-06-22 FTSE: 2007-06-11\n", "BP: 2007-06-25 FTSE: 2007-06-12\n", "BP: 2007-06-26 FTSE: 2007-06-13\n", "BP: 2007-06-27 FTSE: 2007-06-14\n", "BP: 2007-06-28 FTSE: 2007-06-15\n", "BP: 2007-06-29 FTSE: 2007-06-18\n", "BP: 2007-07-02 FTSE: 2007-06-19\n", "BP: 2007-07-03 FTSE: 2007-06-20\n", "BP: 2007-07-05 FTSE: 2007-06-21\n", "BP: 2007-07-06 FTSE: 2007-06-22\n", "BP: 2007-07-09 FTSE: 2007-06-25\n", "BP: 2007-07-10 FTSE: 2007-06-26\n", "BP: 2007-07-11 FTSE: 2007-06-27\n", "BP: 2007-07-12 FTSE: 2007-06-28\n", "BP: 2007-07-13 FTSE: 2007-06-29\n", "BP: 2007-07-16 FTSE: 2007-07-02\n", "BP: 2007-07-17 FTSE: 2007-07-03\n", "BP: 2007-07-18 FTSE: 2007-07-04\n", "BP: 2007-07-19 FTSE: 2007-07-05\n", "BP: 2007-07-20 FTSE: 2007-07-06\n", "BP: 2007-07-23 FTSE: 2007-07-09\n", "BP: 2007-07-24 FTSE: 2007-07-10\n", "BP: 2007-07-25 FTSE: 2007-07-11\n", "BP: 2007-07-26 FTSE: 2007-07-12\n", "BP: 2007-07-27 FTSE: 2007-07-13\n", "BP: 2007-07-30 FTSE: 2007-07-16\n", "BP: 2007-07-31 FTSE: 2007-07-17\n", "BP: 2007-08-01 FTSE: 2007-07-18\n", "BP: 2007-08-02 FTSE: 2007-07-19\n", "BP: 2007-08-03 FTSE: 2007-07-20\n", "BP: 2007-08-06 FTSE: 2007-07-23\n", "BP: 2007-08-07 FTSE: 2007-07-24\n", "BP: 2007-08-08 FTSE: 2007-07-25\n", "BP: 2007-08-09 FTSE: 2007-07-26\n", "BP: 2007-08-10 FTSE: 2007-07-27\n", "BP: 2007-08-13 FTSE: 2007-07-30\n", "BP: 2007-08-14 FTSE: 2007-07-31\n", "BP: 2007-08-15 FTSE: 2007-08-01\n", "BP: 2007-08-16 FTSE: 2007-08-02\n", "BP: 2007-08-17 FTSE: 2007-08-03\n", "BP: 2007-08-20 FTSE: 2007-08-06\n", "BP: 2007-08-21 FTSE: 2007-08-07\n", "BP: 2007-08-22 FTSE: 2007-08-08\n", "BP: 2007-08-23 FTSE: 2007-08-09\n", "BP: 2007-08-24 FTSE: 2007-08-10\n", "BP: 2007-08-27 FTSE: 2007-08-13\n", "BP: 2007-08-28 FTSE: 2007-08-14\n", "BP: 2007-08-29 FTSE: 2007-08-15\n", "BP: 2007-08-30 FTSE: 2007-08-16\n", "BP: 2007-08-31 FTSE: 2007-08-17\n", "BP: 2007-09-04 FTSE: 2007-08-20\n", "BP: 2007-09-05 FTSE: 2007-08-21\n", "BP: 2007-09-06 FTSE: 2007-08-22\n", "BP: 2007-09-07 FTSE: 2007-08-23\n", "BP: 2007-09-10 FTSE: 2007-08-24\n", "BP: 2007-09-11 FTSE: 2007-08-28\n", "BP: 2007-09-12 FTSE: 2007-08-29\n", "BP: 2007-09-13 FTSE: 2007-08-30\n", "BP: 2007-09-14 FTSE: 2007-08-31\n", "BP: 2007-09-17 FTSE: 2007-09-03\n", "BP: 2007-09-18 FTSE: 2007-09-04\n", "BP: 2007-09-19 FTSE: 2007-09-05\n", "BP: 2007-09-20 FTSE: 2007-09-06\n", "BP: 2007-09-21 FTSE: 2007-09-07\n", "BP: 2007-09-24 FTSE: 2007-09-10\n", "BP: 2007-09-25 FTSE: 2007-09-11\n", "BP: 2007-09-26 FTSE: 2007-09-12\n", "BP: 2007-09-27 FTSE: 2007-09-13\n", "BP: 2007-09-28 FTSE: 2007-09-14\n", "BP: 2007-10-01 FTSE: 2007-09-17\n", "BP: 2007-10-02 FTSE: 2007-09-18\n", "BP: 2007-10-03 FTSE: 2007-09-19\n", "BP: 2007-10-04 FTSE: 2007-09-20\n", "BP: 2007-10-05 FTSE: 2007-09-21\n", "BP: 2007-10-08 FTSE: 2007-09-24\n", "BP: 2007-10-09 FTSE: 2007-09-25\n", "BP: 2007-10-10 FTSE: 2007-09-26\n", "BP: 2007-10-11 FTSE: 2007-09-27\n", "BP: 2007-10-12 FTSE: 2007-09-28\n", "BP: 2007-10-15 FTSE: 2007-10-01\n", "BP: 2007-10-16 FTSE: 2007-10-02\n", "BP: 2007-10-17 FTSE: 2007-10-03\n", "BP: 2007-10-18 FTSE: 2007-10-04\n", "BP: 2007-10-19 FTSE: 2007-10-05\n", "BP: 2007-10-22 FTSE: 2007-10-08\n", "BP: 2007-10-23 FTSE: 2007-10-09\n", "BP: 2007-10-24 FTSE: 2007-10-10\n", "BP: 2007-10-25 FTSE: 2007-10-11\n", "BP: 2007-10-26 FTSE: 2007-10-12\n", "BP: 2007-10-29 FTSE: 2007-10-15\n", "BP: 2007-10-30 FTSE: 2007-10-16\n", "BP: 2007-10-31 FTSE: 2007-10-17\n", "BP: 2007-11-01 FTSE: 2007-10-18\n", "BP: 2007-11-02 FTSE: 2007-10-19\n", "BP: 2007-11-05 FTSE: 2007-10-22\n", "BP: 2007-11-06 FTSE: 2007-10-23\n", "BP: 2007-11-07 FTSE: 2007-10-24\n", "BP: 2007-11-08 FTSE: 2007-10-25\n", "BP: 2007-11-09 FTSE: 2007-10-26\n", "BP: 2007-11-12 FTSE: 2007-10-29\n", "BP: 2007-11-13 FTSE: 2007-10-30\n", "BP: 2007-11-14 FTSE: 2007-10-31\n", "BP: 2007-11-15 FTSE: 2007-11-01\n", "BP: 2007-11-16 FTSE: 2007-11-02\n", "BP: 2007-11-19 FTSE: 2007-11-05\n", "BP: 2007-11-20 FTSE: 2007-11-06\n", "BP: 2007-11-21 FTSE: 2007-11-07\n", "BP: 2007-11-23 FTSE: 2007-11-08\n", "BP: 2007-11-26 FTSE: 2007-11-09\n", "BP: 2007-11-27 FTSE: 2007-11-12\n", "BP: 2007-11-28 FTSE: 2007-11-13\n", "BP: 2007-11-29 FTSE: 2007-11-14\n", "BP: 2007-11-30 FTSE: 2007-11-15\n", "BP: 2007-12-03 FTSE: 2007-11-16\n", "BP: 2007-12-04 FTSE: 2007-11-19\n", "BP: 2007-12-05 FTSE: 2007-11-20\n", "BP: 2007-12-06 FTSE: 2007-11-21\n", "BP: 2007-12-07 FTSE: 2007-11-22\n", "BP: 2007-12-10 FTSE: 2007-11-23\n", "BP: 2007-12-11 FTSE: 2007-11-26\n", "BP: 2007-12-12 FTSE: 2007-11-27\n", "BP: 2007-12-13 FTSE: 2007-11-28\n", "BP: 2007-12-14 FTSE: 2007-11-29\n", "BP: 2007-12-17 FTSE: 2007-11-30\n", "BP: 2007-12-18 FTSE: 2007-12-03\n", "BP: 2007-12-19 FTSE: 2007-12-04\n", "BP: 2007-12-20 FTSE: 2007-12-05\n", "BP: 2007-12-21 FTSE: 2007-12-06\n", "BP: 2007-12-24 FTSE: 2007-12-07\n", "BP: 2007-12-26 FTSE: 2007-12-10\n", "BP: 2007-12-27 FTSE: 2007-12-11\n", "BP: 2007-12-28 FTSE: 2007-12-12\n", "BP: 2007-12-31 FTSE: 2007-12-13\n", "BP: 2008-01-02 FTSE: 2007-12-14\n", "BP: 2008-01-03 FTSE: 2007-12-17\n", "BP: 2008-01-04 FTSE: 2007-12-18\n", "BP: 2008-01-07 FTSE: 2007-12-19\n", "BP: 2008-01-08 FTSE: 2007-12-20\n", "BP: 2008-01-09 FTSE: 2007-12-21\n", "BP: 2008-01-10 FTSE: 2007-12-24\n", "BP: 2008-01-11 FTSE: 2007-12-27\n", "BP: 2008-01-14 FTSE: 2007-12-28\n", "BP: 2008-01-15 FTSE: 2007-12-31\n", "BP: 2008-01-16 FTSE: 2008-01-02\n", "BP: 2008-01-17 FTSE: 2008-01-03\n", "BP: 2008-01-18 FTSE: 2008-01-04\n", "BP: 2008-01-22 FTSE: 2008-01-07\n", "BP: 2008-01-23 FTSE: 2008-01-08\n", "BP: 2008-01-24 FTSE: 2008-01-09\n", "BP: 2008-01-25 FTSE: 2008-01-10\n", "BP: 2008-01-28 FTSE: 2008-01-11\n", "BP: 2008-01-29 FTSE: 2008-01-14\n", "BP: 2008-01-30 FTSE: 2008-01-15\n", "BP: 2008-01-31 FTSE: 2008-01-16\n", "BP: 2008-02-01 FTSE: 2008-01-17\n", "BP: 2008-02-04 FTSE: 2008-01-18\n", "BP: 2008-02-05 FTSE: 2008-01-21\n", "BP: 2008-02-06 FTSE: 2008-01-22\n", "BP: 2008-02-07 FTSE: 2008-01-23\n", "BP: 2008-02-08 FTSE: 2008-01-24\n", "BP: 2008-02-11 FTSE: 2008-01-25\n", "BP: 2008-02-12 FTSE: 2008-01-28\n", "BP: 2008-02-13 FTSE: 2008-01-29\n", "BP: 2008-02-14 FTSE: 2008-01-30\n", "BP: 2008-02-15 FTSE: 2008-01-31\n", "BP: 2008-02-19 FTSE: 2008-02-01\n", "BP: 2008-02-20 FTSE: 2008-02-04\n", "BP: 2008-02-21 FTSE: 2008-02-05\n", "BP: 2008-02-22 FTSE: 2008-02-06\n", "BP: 2008-02-25 FTSE: 2008-02-07\n", "BP: 2008-02-26 FTSE: 2008-02-08\n", "BP: 2008-02-27 FTSE: 2008-02-11\n", "BP: 2008-02-28 FTSE: 2008-02-12\n", "BP: 2008-02-29 FTSE: 2008-02-13\n", "BP: 2008-03-03 FTSE: 2008-02-14\n", "BP: 2008-03-04 FTSE: 2008-02-15\n", "BP: 2008-03-05 FTSE: 2008-02-18\n", "BP: 2008-03-06 FTSE: 2008-02-19\n", "BP: 2008-03-07 FTSE: 2008-02-20\n", "BP: 2008-03-10 FTSE: 2008-02-21\n", "BP: 2008-03-11 FTSE: 2008-02-22\n", "BP: 2008-03-12 FTSE: 2008-02-25\n", "BP: 2008-03-13 FTSE: 2008-02-26\n", "BP: 2008-03-14 FTSE: 2008-02-27\n", "BP: 2008-03-17 FTSE: 2008-02-28\n", "BP: 2008-03-18 FTSE: 2008-02-29\n", "BP: 2008-03-19 FTSE: 2008-03-03\n", "BP: 2008-03-20 FTSE: 2008-03-04\n", "BP: 2008-03-24 FTSE: 2008-03-05\n", "BP: 2008-03-25 FTSE: 2008-03-06\n", "BP: 2008-03-26 FTSE: 2008-03-07\n", "BP: 2008-03-27 FTSE: 2008-03-10\n", "BP: 2008-03-28 FTSE: 2008-03-11\n", "BP: 2008-03-31 FTSE: 2008-03-12\n", "BP: 2008-04-01 FTSE: 2008-03-13\n", "BP: 2008-04-02 FTSE: 2008-03-14\n", "BP: 2008-04-03 FTSE: 2008-03-17\n", "BP: 2008-04-04 FTSE: 2008-03-18\n", "BP: 2008-04-07 FTSE: 2008-03-19\n", "BP: 2008-04-08 FTSE: 2008-03-20\n", "BP: 2008-04-09 FTSE: 2008-03-25\n", "BP: 2008-04-10 FTSE: 2008-03-26\n", "BP: 2008-04-11 FTSE: 2008-03-27\n", "BP: 2008-04-14 FTSE: 2008-03-28\n", "BP: 2008-04-15 FTSE: 2008-03-31\n", "BP: 2008-04-16 FTSE: 2008-04-01\n", "BP: 2008-04-17 FTSE: 2008-04-02\n", "BP: 2008-04-18 FTSE: 2008-04-03\n", "BP: 2008-04-21 FTSE: 2008-04-04\n", "BP: 2008-04-22 FTSE: 2008-04-07\n", "BP: 2008-04-23 FTSE: 2008-04-08\n", "BP: 2008-04-24 FTSE: 2008-04-09\n", "BP: 2008-04-25 FTSE: 2008-04-10\n", "BP: 2008-04-28 FTSE: 2008-04-11\n", "BP: 2008-04-29 FTSE: 2008-04-14\n", "BP: 2008-04-30 FTSE: 2008-04-15\n", "BP: 2008-05-01 FTSE: 2008-04-16\n", "BP: 2008-05-02 FTSE: 2008-04-17\n", "BP: 2008-05-05 FTSE: 2008-04-18\n", "BP: 2008-05-06 FTSE: 2008-04-21\n", "BP: 2008-05-07 FTSE: 2008-04-22\n", "BP: 2008-05-08 FTSE: 2008-04-23\n", "BP: 2008-05-09 FTSE: 2008-04-24\n", "BP: 2008-05-12 FTSE: 2008-04-25\n", "BP: 2008-05-13 FTSE: 2008-04-28\n", "BP: 2008-05-14 FTSE: 2008-04-29\n", "BP: 2008-05-15 FTSE: 2008-04-30\n", "BP: 2008-05-16 FTSE: 2008-05-01\n", "BP: 2008-05-19 FTSE: 2008-05-02\n", "BP: 2008-05-20 FTSE: 2008-05-06\n", "BP: 2008-05-21 FTSE: 2008-05-07\n", "BP: 2008-05-22 FTSE: 2008-05-08\n", "BP: 2008-05-23 FTSE: 2008-05-09\n", "BP: 2008-05-27 FTSE: 2008-05-12\n", "BP: 2008-05-28 FTSE: 2008-05-13\n", "BP: 2008-05-29 FTSE: 2008-05-14\n", "BP: 2008-05-30 FTSE: 2008-05-15\n", "BP: 2008-06-02 FTSE: 2008-05-16\n", "BP: 2008-06-03 FTSE: 2008-05-19\n", "BP: 2008-06-04 FTSE: 2008-05-20\n", "BP: 2008-06-05 FTSE: 2008-05-21\n", "BP: 2008-06-06 FTSE: 2008-05-22\n", "BP: 2008-06-09 FTSE: 2008-05-23\n", "BP: 2008-06-10 FTSE: 2008-05-27\n", "BP: 2008-06-11 FTSE: 2008-05-28\n", "BP: 2008-06-12 FTSE: 2008-05-29\n", "BP: 2008-06-13 FTSE: 2008-05-30\n", "BP: 2008-06-16 FTSE: 2008-06-02\n", "BP: 2008-06-17 FTSE: 2008-06-03\n", "BP: 2008-06-18 FTSE: 2008-06-04\n", "BP: 2008-06-19 FTSE: 2008-06-05\n", "BP: 2008-06-20 FTSE: 2008-06-06\n", "BP: 2008-06-23 FTSE: 2008-06-09\n", "BP: 2008-06-24 FTSE: 2008-06-10\n", "BP: 2008-06-25 FTSE: 2008-06-11\n", "BP: 2008-06-26 FTSE: 2008-06-12\n", "BP: 2008-06-27 FTSE: 2008-06-13\n", "BP: 2008-06-30 FTSE: 2008-06-16\n", "BP: 2008-07-01 FTSE: 2008-06-17\n", "BP: 2008-07-02 FTSE: 2008-06-18\n", "BP: 2008-07-03 FTSE: 2008-06-19\n", "BP: 2008-07-07 FTSE: 2008-06-20\n", "BP: 2008-07-08 FTSE: 2008-06-23\n", "BP: 2008-07-09 FTSE: 2008-06-24\n", "BP: 2008-07-10 FTSE: 2008-06-25\n", "BP: 2008-07-11 FTSE: 2008-06-26\n", "BP: 2008-07-14 FTSE: 2008-06-27\n", "BP: 2008-07-15 FTSE: 2008-06-30\n", "BP: 2008-07-16 FTSE: 2008-07-01\n", "BP: 2008-07-17 FTSE: 2008-07-02\n", "BP: 2008-07-18 FTSE: 2008-07-03\n", "BP: 2008-07-21 FTSE: 2008-07-04\n", "BP: 2008-07-22 FTSE: 2008-07-07\n", "BP: 2008-07-23 FTSE: 2008-07-08\n", "BP: 2008-07-24 FTSE: 2008-07-09\n", "BP: 2008-07-25 FTSE: 2008-07-10\n", "BP: 2008-07-28 FTSE: 2008-07-11\n", "BP: 2008-07-29 FTSE: 2008-07-14\n", "BP: 2008-07-30 FTSE: 2008-07-15\n", "BP: 2008-07-31 FTSE: 2008-07-16\n", "BP: 2008-08-01 FTSE: 2008-07-17\n", "BP: 2008-08-04 FTSE: 2008-07-18\n", "BP: 2008-08-05 FTSE: 2008-07-21\n", "BP: 2008-08-06 FTSE: 2008-07-22\n", "BP: 2008-08-07 FTSE: 2008-07-23\n", "BP: 2008-08-08 FTSE: 2008-07-24\n", "BP: 2008-08-11 FTSE: 2008-07-25\n", "BP: 2008-08-12 FTSE: 2008-07-28\n", "BP: 2008-08-13 FTSE: 2008-07-29\n", "BP: 2008-08-14 FTSE: 2008-07-30\n", "BP: 2008-08-15 FTSE: 2008-07-31\n", "BP: 2008-08-18 FTSE: 2008-08-01\n", "BP: 2008-08-19 FTSE: 2008-08-04\n", "BP: 2008-08-20 FTSE: 2008-08-05\n", "BP: 2008-08-21 FTSE: 2008-08-06\n", "BP: 2008-08-22 FTSE: 2008-08-07\n", "BP: 2008-08-25 FTSE: 2008-08-08\n", "BP: 2008-08-26 FTSE: 2008-08-11\n", "BP: 2008-08-27 FTSE: 2008-08-12\n", "BP: 2008-08-28 FTSE: 2008-08-13\n", "BP: 2008-08-29 FTSE: 2008-08-14\n", "BP: 2008-09-02 FTSE: 2008-08-15\n", "BP: 2008-09-03 FTSE: 2008-08-18\n", "BP: 2008-09-04 FTSE: 2008-08-19\n", "BP: 2008-09-05 FTSE: 2008-08-20\n", "BP: 2008-09-08 FTSE: 2008-08-21\n", "BP: 2008-09-09 FTSE: 2008-08-22\n", "BP: 2008-09-10 FTSE: 2008-08-26\n", "BP: 2008-09-11 FTSE: 2008-08-27\n", "BP: 2008-09-12 FTSE: 2008-08-28\n", "BP: 2008-09-15 FTSE: 2008-08-29\n", "BP: 2008-09-16 FTSE: 2008-09-01\n", "BP: 2008-09-17 FTSE: 2008-09-02\n", "BP: 2008-09-18 FTSE: 2008-09-03\n", "BP: 2008-09-19 FTSE: 2008-09-04\n", "BP: 2008-09-22 FTSE: 2008-09-05\n", "BP: 2008-09-23 FTSE: 2008-09-08\n", "BP: 2008-09-24 FTSE: 2008-09-09\n", "BP: 2008-09-25 FTSE: 2008-09-10\n", "BP: 2008-09-26 FTSE: 2008-09-11\n", "BP: 2008-09-29 FTSE: 2008-09-12\n", "BP: 2008-09-30 FTSE: 2008-09-15\n", "BP: 2008-10-01 FTSE: 2008-09-16\n", "BP: 2008-10-02 FTSE: 2008-09-17\n", "BP: 2008-10-03 FTSE: 2008-09-18\n", "BP: 2008-10-06 FTSE: 2008-09-19\n", "BP: 2008-10-07 FTSE: 2008-09-22\n", "BP: 2008-10-08 FTSE: 2008-09-23\n", "BP: 2008-10-09 FTSE: 2008-09-24\n", "BP: 2008-10-10 FTSE: 2008-09-25\n", "BP: 2008-10-13 FTSE: 2008-09-26\n", "BP: 2008-10-14 FTSE: 2008-09-29\n", "BP: 2008-10-15 FTSE: 2008-09-30\n", "BP: 2008-10-16 FTSE: 2008-10-01\n", "BP: 2008-10-17 FTSE: 2008-10-02\n", "BP: 2008-10-20 FTSE: 2008-10-03\n", "BP: 2008-10-21 FTSE: 2008-10-06\n", "BP: 2008-10-22 FTSE: 2008-10-07\n", "BP: 2008-10-23 FTSE: 2008-10-08\n", "BP: 2008-10-24 FTSE: 2008-10-09\n", "BP: 2008-10-27 FTSE: 2008-10-10\n", "BP: 2008-10-28 FTSE: 2008-10-13\n", "BP: 2008-10-29 FTSE: 2008-10-14\n", "BP: 2008-10-30 FTSE: 2008-10-15\n", "BP: 2008-10-31 FTSE: 2008-10-16\n", "BP: 2008-11-03 FTSE: 2008-10-17\n", "BP: 2008-11-04 FTSE: 2008-10-20\n", "BP: 2008-11-05 FTSE: 2008-10-21\n", "BP: 2008-11-06 FTSE: 2008-10-22\n", "BP: 2008-11-07 FTSE: 2008-10-23\n", "BP: 2008-11-10 FTSE: 2008-10-24\n", "BP: 2008-11-11 FTSE: 2008-10-27\n", "BP: 2008-11-12 FTSE: 2008-10-28\n", "BP: 2008-11-13 FTSE: 2008-10-29\n", "BP: 2008-11-14 FTSE: 2008-10-30\n", "BP: 2008-11-17 FTSE: 2008-10-31\n", "BP: 2008-11-18 FTSE: 2008-11-03\n", "BP: 2008-11-19 FTSE: 2008-11-04\n", "BP: 2008-11-20 FTSE: 2008-11-05\n", "BP: 2008-11-21 FTSE: 2008-11-06\n", "BP: 2008-11-24 FTSE: 2008-11-07\n", "BP: 2008-11-25 FTSE: 2008-11-10\n", "BP: 2008-11-26 FTSE: 2008-11-11\n", "BP: 2008-11-28 FTSE: 2008-11-12\n", "BP: 2008-12-01 FTSE: 2008-11-13\n", "BP: 2008-12-02 FTSE: 2008-11-14\n", "BP: 2008-12-03 FTSE: 2008-11-17\n", "BP: 2008-12-04 FTSE: 2008-11-18\n", "BP: 2008-12-05 FTSE: 2008-11-19\n", "BP: 2008-12-08 FTSE: 2008-11-20\n", "BP: 2008-12-09 FTSE: 2008-11-21\n", "BP: 2008-12-10 FTSE: 2008-11-24\n", "BP: 2008-12-11 FTSE: 2008-11-25\n", "BP: 2008-12-12 FTSE: 2008-11-26\n", "BP: 2008-12-15 FTSE: 2008-11-27\n", "BP: 2008-12-16 FTSE: 2008-11-28\n", "BP: 2008-12-17 FTSE: 2008-12-01\n", "BP: 2008-12-18 FTSE: 2008-12-02\n", "BP: 2008-12-19 FTSE: 2008-12-03\n", "BP: 2008-12-22 FTSE: 2008-12-04\n", "BP: 2008-12-23 FTSE: 2008-12-05\n", "BP: 2008-12-24 FTSE: 2008-12-08\n", "BP: 2008-12-26 FTSE: 2008-12-09\n", "BP: 2008-12-29 FTSE: 2008-12-10\n", "BP: 2008-12-30 FTSE: 2008-12-11\n", "BP: 2008-12-31 FTSE: 2008-12-12\n", "BP: 2009-01-02 FTSE: 2008-12-15\n", "BP: 2009-01-05 FTSE: 2008-12-16\n", "BP: 2009-01-06 FTSE: 2008-12-17\n", "BP: 2009-01-07 FTSE: 2008-12-18\n", "BP: 2009-01-08 FTSE: 2008-12-19\n", "BP: 2009-01-09 FTSE: 2008-12-22\n", "BP: 2009-01-12 FTSE: 2008-12-23\n", "BP: 2009-01-13 FTSE: 2008-12-24\n", "BP: 2009-01-14 FTSE: 2008-12-29\n", "BP: 2009-01-15 FTSE: 2008-12-30\n", "BP: 2009-01-16 FTSE: 2008-12-31\n", "BP: 2009-01-20 FTSE: 2009-01-02\n", "BP: 2009-01-21 FTSE: 2009-01-05\n", "BP: 2009-01-22 FTSE: 2009-01-06\n", "BP: 2009-01-23 FTSE: 2009-01-07\n", "BP: 2009-01-26 FTSE: 2009-01-08\n", "BP: 2009-01-27 FTSE: 2009-01-09\n", "BP: 2009-01-28 FTSE: 2009-01-12\n", "BP: 2009-01-29 FTSE: 2009-01-13\n", "BP: 2009-01-30 FTSE: 2009-01-14\n", "BP: 2009-02-02 FTSE: 2009-01-15\n", "BP: 2009-02-03 FTSE: 2009-01-16\n", "BP: 2009-02-04 FTSE: 2009-01-19\n", "BP: 2009-02-05 FTSE: 2009-01-20\n", "BP: 2009-02-06 FTSE: 2009-01-21\n", "BP: 2009-02-09 FTSE: 2009-01-22\n", "BP: 2009-02-10 FTSE: 2009-01-23\n", "BP: 2009-02-11 FTSE: 2009-01-26\n", "BP: 2009-02-12 FTSE: 2009-01-27\n", "BP: 2009-02-13 FTSE: 2009-01-28\n", "BP: 2009-02-17 FTSE: 2009-01-29\n", "BP: 2009-02-18 FTSE: 2009-01-30\n", "BP: 2009-02-19 FTSE: 2009-02-02\n", "BP: 2009-02-20 FTSE: 2009-02-03\n", "BP: 2009-02-23 FTSE: 2009-02-04\n", "BP: 2009-02-24 FTSE: 2009-02-05\n", "BP: 2009-02-25 FTSE: 2009-02-06\n", "BP: 2009-02-26 FTSE: 2009-02-09\n", "BP: 2009-02-27 FTSE: 2009-02-10\n", "BP: 2009-03-02 FTSE: 2009-02-11\n", "BP: 2009-03-03 FTSE: 2009-02-12\n", "BP: 2009-03-04 FTSE: 2009-02-13\n", "BP: 2009-03-05 FTSE: 2009-02-16\n", "BP: 2009-03-06 FTSE: 2009-02-17\n", "BP: 2009-03-09 FTSE: 2009-02-18\n", "BP: 2009-03-10 FTSE: 2009-02-19\n", "BP: 2009-03-11 FTSE: 2009-02-20\n", "BP: 2009-03-12 FTSE: 2009-02-23\n", "BP: 2009-03-13 FTSE: 2009-02-24\n", "BP: 2009-03-16 FTSE: 2009-02-25\n", "BP: 2009-03-17 FTSE: 2009-02-26\n", "BP: 2009-03-18 FTSE: 2009-02-27\n", "BP: 2009-03-19 FTSE: 2009-03-02\n", "BP: 2009-03-20 FTSE: 2009-03-03\n", "BP: 2009-03-23 FTSE: 2009-03-04\n", "BP: 2009-03-24 FTSE: 2009-03-05\n", "BP: 2009-03-25 FTSE: 2009-03-06\n", "BP: 2009-03-26 FTSE: 2009-03-09\n", "BP: 2009-03-27 FTSE: 2009-03-10\n", "BP: 2009-03-30 FTSE: 2009-03-11\n", "BP: 2009-03-31 FTSE: 2009-03-12\n", "BP: 2009-04-01 FTSE: 2009-03-13\n", "BP: 2009-04-02 FTSE: 2009-03-16\n", "BP: 2009-04-03 FTSE: 2009-03-17\n", "BP: 2009-04-06 FTSE: 2009-03-18\n", "BP: 2009-04-07 FTSE: 2009-03-19\n", "BP: 2009-04-08 FTSE: 2009-03-20\n", "BP: 2009-04-09 FTSE: 2009-03-23\n", "BP: 2009-04-13 FTSE: 2009-03-24\n", "BP: 2009-04-14 FTSE: 2009-03-25\n", "BP: 2009-04-15 FTSE: 2009-03-26\n", "BP: 2009-04-16 FTSE: 2009-03-30\n", "BP: 2009-04-17 FTSE: 2009-03-31\n", "BP: 2009-04-20 FTSE: 2009-04-01\n", "BP: 2009-04-21 FTSE: 2009-04-02\n", "BP: 2009-04-22 FTSE: 2009-04-03\n", "BP: 2009-04-23 FTSE: 2009-04-06\n", "BP: 2009-04-24 FTSE: 2009-04-07\n", "BP: 2009-04-27 FTSE: 2009-04-08\n", "BP: 2009-04-28 FTSE: 2009-04-09\n", "BP: 2009-04-29 FTSE: 2009-04-14\n", "BP: 2009-04-30 FTSE: 2009-04-15\n", "BP: 2009-05-01 FTSE: 2009-04-16\n", "BP: 2009-05-04 FTSE: 2009-04-17\n", "BP: 2009-05-05 FTSE: 2009-04-20\n", "BP: 2009-05-06 FTSE: 2009-04-21\n", "BP: 2009-05-07 FTSE: 2009-04-22\n", "BP: 2009-05-08 FTSE: 2009-04-23\n", "BP: 2009-05-11 FTSE: 2009-04-24\n", "BP: 2009-05-12 FTSE: 2009-04-27\n", "BP: 2009-05-13 FTSE: 2009-04-28\n", "BP: 2009-05-14 FTSE: 2009-04-29\n", "BP: 2009-05-15 FTSE: 2009-04-30\n", "BP: 2009-05-18 FTSE: 2009-05-01\n", "BP: 2009-05-19 FTSE: 2009-05-05\n", "BP: 2009-05-20 FTSE: 2009-05-06\n", "BP: 2009-05-21 FTSE: 2009-05-07\n", "BP: 2009-05-22 FTSE: 2009-05-08\n", "BP: 2009-05-26 FTSE: 2009-05-11\n", "BP: 2009-05-27 FTSE: 2009-05-12\n", "BP: 2009-05-28 FTSE: 2009-05-13\n", "BP: 2009-05-29 FTSE: 2009-05-14\n", "BP: 2009-06-01 FTSE: 2009-05-15\n", "BP: 2009-06-02 FTSE: 2009-05-18\n", "BP: 2009-06-03 FTSE: 2009-05-19\n", "BP: 2009-06-04 FTSE: 2009-05-20\n", "BP: 2009-06-05 FTSE: 2009-05-21\n", "BP: 2009-06-08 FTSE: 2009-05-22\n", "BP: 2009-06-09 FTSE: 2009-05-26\n", "BP: 2009-06-10 FTSE: 2009-05-27\n", "BP: 2009-06-11 FTSE: 2009-05-28\n", "BP: 2009-06-12 FTSE: 2009-05-29\n", "BP: 2009-06-15 FTSE: 2009-06-01\n", "BP: 2009-06-16 FTSE: 2009-06-02\n", "BP: 2009-06-17 FTSE: 2009-06-03\n", "BP: 2009-06-18 FTSE: 2009-06-04\n", "BP: 2009-06-19 FTSE: 2009-06-05\n", "BP: 2009-06-22 FTSE: 2009-06-08\n", "BP: 2009-06-23 FTSE: 2009-06-09\n", "BP: 2009-06-24 FTSE: 2009-06-10\n", "BP: 2009-06-25 FTSE: 2009-06-11\n", "BP: 2009-06-26 FTSE: 2009-06-12\n", "BP: 2009-06-29 FTSE: 2009-06-15\n", "BP: 2009-06-30 FTSE: 2009-06-16\n", "BP: 2009-07-01 FTSE: 2009-06-17\n", "BP: 2009-07-02 FTSE: 2009-06-18\n", "BP: 2009-07-06 FTSE: 2009-06-19\n", "BP: 2009-07-07 FTSE: 2009-06-22\n", "BP: 2009-07-08 FTSE: 2009-06-23\n", "BP: 2009-07-09 FTSE: 2009-06-24\n", "BP: 2009-07-10 FTSE: 2009-06-26\n", "BP: 2009-07-13 FTSE: 2009-06-29\n", "BP: 2009-07-14 FTSE: 2009-06-30\n", "BP: 2009-07-15 FTSE: 2009-07-01\n", "BP: 2009-07-16 FTSE: 2009-07-02\n", "BP: 2009-07-17 FTSE: 2009-07-03\n", "BP: 2009-07-20 FTSE: 2009-07-06\n", "BP: 2009-07-21 FTSE: 2009-07-07\n", "BP: 2009-07-22 FTSE: 2009-07-08\n", "BP: 2009-07-23 FTSE: 2009-07-09\n", "BP: 2009-07-24 FTSE: 2009-07-10\n", "BP: 2009-07-27 FTSE: 2009-07-13\n", "BP: 2009-07-28 FTSE: 2009-07-14\n", "BP: 2009-07-29 FTSE: 2009-07-15\n", "BP: 2009-07-30 FTSE: 2009-07-16\n", "BP: 2009-07-31 FTSE: 2009-07-17\n", "BP: 2009-08-03 FTSE: 2009-07-20\n", "BP: 2009-08-04 FTSE: 2009-07-21\n", "BP: 2009-08-05 FTSE: 2009-07-22\n", "BP: 2009-08-06 FTSE: 2009-07-23\n", "BP: 2009-08-07 FTSE: 2009-07-24\n", "BP: 2009-08-10 FTSE: 2009-07-27\n", "BP: 2009-08-11 FTSE: 2009-07-28\n", "BP: 2009-08-12 FTSE: 2009-07-29\n", "BP: 2009-08-13 FTSE: 2009-07-30\n", "BP: 2009-08-14 FTSE: 2009-07-31\n", "BP: 2009-08-17 FTSE: 2009-08-03\n", "BP: 2009-08-18 FTSE: 2009-08-04\n", "BP: 2009-08-19 FTSE: 2009-08-05\n", "BP: 2009-08-20 FTSE: 2009-08-06\n", "BP: 2009-08-21 FTSE: 2009-08-07\n", "BP: 2009-08-24 FTSE: 2009-08-10\n", "BP: 2009-08-25 FTSE: 2009-08-12\n", "BP: 2009-08-26 FTSE: 2009-08-13\n", "BP: 2009-08-27 FTSE: 2009-08-14\n", "BP: 2009-08-28 FTSE: 2009-08-17\n", "BP: 2009-08-31 FTSE: 2009-08-18\n", "BP: 2009-09-01 FTSE: 2009-08-19\n", "BP: 2009-09-02 FTSE: 2009-08-20\n", "BP: 2009-09-03 FTSE: 2009-08-21\n", "BP: 2009-09-04 FTSE: 2009-08-24\n", "BP: 2009-09-08 FTSE: 2009-08-25\n", "BP: 2009-09-09 FTSE: 2009-08-26\n", "BP: 2009-09-10 FTSE: 2009-08-27\n", "BP: 2009-09-11 FTSE: 2009-08-28\n", "BP: 2009-09-14 FTSE: 2009-09-01\n", "BP: 2009-09-15 FTSE: 2009-09-03\n", "BP: 2009-09-16 FTSE: 2009-09-04\n", "BP: 2009-09-17 FTSE: 2009-09-07\n", "BP: 2009-09-18 FTSE: 2009-09-08\n", "BP: 2009-09-21 FTSE: 2009-09-09\n", "BP: 2009-09-22 FTSE: 2009-09-10\n", "BP: 2009-09-23 FTSE: 2009-09-11\n", "BP: 2009-09-24 FTSE: 2009-09-14\n", "BP: 2009-09-25 FTSE: 2009-09-15\n", "BP: 2009-09-28 FTSE: 2009-09-16\n", "BP: 2009-09-29 FTSE: 2009-09-17\n", "BP: 2009-09-30 FTSE: 2009-09-18\n", "BP: 2009-10-01 FTSE: 2009-09-21\n", "BP: 2009-10-02 FTSE: 2009-09-22\n", "BP: 2009-10-05 FTSE: 2009-09-23\n", "BP: 2009-10-06 FTSE: 2009-09-24\n", "BP: 2009-10-07 FTSE: 2009-09-25\n", "BP: 2009-10-08 FTSE: 2009-09-28\n", "BP: 2009-10-09 FTSE: 2009-09-29\n", "BP: 2009-10-12 FTSE: 2009-09-30\n", "BP: 2009-10-13 FTSE: 2009-10-01\n", "BP: 2009-10-14 FTSE: 2009-10-02\n", "BP: 2009-10-15 FTSE: 2009-10-05\n", "BP: 2009-10-16 FTSE: 2009-10-06\n", "BP: 2009-10-19 FTSE: 2009-10-07\n", "BP: 2009-10-20 FTSE: 2009-10-08\n", "BP: 2009-10-21 FTSE: 2009-10-09\n", "BP: 2009-10-22 FTSE: 2009-10-12\n", "BP: 2009-10-23 FTSE: 2009-10-13\n", "BP: 2009-10-26 FTSE: 2009-10-14\n", "BP: 2009-10-27 FTSE: 2009-10-15\n", "BP: 2009-10-28 FTSE: 2009-10-16\n", "BP: 2009-10-29 FTSE: 2009-10-19\n", "BP: 2009-10-30 FTSE: 2009-10-20\n", "BP: 2009-11-02 FTSE: 2009-10-21\n", "BP: 2009-11-03 FTSE: 2009-10-22\n", "BP: 2009-11-04 FTSE: 2009-10-23\n", "BP: 2009-11-05 FTSE: 2009-10-26\n", "BP: 2009-11-06 FTSE: 2009-10-27\n", "BP: 2009-11-09 FTSE: 2009-10-28\n", "BP: 2009-11-10 FTSE: 2009-10-29\n", "BP: 2009-11-11 FTSE: 2009-10-30\n", "BP: 2009-11-12 FTSE: 2009-11-02\n", "BP: 2009-11-13 FTSE: 2009-11-03\n", "BP: 2009-11-16 FTSE: 2009-11-04\n", "BP: 2009-11-17 FTSE: 2009-11-05\n", "BP: 2009-11-18 FTSE: 2009-11-06\n", "BP: 2009-11-19 FTSE: 2009-11-09\n", "BP: 2009-11-20 FTSE: 2009-11-10\n", "BP: 2009-11-23 FTSE: 2009-11-11\n", "BP: 2009-11-24 FTSE: 2009-11-12\n", "BP: 2009-11-25 FTSE: 2009-11-13\n", "BP: 2009-11-27 FTSE: 2009-11-16\n", "BP: 2009-11-30 FTSE: 2009-11-17\n", "BP: 2009-12-01 FTSE: 2009-11-18\n", "BP: 2009-12-02 FTSE: 2009-11-19\n", "BP: 2009-12-03 FTSE: 2009-11-20\n", "BP: 2009-12-04 FTSE: 2009-11-23\n", "BP: 2009-12-07 FTSE: 2009-11-24\n", "BP: 2009-12-08 FTSE: 2009-11-25\n", "BP: 2009-12-09 FTSE: 2009-11-26\n", "BP: 2009-12-10 FTSE: 2009-11-27\n", "BP: 2009-12-11 FTSE: 2009-11-30\n", "BP: 2009-12-14 FTSE: 2009-12-01\n", "BP: 2009-12-15 FTSE: 2009-12-02\n", "BP: 2009-12-16 FTSE: 2009-12-03\n", "BP: 2009-12-17 FTSE: 2009-12-04\n", "BP: 2009-12-18 FTSE: 2009-12-07\n", "BP: 2009-12-21 FTSE: 2009-12-08\n", "BP: 2009-12-22 FTSE: 2009-12-09\n", "BP: 2009-12-23 FTSE: 2009-12-10\n", "BP: 2009-12-24 FTSE: 2009-12-11\n", "BP: 2009-12-28 FTSE: 2009-12-14\n", "BP: 2009-12-29 FTSE: 2009-12-15\n", "BP: 2009-12-30 FTSE: 2009-12-16\n", "BP: 2009-12-31 FTSE: 2009-12-17\n", "BP: 2010-01-04 FTSE: 2009-12-18\n", "BP: 2010-01-05 FTSE: 2009-12-21\n", "BP: 2010-01-06 FTSE: 2009-12-22\n", "BP: 2010-01-07 FTSE: 2009-12-23\n", "BP: 2010-01-08 FTSE: 2009-12-24\n", "BP: 2010-01-11 FTSE: 2009-12-29\n", "BP: 2010-01-12 FTSE: 2009-12-30\n", "BP: 2010-01-13 FTSE: 2009-12-31\n", "BP: 2010-01-14 FTSE: 2010-01-04\n", "BP: 2010-01-15 FTSE: 2010-01-05\n", "BP: 2010-01-19 FTSE: 2010-01-06\n", "BP: 2010-01-20 FTSE: 2010-01-07\n", "BP: 2010-01-21 FTSE: 2010-01-08\n", "BP: 2010-01-22 FTSE: 2010-01-11\n", "BP: 2010-01-25 FTSE: 2010-01-12\n", "BP: 2010-01-26 FTSE: 2010-01-13\n", "BP: 2010-01-27 FTSE: 2010-01-14\n", "BP: 2010-01-28 FTSE: 2010-01-15\n", "BP: 2010-01-29 FTSE: 2010-01-18\n", "BP: 2010-02-01 FTSE: 2010-01-19\n", "BP: 2010-02-02 FTSE: 2010-01-20\n", "BP: 2010-02-03 FTSE: 2010-01-21\n", "BP: 2010-02-04 FTSE: 2010-01-22\n", "BP: 2010-02-05 FTSE: 2010-01-25\n", "BP: 2010-02-08 FTSE: 2010-01-26\n", "BP: 2010-02-09 FTSE: 2010-01-27\n", "BP: 2010-02-10 FTSE: 2010-01-28\n", "BP: 2010-02-11 FTSE: 2010-01-29\n", "BP: 2010-02-12 FTSE: 2010-02-01\n", "BP: 2010-02-16 FTSE: 2010-02-02\n", "BP: 2010-02-17 FTSE: 2010-02-03\n", "BP: 2010-02-18 FTSE: 2010-02-04\n", "BP: 2010-02-19 FTSE: 2010-02-05\n", "BP: 2010-02-22 FTSE: 2010-02-08\n", "BP: 2010-02-23 FTSE: 2010-02-09\n", "BP: 2010-02-24 FTSE: 2010-02-10\n", "BP: 2010-02-25 FTSE: 2010-02-11\n", "BP: 2010-02-26 FTSE: 2010-02-12\n", "BP: 2010-03-01 FTSE: 2010-02-15\n", "BP: 2010-03-02 FTSE: 2010-02-16\n", "BP: 2010-03-03 FTSE: 2010-02-17\n", "BP: 2010-03-04 FTSE: 2010-02-18\n", "BP: 2010-03-05 FTSE: 2010-02-19\n", "BP: 2010-03-08 FTSE: 2010-02-22\n", "BP: 2010-03-09 FTSE: 2010-02-23\n", "BP: 2010-03-10 FTSE: 2010-02-24\n", "BP: 2010-03-11 FTSE: 2010-02-25\n", "BP: 2010-03-12 FTSE: 2010-02-26\n", "BP: 2010-03-15 FTSE: 2010-03-01\n", "BP: 2010-03-16 FTSE: 2010-03-02\n", "BP: 2010-03-17 FTSE: 2010-03-03\n", "BP: 2010-03-18 FTSE: 2010-03-04\n", "BP: 2010-03-19 FTSE: 2010-03-05\n", "BP: 2010-03-22 FTSE: 2010-03-08\n", "BP: 2010-03-23 FTSE: 2010-03-09\n", "BP: 2010-03-24 FTSE: 2010-03-10\n", "BP: 2010-03-25 FTSE: 2010-03-11\n", "BP: 2010-03-26 FTSE: 2010-03-12\n", "BP: 2010-03-29 FTSE: 2010-03-15\n", "BP: 2010-03-30 FTSE: 2010-03-16\n", "BP: 2010-03-31 FTSE: 2010-03-17\n", "BP: 2010-04-01 FTSE: 2010-03-18\n", "BP: 2010-04-05 FTSE: 2010-03-19\n", "BP: 2010-04-06 FTSE: 2010-03-22\n", "BP: 2010-04-07 FTSE: 2010-03-23\n", "BP: 2010-04-08 FTSE: 2010-03-24\n", "BP: 2010-04-09 FTSE: 2010-03-25\n", "BP: 2010-04-12 FTSE: 2010-03-26\n", "BP: 2010-04-13 FTSE: 2010-03-29\n", "BP: 2010-04-14 FTSE: 2010-03-30\n", "BP: 2010-04-15 FTSE: 2010-03-31\n", "BP: 2010-04-16 FTSE: 2010-04-01\n", "BP: 2010-04-19 FTSE: 2010-04-06\n", "BP: 2010-04-20 FTSE: 2010-04-07\n", "BP: 2010-04-21 FTSE: 2010-04-08\n", "BP: 2010-04-22 FTSE: 2010-04-09\n", "BP: 2010-04-23 FTSE: 2010-04-12\n", "BP: 2010-04-26 FTSE: 2010-04-13\n", "BP: 2010-04-27 FTSE: 2010-04-14\n", "BP: 2010-04-28 FTSE: 2010-04-15\n", "BP: 2010-04-29 FTSE: 2010-04-16\n", "BP: 2010-04-30 FTSE: 2010-04-21\n", "BP: 2010-05-03 FTSE: 2010-04-22\n", "BP: 2010-05-04 FTSE: 2010-04-23\n", "BP: 2010-05-05 FTSE: 2010-04-26\n", "BP: 2010-05-06 FTSE: 2010-04-27\n", "BP: 2010-05-07 FTSE: 2010-04-28\n", "BP: 2010-05-10 FTSE: 2010-04-29\n", "BP: 2010-05-11 FTSE: 2010-04-30\n", "BP: 2010-05-12 FTSE: 2010-05-04\n", "BP: 2010-05-13 FTSE: 2010-05-05\n", "BP: 2010-05-14 FTSE: 2010-05-06\n", "BP: 2010-05-17 FTSE: 2010-05-07\n", "BP: 2010-05-18 FTSE: 2010-05-10\n", "BP: 2010-05-19 FTSE: 2010-05-11\n", "BP: 2010-05-20 FTSE: 2010-05-13\n", "BP: 2010-05-21 FTSE: 2010-05-14\n", "BP: 2010-05-24 FTSE: 2010-05-17\n", "BP: 2010-05-25 FTSE: 2010-05-18\n", "BP: 2010-05-26 FTSE: 2010-05-19\n", "BP: 2010-05-27 FTSE: 2010-05-20\n", "BP: 2010-05-28 FTSE: 2010-05-21\n", "BP: 2010-06-01 FTSE: 2010-05-24\n", "BP: 2010-06-02 FTSE: 2010-05-25\n", "BP: 2010-06-03 FTSE: 2010-05-26\n", "BP: 2010-06-04 FTSE: 2010-05-27\n", "BP: 2010-06-07 FTSE: 2010-05-28\n", "BP: 2010-06-08 FTSE: 2010-06-01\n", "BP: 2010-06-09 FTSE: 2010-06-02\n", "BP: 2010-06-10 FTSE: 2010-06-03\n", "BP: 2010-06-11 FTSE: 2010-06-04\n", "BP: 2010-06-14 FTSE: 2010-06-07\n", "BP: 2010-06-15 FTSE: 2010-06-08\n", "BP: 2010-06-16 FTSE: 2010-06-09\n", "BP: 2010-06-17 FTSE: 2010-06-10\n", "BP: 2010-06-18 FTSE: 2010-06-11\n", "BP: 2010-06-21 FTSE: 2010-06-14\n", "BP: 2010-06-22 FTSE: 2010-06-15\n", "BP: 2010-06-23 FTSE: 2010-06-16\n", "BP: 2010-06-24 FTSE: 2010-06-17\n", "BP: 2010-06-25 FTSE: 2010-06-18\n", "BP: 2010-06-28 FTSE: 2010-06-21\n", "BP: 2010-06-29 FTSE: 2010-06-22\n", "BP: 2010-06-30 FTSE: 2010-06-23\n", "BP: 2010-07-01 FTSE: 2010-06-24\n", "BP: 2010-07-02 FTSE: 2010-06-25\n", "BP: 2010-07-06 FTSE: 2010-06-28\n", "BP: 2010-07-07 FTSE: 2010-06-29\n", "BP: 2010-07-08 FTSE: 2010-06-30\n", "BP: 2010-07-09 FTSE: 2010-07-01\n", "BP: 2010-07-12 FTSE: 2010-07-02\n", "BP: 2010-07-13 FTSE: 2010-07-05\n", "BP: 2010-07-14 FTSE: 2010-07-06\n", "BP: 2010-07-15 FTSE: 2010-07-07\n", "BP: 2010-07-16 FTSE: 2010-07-08\n", "BP: 2010-07-19 FTSE: 2010-07-09\n", "BP: 2010-07-20 FTSE: 2010-07-12\n", "BP: 2010-07-21 FTSE: 2010-07-13\n", "BP: 2010-07-22 FTSE: 2010-07-14\n", "BP: 2010-07-23 FTSE: 2010-07-15\n", "BP: 2010-07-26 FTSE: 2010-07-16\n", "BP: 2010-07-27 FTSE: 2010-07-19\n", "BP: 2010-07-28 FTSE: 2010-07-20\n", "BP: 2010-07-29 FTSE: 2010-07-21\n", "BP: 2010-07-30 FTSE: 2010-07-22\n", "BP: 2010-08-02 FTSE: 2010-07-23\n", "BP: 2010-08-03 FTSE: 2010-07-26\n", "BP: 2010-08-04 FTSE: 2010-07-27\n", "BP: 2010-08-05 FTSE: 2010-07-28\n", "BP: 2010-08-06 FTSE: 2010-07-29\n", "BP: 2010-08-09 FTSE: 2010-07-30\n", "BP: 2010-08-10 FTSE: 2010-08-02\n", "BP: 2010-08-11 FTSE: 2010-08-03\n", "BP: 2010-08-12 FTSE: 2010-08-04\n", "BP: 2010-08-13 FTSE: 2010-08-05\n", "BP: 2010-08-16 FTSE: 2010-08-06\n", "BP: 2010-08-17 FTSE: 2010-08-09\n", "BP: 2010-08-18 FTSE: 2010-08-10\n", "BP: 2010-08-19 FTSE: 2010-08-11\n", "BP: 2010-08-20 FTSE: 2010-08-12\n", "BP: 2010-08-23 FTSE: 2010-08-13\n", "BP: 2010-08-24 FTSE: 2010-08-16\n", "BP: 2010-08-25 FTSE: 2010-08-17\n", "BP: 2010-08-26 FTSE: 2010-08-18\n", "BP: 2010-08-27 FTSE: 2010-08-19\n", "BP: 2010-08-30 FTSE: 2010-08-20\n", "BP: 2010-08-31 FTSE: 2010-08-23\n", "BP: 2010-09-01 FTSE: 2010-08-24\n", "BP: 2010-09-02 FTSE: 2010-08-25\n", "BP: 2010-09-03 FTSE: 2010-08-26\n", "BP: 2010-09-07 FTSE: 2010-08-27\n", "BP: 2010-09-08 FTSE: 2010-08-31\n", "BP: 2010-09-09 FTSE: 2010-09-01\n", "BP: 2010-09-10 FTSE: 2010-09-02\n", "BP: 2010-09-13 FTSE: 2010-09-03\n", "BP: 2010-09-14 FTSE: 2010-09-06\n", "BP: 2010-09-15 FTSE: 2010-09-07\n", "BP: 2010-09-16 FTSE: 2010-09-08\n", "BP: 2010-09-17 FTSE: 2010-09-09\n", "BP: 2010-09-20 FTSE: 2010-09-10\n", "BP: 2010-09-21 FTSE: 2010-09-13\n", "BP: 2010-09-22 FTSE: 2010-09-14\n", "BP: 2010-09-23 FTSE: 2010-09-15\n", "BP: 2010-09-24 FTSE: 2010-09-16\n", "BP: 2010-09-27 FTSE: 2010-09-17\n", "BP: 2010-09-28 FTSE: 2010-09-20\n", "BP: 2010-09-29 FTSE: 2010-09-21\n", "BP: 2010-09-30 FTSE: 2010-09-22\n", "BP: 2010-10-01 FTSE: 2010-09-23\n", "BP: 2010-10-04 FTSE: 2010-09-24\n", "BP: 2010-10-05 FTSE: 2010-09-27\n", "BP: 2010-10-06 FTSE: 2010-09-28\n", "BP: 2010-10-07 FTSE: 2010-09-29\n", "BP: 2010-10-08 FTSE: 2010-09-30\n", "BP: 2010-10-11 FTSE: 2010-10-01\n", "BP: 2010-10-12 FTSE: 2010-10-04\n", "BP: 2010-10-13 FTSE: 2010-10-05\n", "BP: 2010-10-14 FTSE: 2010-10-06\n", "BP: 2010-10-15 FTSE: 2010-10-07\n", "BP: 2010-10-18 FTSE: 2010-10-08\n", "BP: 2010-10-19 FTSE: 2010-10-11\n", "BP: 2010-10-20 FTSE: 2010-10-12\n", "BP: 2010-10-21 FTSE: 2010-10-13\n", "BP: 2010-10-22 FTSE: 2010-10-14\n", "BP: 2010-10-25 FTSE: 2010-10-15\n", "BP: 2010-10-26 FTSE: 2010-10-18\n", "BP: 2010-10-27 FTSE: 2010-10-19\n", "BP: 2010-10-28 FTSE: 2010-10-20\n", "BP: 2010-10-29 FTSE: 2010-10-21\n", "BP: 2010-11-01 FTSE: 2010-10-22\n", "BP: 2010-11-02 FTSE: 2010-10-25\n", "BP: 2010-11-03 FTSE: 2010-10-26\n", "BP: 2010-11-04 FTSE: 2010-10-27\n", "BP: 2010-11-05 FTSE: 2010-10-28\n", "BP: 2010-11-08 FTSE: 2010-10-29\n", "BP: 2010-11-09 FTSE: 2010-11-01\n", "BP: 2010-11-10 FTSE: 2010-11-02\n", "BP: 2010-11-11 FTSE: 2010-11-03\n", "BP: 2010-11-12 FTSE: 2010-11-04\n", "BP: 2010-11-15 FTSE: 2010-11-05\n", "BP: 2010-11-16 FTSE: 2010-11-08\n", "BP: 2010-11-17 FTSE: 2010-11-09\n", "BP: 2010-11-18 FTSE: 2010-11-10\n", "BP: 2010-11-19 FTSE: 2010-11-11\n", "BP: 2010-11-22 FTSE: 2010-11-12\n", "BP: 2010-11-23 FTSE: 2010-11-15\n", "BP: 2010-11-24 FTSE: 2010-11-16\n", "BP: 2010-11-26 FTSE: 2010-11-17\n", "BP: 2010-11-29 FTSE: 2010-11-18\n", "BP: 2010-11-30 FTSE: 2010-11-19\n", "BP: 2010-12-01 FTSE: 2010-11-22\n", "BP: 2010-12-02 FTSE: 2010-11-23\n", "BP: 2010-12-03 FTSE: 2010-11-24\n", "BP: 2010-12-06 FTSE: 2010-11-25\n", "BP: 2010-12-07 FTSE: 2010-11-26\n", "BP: 2010-12-08 FTSE: 2010-11-29\n", "BP: 2010-12-09 FTSE: 2010-11-30\n", "BP: 2010-12-10 FTSE: 2010-12-01\n", "BP: 2010-12-13 FTSE: 2010-12-02\n", "BP: 2010-12-14 FTSE: 2010-12-03\n", "BP: 2010-12-15 FTSE: 2010-12-06\n", "BP: 2010-12-16 FTSE: 2010-12-07\n", "BP: 2010-12-17 FTSE: 2010-12-08\n", "BP: 2010-12-20 FTSE: 2010-12-09\n", "BP: 2010-12-21 FTSE: 2010-12-10\n", "BP: 2010-12-22 FTSE: 2010-12-13\n", "BP: 2010-12-23 FTSE: 2010-12-14\n", "BP: 2010-12-27 FTSE: 2010-12-15\n", "BP: 2010-12-28 FTSE: 2010-12-16\n", "BP: 2010-12-29 FTSE: 2010-12-17\n", "BP: 2010-12-30 FTSE: 2010-12-20\n", "BP: 2010-12-31 FTSE: 2010-12-21\n", "BP: 2011-01-03 FTSE: 2010-12-22\n", "BP: 2011-01-04 FTSE: 2010-12-23\n", "BP: 2011-01-05 FTSE: 2010-12-24\n", "BP: 2011-01-06 FTSE: 2010-12-29\n", "BP: 2011-01-07 FTSE: 2010-12-30\n", "BP: 2011-01-10 FTSE: 2010-12-31\n", "BP: 2011-01-11 FTSE: 2011-01-04\n", "BP: 2011-01-12 FTSE: 2011-01-05\n", "BP: 2011-01-13 FTSE: 2011-01-06\n", "BP: 2011-01-14 FTSE: 2011-01-07\n", "BP: 2011-01-18 FTSE: 2011-01-10\n", "BP: 2011-01-19 FTSE: 2011-01-11\n", "BP: 2011-01-20 FTSE: 2011-01-12\n", "BP: 2011-01-21 FTSE: 2011-01-13\n", "BP: 2011-01-24 FTSE: 2011-01-14\n", "BP: 2011-01-25 FTSE: 2011-01-17\n", "BP: 2011-01-26 FTSE: 2011-01-18\n", "BP: 2011-01-27 FTSE: 2011-01-19\n", "BP: 2011-01-28 FTSE: 2011-01-20\n", "BP: 2011-01-31 FTSE: 2011-01-21\n", "BP: 2011-02-01 FTSE: 2011-01-24\n", "BP: 2011-02-02 FTSE: 2011-01-25\n", "BP: 2011-02-03 FTSE: 2011-01-26\n", "BP: 2011-02-04 FTSE: 2011-01-27\n", "BP: 2011-02-07 FTSE: 2011-01-28\n", "BP: 2011-02-08 FTSE: 2011-01-31\n", "BP: 2011-02-09 FTSE: 2011-02-01\n", "BP: 2011-02-10 FTSE: 2011-02-02\n", "BP: 2011-02-11 FTSE: 2011-02-03\n", "BP: 2011-02-14 FTSE: 2011-02-04\n", "BP: 2011-02-15 FTSE: 2011-02-07\n", "BP: 2011-02-16 FTSE: 2011-02-08\n", "BP: 2011-02-17 FTSE: 2011-02-09\n", "BP: 2011-02-18 FTSE: 2011-02-10\n", "BP: 2011-02-22 FTSE: 2011-02-11\n", "BP: 2011-02-23 FTSE: 2011-02-14\n", "BP: 2011-02-24 FTSE: 2011-02-15\n", "BP: 2011-02-25 FTSE: 2011-02-16\n", "BP: 2011-02-28 FTSE: 2011-02-17\n", "BP: 2011-03-01 FTSE: 2011-02-18\n", "BP: 2011-03-02 FTSE: 2011-02-21\n", "BP: 2011-03-03 FTSE: 2011-02-22\n", "BP: 2011-03-04 FTSE: 2011-02-23\n", "BP: 2011-03-07 FTSE: 2011-02-24\n", "BP: 2011-03-08 FTSE: 2011-02-25\n", "BP: 2011-03-09 FTSE: 2011-02-28\n", "BP: 2011-03-10 FTSE: 2011-03-01\n", "BP: 2011-03-11 FTSE: 2011-03-02\n", "BP: 2011-03-14 FTSE: 2011-03-03\n", "BP: 2011-03-15 FTSE: 2011-03-04\n", "BP: 2011-03-16 FTSE: 2011-03-07\n", "BP: 2011-03-17 FTSE: 2011-03-08\n", "BP: 2011-03-18 FTSE: 2011-03-09\n", "BP: 2011-03-21 FTSE: 2011-03-10\n", "BP: 2011-03-22 FTSE: 2011-03-11\n", "BP: 2011-03-23 FTSE: 2011-03-14\n", "BP: 2011-03-24 FTSE: 2011-03-15\n", "BP: 2011-03-25 FTSE: 2011-03-16\n", "BP: 2011-03-28 FTSE: 2011-03-17\n", "BP: 2011-03-29 FTSE: 2011-03-18\n", "BP: 2011-03-30 FTSE: 2011-03-21\n", "BP: 2011-03-31 FTSE: 2011-03-22\n", "BP: 2011-04-01 FTSE: 2011-03-23\n", "BP: 2011-04-04 FTSE: 2011-03-24\n", "BP: 2011-04-05 FTSE: 2011-03-25\n", "BP: 2011-04-06 FTSE: 2011-03-28\n", "BP: 2011-04-07 FTSE: 2011-03-29\n", "BP: 2011-04-08 FTSE: 2011-03-30\n", "BP: 2011-04-11 FTSE: 2011-03-31\n", "BP: 2011-04-12 FTSE: 2011-04-01\n", "BP: 2011-04-13 FTSE: 2011-04-04\n", "BP: 2011-04-14 FTSE: 2011-04-05\n", "BP: 2011-04-15 FTSE: 2011-04-06\n", "BP: 2011-04-18 FTSE: 2011-04-07\n", "BP: 2011-04-19 FTSE: 2011-04-08\n", "BP: 2011-04-20 FTSE: 2011-04-11\n", "BP: 2011-04-21 FTSE: 2011-04-12\n", "BP: 2011-04-25 FTSE: 2011-04-13\n", "BP: 2011-04-26 FTSE: 2011-04-14\n", "BP: 2011-04-27 FTSE: 2011-04-15\n", "BP: 2011-04-28 FTSE: 2011-04-18\n", "BP: 2011-04-29 FTSE: 2011-04-19\n", "BP: 2011-05-02 FTSE: 2011-04-20\n", "BP: 2011-05-03 FTSE: 2011-04-21\n", "BP: 2011-05-04 FTSE: 2011-04-26\n", "BP: 2011-05-05 FTSE: 2011-04-27\n", "BP: 2011-05-06 FTSE: 2011-04-28\n", "BP: 2011-05-09 FTSE: 2011-05-03\n", "BP: 2011-05-10 FTSE: 2011-05-04\n", "BP: 2011-05-11 FTSE: 2011-05-05\n", "BP: 2011-05-12 FTSE: 2011-05-06\n", "BP: 2011-05-13 FTSE: 2011-05-09\n", "BP: 2011-05-16 FTSE: 2011-05-10\n", "BP: 2011-05-17 FTSE: 2011-05-11\n", "BP: 2011-05-18 FTSE: 2011-05-12\n", "BP: 2011-05-19 FTSE: 2011-05-13\n", "BP: 2011-05-20 FTSE: 2011-05-16\n", "BP: 2011-05-23 FTSE: 2011-05-17\n", "BP: 2011-05-24 FTSE: 2011-05-18\n", "BP: 2011-05-25 FTSE: 2011-05-19\n", "BP: 2011-05-26 FTSE: 2011-05-20\n", "BP: 2011-05-27 FTSE: 2011-05-23\n", "BP: 2011-05-31 FTSE: 2011-05-24\n", "BP: 2011-06-01 FTSE: 2011-05-25\n", "BP: 2011-06-02 FTSE: 2011-05-26\n", "BP: 2011-06-03 FTSE: 2011-05-27\n", "BP: 2011-06-06 FTSE: 2011-05-31\n", "BP: 2011-06-07 FTSE: 2011-06-01\n", "BP: 2011-06-08 FTSE: 2011-06-02\n", "BP: 2011-06-09 FTSE: 2011-06-03\n", "BP: 2011-06-10 FTSE: 2011-06-06\n", "BP: 2011-06-13 FTSE: 2011-06-07\n", "BP: 2011-06-14 FTSE: 2011-06-08\n", "BP: 2011-06-15 FTSE: 2011-06-09\n", "BP: 2011-06-16 FTSE: 2011-06-10\n", "BP: 2011-06-17 FTSE: 2011-06-13\n", "BP: 2011-06-20 FTSE: 2011-06-14\n", "BP: 2011-06-21 FTSE: 2011-06-15\n", "BP: 2011-06-22 FTSE: 2011-06-16\n", "BP: 2011-06-23 FTSE: 2011-06-17\n", "BP: 2011-06-24 FTSE: 2011-06-20\n", "BP: 2011-06-27 FTSE: 2011-06-21\n", "BP: 2011-06-28 FTSE: 2011-06-22\n", "BP: 2011-06-29 FTSE: 2011-06-23\n", "BP: 2011-06-30 FTSE: 2011-06-24\n", "BP: 2011-07-01 FTSE: 2011-06-27\n", "BP: 2011-07-05 FTSE: 2011-06-28\n", "BP: 2011-07-06 FTSE: 2011-06-29\n", "BP: 2011-07-07 FTSE: 2011-06-30\n", "BP: 2011-07-08 FTSE: 2011-07-01\n", "BP: 2011-07-11 FTSE: 2011-07-04\n", "BP: 2011-07-12 FTSE: 2011-07-05\n", "BP: 2011-07-13 FTSE: 2011-07-06\n", "BP: 2011-07-14 FTSE: 2011-07-07\n", "BP: 2011-07-15 FTSE: 2011-07-08\n", "BP: 2011-07-18 FTSE: 2011-07-11\n", "BP: 2011-07-19 FTSE: 2011-07-12\n", "BP: 2011-07-20 FTSE: 2011-07-13\n", "BP: 2011-07-21 FTSE: 2011-07-14\n", "BP: 2011-07-22 FTSE: 2011-07-15\n", "BP: 2011-07-25 FTSE: 2011-07-18\n", "BP: 2011-07-26 FTSE: 2011-07-19\n", "BP: 2011-07-27 FTSE: 2011-07-20\n", "BP: 2011-07-28 FTSE: 2011-07-21\n", "BP: 2011-07-29 FTSE: 2011-07-22\n", "BP: 2011-08-01 FTSE: 2011-07-25\n", "BP: 2011-08-02 FTSE: 2011-07-26\n", "BP: 2011-08-03 FTSE: 2011-07-27\n", "BP: 2011-08-04 FTSE: 2011-07-28\n", "BP: 2011-08-05 FTSE: 2011-07-29\n", "BP: 2011-08-08 FTSE: 2011-08-01\n", "BP: 2011-08-09 FTSE: 2011-08-02\n", "BP: 2011-08-10 FTSE: 2011-08-03\n", "BP: 2011-08-11 FTSE: 2011-08-04\n", "BP: 2011-08-12 FTSE: 2011-08-05\n", "BP: 2011-08-15 FTSE: 2011-08-08\n", "BP: 2011-08-16 FTSE: 2011-08-09\n", "BP: 2011-08-17 FTSE: 2011-08-10\n", "BP: 2011-08-18 FTSE: 2011-08-11\n", "BP: 2011-08-19 FTSE: 2011-08-12\n", "BP: 2011-08-22 FTSE: 2011-08-15\n", "BP: 2011-08-23 FTSE: 2011-08-16\n", "BP: 2011-08-24 FTSE: 2011-08-17\n", "BP: 2011-08-25 FTSE: 2011-08-18\n", "BP: 2011-08-26 FTSE: 2011-08-19\n", "BP: 2011-08-29 FTSE: 2011-08-22\n", "BP: 2011-08-30 FTSE: 2011-08-23\n", "BP: 2011-08-31 FTSE: 2011-08-24\n", "BP: 2011-09-01 FTSE: 2011-08-25\n", "BP: 2011-09-02 FTSE: 2011-08-26\n", "BP: 2011-09-06 FTSE: 2011-08-30\n", "BP: 2011-09-07 FTSE: 2011-08-31\n", "BP: 2011-09-08 FTSE: 2011-09-01\n", "BP: 2011-09-09 FTSE: 2011-09-02\n", "BP: 2011-09-12 FTSE: 2011-09-05\n", "BP: 2011-09-13 FTSE: 2011-09-06\n", "BP: 2011-09-14 FTSE: 2011-09-07\n", "BP: 2011-09-15 FTSE: 2011-09-08\n", "BP: 2011-09-16 FTSE: 2011-09-09\n", "BP: 2011-09-19 FTSE: 2011-09-12\n", "BP: 2011-09-20 FTSE: 2011-09-13\n", "BP: 2011-09-21 FTSE: 2011-09-14\n", "BP: 2011-09-22 FTSE: 2011-09-15\n", "BP: 2011-09-23 FTSE: 2011-09-16\n", "BP: 2011-09-26 FTSE: 2011-09-19\n", "BP: 2011-09-27 FTSE: 2011-09-20\n", "BP: 2011-09-28 FTSE: 2011-09-21\n", "BP: 2011-09-29 FTSE: 2011-09-22\n", "BP: 2011-09-30 FTSE: 2011-09-23\n", "BP: 2011-10-03 FTSE: 2011-09-26\n", "BP: 2011-10-04 FTSE: 2011-09-27\n", "BP: 2011-10-05 FTSE: 2011-09-28\n", "BP: 2011-10-06 FTSE: 2011-09-29\n", "BP: 2011-10-07 FTSE: 2011-09-30\n", "BP: 2011-10-10 FTSE: 2011-10-03\n", "BP: 2011-10-11 FTSE: 2011-10-04\n", "BP: 2011-10-12 FTSE: 2011-10-05\n", "BP: 2011-10-13 FTSE: 2011-10-06\n", "BP: 2011-10-14 FTSE: 2011-10-07\n", "BP: 2011-10-17 FTSE: 2011-10-10\n", "BP: 2011-10-18 FTSE: 2011-10-11\n", "BP: 2011-10-19 FTSE: 2011-10-12\n", "BP: 2011-10-20 FTSE: 2011-10-13\n", "BP: 2011-10-21 FTSE: 2011-10-14\n", "BP: 2011-10-24 FTSE: 2011-10-17\n", "BP: 2011-10-25 FTSE: 2011-10-18\n", "BP: 2011-10-26 FTSE: 2011-10-19\n", "BP: 2011-10-27 FTSE: 2011-10-20\n", "BP: 2011-10-28 FTSE: 2011-10-21\n", "BP: 2011-10-31 FTSE: 2011-10-24\n", "BP: 2011-11-01 FTSE: 2011-10-25\n", "BP: 2011-11-02 FTSE: 2011-10-26\n", "BP: 2011-11-03 FTSE: 2011-10-27\n", "BP: 2011-11-04 FTSE: 2011-10-28\n", "BP: 2011-11-07 FTSE: 2011-10-31\n", "BP: 2011-11-08 FTSE: 2011-11-01\n", "BP: 2011-11-09 FTSE: 2011-11-02\n", "BP: 2011-11-10 FTSE: 2011-11-03\n", "BP: 2011-11-11 FTSE: 2011-11-04\n", "BP: 2011-11-14 FTSE: 2011-11-07\n", "BP: 2011-11-15 FTSE: 2011-11-08\n", "BP: 2011-11-16 FTSE: 2011-11-09\n", "BP: 2011-11-17 FTSE: 2011-11-10\n", "BP: 2011-11-18 FTSE: 2011-11-11\n", "BP: 2011-11-21 FTSE: 2011-11-14\n", "BP: 2011-11-22 FTSE: 2011-11-15\n", "BP: 2011-11-23 FTSE: 2011-11-16\n", "BP: 2011-11-25 FTSE: 2011-11-17\n", "BP: 2011-11-28 FTSE: 2011-11-18\n", "BP: 2011-11-29 FTSE: 2011-11-21\n", "BP: 2011-11-30 FTSE: 2011-11-22\n", "BP: 2011-12-01 FTSE: 2011-11-23\n", "BP: 2011-12-02 FTSE: 2011-11-24\n", "BP: 2011-12-05 FTSE: 2011-11-25\n", "BP: 2011-12-06 FTSE: 2011-11-28\n", "BP: 2011-12-07 FTSE: 2011-11-29\n", "BP: 2011-12-08 FTSE: 2011-11-30\n", "BP: 2011-12-09 FTSE: 2011-12-01\n", "BP: 2011-12-12 FTSE: 2011-12-02\n", "BP: 2011-12-13 FTSE: 2011-12-05\n", "BP: 2011-12-14 FTSE: 2011-12-06\n", "BP: 2011-12-15 FTSE: 2011-12-07\n", "BP: 2011-12-16 FTSE: 2011-12-08\n", "BP: 2011-12-19 FTSE: 2011-12-09\n", "BP: 2011-12-20 FTSE: 2011-12-12\n", "BP: 2011-12-21 FTSE: 2011-12-13\n", "BP: 2011-12-22 FTSE: 2011-12-14\n", "BP: 2011-12-23 FTSE: 2011-12-15\n", "BP: 2011-12-27 FTSE: 2011-12-16\n", "BP: 2011-12-28 FTSE: 2011-12-19\n", "BP: 2011-12-29 FTSE: 2011-12-20\n", "BP: 2011-12-30 FTSE: 2011-12-21\n", "BP: 2012-01-03 FTSE: 2011-12-22\n", "BP: 2012-01-04 FTSE: 2011-12-23\n", "BP: 2012-01-05 FTSE: 2011-12-28\n", "BP: 2012-01-06 FTSE: 2011-12-29\n", "BP: 2012-01-09 FTSE: 2011-12-30\n", "BP: 2012-01-10 FTSE: 2012-01-03\n", "BP: 2012-01-11 FTSE: 2012-01-04\n", "BP: 2012-01-12 FTSE: 2012-01-05\n", "BP: 2012-01-13 FTSE: 2012-01-06\n", "BP: 2012-01-17 FTSE: 2012-01-09\n", "BP: 2012-01-18 FTSE: 2012-01-10\n", "BP: 2012-01-19 FTSE: 2012-01-11\n", "BP: 2012-01-20 FTSE: 2012-01-12\n", "BP: 2012-01-23 FTSE: 2012-01-13\n", "BP: 2012-01-24 FTSE: 2012-01-16\n", "BP: 2012-01-25 FTSE: 2012-01-17\n", "BP: 2012-01-26 FTSE: 2012-01-18\n", "BP: 2012-01-27 FTSE: 2012-01-19\n", "BP: 2012-01-30 FTSE: 2012-01-20\n", "BP: 2012-01-31 FTSE: 2012-01-23\n", "BP: 2012-02-01 FTSE: 2012-01-24\n", "BP: 2012-02-02 FTSE: 2012-01-25\n", "BP: 2012-02-03 FTSE: 2012-01-26\n", "BP: 2012-02-06 FTSE: 2012-01-27\n", "BP: 2012-02-07 FTSE: 2012-01-30\n", "BP: 2012-02-08 FTSE: 2012-01-31\n", "BP: 2012-02-09 FTSE: 2012-02-01\n", "BP: 2012-02-10 FTSE: 2012-02-02\n", "BP: 2012-02-13 FTSE: 2012-02-03\n", "BP: 2012-02-14 FTSE: 2012-02-06\n", "BP: 2012-02-15 FTSE: 2012-02-07\n", "BP: 2012-02-16 FTSE: 2012-02-08\n", "BP: 2012-02-17 FTSE: 2012-02-09\n", "BP: 2012-02-21 FTSE: 2012-02-10\n", "BP: 2012-02-22 FTSE: 2012-02-13\n", "BP: 2012-02-23 FTSE: 2012-02-14\n", "BP: 2012-02-24 FTSE: 2012-02-15\n", "BP: 2012-02-27 FTSE: 2012-02-16\n", "BP: 2012-02-28 FTSE: 2012-02-17\n", "BP: 2012-02-29 FTSE: 2012-02-20\n", "BP: 2012-03-01 FTSE: 2012-02-21\n", "BP: 2012-03-02 FTSE: 2012-02-22\n", "BP: 2012-03-05 FTSE: 2012-02-23\n", "BP: 2012-03-06 FTSE: 2012-02-24\n", "BP: 2012-03-07 FTSE: 2012-02-27\n", "BP: 2012-03-08 FTSE: 2012-02-28\n", "BP: 2012-03-09 FTSE: 2012-02-29\n", "BP: 2012-03-12 FTSE: 2012-03-01\n", "BP: 2012-03-13 FTSE: 2012-03-02\n", "BP: 2012-03-14 FTSE: 2012-03-05\n", "BP: 2012-03-15 FTSE: 2012-03-06\n", "BP: 2012-03-16 FTSE: 2012-03-07\n", "BP: 2012-03-19 FTSE: 2012-03-08\n", "BP: 2012-03-20 FTSE: 2012-03-09\n", "BP: 2012-03-21 FTSE: 2012-03-12\n", "BP: 2012-03-22 FTSE: 2012-03-13\n", "BP: 2012-03-23 FTSE: 2012-03-14\n", "BP: 2012-03-26 FTSE: 2012-03-15\n", "BP: 2012-03-27 FTSE: 2012-03-16\n", "BP: 2012-03-28 FTSE: 2012-03-19\n", "BP: 2012-03-29 FTSE: 2012-03-20\n", "BP: 2012-03-30 FTSE: 2012-03-21\n", "BP: 2012-04-02 FTSE: 2012-03-22\n", "BP: 2012-04-03 FTSE: 2012-03-23\n", "BP: 2012-04-04 FTSE: 2012-03-26\n", "BP: 2012-04-05 FTSE: 2012-03-27\n", "BP: 2012-04-09 FTSE: 2012-03-28\n", "BP: 2012-04-10 FTSE: 2012-03-29\n", "BP: 2012-04-11 FTSE: 2012-03-30\n", "BP: 2012-04-12 FTSE: 2012-04-02\n", "BP: 2012-04-13 FTSE: 2012-04-03\n", "BP: 2012-04-16 FTSE: 2012-04-04\n", "BP: 2012-04-17 FTSE: 2012-04-05\n", "BP: 2012-04-18 FTSE: 2012-04-10\n", "BP: 2012-04-19 FTSE: 2012-04-11\n", "BP: 2012-04-20 FTSE: 2012-04-12\n", "BP: 2012-04-23 FTSE: 2012-04-13\n", "BP: 2012-04-24 FTSE: 2012-04-16\n", "BP: 2012-04-25 FTSE: 2012-04-17\n", "BP: 2012-04-26 FTSE: 2012-04-18\n", "BP: 2012-04-27 FTSE: 2012-04-19\n", "BP: 2012-04-30 FTSE: 2012-04-20\n", "BP: 2012-05-01 FTSE: 2012-04-23\n", "BP: 2012-05-02 FTSE: 2012-04-24\n", "BP: 2012-05-03 FTSE: 2012-04-25\n", "BP: 2012-05-04 FTSE: 2012-04-26\n", "BP: 2012-05-07 FTSE: 2012-04-27\n", "BP: 2012-05-08 FTSE: 2012-04-30\n", "BP: 2012-05-09 FTSE: 2012-05-01\n", "BP: 2012-05-10 FTSE: 2012-05-02\n", "BP: 2012-05-11 FTSE: 2012-05-03\n", "BP: 2012-05-14 FTSE: 2012-05-04\n", "BP: 2012-05-15 FTSE: 2012-05-08\n", "BP: 2012-05-16 FTSE: 2012-05-09\n", "BP: 2012-05-17 FTSE: 2012-05-10\n", "BP: 2012-05-18 FTSE: 2012-05-11\n", "BP: 2012-05-21 FTSE: 2012-05-14\n", "BP: 2012-05-22 FTSE: 2012-05-15\n", "BP: 2012-05-23 FTSE: 2012-05-16\n", "BP: 2012-05-24 FTSE: 2012-05-17\n", "BP: 2012-05-25 FTSE: 2012-05-18\n", "BP: 2012-05-29 FTSE: 2012-05-21\n", "BP: 2012-05-30 FTSE: 2012-05-22\n", "BP: 2012-05-31 FTSE: 2012-05-23\n", "BP: 2012-06-01 FTSE: 2012-05-24\n", "BP: 2012-06-04 FTSE: 2012-05-25\n", "BP: 2012-06-05 FTSE: 2012-05-28\n", "BP: 2012-06-06 FTSE: 2012-05-29\n", "BP: 2012-06-07 FTSE: 2012-05-30\n", "BP: 2012-06-08 FTSE: 2012-05-31\n", "BP: 2012-06-11 FTSE: 2012-06-01\n", "BP: 2012-06-12 FTSE: 2012-06-06\n", "BP: 2012-06-13 FTSE: 2012-06-07\n", "BP: 2012-06-14 FTSE: 2012-06-08\n", "BP: 2012-06-15 FTSE: 2012-06-11\n", "BP: 2012-06-18 FTSE: 2012-06-12\n", "BP: 2012-06-19 FTSE: 2012-06-13\n", "BP: 2012-06-20 FTSE: 2012-06-14\n", "BP: 2012-06-21 FTSE: 2012-06-15\n", "BP: 2012-06-22 FTSE: 2012-06-18\n", "BP: 2012-06-25 FTSE: 2012-06-19\n", "BP: 2012-06-26 FTSE: 2012-06-20\n", "BP: 2012-06-27 FTSE: 2012-06-21\n", "BP: 2012-06-28 FTSE: 2012-06-22\n", "BP: 2012-06-29 FTSE: 2012-06-25\n", "BP: 2012-07-02 FTSE: 2012-06-26\n", "BP: 2012-07-03 FTSE: 2012-06-27\n", "BP: 2012-07-05 FTSE: 2012-06-28\n", "BP: 2012-07-06 FTSE: 2012-06-29\n", "BP: 2012-07-09 FTSE: 2012-07-02\n", "BP: 2012-07-10 FTSE: 2012-07-03\n", "BP: 2012-07-11 FTSE: 2012-07-04\n", "BP: 2012-07-12 FTSE: 2012-07-05\n", "BP: 2012-07-13 FTSE: 2012-07-06\n", "BP: 2012-07-16 FTSE: 2012-07-09\n", "BP: 2012-07-17 FTSE: 2012-07-10\n", "BP: 2012-07-18 FTSE: 2012-07-11\n", "BP: 2012-07-19 FTSE: 2012-07-12\n", "BP: 2012-07-20 FTSE: 2012-07-13\n", "BP: 2012-07-23 FTSE: 2012-07-16\n", "BP: 2012-07-24 FTSE: 2012-07-17\n", "BP: 2012-07-25 FTSE: 2012-07-18\n", "BP: 2012-07-26 FTSE: 2012-07-19\n", "BP: 2012-07-27 FTSE: 2012-07-20\n", "BP: 2012-07-30 FTSE: 2012-07-23\n", "BP: 2012-07-31 FTSE: 2012-07-24\n", "BP: 2012-08-01 FTSE: 2012-07-25\n", "BP: 2012-08-02 FTSE: 2012-07-26\n", "BP: 2012-08-03 FTSE: 2012-07-27\n", "BP: 2012-08-06 FTSE: 2012-07-30\n", "BP: 2012-08-07 FTSE: 2012-07-31\n", "BP: 2012-08-08 FTSE: 2012-08-01\n", "BP: 2012-08-09 FTSE: 2012-08-02\n", "BP: 2012-08-10 FTSE: 2012-08-03\n", "BP: 2012-08-13 FTSE: 2012-08-06\n", "BP: 2012-08-14 FTSE: 2012-08-07\n", "BP: 2012-08-15 FTSE: 2012-08-08\n", "BP: 2012-08-16 FTSE: 2012-08-09\n", "BP: 2012-08-17 FTSE: 2012-08-10\n", "BP: 2012-08-20 FTSE: 2012-08-13\n", "BP: 2012-08-21 FTSE: 2012-08-14\n", "BP: 2012-08-22 FTSE: 2012-08-15\n", "BP: 2012-08-23 FTSE: 2012-08-16\n", "BP: 2012-08-24 FTSE: 2012-08-17\n", "BP: 2012-08-27 FTSE: 2012-08-20\n", "BP: 2012-08-28 FTSE: 2012-08-21\n", "BP: 2012-08-29 FTSE: 2012-08-22\n", "BP: 2012-08-30 FTSE: 2012-08-23\n", "BP: 2012-08-31 FTSE: 2012-08-24\n", "BP: 2012-09-04 FTSE: 2012-08-28\n", "BP: 2012-09-05 FTSE: 2012-08-29\n", "BP: 2012-09-06 FTSE: 2012-08-30\n", "BP: 2012-09-07 FTSE: 2012-08-31\n", "BP: 2012-09-10 FTSE: 2012-09-03\n", "BP: 2012-09-11 FTSE: 2012-09-04\n", "BP: 2012-09-12 FTSE: 2012-09-05\n", "BP: 2012-09-13 FTSE: 2012-09-06\n", "BP: 2012-09-14 FTSE: 2012-09-07\n", "BP: 2012-09-17 FTSE: 2012-09-10\n", "BP: 2012-09-18 FTSE: 2012-09-11\n", "BP: 2012-09-19 FTSE: 2012-09-12\n", "BP: 2012-09-20 FTSE: 2012-09-13\n", "BP: 2012-09-21 FTSE: 2012-09-14\n", "BP: 2012-09-24 FTSE: 2012-09-17\n", "BP: 2012-09-25 FTSE: 2012-09-18\n", "BP: 2012-09-26 FTSE: 2012-09-19\n", "BP: 2012-09-27 FTSE: 2012-09-20\n", "BP: 2012-09-28 FTSE: 2012-09-21\n", "BP: 2012-10-01 FTSE: 2012-09-24\n", "BP: 2012-10-02 FTSE: 2012-09-25\n", "BP: 2012-10-03 FTSE: 2012-09-26\n", "BP: 2012-10-04 FTSE: 2012-09-27\n", "BP: 2012-10-05 FTSE: 2012-09-28\n", "BP: 2012-10-08 FTSE: 2012-10-01\n", "BP: 2012-10-09 FTSE: 2012-10-02\n", "BP: 2012-10-10 FTSE: 2012-10-03\n", "BP: 2012-10-11 FTSE: 2012-10-04\n", "BP: 2012-10-12 FTSE: 2012-10-05\n", "BP: 2012-10-15 FTSE: 2012-10-08\n", "BP: 2012-10-16 FTSE: 2012-10-09\n", "BP: 2012-10-17 FTSE: 2012-10-10\n", "BP: 2012-10-18 FTSE: 2012-10-11\n", "BP: 2012-10-19 FTSE: 2012-10-12\n", "BP: 2012-10-22 FTSE: 2012-10-15\n", "BP: 2012-10-23 FTSE: 2012-10-16\n", "BP: 2012-10-24 FTSE: 2012-10-17\n", "BP: 2012-10-25 FTSE: 2012-10-18\n", "BP: 2012-10-26 FTSE: 2012-10-19\n", "BP: 2012-10-31 FTSE: 2012-10-22\n", "BP: 2012-11-01 FTSE: 2012-10-23\n", "BP: 2012-11-02 FTSE: 2012-10-24\n", "BP: 2012-11-05 FTSE: 2012-10-25\n", "BP: 2012-11-06 FTSE: 2012-10-26\n", "BP: 2012-11-07 FTSE: 2012-10-29\n", "BP: 2012-11-08 FTSE: 2012-10-30\n", "BP: 2012-11-09 FTSE: 2012-10-31\n", "BP: 2012-11-12 FTSE: 2012-11-01\n", "BP: 2012-11-13 FTSE: 2012-11-02\n", "BP: 2012-11-14 FTSE: 2012-11-05\n", "BP: 2012-11-15 FTSE: 2012-11-06\n", "BP: 2012-11-16 FTSE: 2012-11-07\n", "BP: 2012-11-19 FTSE: 2012-11-08\n", "BP: 2012-11-20 FTSE: 2012-11-09\n", "BP: 2012-11-21 FTSE: 2012-11-12\n", "BP: 2012-11-23 FTSE: 2012-11-13\n", "BP: 2012-11-26 FTSE: 2012-11-14\n", "BP: 2012-11-27 FTSE: 2012-11-15\n", "BP: 2012-11-28 FTSE: 2012-11-16\n", "BP: 2012-11-29 FTSE: 2012-11-19\n", "BP: 2012-11-30 FTSE: 2012-11-20\n", "BP: 2012-12-03 FTSE: 2012-11-21\n", "BP: 2012-12-04 FTSE: 2012-11-22\n", "BP: 2012-12-05 FTSE: 2012-11-23\n", "BP: 2012-12-06 FTSE: 2012-11-26\n", "BP: 2012-12-07 FTSE: 2012-11-27\n", "BP: 2012-12-10 FTSE: 2012-11-28\n", "BP: 2012-12-11 FTSE: 2012-11-29\n", "BP: 2012-12-12 FTSE: 2012-11-30\n", "BP: 2012-12-13 FTSE: 2012-12-03\n", "BP: 2012-12-14 FTSE: 2012-12-04\n", "BP: 2012-12-17 FTSE: 2012-12-05\n", "BP: 2012-12-18 FTSE: 2012-12-06\n", "BP: 2012-12-19 FTSE: 2012-12-07\n", "BP: 2012-12-20 FTSE: 2012-12-10\n", "BP: 2012-12-21 FTSE: 2012-12-11\n", "BP: 2012-12-24 FTSE: 2012-12-12\n", "BP: 2012-12-26 FTSE: 2012-12-13\n", "BP: 2012-12-27 FTSE: 2012-12-14\n", "BP: 2012-12-28 FTSE: 2012-12-17\n", "BP: 2012-12-31 FTSE: 2012-12-18\n", "BP: 2013-01-02 FTSE: 2012-12-19\n", "BP: 2013-01-03 FTSE: 2012-12-20\n", "BP: 2013-01-04 FTSE: 2012-12-21\n", "BP: 2013-01-07 FTSE: 2012-12-24\n", "BP: 2013-01-08 FTSE: 2012-12-27\n", "BP: 2013-01-09 FTSE: 2012-12-28\n", "BP: 2013-01-10 FTSE: 2012-12-31\n", "BP: 2013-01-11 FTSE: 2013-01-02\n", "BP: 2013-01-14 FTSE: 2013-01-03\n", "BP: 2013-01-15 FTSE: 2013-01-04\n", "BP: 2013-01-16 FTSE: 2013-01-07\n", "BP: 2013-01-17 FTSE: 2013-01-08\n", "BP: 2013-01-18 FTSE: 2013-01-09\n", "BP: 2013-01-22 FTSE: 2013-01-10\n", "BP: 2013-01-23 FTSE: 2013-01-11\n", "BP: 2013-01-24 FTSE: 2013-01-14\n", "BP: 2013-01-25 FTSE: 2013-01-15\n", "BP: 2013-01-28 FTSE: 2013-01-16\n", "BP: 2013-01-29 FTSE: 2013-01-17\n", "BP: 2013-01-30 FTSE: 2013-01-18\n", "BP: 2013-01-31 FTSE: 2013-01-21\n", "BP: 2013-02-01 FTSE: 2013-01-22\n", "BP: 2013-02-04 FTSE: 2013-01-23\n", "BP: 2013-02-05 FTSE: 2013-01-24\n", "BP: 2013-02-06 FTSE: 2013-01-25\n", "BP: 2013-02-07 FTSE: 2013-01-28\n", "BP: 2013-02-08 FTSE: 2013-01-29\n", "BP: 2013-02-11 FTSE: 2013-01-30\n", "BP: 2013-02-12 FTSE: 2013-01-31\n", "BP: 2013-02-13 FTSE: 2013-02-01\n", "BP: 2013-02-14 FTSE: 2013-02-04\n", "BP: 2013-02-15 FTSE: 2013-02-05\n", "BP: 2013-02-19 FTSE: 2013-02-06\n", "BP: 2013-02-20 FTSE: 2013-02-07\n", "BP: 2013-02-21 FTSE: 2013-02-08\n", "BP: 2013-02-22 FTSE: 2013-02-11\n", "BP: 2013-02-25 FTSE: 2013-02-12\n", "BP: 2013-02-26 FTSE: 2013-02-13\n", "BP: 2013-02-27 FTSE: 2013-02-14\n", "BP: 2013-02-28 FTSE: 2013-02-15\n", "BP: 2013-03-01 FTSE: 2013-02-18\n", "BP: 2013-03-04 FTSE: 2013-02-19\n", "BP: 2013-03-05 FTSE: 2013-02-20\n", "BP: 2013-03-06 FTSE: 2013-02-21\n", "BP: 2013-03-07 FTSE: 2013-02-22\n", "BP: 2013-03-08 FTSE: 2013-02-25\n", "BP: 2013-03-11 FTSE: 2013-02-26\n", "BP: 2013-03-12 FTSE: 2013-02-27\n", "BP: 2013-03-13 FTSE: 2013-02-28\n", "BP: 2013-03-14 FTSE: 2013-03-01\n", "BP: 2013-03-15 FTSE: 2013-03-04\n", "BP: 2013-03-18 FTSE: 2013-03-05\n", "BP: 2013-03-19 FTSE: 2013-03-06\n", "BP: 2013-03-20 FTSE: 2013-03-07\n", "BP: 2013-03-21 FTSE: 2013-03-08\n", "BP: 2013-03-22 FTSE: 2013-03-11\n", "BP: 2013-03-25 FTSE: 2013-03-12\n", "BP: 2013-03-26 FTSE: 2013-03-13\n", "BP: 2013-03-27 FTSE: 2013-03-14\n", "BP: 2013-03-28 FTSE: 2013-03-15\n", "BP: 2013-04-01 FTSE: 2013-03-18\n", "BP: 2013-04-02 FTSE: 2013-03-19\n", "BP: 2013-04-03 FTSE: 2013-03-20\n", "BP: 2013-04-04 FTSE: 2013-03-21\n", "BP: 2013-04-05 FTSE: 2013-03-22\n", "BP: 2013-04-08 FTSE: 2013-03-25\n", "BP: 2013-04-09 FTSE: 2013-03-26\n", "BP: 2013-04-10 FTSE: 2013-03-27\n", "BP: 2013-04-11 FTSE: 2013-03-28\n", "BP: 2013-04-12 FTSE: 2013-04-02\n", "BP: 2013-04-15 FTSE: 2013-04-03\n", "BP: 2013-04-16 FTSE: 2013-04-04\n", "BP: 2013-04-17 FTSE: 2013-04-05\n", "BP: 2013-04-18 FTSE: 2013-04-08\n", "BP: 2013-04-19 FTSE: 2013-04-09\n", "BP: 2013-04-22 FTSE: 2013-04-10\n", "BP: 2013-04-23 FTSE: 2013-04-11\n", "BP: 2013-04-24 FTSE: 2013-04-12\n", "BP: 2013-04-25 FTSE: 2013-04-15\n", "BP: 2013-04-26 FTSE: 2013-04-16\n", "BP: 2013-04-29 FTSE: 2013-04-17\n", "BP: 2013-04-30 FTSE: 2013-04-18\n", "BP: 2013-05-01 FTSE: 2013-04-19\n", "BP: 2013-05-02 FTSE: 2013-04-22\n", "BP: 2013-05-03 FTSE: 2013-04-23\n", "BP: 2013-05-06 FTSE: 2013-04-24\n", "BP: 2013-05-07 FTSE: 2013-04-25\n", "BP: 2013-05-08 FTSE: 2013-04-26\n", "BP: 2013-05-09 FTSE: 2013-04-29\n", "BP: 2013-05-10 FTSE: 2013-04-30\n", "BP: 2013-05-13 FTSE: 2013-05-01\n", "BP: 2013-05-14 FTSE: 2013-05-02\n", "BP: 2013-05-15 FTSE: 2013-05-03\n", "BP: 2013-05-16 FTSE: 2013-05-07\n", "BP: 2013-05-17 FTSE: 2013-05-08\n", "BP: 2013-05-20 FTSE: 2013-05-09\n", "BP: 2013-05-21 FTSE: 2013-05-10\n", "BP: 2013-05-22 FTSE: 2013-05-13\n", "BP: 2013-05-23 FTSE: 2013-05-14\n", "BP: 2013-05-24 FTSE: 2013-05-15\n", "BP: 2013-05-28 FTSE: 2013-05-16\n", "BP: 2013-05-29 FTSE: 2013-05-17\n", "BP: 2013-05-30 FTSE: 2013-05-20\n", "BP: 2013-05-31 FTSE: 2013-05-21\n", "BP: 2013-06-03 FTSE: 2013-05-22\n", "BP: 2013-06-04 FTSE: 2013-05-23\n", "BP: 2013-06-05 FTSE: 2013-05-24\n", "BP: 2013-06-06 FTSE: 2013-05-28\n", "BP: 2013-06-07 FTSE: 2013-05-29\n", "BP: 2013-06-10 FTSE: 2013-05-30\n", "BP: 2013-06-11 FTSE: 2013-05-31\n", "BP: 2013-06-12 FTSE: 2013-06-03\n", "BP: 2013-06-13 FTSE: 2013-06-04\n", "BP: 2013-06-14 FTSE: 2013-06-05\n", "BP: 2013-06-17 FTSE: 2013-06-06\n", "BP: 2013-06-18 FTSE: 2013-06-07\n", "BP: 2013-06-19 FTSE: 2013-06-10\n", "BP: 2013-06-20 FTSE: 2013-06-11\n", "BP: 2013-06-21 FTSE: 2013-06-12\n", "BP: 2013-06-24 FTSE: 2013-06-13\n", "BP: 2013-06-25 FTSE: 2013-06-14\n", "BP: 2013-06-26 FTSE: 2013-06-17\n", "BP: 2013-06-27 FTSE: 2013-06-18\n", "BP: 2013-06-28 FTSE: 2013-06-19\n", "BP: 2013-07-01 FTSE: 2013-06-20\n", "BP: 2013-07-02 FTSE: 2013-06-21\n", "BP: 2013-07-03 FTSE: 2013-06-24\n", "BP: 2013-07-05 FTSE: 2013-06-25\n", "BP: 2013-07-08 FTSE: 2013-06-26\n", "BP: 2013-07-09 FTSE: 2013-06-27\n", "BP: 2013-07-10 FTSE: 2013-06-28\n", "BP: 2013-07-11 FTSE: 2013-07-01\n", "BP: 2013-07-12 FTSE: 2013-07-02\n", "BP: 2013-07-15 FTSE: 2013-07-03\n", "BP: 2013-07-16 FTSE: 2013-07-04\n", "BP: 2013-07-17 FTSE: 2013-07-05\n", "BP: 2013-07-18 FTSE: 2013-07-08\n", "BP: 2013-07-19 FTSE: 2013-07-09\n", "BP: 2013-07-22 FTSE: 2013-07-10\n", "BP: 2013-07-23 FTSE: 2013-07-11\n", "BP: 2013-07-24 FTSE: 2013-07-12\n", "BP: 2013-07-25 FTSE: 2013-07-15\n", "BP: 2013-07-26 FTSE: 2013-07-16\n", "BP: 2013-07-29 FTSE: 2013-07-17\n", "BP: 2013-07-30 FTSE: 2013-07-18\n", "BP: 2013-07-31 FTSE: 2013-07-19\n", "BP: 2013-08-01 FTSE: 2013-07-22\n", "BP: 2013-08-02 FTSE: 2013-07-23\n", "BP: 2013-08-05 FTSE: 2013-07-24\n", "BP: 2013-08-06 FTSE: 2013-07-25\n", "BP: 2013-08-07 FTSE: 2013-07-26\n", "BP: 2013-08-08 FTSE: 2013-07-29\n", "BP: 2013-08-09 FTSE: 2013-07-30\n", "BP: 2013-08-12 FTSE: 2013-07-31\n", "BP: 2013-08-13 FTSE: 2013-08-01\n", "BP: 2013-08-14 FTSE: 2013-08-02\n", "BP: 2013-08-15 FTSE: 2013-08-05\n", "BP: 2013-08-16 FTSE: 2013-08-06\n", "BP: 2013-08-19 FTSE: 2013-08-07\n", "BP: 2013-08-20 FTSE: 2013-08-08\n", "BP: 2013-08-21 FTSE: 2013-08-09\n", "BP: 2013-08-22 FTSE: 2013-08-12\n", "BP: 2013-08-23 FTSE: 2013-08-13\n", "BP: 2013-08-26 FTSE: 2013-08-14\n", "BP: 2013-08-27 FTSE: 2013-08-15\n", "BP: 2013-08-28 FTSE: 2013-08-16\n", "BP: 2013-08-29 FTSE: 2013-08-19\n", "BP: 2013-08-30 FTSE: 2013-08-20\n", "BP: 2013-09-03 FTSE: 2013-08-21\n", "BP: 2013-09-04 FTSE: 2013-08-22\n", "BP: 2013-09-05 FTSE: 2013-08-23\n", "BP: 2013-09-06 FTSE: 2013-08-27\n", "BP: 2013-09-09 FTSE: 2013-08-28\n", "BP: 2013-09-10 FTSE: 2013-08-29\n", "BP: 2013-09-11 FTSE: 2013-08-30\n", "BP: 2013-09-12 FTSE: 2013-09-02\n", "BP: 2013-09-13 FTSE: 2013-09-03\n", "BP: 2013-09-16 FTSE: 2013-09-04\n", "BP: 2013-09-17 FTSE: 2013-09-05\n", "BP: 2013-09-18 FTSE: 2013-09-06\n", "BP: 2013-09-19 FTSE: 2013-09-09\n", "BP: 2013-09-20 FTSE: 2013-09-10\n", "BP: 2013-09-23 FTSE: 2013-09-11\n", "BP: 2013-09-24 FTSE: 2013-09-12\n", "BP: 2013-09-25 FTSE: 2013-09-13\n", "BP: 2013-09-26 FTSE: 2013-09-16\n", "BP: 2013-09-27 FTSE: 2013-09-17\n", "BP: 2013-09-30 FTSE: 2013-09-18\n", "BP: 2013-10-01 FTSE: 2013-09-19\n", "BP: 2013-10-02 FTSE: 2013-09-20\n", "BP: 2013-10-03 FTSE: 2013-09-24\n", "BP: 2013-10-04 FTSE: 2013-09-25\n", "BP: 2013-10-07 FTSE: 2013-09-26\n", "BP: 2013-10-08 FTSE: 2013-09-27\n", "BP: 2013-10-09 FTSE: 2013-09-30\n", "BP: 2013-10-10 FTSE: 2013-10-01\n", "BP: 2013-10-11 FTSE: 2013-10-02\n", "BP: 2013-10-14 FTSE: 2013-10-03\n", "BP: 2013-10-15 FTSE: 2013-10-04\n", "BP: 2013-10-16 FTSE: 2013-10-07\n", "BP: 2013-10-17 FTSE: 2013-10-08\n", "BP: 2013-10-18 FTSE: 2013-10-09\n", "BP: 2013-10-21 FTSE: 2013-10-10\n", "BP: 2013-10-22 FTSE: 2013-10-11\n", "BP: 2013-10-23 FTSE: 2013-10-14\n", "BP: 2013-10-24 FTSE: 2013-10-15\n", "BP: 2013-10-25 FTSE: 2013-10-16\n", "BP: 2013-10-28 FTSE: 2013-10-17\n", "BP: 2013-10-29 FTSE: 2013-10-18\n", "BP: 2013-10-30 FTSE: 2013-10-21\n", "BP: 2013-10-31 FTSE: 2013-10-22\n", "BP: 2013-11-01 FTSE: 2013-10-23\n", "BP: 2013-11-04 FTSE: 2013-10-24\n", "BP: 2013-11-05 FTSE: 2013-10-25\n", "BP: 2013-11-06 FTSE: 2013-10-28\n", "BP: 2013-11-07 FTSE: 2013-10-29\n", "BP: 2013-11-08 FTSE: 2013-10-30\n", "BP: 2013-11-11 FTSE: 2013-10-31\n", "BP: 2013-11-12 FTSE: 2013-11-01\n", "BP: 2013-11-13 FTSE: 2013-11-04\n", "BP: 2013-11-14 FTSE: 2013-11-05\n", "BP: 2013-11-15 FTSE: 2013-11-06\n", "BP: 2013-11-18 FTSE: 2013-11-07\n", "BP: 2013-11-19 FTSE: 2013-11-08\n", "BP: 2013-11-20 FTSE: 2013-11-11\n", "BP: 2013-11-21 FTSE: 2013-11-12\n", "BP: 2013-11-22 FTSE: 2013-11-13\n", "BP: 2013-11-25 FTSE: 2013-11-14\n", "BP: 2013-11-26 FTSE: 2013-11-15\n", "BP: 2013-11-27 FTSE: 2013-11-18\n", "BP: 2013-11-29 FTSE: 2013-11-19\n", "BP: 2013-12-02 FTSE: 2013-11-20\n", "BP: 2013-12-03 FTSE: 2013-11-21\n", "BP: 2013-12-04 FTSE: 2013-11-22\n", "BP: 2013-12-05 FTSE: 2013-11-25\n", "BP: 2013-12-06 FTSE: 2013-11-26\n", "BP: 2013-12-09 FTSE: 2013-11-27\n", "BP: 2013-12-10 FTSE: 2013-11-28\n", "BP: 2013-12-11 FTSE: 2013-11-29\n", "BP: 2013-12-12 FTSE: 2013-12-02\n", "BP: 2013-12-13 FTSE: 2013-12-03\n", "BP: 2013-12-16 FTSE: 2013-12-04\n", "BP: 2013-12-17 FTSE: 2013-12-05\n", "BP: 2013-12-18 FTSE: 2013-12-06\n", "BP: 2013-12-19 FTSE: 2013-12-09\n", "BP: 2013-12-20 FTSE: 2013-12-10\n", "BP: 2013-12-23 FTSE: 2013-12-11\n", "BP: 2013-12-24 FTSE: 2013-12-12\n", "BP: 2013-12-26 FTSE: 2013-12-13\n", "BP: 2013-12-27 FTSE: 2013-12-16\n", "BP: 2013-12-30 FTSE: 2013-12-17\n", "BP: 2013-12-31 FTSE: 2013-12-18\n", "BP: 2014-01-02 FTSE: 2013-12-19\n", "BP: 2014-01-03 FTSE: 2013-12-20\n", "BP: 2014-01-06 FTSE: 2013-12-23\n", "BP: 2014-01-07 FTSE: 2013-12-24\n", "BP: 2014-01-08 FTSE: 2013-12-27\n", "BP: 2014-01-09 FTSE: 2013-12-30\n", "BP: 2014-01-10 FTSE: 2013-12-31\n", "BP: 2014-01-13 FTSE: 2014-01-02\n", "BP: 2014-01-14 FTSE: 2014-01-03\n", "BP: 2014-01-15 FTSE: 2014-01-06\n", "BP: 2014-01-16 FTSE: 2014-01-07\n", "BP: 2014-01-17 FTSE: 2014-01-08\n", "BP: 2014-01-21 FTSE: 2014-01-09\n", "BP: 2014-01-22 FTSE: 2014-01-10\n", "BP: 2014-01-23 FTSE: 2014-01-13\n", "BP: 2014-01-24 FTSE: 2014-01-14\n", "BP: 2014-01-27 FTSE: 2014-01-15\n", "BP: 2014-01-28 FTSE: 2014-01-16\n", "BP: 2014-01-29 FTSE: 2014-01-17\n", "BP: 2014-01-30 FTSE: 2014-01-20\n", "BP: 2014-01-31 FTSE: 2014-01-21\n", "BP: 2014-02-03 FTSE: 2014-01-22\n", "BP: 2014-02-04 FTSE: 2014-01-23\n", "BP: 2014-02-05 FTSE: 2014-01-24\n", "BP: 2014-02-06 FTSE: 2014-01-27\n", "BP: 2014-02-07 FTSE: 2014-01-28\n", "BP: 2014-02-10 FTSE: 2014-01-29\n", "BP: 2014-02-11 FTSE: 2014-01-30\n", "BP: 2014-02-12 FTSE: 2014-01-31\n", "BP: 2014-02-13 FTSE: 2014-02-03\n", "BP: 2014-02-14 FTSE: 2014-02-04\n", "BP: 2014-02-18 FTSE: 2014-02-05\n", "BP: 2014-02-19 FTSE: 2014-02-06\n", "BP: 2014-02-20 FTSE: 2014-02-07\n", "BP: 2014-02-21 FTSE: 2014-02-10\n", "BP: 2014-02-24 FTSE: 2014-02-11\n", "BP: 2014-02-25 FTSE: 2014-02-12\n", "BP: 2014-02-26 FTSE: 2014-02-13\n", "BP: 2014-02-27 FTSE: 2014-02-14\n", "BP: 2014-02-28 FTSE: 2014-02-17\n", "BP: 2014-03-03 FTSE: 2014-02-18\n", "BP: 2014-03-04 FTSE: 2014-02-19\n", "BP: 2014-03-05 FTSE: 2014-02-20\n", "BP: 2014-03-06 FTSE: 2014-02-21\n", "BP: 2014-03-07 FTSE: 2014-02-24\n", "BP: 2014-03-10 FTSE: 2014-02-25\n", "BP: 2014-03-11 FTSE: 2014-02-26\n", "BP: 2014-03-12 FTSE: 2014-02-27\n", "BP: 2014-03-13 FTSE: 2014-02-28\n", "BP: 2014-03-14 FTSE: 2014-03-03\n", "BP: 2014-03-17 FTSE: 2014-03-04\n", "BP: 2014-03-18 FTSE: 2014-03-05\n", "BP: 2014-03-19 FTSE: 2014-03-06\n", "BP: 2014-03-20 FTSE: 2014-03-07\n", "BP: 2014-03-21 FTSE: 2014-03-10\n", "BP: 2014-03-24 FTSE: 2014-03-11\n", "BP: 2014-03-25 FTSE: 2014-03-12\n", "BP: 2014-03-26 FTSE: 2014-03-13\n", "BP: 2014-03-27 FTSE: 2014-03-14\n", "BP: 2014-03-28 FTSE: 2014-03-17\n", "BP: 2014-03-31 FTSE: 2014-03-18\n", "BP: 2014-04-01 FTSE: 2014-03-19\n", "BP: 2014-04-02 FTSE: 2014-03-20\n", "BP: 2014-04-03 FTSE: 2014-03-21\n", "BP: 2014-04-04 FTSE: 2014-03-24\n", "BP: 2014-04-07 FTSE: 2014-03-25\n", "BP: 2014-04-08 FTSE: 2014-03-26\n", "BP: 2014-04-09 FTSE: 2014-03-27\n", "BP: 2014-04-10 FTSE: 2014-03-28\n", "BP: 2014-04-11 FTSE: 2014-03-31\n", "BP: 2014-04-14 FTSE: 2014-04-01\n", "BP: 2014-04-15 FTSE: 2014-04-02\n", "BP: 2014-04-16 FTSE: 2014-04-03\n", "BP: 2014-04-17 FTSE: 2014-04-04\n", "BP: 2014-04-21 FTSE: 2014-04-07\n", "BP: 2014-04-22 FTSE: 2014-04-08\n", "BP: 2014-04-23 FTSE: 2014-04-09\n", "BP: 2014-04-24 FTSE: 2014-04-10\n", "BP: 2014-04-25 FTSE: 2014-04-11\n", "BP: 2014-04-28 FTSE: 2014-04-14\n", "BP: 2014-04-29 FTSE: 2014-04-15\n", "BP: 2014-04-30 FTSE: 2014-04-16\n", "BP: 2014-05-01 FTSE: 2014-04-17\n", "BP: 2014-05-02 FTSE: 2014-04-22\n", "BP: 2014-05-05 FTSE: 2014-04-23\n", "BP: 2014-05-06 FTSE: 2014-04-24\n", "BP: 2014-05-07 FTSE: 2014-04-25\n", "BP: 2014-05-08 FTSE: 2014-04-28\n", "BP: 2014-05-09 FTSE: 2014-04-29\n", "BP: 2014-05-12 FTSE: 2014-04-30\n", "BP: 2014-05-13 FTSE: 2014-05-01\n", "BP: 2014-05-14 FTSE: 2014-05-02\n", "BP: 2014-05-15 FTSE: 2014-05-06\n", "BP: 2014-05-16 FTSE: 2014-05-07\n", "BP: 2014-05-19 FTSE: 2014-05-08\n", "BP: 2014-05-20 FTSE: 2014-05-09\n", "BP: 2014-05-21 FTSE: 2014-05-12\n", "BP: 2014-05-22 FTSE: 2014-05-13\n", "BP: 2014-05-23 FTSE: 2014-05-14\n", "BP: 2014-05-27 FTSE: 2014-05-15\n", "BP: 2014-05-28 FTSE: 2014-05-16\n", "BP: 2014-05-29 FTSE: 2014-05-19\n", "BP: 2014-05-30 FTSE: 2014-05-20\n", "BP: 2014-06-02 FTSE: 2014-05-21\n", "BP: 2014-06-03 FTSE: 2014-05-22\n", "BP: 2014-06-04 FTSE: 2014-05-23\n", "BP: 2014-06-05 FTSE: 2014-05-27\n", "BP: 2014-06-06 FTSE: 2014-05-28\n", "BP: 2014-06-09 FTSE: 2014-05-29\n", "BP: 2014-06-10 FTSE: 2014-05-30\n", "BP: 2014-06-11 FTSE: 2014-06-02\n", "BP: 2014-06-12 FTSE: 2014-06-03\n", "BP: 2014-06-13 FTSE: 2014-06-04\n", "BP: 2014-06-16 FTSE: 2014-06-05\n", "BP: 2014-06-17 FTSE: 2014-06-06\n", "BP: 2014-06-18 FTSE: 2014-06-09\n", "BP: 2014-06-19 FTSE: 2014-06-10\n", "BP: 2014-06-20 FTSE: 2014-06-11\n", "BP: 2014-06-23 FTSE: 2014-06-12\n", "BP: 2014-06-24 FTSE: 2014-06-13\n", "BP: 2014-06-25 FTSE: 2014-06-16\n", "BP: 2014-06-26 FTSE: 2014-06-17\n", "BP: 2014-06-27 FTSE: 2014-06-18\n", "BP: 2014-06-30 FTSE: 2014-06-19\n", "BP: 2014-07-01 FTSE: 2014-06-20\n", "BP: 2014-07-02 FTSE: 2014-06-23\n", "BP: 2014-07-03 FTSE: 2014-06-24\n", "BP: 2014-07-07 FTSE: 2014-06-25\n", "BP: 2014-07-08 FTSE: 2014-06-26\n", "BP: 2014-07-09 FTSE: 2014-06-27\n", "BP: 2014-07-10 FTSE: 2014-06-30\n", "BP: 2014-07-11 FTSE: 2014-07-01\n", "BP: 2014-07-14 FTSE: 2014-07-02\n", "BP: 2014-07-15 FTSE: 2014-07-03\n", "BP: 2014-07-16 FTSE: 2014-07-04\n", "BP: 2014-07-17 FTSE: 2014-07-07\n", "BP: 2014-07-18 FTSE: 2014-07-08\n", "BP: 2014-07-21 FTSE: 2014-07-09\n", "BP: 2014-07-22 FTSE: 2014-07-10\n", "BP: 2014-07-23 FTSE: 2014-07-11\n", "BP: 2014-07-24 FTSE: 2014-07-14\n", "BP: 2014-07-25 FTSE: 2014-07-15\n", "BP: 2014-07-28 FTSE: 2014-07-16\n", "BP: 2014-07-29 FTSE: 2014-07-17\n", "BP: 2014-07-30 FTSE: 2014-07-18\n", "BP: 2014-07-31 FTSE: 2014-07-21\n", "BP: 2014-08-01 FTSE: 2014-07-22\n", "BP: 2014-08-04 FTSE: 2014-07-23\n", "BP: 2014-08-05 FTSE: 2014-07-24\n", "BP: 2014-08-06 FTSE: 2014-07-25\n", "BP: 2014-08-07 FTSE: 2014-07-28\n", "BP: 2014-08-08 FTSE: 2014-07-29\n", "BP: 2014-08-11 FTSE: 2014-07-30\n", "BP: 2014-08-12 FTSE: 2014-07-31\n", "BP: 2014-08-13 FTSE: 2014-08-01\n", "BP: 2014-08-14 FTSE: 2014-08-04\n", "BP: 2014-08-15 FTSE: 2014-08-05\n", "BP: 2014-08-18 FTSE: 2014-08-06\n", "BP: 2014-08-19 FTSE: 2014-08-07\n", "BP: 2014-08-20 FTSE: 2014-08-08\n", "BP: 2014-08-21 FTSE: 2014-08-11\n", "BP: 2014-08-22 FTSE: 2014-08-12\n", "BP: 2014-08-25 FTSE: 2014-08-13\n", "BP: 2014-08-26 FTSE: 2014-08-14\n", "BP: 2014-08-27 FTSE: 2014-08-15\n", "BP: 2014-08-28 FTSE: 2014-08-18\n", "BP: 2014-08-29 FTSE: 2014-08-19\n", "BP: 2014-09-02 FTSE: 2014-08-20\n", "BP: 2014-09-03 FTSE: 2014-08-21\n", "BP: 2014-09-04 FTSE: 2014-08-22\n", "BP: 2014-09-05 FTSE: 2014-08-26\n", "BP: 2014-09-08 FTSE: 2014-08-27\n", "BP: 2014-09-09 FTSE: 2014-08-28\n", "BP: 2014-09-10 FTSE: 2014-08-29\n", "BP: 2014-09-11 FTSE: 2014-09-01\n", "BP: 2014-09-12 FTSE: 2014-09-02\n", "BP: 2014-09-15 FTSE: 2014-09-03\n", "BP: 2014-09-16 FTSE: 2014-09-04\n", "BP: 2014-09-17 FTSE: 2014-09-05\n", "BP: 2014-09-18 FTSE: 2014-09-08\n", "BP: 2014-09-19 FTSE: 2014-09-09\n", "BP: 2014-09-22 FTSE: 2014-09-10\n", "BP: 2014-09-23 FTSE: 2014-09-11\n", "BP: 2014-09-24 FTSE: 2014-09-12\n", "BP: 2014-09-25 FTSE: 2014-09-15\n", "BP: 2014-09-26 FTSE: 2014-09-16\n", "BP: 2014-09-29 FTSE: 2014-09-17\n", "BP: 2014-09-30 FTSE: 2014-09-18\n", "BP: 2014-10-01 FTSE: 2014-09-19\n", "BP: 2014-10-02 FTSE: 2014-09-22\n", "BP: 2014-10-03 FTSE: 2014-09-23\n", "BP: 2014-10-06 FTSE: 2014-09-24\n", "BP: 2014-10-07 FTSE: 2014-09-25\n", "BP: 2014-10-08 FTSE: 2014-09-26\n", "BP: 2014-10-09 FTSE: 2014-09-29\n", "BP: 2014-10-10 FTSE: 2014-09-30\n", "BP: 2014-10-13 FTSE: 2014-10-01\n", "BP: 2014-10-14 FTSE: 2014-10-02\n", "BP: 2014-10-15 FTSE: 2014-10-03\n", "BP: 2014-10-16 FTSE: 2014-10-06\n", "BP: 2014-10-17 FTSE: 2014-10-07\n", "BP: 2014-10-20 FTSE: 2014-10-08\n", "BP: 2014-10-21 FTSE: 2014-10-09\n", "BP: 2014-10-22 FTSE: 2014-10-10\n", "BP: 2014-10-23 FTSE: 2014-10-13\n", "BP: 2014-10-24 FTSE: 2014-10-14\n", "BP: 2014-10-27 FTSE: 2014-10-15\n", "BP: 2014-10-28 FTSE: 2014-10-16\n", "BP: 2014-10-29 FTSE: 2014-10-17\n", "BP: 2014-10-30 FTSE: 2014-10-20\n", "BP: 2014-10-31 FTSE: 2014-10-21\n", "BP: 2014-11-03 FTSE: 2014-10-22\n", "BP: 2014-11-04 FTSE: 2014-10-23\n", "BP: 2014-11-05 FTSE: 2014-10-24\n", "BP: 2014-11-06 FTSE: 2014-10-27\n", "BP: 2014-11-07 FTSE: 2014-10-28\n", "BP: 2014-11-10 FTSE: 2014-10-29\n", "BP: 2014-11-11 FTSE: 2014-10-30\n", "BP: 2014-11-12 FTSE: 2014-10-31\n", "BP: 2014-11-13 FTSE: 2014-11-03\n", "BP: 2014-11-14 FTSE: 2014-11-04\n", "BP: 2014-11-17 FTSE: 2014-11-05\n", "BP: 2014-11-18 FTSE: 2014-11-06\n", "BP: 2014-11-19 FTSE: 2014-11-07\n", "BP: 2014-11-20 FTSE: 2014-11-10\n", "BP: 2014-11-21 FTSE: 2014-11-11\n", "BP: 2014-11-24 FTSE: 2014-11-12\n", "BP: 2014-11-25 FTSE: 2014-11-13\n", "BP: 2014-11-26 FTSE: 2014-11-14\n", "BP: 2014-11-28 FTSE: 2014-11-17\n", "BP: 2014-12-01 FTSE: 2014-11-18\n", "BP: 2014-12-02 FTSE: 2014-11-19\n", "BP: 2014-12-03 FTSE: 2014-11-20\n", "BP: 2014-12-04 FTSE: 2014-11-21\n", "BP: 2014-12-05 FTSE: 2014-11-24\n", "BP: 2014-12-08 FTSE: 2014-11-25\n", "BP: 2014-12-09 FTSE: 2014-11-26\n", "BP: 2014-12-10 FTSE: 2014-11-27\n", "BP: 2014-12-11 FTSE: 2014-11-28\n", "BP: 2014-12-12 FTSE: 2014-12-01\n", "BP: 2014-12-15 FTSE: 2014-12-02\n", "BP: 2014-12-16 FTSE: 2014-12-03\n", "BP: 2014-12-17 FTSE: 2014-12-04\n", "BP: 2014-12-18 FTSE: 2014-12-05\n", "BP: 2014-12-19 FTSE: 2014-12-08\n", "BP: 2014-12-22 FTSE: 2014-12-09\n", "BP: 2014-12-23 FTSE: 2014-12-10\n", "BP: 2014-12-24 FTSE: 2014-12-11\n", "BP: 2014-12-26 FTSE: 2014-12-12\n", "BP: 2014-12-29 FTSE: 2014-12-15\n", "BP: 2014-12-30 FTSE: 2014-12-16\n", "BP: 2014-12-31 FTSE: 2014-12-17\n", "BP: 2015-01-02 FTSE: 2014-12-18\n", "BP: 2015-01-05 FTSE: 2014-12-19\n", "BP: 2015-01-06 FTSE: 2014-12-22\n", "BP: 2015-01-07 FTSE: 2014-12-23\n", "BP: 2015-01-08 FTSE: 2014-12-24\n", "BP: 2015-01-09 FTSE: 2014-12-29\n", "BP: 2015-01-12 FTSE: 2014-12-30\n", "BP: 2015-01-13 FTSE: 2014-12-31\n", "BP: 2015-01-14 FTSE: 2015-01-05\n", "BP: 2015-01-15 FTSE: 2015-01-06\n", "BP: 2015-01-16 FTSE: 2015-01-07\n", "BP: 2015-01-20 FTSE: 2015-01-08\n", "BP: 2015-01-21 FTSE: 2015-01-09\n", "BP: 2015-01-22 FTSE: 2015-01-12\n", "BP: 2015-01-23 FTSE: 2015-01-13\n", "BP: 2015-01-26 FTSE: 2015-01-14\n", "BP: 2015-01-28 FTSE: 2015-01-15\n", "BP: 2015-01-29 FTSE: 2015-01-16\n", "BP: 2015-01-30 FTSE: 2015-01-19\n", "BP: 2015-02-02 FTSE: 2015-01-20\n", "BP: 2015-02-03 FTSE: 2015-01-21\n", "BP: 2015-02-04 FTSE: 2015-01-22\n", "BP: 2015-02-05 FTSE: 2015-01-23\n", "BP: 2015-02-06 FTSE: 2015-01-26\n", "BP: 2015-02-09 FTSE: 2015-01-27\n", "BP: 2015-02-10 FTSE: 2015-01-28\n", "BP: 2015-02-11 FTSE: 2015-01-29\n", "BP: 2015-02-12 FTSE: 2015-01-30\n", "BP: 2015-02-13 FTSE: 2015-02-02\n", "BP: 2015-02-17 FTSE: 2015-02-03\n", "BP: 2015-02-18 FTSE: 2015-02-04\n", "BP: 2015-02-19 FTSE: 2015-02-05\n", "BP: 2015-02-20 FTSE: 2015-02-06\n", "BP: 2015-02-23 FTSE: 2015-02-09\n", "BP: 2015-02-24 FTSE: 2015-02-10\n", "BP: 2015-02-25 FTSE: 2015-02-11\n", "BP: 2015-02-26 FTSE: 2015-02-12\n", "BP: 2015-02-27 FTSE: 2015-02-13\n", "BP: 2015-03-02 FTSE: 2015-02-16\n", "BP: 2015-03-03 FTSE: 2015-02-17\n", "BP: 2015-03-04 FTSE: 2015-02-18\n", "BP: 2015-03-05 FTSE: 2015-02-19\n", "BP: 2015-03-06 FTSE: 2015-02-20\n", "BP: 2015-03-09 FTSE: 2015-02-23\n", "BP: 2015-03-10 FTSE: 2015-02-24\n", "BP: 2015-03-11 FTSE: 2015-02-25\n", "BP: 2015-03-12 FTSE: 2015-02-26\n", "BP: 2015-03-13 FTSE: 2015-02-27\n", "BP: 2015-03-16 FTSE: 2015-03-02\n", "BP: 2015-03-17 FTSE: 2015-03-03\n", "BP: 2015-03-18 FTSE: 2015-03-04\n", "BP: 2015-03-19 FTSE: 2015-03-05\n", "BP: 2015-03-20 FTSE: 2015-03-06\n", "BP: 2015-03-23 FTSE: 2015-03-09\n", "BP: 2015-03-24 FTSE: 2015-03-10\n", "BP: 2015-03-25 FTSE: 2015-03-11\n", "BP: 2015-03-26 FTSE: 2015-03-12\n", "BP: 2015-03-27 FTSE: 2015-03-13\n", "BP: 2015-03-30 FTSE: 2015-03-16\n", "BP: 2015-03-31 FTSE: 2015-03-17\n", "BP: 2015-04-01 FTSE: 2015-03-18\n", "BP: 2015-04-02 FTSE: 2015-03-19\n", "BP: 2015-04-06 FTSE: 2015-03-20\n", "BP: 2015-04-07 FTSE: 2015-03-23\n", "BP: 2015-04-08 FTSE: 2015-03-24\n", "BP: 2015-04-09 FTSE: 2015-03-25\n", "BP: 2015-04-10 FTSE: 2015-03-26\n", "BP: 2015-04-13 FTSE: 2015-03-27\n", "BP: 2015-04-14 FTSE: 2015-03-30\n", "BP: 2015-04-15 FTSE: 2015-03-31\n", "BP: 2015-04-16 FTSE: 2015-04-01\n", "BP: 2015-04-17 FTSE: 2015-04-02\n", "BP: 2015-04-20 FTSE: 2015-04-07\n", "BP: 2015-04-21 FTSE: 2015-04-08\n", "BP: 2015-04-22 FTSE: 2015-04-09\n", "BP: 2015-04-23 FTSE: 2015-04-10\n", "BP: 2015-04-24 FTSE: 2015-04-13\n", "BP: 2015-04-27 FTSE: 2015-04-14\n", "BP: 2015-04-28 FTSE: 2015-04-15\n", "BP: 2015-04-29 FTSE: 2015-04-16\n", "BP: 2015-04-30 FTSE: 2015-04-17\n", "BP: 2015-05-01 FTSE: 2015-04-20\n", "BP: 2015-05-04 FTSE: 2015-04-21\n", "BP: 2015-05-05 FTSE: 2015-04-22\n", "BP: 2015-05-06 FTSE: 2015-04-23\n", "BP: 2015-05-07 FTSE: 2015-04-24\n", "BP: 2015-05-08 FTSE: 2015-04-27\n", "BP: 2015-05-11 FTSE: 2015-04-28\n", "BP: 2015-05-12 FTSE: 2015-04-29\n", "BP: 2015-05-13 FTSE: 2015-04-30\n", "BP: 2015-05-14 FTSE: 2015-05-01\n", "BP: 2015-05-15 FTSE: 2015-05-05\n", "BP: 2015-05-18 FTSE: 2015-05-06\n", "BP: 2015-05-19 FTSE: 2015-05-07\n", "BP: 2015-05-20 FTSE: 2015-05-08\n", "BP: 2015-05-21 FTSE: 2015-05-11\n", "BP: 2015-05-22 FTSE: 2015-05-12\n", "BP: 2015-05-26 FTSE: 2015-05-13\n", "BP: 2015-05-27 FTSE: 2015-05-14\n", "BP: 2015-05-28 FTSE: 2015-05-15\n", "BP: 2015-05-29 FTSE: 2015-05-18\n", "BP: 2015-06-01 FTSE: 2015-05-19\n", "BP: 2015-06-02 FTSE: 2015-05-20\n", "BP: 2015-06-03 FTSE: 2015-05-21\n", "BP: 2015-06-04 FTSE: 2015-05-22\n", "BP: 2015-06-05 FTSE: 2015-05-26\n", "BP: 2015-06-08 FTSE: 2015-05-27\n", "BP: 2015-06-09 FTSE: 2015-05-28\n", "BP: 2015-06-10 FTSE: 2015-05-29\n", "BP: 2015-06-11 FTSE: 2015-06-01\n", "BP: 2015-06-12 FTSE: 2015-06-02\n", "BP: 2015-06-15 FTSE: 2015-06-03\n", "BP: 2015-06-16 FTSE: 2015-06-04\n", "BP: 2015-06-17 FTSE: 2015-06-05\n", "BP: 2015-06-18 FTSE: 2015-06-08\n", "BP: 2015-06-19 FTSE: 2015-06-09\n", "BP: 2015-06-22 FTSE: 2015-06-10\n", "BP: 2015-06-23 FTSE: 2015-06-11\n", "BP: 2015-06-24 FTSE: 2015-06-12\n", "BP: 2015-06-25 FTSE: 2015-06-15\n", "BP: 2015-06-26 FTSE: 2015-06-16\n", "BP: 2015-06-29 FTSE: 2015-06-17\n", "BP: 2015-06-30 FTSE: 2015-06-18\n", "BP: 2015-07-01 FTSE: 2015-06-19\n", "BP: 2015-07-02 FTSE: 2015-06-22\n", "BP: 2015-07-06 FTSE: 2015-06-23\n", "BP: 2015-07-07 FTSE: 2015-06-24\n", "BP: 2015-07-08 FTSE: 2015-06-25\n", "BP: 2015-07-09 FTSE: 2015-06-26\n", "BP: 2015-07-10 FTSE: 2015-06-29\n", "BP: 2015-07-14 FTSE: 2015-06-30\n", "BP: 2015-07-15 FTSE: 2015-07-01\n", "BP: 2015-07-16 FTSE: 2015-07-02\n", "BP: 2015-07-17 FTSE: 2015-07-03\n", "BP: 2015-07-20 FTSE: 2015-07-06\n", "BP: 2015-07-21 FTSE: 2015-07-07\n", "BP: 2015-07-22 FTSE: 2015-07-08\n", "BP: 2015-07-23 FTSE: 2015-07-09\n", "BP: 2015-07-24 FTSE: 2015-07-10\n", "BP: 2015-07-27 FTSE: 2015-07-13\n", "BP: 2015-07-28 FTSE: 2015-07-14\n", "BP: 2015-07-29 FTSE: 2015-07-15\n", "BP: 2015-07-30 FTSE: 2015-07-16\n", "BP: 2015-07-31 FTSE: 2015-07-17\n", "BP: 2015-08-03 FTSE: 2015-07-20\n", "BP: 2015-08-04 FTSE: 2015-07-21\n", "BP: 2015-08-05 FTSE: 2015-07-22\n", "BP: 2015-08-06 FTSE: 2015-07-23\n", "BP: 2015-08-07 FTSE: 2015-07-24\n", "BP: 2015-08-10 FTSE: 2015-07-27\n", "BP: 2015-08-11 FTSE: 2015-07-28\n", "BP: 2015-08-12 FTSE: 2015-07-29\n", "BP: 2015-08-13 FTSE: 2015-07-30\n", "BP: 2015-08-14 FTSE: 2015-07-31\n", "BP: 2015-08-17 FTSE: 2015-08-03\n", "BP: 2015-08-18 FTSE: 2015-08-04\n", "BP: 2015-08-19 FTSE: 2015-08-05\n", "BP: 2015-08-20 FTSE: 2015-08-06\n", "BP: 2015-08-21 FTSE: 2015-08-07\n", "BP: 2015-08-24 FTSE: 2015-08-10\n", "BP: 2015-08-25 FTSE: 2015-08-11\n", "BP: 2015-08-26 FTSE: 2015-08-12\n", "BP: 2015-08-27 FTSE: 2015-08-13\n", "BP: 2015-08-28 FTSE: 2015-08-14\n", "BP: 2015-08-31 FTSE: 2015-08-17\n", "BP: 2015-09-01 FTSE: 2015-08-18\n", "BP: 2015-09-02 FTSE: 2015-08-19\n", "BP: 2015-09-03 FTSE: 2015-08-20\n", "BP: 2015-09-04 FTSE: 2015-08-21\n", "BP: 2015-09-08 FTSE: 2015-08-24\n", "BP: 2015-09-09 FTSE: 2015-08-25\n", "BP: 2015-09-10 FTSE: 2015-08-26\n", "BP: 2015-09-11 FTSE: 2015-08-27\n", "BP: 2015-09-14 FTSE: 2015-08-28\n", "BP: 2015-09-15 FTSE: 2015-09-01\n", "BP: 2015-09-16 FTSE: 2015-09-02\n", "BP: 2015-09-17 FTSE: 2015-09-03\n", "BP: 2015-09-18 FTSE: 2015-09-04\n", "BP: 2015-09-21 FTSE: 2015-09-07\n", "BP: 2015-09-22 FTSE: 2015-09-08\n", "BP: 2015-09-23 FTSE: 2015-09-09\n", "BP: 2015-09-24 FTSE: 2015-09-10\n", "BP: 2015-09-25 FTSE: 2015-09-11\n", "BP: 2015-09-28 FTSE: 2015-09-14\n", "BP: 2015-09-29 FTSE: 2015-09-15\n", "BP: 2015-09-30 FTSE: 2015-09-16\n", "BP: 2015-10-01 FTSE: 2015-09-17\n", "BP: 2015-10-02 FTSE: 2015-09-18\n", "BP: 2015-10-05 FTSE: 2015-09-21\n", "BP: 2015-10-06 FTSE: 2015-09-22\n", "BP: 2015-10-07 FTSE: 2015-09-23\n", "BP: 2015-10-08 FTSE: 2015-09-24\n", "BP: 2015-10-09 FTSE: 2015-09-25\n", "BP: 2015-10-12 FTSE: 2015-09-28\n", "BP: 2015-10-13 FTSE: 2015-09-29\n", "BP: 2015-10-14 FTSE: 2015-09-30\n", "BP: 2015-10-15 FTSE: 2015-10-01\n", "BP: 2015-10-16 FTSE: 2015-10-02\n", "BP: 2015-10-19 FTSE: 2015-10-05\n", "BP: 2015-10-20 FTSE: 2015-10-06\n", "BP: 2015-10-21 FTSE: 2015-10-07\n", "BP: 2015-10-22 FTSE: 2015-10-08\n", "BP: 2015-10-23 FTSE: 2015-10-09\n", "BP: 2015-10-26 FTSE: 2015-10-12\n", "BP: 2015-10-27 FTSE: 2015-10-13\n", "BP: 2015-10-28 FTSE: 2015-10-14\n", "BP: 2015-10-29 FTSE: 2015-10-15\n", "BP: 2015-10-30 FTSE: 2015-10-16\n", "BP: 2015-11-02 FTSE: 2015-10-19\n", "BP: 2015-11-03 FTSE: 2015-10-20\n", "BP: 2015-11-04 FTSE: 2015-10-21\n", "BP: 2015-11-05 FTSE: 2015-10-22\n", "BP: 2015-11-06 FTSE: 2015-10-23\n", "BP: 2015-11-09 FTSE: 2015-10-26\n", "BP: 2015-11-10 FTSE: 2015-10-27\n", "BP: 2015-11-11 FTSE: 2015-10-28\n", "BP: 2015-11-12 FTSE: 2015-10-29\n", "BP: 2015-11-13 FTSE: 2015-10-30\n", "BP: 2015-11-16 FTSE: 2015-11-02\n", "BP: 2015-11-17 FTSE: 2015-11-03\n", "BP: 2015-11-18 FTSE: 2015-11-04\n", "BP: 2015-11-19 FTSE: 2015-11-05\n", "BP: 2015-11-20 FTSE: 2015-11-06\n", "BP: 2015-11-23 FTSE: 2015-11-09\n", "BP: 2015-11-24 FTSE: 2015-11-10\n", "BP: 2015-11-25 FTSE: 2015-11-11\n", "BP: 2015-11-27 FTSE: 2015-11-12\n", "BP: 2015-11-30 FTSE: 2015-11-13\n", "BP: 2015-12-01 FTSE: 2015-11-16\n", "BP: 2015-12-02 FTSE: 2015-11-17\n", "BP: 2015-12-03 FTSE: 2015-11-18\n", "BP: 2015-12-04 FTSE: 2015-11-19\n", "BP: 2015-12-07 FTSE: 2015-11-20\n", "BP: 2015-12-08 FTSE: 2015-11-23\n", "BP: 2015-12-09 FTSE: 2015-11-24\n", "BP: 2015-12-10 FTSE: 2015-11-25\n", "BP: 2015-12-11 FTSE: 2015-11-26\n", "BP: 2015-12-14 FTSE: 2015-11-27\n", "BP: 2015-12-15 FTSE: 2015-11-30\n", "BP: 2015-12-16 FTSE: 2015-12-01\n", "BP: 2015-12-17 FTSE: 2015-12-02\n", "BP: 2015-12-18 FTSE: 2015-12-03\n", "BP: 2015-12-21 FTSE: 2015-12-04\n", "BP: 2015-12-22 FTSE: 2015-12-07\n", "BP: 2015-12-23 FTSE: 2015-12-08\n", "BP: 2015-12-24 FTSE: 2015-12-09\n", "BP: 2015-12-28 FTSE: 2015-12-10\n", "BP: 2015-12-29 FTSE: 2015-12-11\n", "BP: 2015-12-30 FTSE: 2015-12-14\n", "BP: 2015-12-31 FTSE: 2015-12-15\n", "BP: 2016-01-04 FTSE: 2015-12-16\n", "BP: 2016-01-05 FTSE: 2015-12-18\n", "BP: 2016-01-06 FTSE: 2015-12-21\n", "BP: 2016-01-07 FTSE: 2015-12-22\n", "BP: 2016-01-08 FTSE: 2015-12-23\n", "BP: 2016-01-11 FTSE: 2015-12-24\n", "BP: 2016-01-12 FTSE: 2015-12-29\n", "BP: 2016-01-13 FTSE: 2015-12-30\n", "BP: 2016-01-14 FTSE: 2015-12-31\n", "BP: 2016-01-15 FTSE: 2016-01-04\n", "BP: 2016-01-19 FTSE: 2016-01-05\n", "BP: 2016-01-20 FTSE: 2016-01-06\n", "BP: 2016-01-21 FTSE: 2016-01-07\n", "BP: 2016-01-22 FTSE: 2016-01-08\n", "BP: 2016-01-25 FTSE: 2016-01-11\n", "BP: 2016-01-26 FTSE: 2016-01-12\n", "BP: 2016-01-27 FTSE: 2016-01-13\n", "BP: 2016-01-28 FTSE: 2016-01-14\n", "BP: 2016-01-29 FTSE: 2016-01-15\n", "BP: 2016-02-01 FTSE: 2016-01-18\n", "BP: 2016-02-02 FTSE: 2016-01-19\n", "BP: 2016-02-03 FTSE: 2016-01-20\n", "BP: 2016-02-04 FTSE: 2016-01-21\n", "BP: 2016-02-05 FTSE: 2016-01-22\n", "BP: 2016-02-08 FTSE: 2016-01-25\n", "BP: 2016-02-09 FTSE: 2016-01-26\n", "BP: 2016-02-10 FTSE: 2016-01-27\n", "BP: 2016-02-11 FTSE: 2016-01-28\n", "BP: 2016-02-12 FTSE: 2016-01-29\n", "BP: 2016-02-16 FTSE: 2016-02-01\n", "BP: 2016-02-17 FTSE: 2016-02-02\n", "BP: 2016-02-18 FTSE: 2016-02-03\n", "BP: 2016-02-19 FTSE: 2016-02-04\n", "BP: 2016-02-22 FTSE: 2016-02-05\n", "BP: 2016-02-23 FTSE: 2016-02-08\n", "BP: 2016-02-24 FTSE: 2016-02-09\n", "BP: 2016-02-25 FTSE: 2016-02-10\n", "BP: 2016-02-26 FTSE: 2016-02-11\n", "BP: 2016-02-29 FTSE: 2016-02-12\n", "BP: 2016-03-01 FTSE: 2016-02-15\n", "BP: 2016-03-02 FTSE: 2016-02-16\n", "BP: 2016-03-03 FTSE: 2016-02-17\n", "BP: 2016-03-04 FTSE: 2016-02-18\n", "BP: 2016-03-07 FTSE: 2016-02-19\n", "BP: 2016-03-08 FTSE: 2016-02-22\n", "BP: 2016-03-09 FTSE: 2016-02-23\n", "BP: 2016-03-10 FTSE: 2016-02-24\n", "BP: 2016-03-11 FTSE: 2016-02-25\n", "BP: 2016-03-14 FTSE: 2016-02-26\n", "BP: 2016-03-15 FTSE: 2016-02-29\n", "BP: 2016-03-16 FTSE: 2016-03-01\n", "BP: 2016-03-17 FTSE: 2016-03-02\n", "BP: 2016-03-18 FTSE: 2016-03-03\n", "BP: 2016-03-21 FTSE: 2016-03-04\n", "BP: 2016-03-22 FTSE: 2016-03-07\n", "BP: 2016-03-23 FTSE: 2016-03-08\n", "BP: 2016-03-24 FTSE: 2016-03-09\n", "BP: 2016-03-28 FTSE: 2016-03-10\n", "BP: 2016-03-29 FTSE: 2016-03-11\n", "BP: 2016-03-30 FTSE: 2016-03-14\n", "BP: 2016-03-31 FTSE: 2016-03-15\n", "BP: 2016-04-01 FTSE: 2016-03-16\n", "BP: 2016-04-04 FTSE: 2016-03-17\n", "BP: 2016-04-05 FTSE: 2016-03-18\n", "BP: 2016-04-06 FTSE: 2016-03-21\n", "BP: 2016-04-07 FTSE: 2016-03-22\n", "BP: 2016-04-08 FTSE: 2016-03-23\n", "BP: 2016-04-11 FTSE: 2016-03-24\n", "BP: 2016-04-12 FTSE: 2016-03-29\n", "BP: 2016-04-13 FTSE: 2016-03-30\n", "BP: 2016-04-14 FTSE: 2016-03-31\n", "BP: 2016-04-15 FTSE: 2016-04-01\n", "BP: 2016-04-18 FTSE: 2016-04-04\n", "BP: 2016-04-19 FTSE: 2016-04-05\n", "BP: 2016-04-20 FTSE: 2016-04-06\n", "BP: 2016-04-21 FTSE: 2016-04-07\n", "BP: 2016-04-22 FTSE: 2016-04-08\n", "BP: 2016-04-25 FTSE: 2016-04-11\n", "BP: 2016-04-26 FTSE: 2016-04-12\n", "BP: 2016-04-27 FTSE: 2016-04-13\n", "BP: 2016-04-28 FTSE: 2016-04-14\n", "BP: 2016-04-29 FTSE: 2016-04-15\n", "BP: 2016-05-02 FTSE: 2016-04-18\n", "BP: 2016-05-03 FTSE: 2016-04-19\n", "BP: 2016-05-04 FTSE: 2016-04-20\n", "BP: 2016-05-05 FTSE: 2016-04-21\n", "BP: 2016-05-06 FTSE: 2016-04-22\n", "BP: 2016-05-09 FTSE: 2016-04-25\n", "BP: 2016-05-10 FTSE: 2016-04-26\n", "BP: 2016-05-11 FTSE: 2016-04-27\n", "BP: 2016-05-12 FTSE: 2016-04-28\n", "BP: 2016-05-13 FTSE: 2016-04-29\n", "BP: 2016-05-16 FTSE: 2016-05-03\n", "BP: 2016-05-17 FTSE: 2016-05-04\n", "BP: 2016-05-18 FTSE: 2016-05-05\n", "BP: 2016-05-19 FTSE: 2016-05-06\n", "BP: 2016-05-20 FTSE: 2016-05-09\n", "BP: 2016-05-23 FTSE: 2016-05-10\n", "BP: 2016-05-24 FTSE: 2016-05-11\n", "BP: 2016-05-25 FTSE: 2016-05-12\n", "BP: 2016-05-26 FTSE: 2016-05-13\n", "BP: 2016-05-27 FTSE: 2016-05-16\n", "BP: 2016-05-31 FTSE: 2016-05-17\n", "BP: 2016-06-01 FTSE: 2016-05-18\n", "BP: 2016-06-02 FTSE: 2016-05-19\n", "BP: 2016-06-03 FTSE: 2016-05-20\n", "BP: 2016-06-06 FTSE: 2016-05-23\n", "BP: 2016-06-07 FTSE: 2016-05-24\n", "BP: 2016-06-08 FTSE: 2016-05-25\n", "BP: 2016-06-09 FTSE: 2016-05-26\n", "BP: 2016-06-10 FTSE: 2016-05-27\n", "BP: 2016-06-13 FTSE: 2016-05-31\n", "BP: 2016-06-14 FTSE: 2016-06-01\n", "BP: 2016-06-15 FTSE: 2016-06-02\n", "BP: 2016-06-16 FTSE: 2016-06-03\n", "BP: 2016-06-17 FTSE: 2016-06-06\n", "BP: 2016-06-20 FTSE: 2016-06-07\n", "BP: 2016-06-21 FTSE: 2016-06-08\n", "BP: 2016-06-22 FTSE: 2016-06-09\n", "BP: 2016-06-23 FTSE: 2016-06-10\n", "BP: 2016-06-24 FTSE: 2016-06-13\n", "BP: 2016-06-27 FTSE: 2016-06-14\n", "BP: 2016-06-28 FTSE: 2016-06-15\n", "BP: 2016-06-29 FTSE: 2016-06-16\n", "BP: 2016-06-30 FTSE: 2016-06-17\n", "BP: 2016-07-01 FTSE: 2016-06-20\n", "BP: 2016-07-05 FTSE: 2016-06-21\n", "BP: 2016-07-06 FTSE: 2016-06-22\n", "BP: 2016-07-07 FTSE: 2016-06-23\n", "BP: 2016-07-08 FTSE: 2016-06-24\n", "BP: 2016-07-11 FTSE: 2016-06-27\n", "BP: 2016-07-12 FTSE: 2016-06-28\n", "BP: 2016-07-13 FTSE: 2016-06-29\n", "BP: 2016-07-14 FTSE: 2016-06-30\n", "BP: 2016-07-15 FTSE: 2016-07-01\n", "BP: 2016-07-18 FTSE: 2016-07-04\n", "BP: 2016-07-19 FTSE: 2016-07-05\n", "BP: 2016-07-20 FTSE: 2016-07-06\n", "BP: 2016-07-21 FTSE: 2016-07-07\n", "BP: 2016-07-22 FTSE: 2016-07-08\n", "BP: 2016-07-25 FTSE: 2016-07-11\n", "BP: 2016-07-26 FTSE: 2016-07-12\n", "BP: 2016-07-27 FTSE: 2016-07-13\n", "BP: 2016-07-28 FTSE: 2016-07-14\n", "BP: 2016-07-29 FTSE: 2016-07-15\n", "BP: 2016-08-01 FTSE: 2016-07-18\n", "BP: 2016-08-02 FTSE: 2016-07-19\n", "BP: 2016-08-03 FTSE: 2016-07-20\n", "BP: 2016-08-04 FTSE: 2016-07-21\n", "BP: 2016-08-05 FTSE: 2016-07-22\n", "BP: 2016-08-08 FTSE: 2016-07-25\n", "BP: 2016-08-09 FTSE: 2016-07-26\n", "BP: 2016-08-10 FTSE: 2016-07-27\n", "BP: 2016-08-11 FTSE: 2016-07-28\n", "BP: 2016-08-12 FTSE: 2016-07-29\n", "BP: 2016-08-15 FTSE: 2016-08-01\n", "BP: 2016-08-16 FTSE: 2016-08-02\n", "BP: 2016-08-17 FTSE: 2016-08-03\n", "BP: 2016-08-18 FTSE: 2016-08-04\n", "BP: 2016-08-19 FTSE: 2016-08-05\n", "BP: 2016-08-22 FTSE: 2016-08-08\n", "BP: 2016-08-23 FTSE: 2016-08-09\n", "BP: 2016-08-24 FTSE: 2016-08-10\n", "BP: 2016-08-25 FTSE: 2016-08-11\n", "BP: 2016-08-26 FTSE: 2016-08-12\n", "BP: 2016-08-29 FTSE: 2016-08-15\n", "BP: 2016-08-30 FTSE: 2016-08-16\n", "BP: 2016-08-31 FTSE: 2016-08-17\n", "BP: 2016-09-01 FTSE: 2016-08-18\n", "BP: 2016-09-02 FTSE: 2016-08-19\n", "BP: 2016-09-06 FTSE: 2016-08-22\n", "BP: 2016-09-07 FTSE: 2016-08-23\n", "BP: 2016-09-08 FTSE: 2016-08-24\n", "BP: 2016-09-09 FTSE: 2016-08-25\n", "BP: nan FTSE: 2016-08-26\n", "BP: nan FTSE: 2016-08-30\n", "BP: nan FTSE: 2016-08-31\n", "BP: nan FTSE: 2016-09-01\n", "BP: nan FTSE: 2016-09-02\n", "BP: nan FTSE: 2016-09-05\n", "BP: nan FTSE: 2016-09-06\n", "BP: nan FTSE: 2016-09-07\n", "BP: nan FTSE: 2016-09-08\n", "BP: nan FTSE: 2016-09-09\n" ] } ], "source": [ "for i in range(ftse_gaia_intersect_length):\n", " bp_date = bp.loc[bp_ftse_start+i, 'Date']\n", " ftse_date = bp.loc[bp_ftse_start+i, 'FTSE Date']\n", " if bp_date != ftse_date:\n", " print(\"BP: \", bp_date, \" FTSE: \", ftse_date)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Symbol BP\n", "Date 1993-07-20\n", "Open 52.25\n", "High 53\n", "Low 52.12\n", "Close 53\n", "Volume 961600\n", "Ex-Dividend 0\n", "Split Ratio 1\n", "Adj. Open 5.96843\n", "Adj. High 6.0541\n", "Adj. Low 5.95358\n", "Adj. Close 6.0541\n", "Adj. Volume 3.8464e+06\n", "Daily Variation 0.88\n", "Percentage Variation 1.68421\n", "Adj. Daily Variation 0.100521\n", "Adj. Percentage Variation 1.68421\n", "GAIA Date NaN\n", "GAIA Adj. Open NaN\n", "GAIA Adj. High NaN\n", "GAIA Adj. Low NaN\n", "GAIA Adj. Close NaN\n", "FTSE Date 1993-07-21\n", "FTSE Open 2827.2\n", "FTSE High 2827.2\n", "FTSE Low 2801.8\n", "FTSE Close 2814.1\n", "Name: 1927281, dtype: object" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.loc[bp_ftse_start+2350]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA DateGAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close
1924931BP1984-04-0245.6246.3845.5046.00209700.00.01.04.748742...NaNNaNNaNNaNNaN1984-04-02NaN1108.11108.1NaN
1924932BP1984-04-0346.1246.5045.8846.38148900.00.01.04.800788...NaNNaNNaNNaNNaN1984-04-03NaN1095.41095.4NaN
1924933BP1984-04-0446.6248.0046.6248.00283800.00.01.04.852835...NaNNaNNaNNaNNaN1984-04-04NaN1095.41095.4NaN
1924934BP1984-04-0548.3848.3847.0047.50166400.00.01.05.036040...NaNNaNNaNNaNNaN1984-04-05NaN1102.21102.2NaN
1924935BP1984-04-0647.1247.5047.0047.5081500.00.01.04.904882...NaNNaNNaNNaNNaN1984-04-06NaN1096.31096.3NaN
\n", "

5 rows × 28 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1924931 BP 1984-04-02 45.62 46.38 45.50 46.00 209700.0 0.0 \n", "1924932 BP 1984-04-03 46.12 46.50 45.88 46.38 148900.0 0.0 \n", "1924933 BP 1984-04-04 46.62 48.00 46.62 48.00 283800.0 0.0 \n", "1924934 BP 1984-04-05 48.38 48.38 47.00 47.50 166400.0 0.0 \n", "1924935 BP 1984-04-06 47.12 47.50 47.00 47.50 81500.0 0.0 \n", "\n", " Split Ratio Adj. Open ... GAIA Date GAIA Adj. Open \\\n", "1924931 1.0 4.748742 ... NaN NaN \n", "1924932 1.0 4.800788 ... NaN NaN \n", "1924933 1.0 4.852835 ... NaN NaN \n", "1924934 1.0 5.036040 ... NaN NaN \n", "1924935 1.0 4.904882 ... NaN NaN \n", "\n", " GAIA Adj. High GAIA Adj. Low GAIA Adj. Close FTSE Date \\\n", "1924931 NaN NaN NaN 1984-04-02 \n", "1924932 NaN NaN NaN 1984-04-03 \n", "1924933 NaN NaN NaN 1984-04-04 \n", "1924934 NaN NaN NaN 1984-04-05 \n", "1924935 NaN NaN NaN 1984-04-06 \n", "\n", " FTSE Open FTSE High FTSE Low FTSE Close \n", "1924931 NaN 1108.1 1108.1 NaN \n", "1924932 NaN 1095.4 1095.4 NaN \n", "1924933 NaN 1095.4 1095.4 NaN \n", "1924934 NaN 1102.2 1102.2 NaN \n", "1924935 NaN 1096.3 1096.3 NaN \n", "\n", "[5 rows x 28 columns]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Add FTSE data to BP dataframe\n", "# bp.iloc[1832] has date 1984-04-02.\n", "# BP is of row 1923099 to 1933108 in df\n", "\n", "bp_with_ftse = bp.loc[1832+1923099:]\n", "bp_with_ftse.loc[:,'FTSE Open'] = sorted_ftse100.loc[:,'Open']\n", "bp_with_ftse.loc[:,'FTSE Close'] = sorted_ftse100.loc[:,'Close']\n", "\n", "bp_with_ftse.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 1.2.3 N-day moving averages\n", "\n", "Only applying this to specific stocks because this takes much computational power." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:132: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._setitem_with_indexer(indexer, value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:9: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. Open...GAIA Adj. OpenGAIA Adj. HighGAIA Adj. LowGAIA Adj. CloseFTSE DateFTSE OpenFTSE HighFTSE LowFTSE Close7-day Moving Average
1923099BP1977-01-0376.5077.620076.500077.6212400.00.01.01.990787...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923100BP1977-01-0477.6278.000076.750077.0019300.00.01.02.019933...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923101BP1977-01-0577.0077.000074.500074.5017900.00.01.02.003798...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923102BP1977-01-0674.5075.500074.500075.1223900.00.01.01.938740...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923103BP1977-01-0775.1275.380074.620075.1241700.00.01.01.954874...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923104BP1977-01-1075.1275.750074.500075.6213000.00.01.01.954874...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923105BP1977-01-1175.6276.380074.750075.0013300.00.01.01.967886...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923106BP1977-01-1274.7574.750073.500074.2521000.00.01.01.945246...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923107BP1977-01-1374.2576.000074.120076.0027300.00.01.01.932234...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923108BP1977-01-1476.0076.000075.000075.0010400.00.01.01.977775...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923109BP1977-01-1775.0075.250074.500075.255000.00.01.01.951752...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923110BP1977-01-1875.0075.000074.750074.887400.00.01.01.951752...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923111BP1977-01-1975.0077.250075.000077.2533800.00.01.01.951752...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923112BP1977-01-2077.2577.500076.000076.0013900.00.01.02.010304...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923113BP1977-01-2176.0076.250075.620075.626300.00.01.01.977775...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923114BP1977-01-2475.7576.620075.750076.5018700.00.01.01.971269...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923115BP1977-01-2576.5076.880076.000076.6211400.00.01.01.990787...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923116BP1977-01-2676.7577.380076.750077.007800.00.01.01.997292...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923117BP1977-01-2777.0077.000076.750076.887800.00.01.02.003798...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923118BP1977-01-2876.8877.620076.750077.0023000.00.01.02.000676...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923119BP1977-01-3177.0077.620076.500076.5039600.00.01.02.003798...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923120BP1977-02-0176.5077.250076.500076.7513000.00.01.01.990787...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923121BP1977-02-0276.7577.380076.500076.7546600.00.01.01.997292...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923122BP1977-02-0376.7577.120076.500076.6211800.00.01.01.997292...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923123BP1977-02-0476.8877.500076.880077.1210400.00.01.02.000676...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923124BP1977-02-0777.1278.250077.120078.2510300.00.01.02.006921...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923125BP1977-02-0879.1281.250079.120080.7539300.00.01.02.058968...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923126BP1977-02-0983.0085.000083.000083.5087300.00.01.02.159938...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923127BP1977-02-1083.7584.380083.750084.2553200.00.01.02.179456...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
1923128BP1977-02-1184.2584.620083.500084.2538900.00.01.02.192468...NaNNaNNaNNaNNaNNaNNaNNaNNaN0
..................................................................
1933089BP2016-08-1233.7933.870033.605033.744278935.00.01.033.790000...NaNNaNNaNNaN2016-07-29NaN6740.476691.13NaN0
1933090BP2016-08-1533.9234.060033.790033.874087756.00.01.033.920000...NaNNaNNaNNaN2016-08-01NaN6769.416678.45NaN0
1933091BP2016-08-1634.0834.320033.970034.216455172.00.01.034.080000...NaNNaNNaNNaN2016-08-02NaN6694.146630.76NaN0
1933092BP2016-08-1734.0434.235033.800034.204977785.00.01.034.040000...NaNNaNNaNNaN2016-08-03NaN6673.636621.42NaN0
1933093BP2016-08-1834.2934.670034.220034.654607627.00.01.034.290000...NaNNaNNaNNaN2016-08-04NaN6749.676615.83NaN0
1933094BP2016-08-1934.3534.390034.161034.334033734.00.01.034.350000...NaNNaNNaNNaN2016-08-05NaN6802.416738.57NaN0
1933095BP2016-08-2233.8334.028033.696133.964230680.00.01.033.830000...NaNNaNNaNNaN2016-08-08NaN6829.476781.47NaN0
1933096BP2016-08-2334.0834.310033.950034.136736722.00.01.034.080000...NaNNaNNaNNaN2016-08-09NaN6863.106807.76NaN0
1933097BP2016-08-2434.2734.400034.120034.274876906.00.01.034.270000...NaNNaNNaNNaN2016-08-10NaN6866.426820.04NaN0
1933098BP2016-08-2534.3334.530034.170034.224649044.00.01.034.330000...NaNNaNNaNNaN2016-08-11NaN6914.716812.73NaN0
1933099BP2016-08-2634.3834.800034.013534.166259955.00.01.034.380000...NaNNaNNaNNaN2016-08-12NaN6931.046896.04NaN0
1933100BP2016-08-2933.9034.319333.900034.242849481.00.01.033.900000...NaNNaNNaNNaN2016-08-15NaN6955.346907.17NaN0
1933101BP2016-08-3034.2334.320034.050034.104608200.00.01.034.230000...NaNNaNNaNNaN2016-08-16NaN6941.196893.92NaN0
1933102BP2016-08-3133.9934.090033.750033.864989062.00.01.033.990000...NaNNaNNaNNaN2016-08-17NaN6920.766849.90NaN0
1933103BP2016-09-0133.8133.830033.434833.663722531.00.01.033.810000...NaNNaNNaNNaN2016-08-18NaN6893.356850.61NaN0
1933104BP2016-09-0234.2534.750034.160034.506896283.00.01.034.250000...NaNNaNNaNNaN2016-08-19NaN6871.486840.94NaN0
1933105BP2016-09-0634.5534.760034.380034.694090421.00.01.034.550000...NaNNaNNaNNaN2016-08-22NaN6884.616812.07NaN0
1933106BP2016-09-0734.7834.910034.650034.763902827.00.01.034.780000...NaNNaNNaNNaN2016-08-23NaN6885.396828.54NaN0
1933107BP2016-09-0834.8935.175034.660035.085161379.00.01.034.890000...NaNNaNNaNNaN2016-08-24NaN6868.516825.22NaN0
1933108BP2016-09-0934.6334.700034.235034.355434710.00.01.034.630000...NaNNaNNaNNaN2016-08-25NaN6836.226779.15NaN0
1933109NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-08-26NaN6857.296798.82NaN0
1933110NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-08-30NaN6851.836808.07NaN0
1933111NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-08-31NaN6832.896779.54NaN0
1933112NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-01NaN6826.226723.21NaN0
1933113NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-02NaN6928.256745.97NaN0
1933114NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-05NaN6910.666867.08NaN0
1933115NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-06NaN6887.926818.96NaN0
1933116NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-07NaN6856.126814.87NaN0
1933117NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-08NaN6889.646819.82NaN0
1933118NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaN2016-09-09NaN6862.386762.30NaN0
\n", "

10020 rows × 29 columns

\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1923099 BP 1977-01-03 76.50 77.6200 76.5000 77.62 12400.0 \n", "1923100 BP 1977-01-04 77.62 78.0000 76.7500 77.00 19300.0 \n", "1923101 BP 1977-01-05 77.00 77.0000 74.5000 74.50 17900.0 \n", "1923102 BP 1977-01-06 74.50 75.5000 74.5000 75.12 23900.0 \n", "1923103 BP 1977-01-07 75.12 75.3800 74.6200 75.12 41700.0 \n", "1923104 BP 1977-01-10 75.12 75.7500 74.5000 75.62 13000.0 \n", "1923105 BP 1977-01-11 75.62 76.3800 74.7500 75.00 13300.0 \n", "1923106 BP 1977-01-12 74.75 74.7500 73.5000 74.25 21000.0 \n", "1923107 BP 1977-01-13 74.25 76.0000 74.1200 76.00 27300.0 \n", "1923108 BP 1977-01-14 76.00 76.0000 75.0000 75.00 10400.0 \n", "1923109 BP 1977-01-17 75.00 75.2500 74.5000 75.25 5000.0 \n", "1923110 BP 1977-01-18 75.00 75.0000 74.7500 74.88 7400.0 \n", "1923111 BP 1977-01-19 75.00 77.2500 75.0000 77.25 33800.0 \n", "1923112 BP 1977-01-20 77.25 77.5000 76.0000 76.00 13900.0 \n", "1923113 BP 1977-01-21 76.00 76.2500 75.6200 75.62 6300.0 \n", "1923114 BP 1977-01-24 75.75 76.6200 75.7500 76.50 18700.0 \n", "1923115 BP 1977-01-25 76.50 76.8800 76.0000 76.62 11400.0 \n", "1923116 BP 1977-01-26 76.75 77.3800 76.7500 77.00 7800.0 \n", "1923117 BP 1977-01-27 77.00 77.0000 76.7500 76.88 7800.0 \n", "1923118 BP 1977-01-28 76.88 77.6200 76.7500 77.00 23000.0 \n", "1923119 BP 1977-01-31 77.00 77.6200 76.5000 76.50 39600.0 \n", "1923120 BP 1977-02-01 76.50 77.2500 76.5000 76.75 13000.0 \n", "1923121 BP 1977-02-02 76.75 77.3800 76.5000 76.75 46600.0 \n", "1923122 BP 1977-02-03 76.75 77.1200 76.5000 76.62 11800.0 \n", "1923123 BP 1977-02-04 76.88 77.5000 76.8800 77.12 10400.0 \n", "1923124 BP 1977-02-07 77.12 78.2500 77.1200 78.25 10300.0 \n", "1923125 BP 1977-02-08 79.12 81.2500 79.1200 80.75 39300.0 \n", "1923126 BP 1977-02-09 83.00 85.0000 83.0000 83.50 87300.0 \n", "1923127 BP 1977-02-10 83.75 84.3800 83.7500 84.25 53200.0 \n", "1923128 BP 1977-02-11 84.25 84.6200 83.5000 84.25 38900.0 \n", "... ... ... ... ... ... ... ... \n", "1933089 BP 2016-08-12 33.79 33.8700 33.6050 33.74 4278935.0 \n", "1933090 BP 2016-08-15 33.92 34.0600 33.7900 33.87 4087756.0 \n", "1933091 BP 2016-08-16 34.08 34.3200 33.9700 34.21 6455172.0 \n", "1933092 BP 2016-08-17 34.04 34.2350 33.8000 34.20 4977785.0 \n", "1933093 BP 2016-08-18 34.29 34.6700 34.2200 34.65 4607627.0 \n", "1933094 BP 2016-08-19 34.35 34.3900 34.1610 34.33 4033734.0 \n", "1933095 BP 2016-08-22 33.83 34.0280 33.6961 33.96 4230680.0 \n", "1933096 BP 2016-08-23 34.08 34.3100 33.9500 34.13 6736722.0 \n", "1933097 BP 2016-08-24 34.27 34.4000 34.1200 34.27 4876906.0 \n", "1933098 BP 2016-08-25 34.33 34.5300 34.1700 34.22 4649044.0 \n", "1933099 BP 2016-08-26 34.38 34.8000 34.0135 34.16 6259955.0 \n", "1933100 BP 2016-08-29 33.90 34.3193 33.9000 34.24 2849481.0 \n", "1933101 BP 2016-08-30 34.23 34.3200 34.0500 34.10 4608200.0 \n", "1933102 BP 2016-08-31 33.99 34.0900 33.7500 33.86 4989062.0 \n", "1933103 BP 2016-09-01 33.81 33.8300 33.4348 33.66 3722531.0 \n", "1933104 BP 2016-09-02 34.25 34.7500 34.1600 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.7600 34.3800 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.9100 34.6500 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.1750 34.6600 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.7000 34.2350 34.35 5434710.0 \n", "1933109 NaN NaN NaN NaN NaN NaN NaN \n", "1933110 NaN NaN NaN NaN NaN NaN NaN \n", "1933111 NaN NaN NaN NaN NaN NaN NaN \n", "1933112 NaN NaN NaN NaN NaN NaN NaN \n", "1933113 NaN NaN NaN NaN NaN NaN NaN \n", "1933114 NaN NaN NaN NaN NaN NaN NaN \n", "1933115 NaN NaN NaN NaN NaN NaN NaN \n", "1933116 NaN NaN NaN NaN NaN NaN NaN \n", "1933117 NaN NaN NaN NaN NaN NaN NaN \n", "1933118 NaN NaN NaN NaN NaN NaN NaN \n", "\n", " Ex-Dividend Split Ratio Adj. Open ... \\\n", "1923099 0.0 1.0 1.990787 ... \n", "1923100 0.0 1.0 2.019933 ... \n", "1923101 0.0 1.0 2.003798 ... \n", "1923102 0.0 1.0 1.938740 ... \n", "1923103 0.0 1.0 1.954874 ... \n", "1923104 0.0 1.0 1.954874 ... \n", "1923105 0.0 1.0 1.967886 ... \n", "1923106 0.0 1.0 1.945246 ... \n", "1923107 0.0 1.0 1.932234 ... \n", "1923108 0.0 1.0 1.977775 ... \n", "1923109 0.0 1.0 1.951752 ... \n", "1923110 0.0 1.0 1.951752 ... \n", "1923111 0.0 1.0 1.951752 ... \n", "1923112 0.0 1.0 2.010304 ... \n", "1923113 0.0 1.0 1.977775 ... \n", "1923114 0.0 1.0 1.971269 ... \n", "1923115 0.0 1.0 1.990787 ... \n", "1923116 0.0 1.0 1.997292 ... \n", "1923117 0.0 1.0 2.003798 ... \n", "1923118 0.0 1.0 2.000676 ... \n", "1923119 0.0 1.0 2.003798 ... \n", "1923120 0.0 1.0 1.990787 ... \n", "1923121 0.0 1.0 1.997292 ... \n", "1923122 0.0 1.0 1.997292 ... \n", "1923123 0.0 1.0 2.000676 ... \n", "1923124 0.0 1.0 2.006921 ... \n", "1923125 0.0 1.0 2.058968 ... \n", "1923126 0.0 1.0 2.159938 ... \n", "1923127 0.0 1.0 2.179456 ... \n", "1923128 0.0 1.0 2.192468 ... \n", "... ... ... ... ... \n", "1933089 0.0 1.0 33.790000 ... \n", "1933090 0.0 1.0 33.920000 ... \n", "1933091 0.0 1.0 34.080000 ... \n", "1933092 0.0 1.0 34.040000 ... \n", "1933093 0.0 1.0 34.290000 ... \n", "1933094 0.0 1.0 34.350000 ... \n", "1933095 0.0 1.0 33.830000 ... \n", "1933096 0.0 1.0 34.080000 ... \n", "1933097 0.0 1.0 34.270000 ... \n", "1933098 0.0 1.0 34.330000 ... \n", "1933099 0.0 1.0 34.380000 ... \n", "1933100 0.0 1.0 33.900000 ... \n", "1933101 0.0 1.0 34.230000 ... \n", "1933102 0.0 1.0 33.990000 ... \n", "1933103 0.0 1.0 33.810000 ... \n", "1933104 0.0 1.0 34.250000 ... \n", "1933105 0.0 1.0 34.550000 ... \n", "1933106 0.0 1.0 34.780000 ... \n", "1933107 0.0 1.0 34.890000 ... \n", "1933108 0.0 1.0 34.630000 ... \n", "1933109 NaN NaN NaN ... \n", "1933110 NaN NaN NaN ... \n", "1933111 NaN NaN NaN ... \n", "1933112 NaN NaN NaN ... \n", "1933113 NaN NaN NaN ... \n", "1933114 NaN NaN NaN ... \n", "1933115 NaN NaN NaN ... \n", "1933116 NaN NaN NaN ... \n", "1933117 NaN NaN NaN ... \n", "1933118 NaN NaN NaN ... \n", "\n", " GAIA Adj. Open GAIA Adj. High GAIA Adj. Low GAIA Adj. Close \\\n", "1923099 NaN NaN NaN NaN \n", "1923100 NaN NaN NaN NaN \n", "1923101 NaN NaN NaN NaN \n", "1923102 NaN NaN NaN NaN \n", "1923103 NaN NaN NaN NaN \n", "1923104 NaN NaN NaN NaN \n", "1923105 NaN NaN NaN NaN \n", "1923106 NaN NaN NaN NaN \n", "1923107 NaN NaN NaN NaN \n", "1923108 NaN NaN NaN NaN \n", "1923109 NaN NaN NaN NaN \n", "1923110 NaN NaN NaN NaN \n", "1923111 NaN NaN NaN NaN \n", "1923112 NaN NaN NaN NaN \n", "1923113 NaN NaN NaN NaN \n", "1923114 NaN NaN NaN NaN \n", "1923115 NaN NaN NaN NaN \n", "1923116 NaN NaN NaN NaN \n", "1923117 NaN NaN NaN NaN \n", "1923118 NaN NaN NaN NaN \n", "1923119 NaN NaN NaN NaN \n", "1923120 NaN NaN NaN NaN \n", "1923121 NaN NaN NaN NaN \n", "1923122 NaN NaN NaN NaN \n", "1923123 NaN NaN NaN NaN \n", "1923124 NaN NaN NaN NaN \n", "1923125 NaN NaN NaN NaN \n", "1923126 NaN NaN NaN NaN \n", "1923127 NaN NaN NaN NaN \n", "1923128 NaN NaN NaN NaN \n", "... ... ... ... ... \n", "1933089 NaN NaN NaN NaN \n", "1933090 NaN NaN NaN NaN \n", "1933091 NaN NaN NaN NaN \n", "1933092 NaN NaN NaN NaN \n", "1933093 NaN NaN NaN NaN \n", "1933094 NaN NaN NaN NaN \n", "1933095 NaN NaN NaN NaN \n", "1933096 NaN NaN NaN NaN \n", "1933097 NaN NaN NaN NaN \n", "1933098 NaN NaN NaN NaN \n", "1933099 NaN NaN NaN NaN \n", "1933100 NaN NaN NaN NaN \n", "1933101 NaN NaN NaN NaN \n", "1933102 NaN NaN NaN NaN \n", "1933103 NaN NaN NaN NaN \n", "1933104 NaN NaN NaN NaN \n", "1933105 NaN NaN NaN NaN \n", "1933106 NaN NaN NaN NaN \n", "1933107 NaN NaN NaN NaN \n", "1933108 NaN NaN NaN NaN \n", "1933109 NaN NaN NaN NaN \n", "1933110 NaN NaN NaN NaN \n", "1933111 NaN NaN NaN NaN \n", "1933112 NaN NaN NaN NaN \n", "1933113 NaN NaN NaN NaN \n", "1933114 NaN NaN NaN NaN \n", "1933115 NaN NaN NaN NaN \n", "1933116 NaN NaN NaN NaN \n", "1933117 NaN NaN NaN NaN \n", "1933118 NaN NaN NaN NaN \n", "\n", " FTSE Date FTSE Open FTSE High FTSE Low FTSE Close \\\n", "1923099 NaN NaN NaN NaN NaN \n", "1923100 NaN NaN NaN NaN NaN \n", "1923101 NaN NaN NaN NaN NaN \n", "1923102 NaN NaN NaN NaN NaN \n", "1923103 NaN NaN NaN NaN NaN \n", "1923104 NaN NaN NaN NaN NaN \n", "1923105 NaN NaN NaN NaN NaN \n", "1923106 NaN NaN NaN NaN NaN \n", "1923107 NaN NaN NaN NaN NaN \n", "1923108 NaN NaN NaN NaN NaN \n", "1923109 NaN NaN NaN NaN NaN \n", "1923110 NaN NaN NaN NaN NaN \n", "1923111 NaN NaN NaN NaN NaN \n", "1923112 NaN NaN NaN NaN NaN \n", "1923113 NaN NaN NaN NaN NaN \n", "1923114 NaN NaN NaN NaN NaN \n", "1923115 NaN NaN NaN NaN NaN \n", "1923116 NaN NaN NaN NaN NaN \n", "1923117 NaN NaN NaN NaN NaN \n", "1923118 NaN NaN NaN NaN NaN \n", "1923119 NaN NaN NaN NaN NaN \n", "1923120 NaN NaN NaN NaN NaN \n", "1923121 NaN NaN NaN NaN NaN \n", "1923122 NaN NaN NaN NaN NaN \n", "1923123 NaN NaN NaN NaN NaN \n", "1923124 NaN NaN NaN NaN NaN \n", "1923125 NaN NaN NaN NaN NaN \n", "1923126 NaN NaN NaN NaN NaN \n", "1923127 NaN NaN NaN NaN NaN \n", "1923128 NaN NaN NaN NaN NaN \n", "... ... ... ... ... ... \n", "1933089 2016-07-29 NaN 6740.47 6691.13 NaN \n", "1933090 2016-08-01 NaN 6769.41 6678.45 NaN \n", "1933091 2016-08-02 NaN 6694.14 6630.76 NaN \n", "1933092 2016-08-03 NaN 6673.63 6621.42 NaN \n", "1933093 2016-08-04 NaN 6749.67 6615.83 NaN \n", "1933094 2016-08-05 NaN 6802.41 6738.57 NaN \n", "1933095 2016-08-08 NaN 6829.47 6781.47 NaN \n", "1933096 2016-08-09 NaN 6863.10 6807.76 NaN \n", "1933097 2016-08-10 NaN 6866.42 6820.04 NaN \n", "1933098 2016-08-11 NaN 6914.71 6812.73 NaN \n", "1933099 2016-08-12 NaN 6931.04 6896.04 NaN \n", "1933100 2016-08-15 NaN 6955.34 6907.17 NaN \n", "1933101 2016-08-16 NaN 6941.19 6893.92 NaN \n", "1933102 2016-08-17 NaN 6920.76 6849.90 NaN \n", "1933103 2016-08-18 NaN 6893.35 6850.61 NaN \n", "1933104 2016-08-19 NaN 6871.48 6840.94 NaN \n", "1933105 2016-08-22 NaN 6884.61 6812.07 NaN \n", "1933106 2016-08-23 NaN 6885.39 6828.54 NaN \n", "1933107 2016-08-24 NaN 6868.51 6825.22 NaN \n", "1933108 2016-08-25 NaN 6836.22 6779.15 NaN \n", "1933109 2016-08-26 NaN 6857.29 6798.82 NaN \n", "1933110 2016-08-30 NaN 6851.83 6808.07 NaN \n", "1933111 2016-08-31 NaN 6832.89 6779.54 NaN \n", "1933112 2016-09-01 NaN 6826.22 6723.21 NaN \n", "1933113 2016-09-02 NaN 6928.25 6745.97 NaN \n", "1933114 2016-09-05 NaN 6910.66 6867.08 NaN \n", "1933115 2016-09-06 NaN 6887.92 6818.96 NaN \n", "1933116 2016-09-07 NaN 6856.12 6814.87 NaN \n", "1933117 2016-09-08 NaN 6889.64 6819.82 NaN \n", "1933118 2016-09-09 NaN 6862.38 6762.30 NaN \n", "\n", " 7-day Moving Average \n", "1923099 0 \n", "1923100 0 \n", "1923101 0 \n", "1923102 0 \n", "1923103 0 \n", "1923104 0 \n", "1923105 0 \n", "1923106 0 \n", "1923107 0 \n", "1923108 0 \n", "1923109 0 \n", "1923110 0 \n", "1923111 0 \n", "1923112 0 \n", "1923113 0 \n", "1923114 0 \n", "1923115 0 \n", "1923116 0 \n", "1923117 0 \n", "1923118 0 \n", "1923119 0 \n", "1923120 0 \n", "1923121 0 \n", "1923122 0 \n", "1923123 0 \n", "1923124 0 \n", "1923125 0 \n", "1923126 0 \n", "1923127 0 \n", "1923128 0 \n", "... ... \n", "1933089 0 \n", "1933090 0 \n", "1933091 0 \n", "1933092 0 \n", "1933093 0 \n", "1933094 0 \n", "1933095 0 \n", "1933096 0 \n", "1933097 0 \n", "1933098 0 \n", "1933099 0 \n", "1933100 0 \n", "1933101 0 \n", "1933102 0 \n", "1933103 0 \n", "1933104 0 \n", "1933105 0 \n", "1933106 0 \n", "1933107 0 \n", "1933108 0 \n", "1933109 0 \n", "1933110 0 \n", "1933111 0 \n", "1933112 0 \n", "1933113 0 \n", "1933114 0 \n", "1933115 0 \n", "1933116 0 \n", "1933117 0 \n", "1933118 0 \n", "\n", "[10020 rows x 29 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# N-day moving averages of adjusted close prices\n", "\n", "def n_day_moving_average(df, moving_average):\n", " # Create a column `N-day moving Average`.\n", " df['%s-day Moving Average' % str(moving_average)] = 0\n", "\n", " for i in range(moving_average, len(bp)):\n", " m_average = sum(df.iloc[i-moving_average:i]['Adj. Close'])/moving_average\n", " df.iloc[i].loc['%s-day Moving Average' % str(moving_average)] = m_average\n", " \n", " return df\n", "\n", "n_day_moving_average(bp, 7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Implementation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.1 Build training and test sets" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def prepare_train_test(days, periods, target='Adj. Close', test_size=0.2, buffer=0, target_days=7): \n", " \"\"\"Returns X_train, X_test, y_train, y_test for parameters.\n", " Predicts prices `target_days` ahead.\n", " `days` = number of days prior we consider\"\"\"\n", " # Columns\n", " columns = []\n", " for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", " columns.append('Adj. High')\n", " columns.append('Adj. Low')\n", "\n", " # Columns: Prices (predict multiple day)\n", " nday_columns = []\n", " for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "\n", " # Index\n", " start_date = bp.iloc[days+buffer][\"Date\"]\n", " index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", " # Create empty dataframes for features and prices\n", " features = pd.DataFrame(index=index, columns=columns)\n", " prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", " nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", " # Prepare test and training sets\n", " for i in range(periods):\n", " # Fill in Target df\n", "# prices.iloc[i]['Target'] = bp.iloc[i+days][target]\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[buffer+i+days+j][target]\n", " # Fill in Features df\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[buffer+i+j][target]\n", " features.iloc[i]['Adj. High'] = max(bp[buffer+i:buffer+i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[buffer+i:buffer+i+days]['Adj. Low'])\n", " print(\"Features\", features.head())\n", " # print(\"Prices\", prices.head())\n", " \n", " X = features\n", " y = nday_prices\n", " \n", " # Train-test split\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " \n", " return X_train, X_test, y_train, y_test" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Features i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1977-05-25 2.31608 2.34522 2.35199 2.36813 2.35511 2.32909 2.3421 \n", "1977-05-26 2.26715 2.31608 2.34522 2.35199 2.36813 2.35511 2.32909 \n", "1977-05-27 2.27054 2.26715 2.31608 2.34522 2.35199 2.36813 2.35511 \n", "1977-05-28 2.26091 2.27054 2.26715 2.31608 2.34522 2.35199 2.36813 \n", "1977-05-29 2.26403 2.26091 2.27054 2.26715 2.31608 2.34522 2.35199 \n", "\n", " i-8 i-9 i-10 ... i-93 i-94 i-95 \\\n", "1977-05-25 2.32258 2.31608 2.32258 ... 1.93223 1.95175 1.96789 \n", "1977-05-26 2.3421 2.32258 2.31608 ... 1.97777 1.93223 1.95175 \n", "1977-05-27 2.32909 2.3421 2.32258 ... 1.95175 1.97777 1.93223 \n", "1977-05-28 2.35511 2.32909 2.3421 ... 1.95826 1.95175 1.97777 \n", "1977-05-29 2.36813 2.35511 2.32909 ... 1.94863 1.95826 1.95175 \n", "\n", " i-96 i-97 i-98 i-99 i-100 Adj. High Adj. Low \n", "1977-05-25 1.95487 1.95487 1.93874 2.0038 2.01993 2.37463 1.91272 \n", "1977-05-26 1.96789 1.95487 1.95487 1.93874 2.0038 2.37463 1.91272 \n", "1977-05-27 1.95175 1.96789 1.95487 1.95487 1.93874 2.37463 1.91272 \n", "1977-05-28 1.93223 1.95175 1.96789 1.95487 1.95487 2.37463 1.91272 \n", "1977-05-29 1.97777 1.93223 1.95175 1.96789 1.95487 2.37463 1.91272 \n", "\n", "[5 rows x 102 columns]\n", "Train shapes (X,y): (800, 102) (800, 7)\n", "Test shapes (X,y): (200, 102) (200, 7)\n" ] } ], "source": [ "# Initialise variables\n", "# Number of days prior that we consider\n", "days = 100\n", "# Number of train and test examples combined\n", "periods = 1000\n", "# Entries that we exclude from consideration completely\n", "buffer = 0 \n", "\n", "X_train, X_test, y_train, y_test = prepare_train_test(days, periods, buffer=buffer)\n", "\n", "print(\"Train shapes (X,y): \", X_train.shape, y_train.shape)\n", "print(\"Test shapes (X,y): \", X_test.shape, y_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2 Classifier" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import MultiOutputRegressor to handle predicting multiple outputs\n", "from sklearn.multioutput import MultiOutputRegressor\n", "\n", "# Import metrics\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Helper functions for metrics\n", "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2))\n", "\n", "def print_metrics(test, pred):\n", " print(\"Root Mean Squared Percentage Error\", rmsp(test, pred))\n", " print(\"Mean Absolute Error: \", mean_absolute_error(test, pred))\n", " print(\"Explained Variance Score: \", explained_variance_score(test, pred))\n", " print(\"Mean Squared Error: \", mean_squared_error(test, pred))\n", " print(\"R2 score: \", r2_score(test, pred))\n", "# print(\"Median Absolute Error: \", median_absolute_error(test, pred))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Import Classifiers\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Apply Classifier and Print Metrics\n", "def classify_and_metrics(clf=LinearRegression()):\n", " \"\"\"Trains and tests classifier on training and test datasets.\n", " Prints performance metrics.\n", " \"\"\"\n", " clf = MultiOutputRegressor(clf)\n", " clf.fit(X_train, y_train)\n", " pred = clf.predict(X_test)\n", " \n", " # Print metrics\n", " print(\"# Days used to predict: %s\" % str(days))\n", " print(\"\\n%s-day predictions\" % str(target_days)) \n", " print_metrics(y_test, pred)\n", " return rmsp(y_test, pred)\n", "# return clf, pred" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false, "scrolled": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "Features i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1977-01-12 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 2.01993 \n", "1977-01-13 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 \n", "1977-01-14 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 \n", "1977-01-15 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 \n", "1977-01-16 1.95826 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 \n", "\n", " Adj. High Adj. Low \n", "1977-01-12 2.02982 1.93874 \n", "1977-01-13 2.02982 1.91272 \n", "1977-01-14 2.0038 1.91272 \n", "1977-01-15 1.98766 1.91272 \n", "1977-01-16 1.98766 1.91272 \n", "# Days used to predict: 100\n" ] }, { "ename": "NameError", "evalue": "name 'target_days' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbuffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0mX_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mprepare_train_test\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdays\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m7\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mperiods\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbuffer\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mbuffer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mclassify_and_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m\u001b[0m in \u001b[0;36mclassify_and_metrics\u001b[0;34m(clf)\u001b[0m\n\u001b[1;32m 10\u001b[0m \u001b[0;31m# Print metrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"# Days used to predict: %s\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdays\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"\\n%s-day predictions\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtarget_days\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 13\u001b[0m \u001b[0mprint_metrics\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 14\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrmsp\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'target_days' is not defined" ] } ], "source": [ "# Do multiple train-test cycles on different train-test sets and see\n", "# if they all produce reliable results\n", "errors=[]\n", "daily_average = []\n", "for segment in range(5):\n", " buffer = segment*1000\n", " print(buffer)\n", " X_train, X_test, y_train, y_test = prepare_train_test(days=7, periods=1000, buffer=buffer)\n", " errors.append(classify_and_metrics())\n", "print(errors)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "average_daily_error = []\n", "for target_day in range(7):\n", " average_daily_error.append([])\n", "for segment in range(5):\n", " for target_day in range(7):\n", " average_daily_error[target_day].append(errors[segment][target_day])\n", "average_daily_error" ] }, { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [ "# Classifier for one-day predictions\n", "from sklearn import svm\n", "from sklearn.linear_model import LinearRegression\n", "\n", "# CHANGE MODEL HERE\n", "# Other models used: svm.SVR()\n", "model = LinearRegression()\n", "# model = svm.SVR()\n", "clf = model\n", "\n", "clf.fit(X_train, y_train)\n", "pred = clf.predict(X_test)\n", "\n", "# Classifier for multi-day predictions\n", "\n", "from sklearn.multioutput import MultiOutputRegressor\n", "clf_nd = MultiOutputRegressor(model)\n", "\n", "clf_nd.fit(Xnd_train, ynd_train)\n", "pred_nd = clf_nd.predict(Xnd_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Metrics" ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [ "def rmsp(test, pred):\n", " return np.sqrt(np.mean(((test - pred)/test)**2))" ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [ "def print_metrics(test, pred):\n", " print(\"Root Mean Squared Percentage Error\", rmsp(test, pred))\n", " print(\"Mean Absolute Error: \", mean_absolute_error(test, pred))\n", " print(\"Explained Variance Score: \", explained_variance_score(test, pred))\n", " print(\"Mean Squared Error: \", mean_squared_error(test, pred))\n", " print(\"R2 score: \", r2_score(test, pred))\n", " print(\"Median Absolute Error: \", median_absolute_error(test, pred))" ] }, { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [ "print(\"# Days used to predict: %s\" % str(days))\n", "print(\"\\nOne day predictions\")\n", "print_metrics(y_test, pred)\n", "print(\"\\n%s-day predictions\" % str(target_days)) \n", "print_metrics(ynd_test, pred_nd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Some results" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "svm.SVR():\n", "\n", "One day predictions\n", "Mean Absolute Error: 11.1829830122\n", "Explained Variance Score: -1.66635035086\n", "Mean Squared Error: 211.531318796\n", "R2 score: -5.40633919704\n", "Median Absolute Error: 9.17554533596\n", "\n", "N-day predictions\n", "Mean Absolute Error: 11.2383724498\n", "Explained Variance Score: -1.63454082875\n", "Mean Squared Error: 210.05844132\n", "R2 score: -5.36029037396" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "LinearRegression():\n", "\n", "One day predictions\n", "Mean Absolute Error: 0.504769429579\n", "Explained Variance Score: 0.984898917427\n", "Mean Squared Error: 0.498980708615\n", "R2 score: 0.984888102195\n", "Median Absolute Error: 0.383303136963\n", "\n", "N-day predictions\n", "Mean Absolute Error: 0.988972868667\n", "Explained Variance Score: 0.944785820963\n", "Mean Squared Error: 1.83053746507\n", "R2 score: 0.944573758878" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Refinement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 Tuning model parameters\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "columns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion: Free-Form Visualisation" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Visualisation 1: Plotting predictions compared with actual prices\n", "# Plot predictions\n", "# Plot actual adjusted close prices\n", "\n", "bp.plot('Adjusted Close').set_title(\"Model Predictions against BP Actual Adjusted Close Prices\")\n", "\n", "# bp.plot('7-day Predictions', secondary_y=True)\n", "\n", "# Visualisation 2: Plotting error for each day compared with percentage\n", "# variation\n", "\n", "# TODO: Plot error for each day\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Visualisation 2:\n", "# bp.plot('Percentage Error')\n", "ax = bp.plot(secondary_y=['Percentage Variation', mark_right=False])\n", "ax.set_ylabel('RMS Percentage Error Scale')\n", "ax.right_ax.set_ylabel('Percentage Variation Scale')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Deprecated" ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [ "# Initialise variables\n", "# Number of days prior that we consider\n", "days = 100\n", "# Number of train and test examples combined\n", "periods = 9000\n", "\n", "# Columns\n", "columns = []\n", "for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", "columns.append('Adj. High')\n", "columns.append('Adj. Low')\n", "print(columns)\n", "\n", "# Index\n", "start_date = bp.iloc[days][\"Date\"]\n", "print(\"Start date: \", start_date)\n", "index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", "# Create empty dataframes for features and prices\n", "features = pd.DataFrame(index=index, columns=columns)\n", "prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", "\n", "# Prepare test and training sets\n", "for i in range(periods):\n", " prices.iloc[i]['Target'] = bp.iloc[i+days]['Adj. Close']\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(days-j)] = bp.iloc[i+j]['Adj. Close']\n", " features.iloc[i]['Adj. High'] = max(bp[i:i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[i:i+days]['Adj. Low'])\n", "print(features.head())\n", "print(prices.head())" ] }, { "cell_type": "raw", "metadata": { "collapsed": true }, "source": [ "# N-day prices target\n", "\n", "# Initialise variables\n", "target_days = 7\n", "\n", "# Create target dataframe\n", "nday_columns = []\n", "for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", "# Fill target dataframe\n", "for i in range(periods):\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[i+days+j]['Adj. Close']\n", "nday_prices" ] }, { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [ "# Train-test split (predict prices one day ahead)\n", "def train_test_split_noshuffle(X, y, test_size=0.2):\n", " if len(X) != len(y):\n", " return \"Error\"\n", " split_index = int(len(X) * (1-test_size))\n", " X_train = X[:split_index]\n", " X_test = X[split_index:]\n", " y_train = y[:split_index]\n", " y_test = y[split_index:]\n", " return X_train, X_test, y_train, y_test\n", "\n", "X_train, X_test, y_train, y_test = train_test_split_noshuffle(features, prices, test_size=0.2)\n", "\n", "print(\"Train shapes (X,y): \", X_train.shape, y_train.shape)\n", "print(\"Test shapes (X,y): \", X_test.shape, y_test.shape)" ] }, { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [ "# Train-test split (predict prices `target_days` days ahead)\n", "\n", "Xnd_train, Xnd_test, ynd_train, ynd_test = train_test_split_noshuffle(features, nday_prices, test_size=0.2)\n", "\n", "print(\"Train shapes (Xnd,ynd): \", Xnd_train.shape, ynd_train.shape)\n", "print(\"Test shapes (Xnd,ynd): \", Xnd_test.shape, ynd_test.shape)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/lse-list.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LSE list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### For (1) Finding the stocks that are relevant to BP and (2) Finding out more about BP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Contextual Information\n", "I also supplemented this information with a **list of Companies and Securities from the London Stock Exchange** (spreadsheet `list-of-all-securites-ex-debt` from [this page](http://www.londonstockexchange.com/statistics/companies-and-issuers/companies-and-issuers.htm). The spreadsheet includes the following attributes for all securities (excluding debt) that were listed on the LSE as of the end of August 2016:\n", "* Security Start Date, \n", "* Company Name, \n", "* Country of Incorporation, \n", "* LSE Market\t(UK Main Market, International Main Market, AIM (Alternative Investment Market)...), \n", "* FCA Listing Category (Standard Shares, Standard Debt...) (FCA stands for Financial Conduct Authority), \n", "* ISIN (International Securities Identification Number), \n", "* Security Name (code, e.g. PELS'90' 20/11/17(WORLD BASKET P/WT)GBP1 for Barclays Bank PLC),\n", "* TIDM (stock symbol: Tradable Instrument Display Mnemonic), \n", "* Mkt Cap £m, \t\n", "* Shares in Issue, \n", "* Industry, \n", "* Supersector, \n", "* Sector, \n", "* Subsector, \n", "* Group (a number, e.g. 8355 for banks), \n", "* MarketSegmentCode, \n", "* MarketSectorCode, and \n", "* Trading Currency (GBX, USD, EUR).\n", "\n", "Not every column of every row of this spreadsheet is filled. There are some blank cells.\n", "\n", "I converted the spreadsheet to a CSV and imported it below:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
02-Aug-061PM PLCGBAIMNaNGB00BCDBXK43ORD GBP0.1OPM33.88472952,534,463.00FinancialsFinancial ServicesFinancial ServicesSpecialty Finance8775AIMAIMGBX
12-Feb-091SPATIAL PLCGBAIMNaNGB00B09LQS34ORD GBP0.01SPA32.293431738,135,558.00IndustrialsIndustrial Goods & ServicesSupport ServicesBusiness Support Services2791AIMAIMGBX
215-Apr-0521ST CENTURY TECHNOLOGY PLCGBAIMNaNGB0008866310ORD GBP0.065C211.74824593,239,755.00IndustrialsIndustrial Goods & ServicesSupport ServicesBusiness Support Services2791AIMAIMGBX
323-Sep-0532REDGIAIMNaNGI000A0F56M0ORD GBP0.002TTR108.90199683,690,295.00Consumer ServicesTravel & LeisureTravel & LeisureGambling5752AMSMASM6GBX
421-Aug-15365 AGILE GROUP PLCGBAIMNaNGB00BYY8NN14ORD GBP0.303655.01222918,914,073.00IndustrialsIndustrial Goods & ServicesElectronic & Electrical EquipmentElectrical Components & Equipment2733ASQ1AMQ1GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "0 2-Aug-06 1PM PLC \n", "1 2-Feb-09 1SPATIAL PLC \n", "2 15-Apr-05 21ST CENTURY TECHNOLOGY PLC \n", "3 23-Sep-05 32RED \n", "4 21-Aug-15 365 AGILE GROUP PLC \n", "\n", " Country of Incorporation LSE Market FCA Listing Category ISIN \\\n", "0 GB AIM NaN GB00BCDBXK43 \n", "1 GB AIM NaN GB00B09LQS34 \n", "2 GB AIM NaN GB0008866310 \n", "3 GI AIM NaN GI000A0F56M0 \n", "4 GB AIM NaN GB00BYY8NN14 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "0 ORD GBP0.1 OPM 33.884729 \n", "1 ORD GBP0.01 SPA 32.293431 \n", "2 ORD GBP0.065 C21 1.748245 \n", "3 ORD GBP0.002 TTR 108.901996 \n", "4 ORD GBP0.30 365 5.012229 \n", "\n", " Shares in Issue Industry Supersector \\\n", "0 52,534,463.00 Financials Financial Services \n", "1 738,135,558.00 Industrials Industrial Goods & Services \n", "2 93,239,755.00 Industrials Industrial Goods & Services \n", "3 83,690,295.00 Consumer Services Travel & Leisure \n", "4 18,914,073.00 Industrials Industrial Goods & Services \n", "\n", " Sector Subsector \\\n", "0 Financial Services Specialty Finance \n", "1 Support Services Business Support Services \n", "2 Support Services Business Support Services \n", "3 Travel & Leisure Gambling \n", "4 Electronic & Electrical Equipment Electrical Components & Equipment \n", "\n", " Group MarketSegmentCode MarketSectorCode Trading Currency \n", "0 8775 AIM AIM GBX \n", "1 2791 AIM AIM GBX \n", "2 2791 AIM AIM GBX \n", "3 5752 AMSM ASM6 GBX \n", "4 2733 ASQ1 AMQ1 GBX " ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lse_list = pd.read_csv(\"list-of-all-securities-ex-debt.csv\")\n", "# Delete extra columns of NaNs\n", "for i in range(18,36):\n", " del lse_list['Unnamed: %s' % str(i)]\n", "lse_list.head()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
36820-Dec-54BPGBUK Main MarketStandard SharesGB00013854749% CUM 2ND PRF GBP1BP.B80288.5319935,473,414.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
36920-Dec-54BPGBUK Main MarketStandard SharesGB00013852508% CUM 1ST PRF GBP1BP.A80288.5319937,232,838.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
37020-Dec-54BPGBUK Main MarketPremium Equity Commercial CompaniesGB0007980591ORD USD0.25BP.80288.53199318,758,751,584.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "368 20-Dec-54 BP \n", "369 20-Dec-54 BP \n", "370 20-Dec-54 BP \n", "\n", " Country of Incorporation LSE Market \\\n", "368 GB UK Main Market \n", "369 GB UK Main Market \n", "370 GB UK Main Market \n", "\n", " FCA Listing Category ISIN \\\n", "368 Standard Shares GB0001385474 \n", "369 Standard Shares GB0001385250 \n", "370 Premium Equity Commercial Companies GB0007980591 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "368 9% CUM 2ND PRF GBP1 BP.B 80288.531993 \n", "369 8% CUM 1ST PRF GBP1 BP.A 80288.531993 \n", "370 ORD USD0.25 BP. 80288.531993 \n", "\n", " Shares in Issue Industry Supersector Sector \\\n", "368 5,473,414.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "369 7,232,838.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "370 18,758,751,584.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "\n", " Subsector Group MarketSegmentCode MarketSectorCode \\\n", "368 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "369 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "370 Integrated Oil & Gas 537 SET0 FE00 \n", "\n", " Trading Currency \n", "368 GBX \n", "369 GBX \n", "370 GBX " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lse_list[368:371]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And let's look at all the stocks that are in that group:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of companies: 27\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Security Start DateCompany NameCountry of IncorporationLSE MarketFCA Listing CategoryISINSecurity NameTIDMMkt Cap £mShares in IssueIndustrySupersectorSectorSubsectorGroupMarketSegmentCodeMarketSectorCodeTrading Currency
36820-Dec-54BPGBUK Main MarketStandard SharesGB00013854749% CUM 2ND PRF GBP1BP.B80288.5319935,473,414.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
36920-Dec-54BPGBUK Main MarketStandard SharesGB00013852508% CUM 1ST PRF GBP1BP.A80288.5319937,232,838.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSQ3SQS3GBX
37020-Dec-54BPGBUK Main MarketPremium Equity Commercial CompaniesGB0007980591ORD USD0.25BP.80288.53199318,758,751,584.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
49918-Oct-00CHINA PETROLEUM & CHEMICAL CORPCNInternational Main MarketStandard GDRsUS16941R1086ADS EACH REP 100'H'SHS CNY1SNP8820.761210192,975,620.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLUUSD
99615-Nov-99GAIL(INDIA)INPSMStandard GDRsUS36268T1079GDR EACH REP 6 ORD INR10 144AGAIA0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINPEUSD
99715-Nov-99GAIL(INDIA)INPSMStandard GDRsUS36268T2069GDR EACH REP 6 ORD INR10 REG'S'GAID0.00000025,833,333.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEIPHEUSD
100912-Jun-06GAZPROM NEFT PJSCRUTrading OnlyNaNUS36829G1076LEVEL 1 ADR EACH REPR 5 ORD SHSGAZ0.00000020,348,882.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEINHEUSD
101028-Oct-96GAZPROM OAORUInternational Main MarketStandard GDRsUS3682871088ADS EACH REP 10 ORD REGD 144A81JK36475.6963090.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
101128-Oct-96GAZPROM OAORUInternational Main MarketStandard GDRsUS3682872078ADS EACH REPR 2 ORD SHSOGZD36475.69630911,836,756,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
108327-Oct-14GREEN DRAGON GAS LTDKYInternational Main MarketStandard SharesKYG409381053ORD USD0.0001 (DI)GDG359.348630142,316,289.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSMUSMEWGBX
116430-Jun-98HELLENIC PETROLEUM SAGRInternational Main MarketStandard GDRsUS4233231046GDS EACH REPR 1 ORD SH'144A'98LQ0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
116530-Jun-98HELLENIC PETROLEUM SAGRInternational Main MarketStandard GDRsUS4233232036GDS EACH REPR 1 ORD REG'S'HLPD0.00000023,215,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLNUSD
15627-May-97LUKOIL PJSCRUInternational Main MarketStandard GDRsUS69343P2048GDR EACH REPR 1 ORD RUB0.025 SPON 144ALKOE58934.5838413,450,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
15637-May-97LUKOIL PJSCRUInternational Main MarketStandard GDRsUS69343P1057ADR EACH REPR 1 ORD RUB0.025 SPONLKOD58934.583841850,563,000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
15647-May-97LUKOIL PJSCRUInternational Main MarketStandard SharesRU0009024277RUB0.025LKOH58934.583841850,563,255.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSX4SXSNUSD
158227-Sep-04MAGYAR OLAJ-ES GAZIPARE RESZVENYTARHUTrading OnlyNaNUS6084642023ADR EACH REP 0.50 ORD SHS(REG'S')MOLD0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBUINLNUSD
16012-Jun-95MANDO MACHINERY CORPKRInternational Main MarketStandard GDRsUSY576241019GDR EACH REP 1/2 ORDMNMD0.000000806,234.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBULLLNUSD
16022-Jun-95MANDO MACHINERY CORPKRInternational Main MarketStandard GDRsUS5626651096GDR EACH REPR 1/2 SHARE(144A)05IS0.0000000.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
217719-Jul-06ROSNEFT OIL CORUInternational Main MarketStandard GDRsUS67812M1080GDR EACH REPR 1 ORD '144A'40XT38202.6640970.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537MISCINTMUSD
217819-Jul-06ROSNEFT OIL CORUInternational Main MarketStandard GDRsUS67812M2070GDR EACH REPR 1 ORD 'REGS'ROSN38202.6640979,597,430,705.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
220420-Jul-05ROYAL DUTCH SHELLGBUK Main MarketPremium Equity Commercial CompaniesGB00B03MLX29'A'ORD EUR0.07RDSA153220.7153974,325,899,655.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
220520-Jul-05ROYAL DUTCH SHELLGBUK Main MarketPremium Equity Commercial CompaniesGB00B03MM408ORD EUR0.07 BRDSB153220.7153973,745,486,731.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SET0FE00GBX
22228-Apr-11SACOIL HLDGS LTDZAAIMNaNZAE000127460NPV(DI)SAC30.3526943,195,020,413.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537ASQ1AMQ1GBX
247027-Sep-04SURGUTNEFTEGAZRUTrading OnlyNaNUS8688612048ADR EACH REPR 10 ORDSGGD0.000000340,597,744.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBEINHEUSD
250413-Dec-96TATNEFT PJSCRUInternational Main MarketStandard GDRsUS8766292051ADR EACH REP 6 ORD SHS REGSATAD8160.571386363,116,666.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537IOBELLHEUSD
256426-Sep-73TOTAL SAFRInternational Main MarketStandard SharesFR0000120271EUR2.5TTA88787.0792862,444,133,158.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537SSMUSMEUEUR
279718-Jun-14ZOLTAV RESOURCES INCKYAIMNaNKYG9895N1198ORD USD0.2 (DI)ZOL31.883712141,705,386.00Oil & GasOil & GasOil & Gas ProducersIntegrated Oil & Gas537ASQ1AMQ1GBX
\n", "
" ], "text/plain": [ " Security Start Date Company Name \\\n", "368 20-Dec-54 BP \n", "369 20-Dec-54 BP \n", "370 20-Dec-54 BP \n", "499 18-Oct-00 CHINA PETROLEUM & CHEMICAL CORP \n", "996 15-Nov-99 GAIL(INDIA) \n", "997 15-Nov-99 GAIL(INDIA) \n", "1009 12-Jun-06 GAZPROM NEFT PJSC \n", "1010 28-Oct-96 GAZPROM OAO \n", "1011 28-Oct-96 GAZPROM OAO \n", "1083 27-Oct-14 GREEN DRAGON GAS LTD \n", "1164 30-Jun-98 HELLENIC PETROLEUM SA \n", "1165 30-Jun-98 HELLENIC PETROLEUM SA \n", "1562 7-May-97 LUKOIL PJSC \n", "1563 7-May-97 LUKOIL PJSC \n", "1564 7-May-97 LUKOIL PJSC \n", "1582 27-Sep-04 MAGYAR OLAJ-ES GAZIPARE RESZVENYTAR \n", "1601 2-Jun-95 MANDO MACHINERY CORP \n", "1602 2-Jun-95 MANDO MACHINERY CORP \n", "2177 19-Jul-06 ROSNEFT OIL CO \n", "2178 19-Jul-06 ROSNEFT OIL CO \n", "2204 20-Jul-05 ROYAL DUTCH SHELL \n", "2205 20-Jul-05 ROYAL DUTCH SHELL \n", "2222 8-Apr-11 SACOIL HLDGS LTD \n", "2470 27-Sep-04 SURGUTNEFTEGAZ \n", "2504 13-Dec-96 TATNEFT PJSC \n", "2564 26-Sep-73 TOTAL SA \n", "2797 18-Jun-14 ZOLTAV RESOURCES INC \n", "\n", " Country of Incorporation LSE Market \\\n", "368 GB UK Main Market \n", "369 GB UK Main Market \n", "370 GB UK Main Market \n", "499 CN International Main Market \n", "996 IN PSM \n", "997 IN PSM \n", "1009 RU Trading Only \n", "1010 RU International Main Market \n", "1011 RU International Main Market \n", "1083 KY International Main Market \n", "1164 GR International Main Market \n", "1165 GR International Main Market \n", "1562 RU International Main Market \n", "1563 RU International Main Market \n", "1564 RU International Main Market \n", "1582 HU Trading Only \n", "1601 KR International Main Market \n", "1602 KR International Main Market \n", "2177 RU International Main Market \n", "2178 RU International Main Market \n", "2204 GB UK Main Market \n", "2205 GB UK Main Market \n", "2222 ZA AIM \n", "2470 RU Trading Only \n", "2504 RU International Main Market \n", "2564 FR International Main Market \n", "2797 KY AIM \n", "\n", " FCA Listing Category ISIN \\\n", "368 Standard Shares GB0001385474 \n", "369 Standard Shares GB0001385250 \n", "370 Premium Equity Commercial Companies GB0007980591 \n", "499 Standard GDRs US16941R1086 \n", "996 Standard GDRs US36268T1079 \n", "997 Standard GDRs US36268T2069 \n", "1009 NaN US36829G1076 \n", "1010 Standard GDRs US3682871088 \n", "1011 Standard GDRs US3682872078 \n", "1083 Standard Shares KYG409381053 \n", "1164 Standard GDRs US4233231046 \n", "1165 Standard GDRs US4233232036 \n", "1562 Standard GDRs US69343P2048 \n", "1563 Standard GDRs US69343P1057 \n", "1564 Standard Shares RU0009024277 \n", "1582 NaN US6084642023 \n", "1601 Standard GDRs USY576241019 \n", "1602 Standard GDRs US5626651096 \n", "2177 Standard GDRs US67812M1080 \n", "2178 Standard GDRs US67812M2070 \n", "2204 Premium Equity Commercial Companies GB00B03MLX29 \n", "2205 Premium Equity Commercial Companies GB00B03MM408 \n", "2222 NaN ZAE000127460 \n", "2470 NaN US8688612048 \n", "2504 Standard GDRs US8766292051 \n", "2564 Standard Shares FR0000120271 \n", "2797 NaN KYG9895N1198 \n", "\n", " Security Name TIDM Mkt Cap £m \\\n", "368 9% CUM 2ND PRF GBP1 BP.B 80288.531993 \n", "369 8% CUM 1ST PRF GBP1 BP.A 80288.531993 \n", "370 ORD USD0.25 BP. 80288.531993 \n", "499 ADS EACH REP 100'H'SHS CNY1 SNP 8820.761210 \n", "996 GDR EACH REP 6 ORD INR10 144A GAIA 0.000000 \n", "997 GDR EACH REP 6 ORD INR10 REG'S' GAID 0.000000 \n", "1009 LEVEL 1 ADR EACH REPR 5 ORD SHS GAZ 0.000000 \n", "1010 ADS EACH REP 10 ORD REGD 144A 81JK 36475.696309 \n", "1011 ADS EACH REPR 2 ORD SHS OGZD 36475.696309 \n", "1083 ORD USD0.0001 (DI) GDG 359.348630 \n", "1164 GDS EACH REPR 1 ORD SH'144A' 98LQ 0.000000 \n", "1165 GDS EACH REPR 1 ORD REG'S' HLPD 0.000000 \n", "1562 GDR EACH REPR 1 ORD RUB0.025 SPON 144A LKOE 58934.583841 \n", "1563 ADR EACH REPR 1 ORD RUB0.025 SPON LKOD 58934.583841 \n", "1564 RUB0.025 LKOH 58934.583841 \n", "1582 ADR EACH REP 0.50 ORD SHS(REG'S') MOLD 0.000000 \n", "1601 GDR EACH REP 1/2 ORD MNMD 0.000000 \n", "1602 GDR EACH REPR 1/2 SHARE(144A) 05IS 0.000000 \n", "2177 GDR EACH REPR 1 ORD '144A' 40XT 38202.664097 \n", "2178 GDR EACH REPR 1 ORD 'REGS' ROSN 38202.664097 \n", "2204 'A'ORD EUR0.07 RDSA 153220.715397 \n", "2205 ORD EUR0.07 B RDSB 153220.715397 \n", "2222 NPV(DI) SAC 30.352694 \n", "2470 ADR EACH REPR 10 ORD SGGD 0.000000 \n", "2504 ADR EACH REP 6 ORD SHS REGS ATAD 8160.571386 \n", "2564 EUR2.5 TTA 88787.079286 \n", "2797 ORD USD0.2 (DI) ZOL 31.883712 \n", "\n", " Shares in Issue Industry Supersector Sector \\\n", "368 5,473,414.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "369 7,232,838.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "370 18,758,751,584.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "499 192,975,620.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "996 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "997 25,833,333.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1009 20,348,882.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1010 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1011 11,836,756,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1083 142,316,289.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1164 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1165 23,215,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1562 3,450,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1563 850,563,000.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1564 850,563,255.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1582 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1601 806,234.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "1602 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2177 0.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2178 9,597,430,705.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2204 4,325,899,655.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2205 3,745,486,731.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2222 3,195,020,413.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2470 340,597,744.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2504 363,116,666.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2564 2,444,133,158.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "2797 141,705,386.00 Oil & Gas Oil & Gas Oil & Gas Producers \n", "\n", " Subsector Group MarketSegmentCode MarketSectorCode \\\n", "368 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "369 Integrated Oil & Gas 537 SSQ3 SQS3 \n", "370 Integrated Oil & Gas 537 SET0 FE00 \n", "499 Integrated Oil & Gas 537 IOBU LLLU \n", "996 Integrated Oil & Gas 537 MISC INPE \n", "997 Integrated Oil & Gas 537 IOBE IPHE \n", "1009 Integrated Oil & Gas 537 IOBE INHE \n", "1010 Integrated Oil & Gas 537 MISC INTM \n", "1011 Integrated Oil & Gas 537 IOBE LLHE \n", "1083 Integrated Oil & Gas 537 SSMU SMEW \n", "1164 Integrated Oil & Gas 537 MISC INTM \n", "1165 Integrated Oil & Gas 537 IOBU LLLN \n", "1562 Integrated Oil & Gas 537 MISC INTM \n", "1563 Integrated Oil & Gas 537 IOBE LLHE \n", "1564 Integrated Oil & Gas 537 SSX4 SXSN \n", "1582 Integrated Oil & Gas 537 IOBU INLN \n", "1601 Integrated Oil & Gas 537 IOBU LLLN \n", "1602 Integrated Oil & Gas 537 MISC INTM \n", "2177 Integrated Oil & Gas 537 MISC INTM \n", "2178 Integrated Oil & Gas 537 IOBE LLHE \n", "2204 Integrated Oil & Gas 537 SET0 FE00 \n", "2205 Integrated Oil & Gas 537 SET0 FE00 \n", "2222 Integrated Oil & Gas 537 ASQ1 AMQ1 \n", "2470 Integrated Oil & Gas 537 IOBE INHE \n", "2504 Integrated Oil & Gas 537 IOBE LLHE \n", "2564 Integrated Oil & Gas 537 SSMU SMEU \n", "2797 Integrated Oil & Gas 537 ASQ1 AMQ1 \n", "\n", " Trading Currency \n", "368 GBX \n", "369 GBX \n", "370 GBX \n", "499 USD \n", "996 USD \n", "997 USD \n", "1009 USD \n", "1010 USD \n", "1011 USD \n", "1083 GBX \n", "1164 USD \n", "1165 USD \n", "1562 USD \n", "1563 USD \n", "1564 USD \n", "1582 USD \n", "1601 USD \n", "1602 USD \n", "2177 USD \n", "2178 USD \n", "2204 GBX \n", "2205 GBX \n", "2222 GBX \n", "2470 USD \n", "2504 USD \n", "2564 EUR \n", "2797 GBX " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(\"Number of companies: \", len(lse_list[lse_list['Group'] == 537]))\n", "lse_list[lse_list['Group'] == 537]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['BP ',\n", " 'CHINA PETROLEUM & CHEMICAL CORP ',\n", " 'GAIL(INDIA) ',\n", " 'GAZPROM NEFT PJSC ',\n", " 'GAZPROM OAO ',\n", " 'GREEN DRAGON GAS LTD ',\n", " 'HELLENIC PETROLEUM SA ',\n", " 'LUKOIL PJSC ',\n", " 'MAGYAR OLAJ-ES GAZIPARE RESZVENYTAR',\n", " 'MANDO MACHINERY CORP ',\n", " 'ROSNEFT OIL CO ',\n", " 'ROYAL DUTCH SHELL ',\n", " 'SACOIL HLDGS LTD ',\n", " 'SURGUTNEFTEGAZ ',\n", " 'TATNEFT PJSC ',\n", " 'TOTAL SA ',\n", " 'ZOLTAV RESOURCES INC '], dtype=object)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Print only company names\n", "lse_list[lse_list['Group'] == 537]['Company Name'].unique()" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array(['BP.B', 'BP.A', 'BP. ', 'SNP ', 'GAIA', 'GAID', 'GAZ ', '81JK',\n", " 'OGZD', 'GDG ', '98LQ', 'HLPD', 'LKOE', 'LKOD', 'LKOH', 'MOLD',\n", " 'MNMD', '05IS', '40XT', 'ROSN', 'RDSA', 'RDSB', 'SAC ', 'SGGD',\n", " 'ATAD', 'TTA ', 'ZOL '], dtype=object)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Print only company names\n", "oil_symbols = lse_list[lse_list['Group'] == 537]['TIDM'].unique()\n", "oil_symbols" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'df' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcompanies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'Symbol'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munique\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mcompanies\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'df' is not defined" ] } ], "source": [ "companies = df['Symbol'].unique()\n", "companies" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "OMG do I have to compile the freaking FTSE100 myself??" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
tickernamepremium_codefree_code
0ADNAberdeen Asset ManagementNaNGOOG/LON_ADN
1ADMAdmiral GroupEOD/ADMGOOG/LON_ADM
2AGKAggrekoNaNGOOG/LON_AGK
3AMECAMECNaNGOOG/LON_AMEC
4AALAnglo American plcEOD/AALGOOG/LON_AAL
5ANTOAntofagastaNaNGOOG/LON_ANTO
6ARMARM HoldingsNaNGOOG/LON_ARM
7ABFAssociated British FoodsNaNGOOG/LON_ABF
8AZNAstraZenecaEOD/AZNGOOG/LON_AZN
9AVAvivaEOD/AVNaN
10BABBabcock InternationalEOD/BABGOOG/LON_BAB
11BABAE SystemsEOD/BANaN
12BARCBarclaysNaNGOOG/LON_BARC
13BGBG GroupEOD/BGNaN
14BLTBHP BillitonEOD/BLTGOOG/LON_BLT
15BPBPEOD/BPNaN
16BTIBritish American TobaccoEOD/BTINaN
17BLNDBritish Land CoNaNGOOG/LON_BLND
18BSYBSkyBNaNGOOG/LON_BSY
19BT_ABT GroupNaNGOOG/LON_BT_A
20BNZLBunzlNaNGOOG/LON_BNZL
21BRBYBurberry GroupNaNGOOG/LON_BRBY
22CPICapitaEOD/CPIGOOG/LON_CPI
23CUKCarnival plcEOD/CUKGOOG/LON_CUK
24CNACentricaEOD/CNAGOOG/LON_CNA
25CCHCoca-Cola HBC AGNaNNaN
26CPGCompass GroupEOD/CPGGOOG/LON_CPG
27CRHCRH plcEOD/CRHGOOG/LON_CRH
28CRDACroda InternationalNaNGOOG/LON_CRDA
29DGEDiageoNaNGOOG/LON_DGE
...............
68RIORio Tinto GroupEOD/RIOGOOG/LON_RIO
69RRRolls-Royce GroupNaNNaN
70RBSRoyal Bank of Scotland GroupEOD/RBSGOOG/LON_RBS
71RDSARoyal Dutch ShellNaNGOOG/LON_RDSA
72RSARSA Insurance GroupNaNGOOG/LON_RSA
73SABSABMillerNaNGOOG/LON_SAB
74SGESage GroupNaNGOOG/LON_SGE
75SDRSchrodersEOD/SDRGOOG/LON_SDR
76SRPSercoNaNGOOG/LON_SRP
77SVTSevern TrentEOD/SVTGOOG/LON_SVT
78SHPGShire plcEOD/SHPGNaN
79SNNSmith & NephewEOD/SNNNaN
80SMINSmiths GroupNaNGOOG/LON_SMIN
81SSESSE plcEOD/SSEGOOG/LON_SSE
82STANStandard CharteredNaNGOOG/LON_STAN
83SLStandard LifeNaNNaN
84TATETate & LyleNaNGOOG/LON_TATE
85TSCOTescoEOD/TSCOGOOG/LON_TSCO
86TTTUI TravelNaNNaN
87TLWTullow OilNaNGOOG/LON_TLW
88ULVRUnileverNaNGOOG/LON_ULVR
89UUUnited UtilitiesNaNNaN
90VEDVedanta ResourcesNaNGOOG/LON_VED
91VODVodafone GroupEOD/VODGOOG/LON_VOD
92WEIRWeir GroupNaNGOOG/LON_WEIR
93WTBWhitbreadNaNGOOG/LON_WTB
94WOSWolseley plcNaNGOOG/LON_WOS
95WG_Wood GroupNaNGOOG/LON_WG_
96WPPWPP plcEOD/WPPGOOG/LON_WPP
97XTAXstrataNaNGOOG/LON_XTA
\n", "

98 rows × 4 columns

\n", "
" ], "text/plain": [ " ticker name premium_code free_code\n", "0 ADN Aberdeen Asset Management NaN GOOG/LON_ADN\n", "1 ADM Admiral Group EOD/ADM GOOG/LON_ADM\n", "2 AGK Aggreko NaN GOOG/LON_AGK\n", "3 AMEC AMEC NaN GOOG/LON_AMEC\n", "4 AAL Anglo American plc EOD/AAL GOOG/LON_AAL\n", "5 ANTO Antofagasta NaN GOOG/LON_ANTO\n", "6 ARM ARM Holdings NaN GOOG/LON_ARM\n", "7 ABF Associated British Foods NaN GOOG/LON_ABF\n", "8 AZN AstraZeneca EOD/AZN GOOG/LON_AZN\n", "9 AV Aviva EOD/AV NaN\n", "10 BAB Babcock International EOD/BAB GOOG/LON_BAB\n", "11 BA BAE Systems EOD/BA NaN\n", "12 BARC Barclays NaN GOOG/LON_BARC\n", "13 BG BG Group EOD/BG NaN\n", "14 BLT BHP Billiton EOD/BLT GOOG/LON_BLT\n", "15 BP BP EOD/BP NaN\n", "16 BTI British American Tobacco EOD/BTI NaN\n", "17 BLND British Land Co NaN GOOG/LON_BLND\n", "18 BSY BSkyB NaN GOOG/LON_BSY\n", "19 BT_A BT Group NaN GOOG/LON_BT_A\n", "20 BNZL Bunzl NaN GOOG/LON_BNZL\n", "21 BRBY Burberry Group NaN GOOG/LON_BRBY\n", "22 CPI Capita EOD/CPI GOOG/LON_CPI\n", "23 CUK Carnival plc EOD/CUK GOOG/LON_CUK\n", "24 CNA Centrica EOD/CNA GOOG/LON_CNA\n", "25 CCH Coca-Cola HBC AG NaN NaN\n", "26 CPG Compass Group EOD/CPG GOOG/LON_CPG\n", "27 CRH CRH plc EOD/CRH GOOG/LON_CRH\n", "28 CRDA Croda International NaN GOOG/LON_CRDA\n", "29 DGE Diageo NaN GOOG/LON_DGE\n", ".. ... ... ... ...\n", "68 RIO Rio Tinto Group EOD/RIO GOOG/LON_RIO\n", "69 RR Rolls-Royce Group NaN NaN\n", "70 RBS Royal Bank of Scotland Group EOD/RBS GOOG/LON_RBS\n", "71 RDSA Royal Dutch Shell NaN GOOG/LON_RDSA\n", "72 RSA RSA Insurance Group NaN GOOG/LON_RSA\n", "73 SAB SABMiller NaN GOOG/LON_SAB\n", "74 SGE Sage Group NaN GOOG/LON_SGE\n", "75 SDR Schroders EOD/SDR GOOG/LON_SDR\n", "76 SRP Serco NaN GOOG/LON_SRP\n", "77 SVT Severn Trent EOD/SVT GOOG/LON_SVT\n", "78 SHPG Shire plc EOD/SHPG NaN\n", "79 SNN Smith & Nephew EOD/SNN NaN\n", "80 SMIN Smiths Group NaN GOOG/LON_SMIN\n", "81 SSE SSE plc EOD/SSE GOOG/LON_SSE\n", "82 STAN Standard Chartered NaN GOOG/LON_STAN\n", "83 SL Standard Life NaN NaN\n", "84 TATE Tate & Lyle NaN GOOG/LON_TATE\n", "85 TSCO Tesco EOD/TSCO GOOG/LON_TSCO\n", "86 TT TUI Travel NaN NaN\n", "87 TLW Tullow Oil NaN GOOG/LON_TLW\n", "88 ULVR Unilever NaN GOOG/LON_ULVR\n", "89 UU United Utilities NaN NaN\n", "90 VED Vedanta Resources NaN GOOG/LON_VED\n", "91 VOD Vodafone Group EOD/VOD GOOG/LON_VOD\n", "92 WEIR Weir Group NaN GOOG/LON_WEIR\n", "93 WTB Whitbread NaN GOOG/LON_WTB\n", "94 WOS Wolseley plc NaN GOOG/LON_WOS\n", "95 WG_ Wood Group NaN GOOG/LON_WG_\n", "96 WPP WPP plc EOD/WPP GOOG/LON_WPP\n", "97 XTA Xstrata NaN GOOG/LON_XTA\n", "\n", "[98 rows x 4 columns]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-list.csv\")\n", "ftse100_csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Why are there only 98 rows?" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'ADN'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100 = ftse100_csv['ticker'].unique()" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateOpenHighLowClose
0DateOpenHighLowClose
12016-09-096858.76862.386762.36776.95
22016-09-086846.586889.646819.826858.7
32016-09-076826.056856.126814.876846.58
42016-09-066879.426887.926818.966826.05
52016-09-056894.66910.666867.086879.42
62016-09-026745.976928.256745.976894.6
72016-09-016781.516826.226723.216745.97
82016-08-316820.796832.896779.546781.51
92016-08-306838.056851.836808.076820.79
102016-08-266816.96857.296798.826838.05
112016-08-256835.786836.226779.156816.9
122016-08-246868.516868.516825.226835.78
132016-08-236828.546885.396828.546868.51
142016-08-226858.956884.616812.076828.54
152016-08-196868.966871.486840.946858.95
162016-08-186859.156893.356850.616868.96
172016-08-176893.926920.766849.96859.15
182016-08-166941.196941.196893.926893.92
192016-08-156916.026955.346907.176941.19
202016-08-126914.716931.046896.046916.02
212016-08-116866.426914.716812.736914.71
222016-08-106851.36866.426820.046866.42
232016-08-096809.136863.16807.766851.3
242016-08-086793.476829.476781.476809.13
252016-08-056740.166802.416738.576793.47
262016-08-046634.46749.676615.836740.16
272016-08-036645.46673.636621.426634.4
282016-08-026693.956694.146630.766645.4
292016-08-016724.436769.416678.456693.95
302016-07-296721.066740.476691.136724.43
312016-07-286750.436762.726718.96721.06
322016-07-276724.036780.056723.716750.43
332016-07-266710.136744.86708.586724.03
342016-07-256730.486756.136691.036710.13
352016-07-226699.896735.946663.726730.48
362016-07-216728.996732.076694.526699.89
372016-07-206697.376736.576694.366728.99
382016-07-196695.426711.696660.876697.37
392016-07-186669.246715.586653.676695.42
402016-07-156654.476669.246616.516669.24
\n", "
" ], "text/plain": [ " Date Open High Low Close\n", "0 Date Open High Low Close\n", "1 2016-09-09 6858.7 6862.38 6762.3 6776.95\n", "2 2016-09-08 6846.58 6889.64 6819.82 6858.7\n", "3 2016-09-07 6826.05 6856.12 6814.87 6846.58\n", "4 2016-09-06 6879.42 6887.92 6818.96 6826.05\n", "5 2016-09-05 6894.6 6910.66 6867.08 6879.42\n", "6 2016-09-02 6745.97 6928.25 6745.97 6894.6\n", "7 2016-09-01 6781.51 6826.22 6723.21 6745.97\n", "8 2016-08-31 6820.79 6832.89 6779.54 6781.51\n", "9 2016-08-30 6838.05 6851.83 6808.07 6820.79\n", "10 2016-08-26 6816.9 6857.29 6798.82 6838.05\n", "11 2016-08-25 6835.78 6836.22 6779.15 6816.9\n", "12 2016-08-24 6868.51 6868.51 6825.22 6835.78\n", "13 2016-08-23 6828.54 6885.39 6828.54 6868.51\n", "14 2016-08-22 6858.95 6884.61 6812.07 6828.54\n", "15 2016-08-19 6868.96 6871.48 6840.94 6858.95\n", "16 2016-08-18 6859.15 6893.35 6850.61 6868.96\n", "17 2016-08-17 6893.92 6920.76 6849.9 6859.15\n", "18 2016-08-16 6941.19 6941.19 6893.92 6893.92\n", "19 2016-08-15 6916.02 6955.34 6907.17 6941.19\n", "20 2016-08-12 6914.71 6931.04 6896.04 6916.02\n", "21 2016-08-11 6866.42 6914.71 6812.73 6914.71\n", "22 2016-08-10 6851.3 6866.42 6820.04 6866.42\n", "23 2016-08-09 6809.13 6863.1 6807.76 6851.3\n", "24 2016-08-08 6793.47 6829.47 6781.47 6809.13\n", "25 2016-08-05 6740.16 6802.41 6738.57 6793.47\n", "26 2016-08-04 6634.4 6749.67 6615.83 6740.16\n", "27 2016-08-03 6645.4 6673.63 6621.42 6634.4\n", "28 2016-08-02 6693.95 6694.14 6630.76 6645.4\n", "29 2016-08-01 6724.43 6769.41 6678.45 6693.95\n", "30 2016-07-29 6721.06 6740.47 6691.13 6724.43\n", "31 2016-07-28 6750.43 6762.72 6718.9 6721.06\n", "32 2016-07-27 6724.03 6780.05 6723.71 6750.43\n", "33 2016-07-26 6710.13 6744.8 6708.58 6724.03\n", "34 2016-07-25 6730.48 6756.13 6691.03 6710.13\n", "35 2016-07-22 6699.89 6735.94 6663.72 6730.48\n", "36 2016-07-21 6728.99 6732.07 6694.52 6699.89\n", "37 2016-07-20 6697.37 6736.57 6694.36 6728.99\n", "38 2016-07-19 6695.42 6711.69 6660.87 6697.37\n", "39 2016-07-18 6669.24 6715.58 6653.67 6695.42\n", "40 2016-07-15 6654.47 6669.24 6616.51 6669.24" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "ftse100_csv" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/ml-for-trading/.ipynb_checkpoints/2. Computational Investment-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computational Investment\n", "\n", "Types of funds:\n", "\n", "
\n", "\n", "1. ETFs (Exchange Traded Funds)\n", " - Like stocks: Buy or sell ETFs like stocks on a stock exchange.\n", " - Represent baskets of stocks (or other instruments). They publish what they're holding.\n", " - 4 or 3 - letter abbreviations (e.g. DSUM, SPLV)\n", " - Transparent and liquid.\n", " - Portfolio Managers compensated by Expense Ratio, a percentage e.g. 0.01% (1 bip) to 1.00% (unusual) of AUM.\n", "2. Mutual Funds\n", " - Declared goal e.g. tracking the S&P 500.\n", " - Buy or sell at the end of the day only.\n", " - Disclose what they're holding once every quarter.\n", " - 5-letter abbreviations (VTINX, FAGIX)\n", " - Less but still somewhat transparent.\n", " - Compensated by Expense Ratio 0.5% - 3.00% of AUM. Because management requires more 'skill'. Fund managers have more discretion as to what the fund comprises.\n", "3. Hedge Funds\n", " - Buy or sell shares by agreement (the terms of which you're not allowed to reveal publicly). Often have minimum holding time, might not be allowed to withdraw all investment in one go.\n", " - No disclosure (disclosure not required even to investors in hedge funds).\n", " - Usually have no more than 100 investors.\n", " - Not transparent.\n", " - Compensated by 'Two and Twenty': 2% of AUM and 20% of the profits. Contains a component related to profits whereas ETFs and Mutual Funds don't. BUT now rates are usually much lower, e.g. One and Ten. SAC Capital charges Four and Forty. \n", " - 2% of AUM could be initial amount or final amount (including P&L), depends on the hedge fund.\n", "\n", "**Liquid**: The ease with which one can buy or sell shares in a particular holding. (Higher liquidity -> higher ease.) Stocks and ETFs are liquid. \n", "**Large cap**: Cap = capitalisation, i.e. how much is the company worth according to # shares * price of stock? Apple has a capitalisation of hundreds of billions of dollars -> it is a large cap stock.\n", "Note: the price of a stock alone doesn't indicate the value of a company.\n", "\n", "Quiz: What type of fund is it?\n", "\n", "Incentives: How are the managers of these funds compensated?\n", "\n", "**AUM Assets under management**: How much money is being managed by the fund.\n", "\n", "Incentives (comparative):\n", "- Expense Ratio:\n", " - AUM accumulation\n", "- Two and Twenty:\n", " - Profits\n", " - Risk taking\n", " \n", "### How funds attract investors \n", "Assuming you want to be a hedge fund manager.\n", "Can only have up to around 100 investors, so want each investor to invest a significant amount.\n", "\n", "Who:\n", "1. Individuals (wealthy people)\n", "2. Institutions (e.g. large retirement funds, university foundations e.g. the Harvard Uni Foundation)\n", "3. Funds of funds.\n", "\n", "Why (would these people invest in your hedge fund):\n", "1. Track record (prefer good track record for at least 5 years)\n", "2. Simulation (backtest your strategy) + compelling tory describing that strategy\n", "3. Portfolio fit (E.g. if you're doing small cap growth stocks and they haven't got that part of their portfolio filled)\n", "\n", "### Hedge fund goals and metrics\n", "Potential investors will want to know these.\n", "Goals (types hedge funds typically go after):\n", "1. Beat a benchmark e.g. SP500 because you think you can select which out of SP500 will outperform and discard the bad ones. \n", " - Can still attain goal if it goes down as long as the index is going down more.\n", "2. Absolute return\n", " - Usually Long/Short. Objective to make slow gradual positive returns no matter what. They usually have lower returns than benchmark-beating funds, but when the market takes a big hit, they often don't.\n", "\n", "Metrics\n", "1. Cumulative return\n", " - \n", "2. Volatility\n", "3. Risk / Reward\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/ml-for-trading/.ipynb_checkpoints/3. ML for Trading Algorithms-checkpoint.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 03-01 \n", "\n", "### Predictive Process\n", "\n", "Process of predicting:\n", "1. Select predictive factors x1, x2, x3 (e.g. Bollinger Bands, P/E ratios)\n", "2. Select Y (e.g. Change in price, market relative change in price, future price.)\n", "3. Select Time period, stock universe\n", "4. Train model (e.g. KNN, Linear Regression, Decision Trees)\n", "5. Predict\n", "\n", "(Backtest)\n", "\n", "### An Example\n", "**Predictive factors:**\n", "- Average Run-up (%)\n", "- Beta\n", "- EMA (%)\n", "- Financial Stress Index\n", "- PEG Ratio\n", "- SMA (%)\n", "- SMA Momentum\n", "- SP500 SMA Change (%)\n", "- SP500 Volatility\n", "- Volatility\n", "\n", "Used genetic algorithm to discover these predictive factors.\n", "\n", "**E.g. query**\n", "Forecast: 1 month\n", "Lookback: 3 months\n", "\n", "**Outputs:**\n", "Confidence Intervals (Star rating): When use KNN, how diverse are the Ys that come back (standard deviation)? Greater STD -> Less confident.\n", "\n", "### Problems with regression\n", "Regression strategy in the video didn't beat the SP500 spectacularly.\n", "- Noisy and uncertain -> Value accumulated over many trades.\n", "- Challenging to estimate confidence (SD of nearest neighbours is an okayish measure)\n", "- Holding time, allocation (Unclear how long you should hold a position or how you should allocate to position.) -> Can address using reinforcement learning.\n", "\n", "### Problem in this class\n", "Train model on 2009 data. \n", "Test it over years 2010-2011.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 03-02\n", "\n", "Parametric models:\n", "Non-parametric (Instance-based) models: KNN or kernel regression (weighted by distance)\n", "\n", "### KNN\n", "- Horizontal lines i n edges -> can't extropolate.\n", "- Decrease K: more likely to overfit.\n", "\n", "### Polynomial model of degree d\n", "- More likely to overfit as d increases.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/ml-for-trading/2. Computational Investment.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Computational Investment\n", "\n", "Types of funds:\n", "\n", "
\n", "\n", "1. ETFs (Exchange Traded Funds)\n", " - Like stocks: Buy or sell ETFs like stocks on a stock exchange.\n", " - Represent baskets of stocks (or other instruments). They publish what they're holding.\n", " - 4 or 3 - letter abbreviations (e.g. DSUM, SPLV)\n", " - Transparent and liquid.\n", " - Portfolio Managers compensated by Expense Ratio, a percentage e.g. 0.01% (1 bip) to 1.00% (unusual) of AUM.\n", "2. Mutual Funds\n", " - Declared goal e.g. tracking the S&P 500.\n", " - Buy or sell at the end of the day only.\n", " - Disclose what they're holding once every quarter.\n", " - 5-letter abbreviations (VTINX, FAGIX)\n", " - Less but still somewhat transparent.\n", " - Compensated by Expense Ratio 0.5% - 3.00% of AUM. Because management requires more 'skill'. Fund managers have more discretion as to what the fund comprises.\n", "3. Hedge Funds\n", " - Buy or sell shares by agreement (the terms of which you're not allowed to reveal publicly). Often have minimum holding time, might not be allowed to withdraw all investment in one go.\n", " - No disclosure (disclosure not required even to investors in hedge funds).\n", " - Usually have no more than 100 investors.\n", " - Not transparent.\n", " - Compensated by 'Two and Twenty': 2% of AUM and 20% of the profits. Contains a component related to profits whereas ETFs and Mutual Funds don't. BUT now rates are usually much lower, e.g. One and Ten. SAC Capital charges Four and Forty. \n", " - 2% of AUM could be initial amount or final amount (including P&L), depends on the hedge fund.\n", "\n", "**Liquid**: The ease with which one can buy or sell shares in a particular holding. (Higher liquidity -> higher ease.) Stocks and ETFs are liquid. \n", "**Large cap**: Cap = capitalisation, i.e. how much is the company worth according to # shares * price of stock? Apple has a capitalisation of hundreds of billions of dollars -> it is a large cap stock.\n", "Note: the price of a stock alone doesn't indicate the value of a company.\n", "\n", "Quiz: What type of fund is it?\n", "\n", "Incentives: How are the managers of these funds compensated?\n", "\n", "**AUM Assets under management**: How much money is being managed by the fund.\n", "\n", "Incentives (comparative):\n", "- Expense Ratio:\n", " - AUM accumulation\n", "- Two and Twenty:\n", " - Profits\n", " - Risk taking\n", " \n", "### How funds attract investors \n", "Assuming you want to be a hedge fund manager.\n", "Can only have up to around 100 investors, so want each investor to invest a significant amount.\n", "\n", "Who:\n", "1. Individuals (wealthy people)\n", "2. Institutions (e.g. large retirement funds, university foundations e.g. the Harvard Uni Foundation)\n", "3. Funds of funds.\n", "\n", "Why (would these people invest in your hedge fund):\n", "1. Track record (prefer good track record for at least 5 years)\n", "2. Simulation (backtest your strategy) + compelling tory describing that strategy\n", "3. Portfolio fit (E.g. if you're doing small cap growth stocks and they haven't got that part of their portfolio filled)\n", "\n", "### Hedge fund goals and metrics\n", "Potential investors will want to know these.\n", "Goals (types hedge funds typically go after):\n", "1. Beat a benchmark e.g. SP500 because you think you can select which out of SP500 will outperform and discard the bad ones. \n", " - Can still attain goal if it goes down as long as the index is going down more.\n", "2. Absolute return\n", " - Usually Long/Short. Objective to make slow gradual positive returns no matter what. They usually have lower returns than benchmark-beating funds, but when the market takes a big hit, they often don't.\n", "\n", "Metrics\n", "1. Cumulative return\n", " - \n", "2. Volatility\n", "3. Risk / Reward\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/ml-for-trading/3. ML for Trading Algorithms.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 03-01 \n", "\n", "### Predictive Process\n", "\n", "Process of predicting:\n", "1. Select predictive factors x1, x2, x3 (e.g. Bollinger Bands, P/E ratios)\n", "2. Select Y (e.g. Change in price, market relative change in price, future price.)\n", "3. Select Time period, stock universe\n", "4. Train model (e.g. KNN, Linear Regression, Decision Trees)\n", "5. Predict\n", "\n", "(Backtest)\n", "\n", "### An Example\n", "**Predictive factors:**\n", "- Average Run-up (%)\n", "- Beta\n", "- EMA (%)\n", "- Financial Stress Index\n", "- PEG Ratio\n", "- SMA (%)\n", "- SMA Momentum\n", "- SP500 SMA Change (%)\n", "- SP500 Volatility\n", "- Volatility\n", "\n", "Used genetic algorithm to discover these predictive factors.\n", "\n", "**E.g. query**\n", "Forecast: 1 month\n", "Lookback: 3 months\n", "\n", "**Outputs:**\n", "Confidence Intervals (Star rating): When use KNN, how diverse are the Ys that come back (standard deviation)? Greater STD -> Less confident.\n", "\n", "### Problems with regression\n", "Regression strategy in the video didn't beat the SP500 spectacularly.\n", "- Noisy and uncertain -> Value accumulated over many trades.\n", "- Challenging to estimate confidence (SD of nearest neighbours is an okayish measure)\n", "- Holding time, allocation (Unclear how long you should hold a position or how you should allocate to position.) -> Can address using reinforcement learning.\n", "\n", "### Problem in this class\n", "Train model on 2009 data. \n", "Test it over years 2010-2011.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 03-02\n", "\n", "Parametric models:\n", "Non-parametric (Instance-based) models: KNN or kernel regression (weighted by distance)\n", "\n", "### KNN\n", "- Horizontal lines i n edges -> can't extropolate.\n", "- Decrease K: more likely to overfit.\n", "\n", "### Polynomial model of degree d\n", "- More likely to overfit as d increases.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/p5.2-4-code.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Analysis, Methodology, Results" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# LSE daily data: Description and exploratory" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "header_names = ['Symbol',\n", " 'Date',\n", " 'Open',\n", " 'High',\n", " 'Low',\n", " 'Close',\n", " 'Volume',\n", " 'Ex-Dividend',\n", " 'Split Ratio',\n", " 'Adj. Open',\n", " 'Adj. High',\n", " 'Adj. Low',\n", " 'Adj. Close',\n", " 'Adj. Volume']" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a data sample:" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1923200BP1977-05-2687.1287.7586.7587.2516700.00.01.02.2671552.2835492.2575262.270538267200.0
1923201BP1977-05-2787.0087.0086.2586.8815100.00.01.02.2640322.2640322.2445142.260909241600.0
1923202BP1977-05-3186.8887.1286.1287.0019100.00.01.02.2609092.2671552.2411312.264032305600.0
1923203BP1977-06-0187.0087.6286.5087.2522700.00.01.02.2640322.2801662.2510202.270538363200.0
1923204BP1977-06-0287.2587.6286.6286.7519100.00.01.02.2705382.2801662.2541432.257526305600.0
1923205BP1977-06-0386.7587.3886.5087.3830600.00.01.02.2575262.2739212.2510202.273921489600.0
1923206BP1977-06-0687.6288.7587.6288.1225200.00.01.02.2801662.3095732.2801662.293178403200.0
1923207BP1977-06-0788.1288.2587.6287.6227900.00.01.02.2931782.2965612.2801662.280166446400.0
1923208BP1977-06-0887.6288.0087.0088.0020700.00.01.02.2801662.2900552.2640322.290055331200.0
1923209BP1977-06-0987.8887.8887.3887.8825200.00.01.02.2869322.2869322.2739212.286932403200.0
1923210BP1977-06-1087.8888.0087.2587.2519300.00.01.02.2869322.2900552.2705382.270538308800.0
1923211BP1977-06-1387.2587.5087.0087.5031600.00.01.02.2705382.2770442.2640322.277044505600.0
1923212BP1977-06-1488.0089.2588.0089.2534100.00.01.02.2900552.3225842.2900552.322584545600.0
1923213BP1977-06-1589.2589.3888.5089.2521000.00.01.02.3225842.3259672.3030672.322584336000.0
1923214BP1977-06-1689.2589.2588.2589.0019500.00.01.02.3225842.3225842.2965612.316079312000.0
1923215BP1977-06-1789.0089.3888.1288.7527200.00.01.02.3160792.3259672.2931782.309573435200.0
1923216BP1977-06-2088.7589.0088.5088.6218400.00.01.02.3095732.3160792.3030672.306190294400.0
1923217BP1977-06-2188.6289.5088.6289.0022900.00.01.02.3061902.3290902.3061902.316079366400.0
1923218BP1977-06-2289.0089.0088.2588.8819800.00.01.02.3160792.3160792.2965612.312956316800.0
1923219BP1977-06-2388.8889.8888.7589.8814800.00.01.02.3129562.3389792.3095732.338979236800.0
1923220BP1977-06-2489.8890.2589.6289.6247400.00.01.02.3389792.3486082.3322132.332213758400.0
1923221BP1977-06-2789.6290.0089.5089.5019900.00.01.02.3322132.3421022.3290902.329090318400.0
1923222BP1977-06-2889.5089.7589.2589.3812800.00.01.02.3290902.3355962.3225842.325967204800.0
1923223BP1977-06-2989.3889.7589.0089.5016100.00.01.02.3259672.3355962.3160792.329090257600.0
1923224BP1977-06-3089.5089.7588.2588.7544700.00.01.02.3290902.3355962.2965612.309573715200.0
1923225BP1977-07-0188.7589.0088.5088.6212000.00.01.02.3095732.3160792.3030672.306190192000.0
1923226BP1977-07-0588.6289.0087.7587.7540700.00.01.02.3061902.3160792.2835492.283549651200.0
1923227BP1977-07-0687.7588.0087.5087.5021100.00.01.02.2835492.2900552.2770442.277044337600.0
1923228BP1977-07-0787.5087.7587.0087.129700.00.01.02.2770442.2835492.2640322.267155155200.0
1923229BP1977-07-0887.1287.8887.0087.0039400.00.01.02.2671552.2869322.2640322.264032630400.0
1923230BP1977-07-1187.0087.1284.2584.2545700.00.01.02.2640322.2671552.1924682.192468731200.0
1923231BP1977-07-1283.5083.5081.2583.25131600.00.01.02.1729502.1729502.1143982.1664442105600.0
1923232BP1977-07-1383.2583.7583.0083.75165700.00.01.02.1664442.1794562.1599382.1794562651200.0
1923233BP1977-07-1583.7584.1283.0083.5091200.00.01.02.1794562.1890852.1599382.1729501459200.0
1923234BP1977-07-1883.5083.5083.1283.3845100.00.01.02.1729502.1729502.1630612.169827721600.0
1923235BP1977-07-1983.8884.5083.8884.3832500.00.01.02.1828392.1989732.1828392.195851520000.0
1923236BP1977-07-2084.3884.7583.1284.0028700.00.01.02.1958512.2054792.1630612.185962459200.0
1923237BP1977-07-2184.0084.5082.7583.00297900.00.01.02.1859622.1989732.1534332.1599384766400.0
1923238BP1977-07-2283.0084.2583.0084.2526100.00.01.02.1599382.1924682.1599382.192468417600.0
1923239BP1977-07-2583.8883.8883.0083.0013800.00.01.02.1828392.1828392.1599382.159938220800.0
1923240BP1977-07-2682.5082.5080.2580.5074400.00.01.02.1469272.1469272.0883742.0948801190400.0
1923241BP1977-07-2780.2580.2577.2578.2548000.00.01.02.0883742.0883742.0103042.036328768000.0
1923242BP1977-07-2878.2580.7577.2580.0076000.00.01.02.0363282.1013862.0103042.0818681216000.0
1923243BP1977-07-2980.0080.0078.2579.7525200.00.01.02.0818682.0818682.0363282.075363403200.0
1923244BP1977-08-0179.7579.8879.3879.3811600.00.01.02.0753632.0787462.0657342.065734185600.0
1923245BP1977-08-0279.3879.5078.1278.2530200.00.01.02.0657342.0688572.0329442.036328483200.0
1923246BP1977-08-0378.2578.3877.2577.5025500.00.01.02.0363282.0397112.0103042.016810408000.0
1923247BP1977-08-0477.5078.0076.7578.0076700.00.01.02.0168102.0298221.9972922.0298221227200.0
1923248BP1977-08-0578.0078.6278.0078.5050300.00.01.02.0298222.0459562.0298222.042833804800.0
1923249BP1977-08-0878.3878.3877.7578.0011000.00.01.02.0397112.0397112.0233162.029822176000.0
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923200 BP 1977-05-26 87.12 87.75 86.75 87.25 16700.0 0.0 \n", "1923201 BP 1977-05-27 87.00 87.00 86.25 86.88 15100.0 0.0 \n", "1923202 BP 1977-05-31 86.88 87.12 86.12 87.00 19100.0 0.0 \n", "1923203 BP 1977-06-01 87.00 87.62 86.50 87.25 22700.0 0.0 \n", "1923204 BP 1977-06-02 87.25 87.62 86.62 86.75 19100.0 0.0 \n", "1923205 BP 1977-06-03 86.75 87.38 86.50 87.38 30600.0 0.0 \n", "1923206 BP 1977-06-06 87.62 88.75 87.62 88.12 25200.0 0.0 \n", "1923207 BP 1977-06-07 88.12 88.25 87.62 87.62 27900.0 0.0 \n", "1923208 BP 1977-06-08 87.62 88.00 87.00 88.00 20700.0 0.0 \n", "1923209 BP 1977-06-09 87.88 87.88 87.38 87.88 25200.0 0.0 \n", "1923210 BP 1977-06-10 87.88 88.00 87.25 87.25 19300.0 0.0 \n", "1923211 BP 1977-06-13 87.25 87.50 87.00 87.50 31600.0 0.0 \n", "1923212 BP 1977-06-14 88.00 89.25 88.00 89.25 34100.0 0.0 \n", "1923213 BP 1977-06-15 89.25 89.38 88.50 89.25 21000.0 0.0 \n", "1923214 BP 1977-06-16 89.25 89.25 88.25 89.00 19500.0 0.0 \n", "1923215 BP 1977-06-17 89.00 89.38 88.12 88.75 27200.0 0.0 \n", "1923216 BP 1977-06-20 88.75 89.00 88.50 88.62 18400.0 0.0 \n", "1923217 BP 1977-06-21 88.62 89.50 88.62 89.00 22900.0 0.0 \n", "1923218 BP 1977-06-22 89.00 89.00 88.25 88.88 19800.0 0.0 \n", "1923219 BP 1977-06-23 88.88 89.88 88.75 89.88 14800.0 0.0 \n", "1923220 BP 1977-06-24 89.88 90.25 89.62 89.62 47400.0 0.0 \n", "1923221 BP 1977-06-27 89.62 90.00 89.50 89.50 19900.0 0.0 \n", "1923222 BP 1977-06-28 89.50 89.75 89.25 89.38 12800.0 0.0 \n", "1923223 BP 1977-06-29 89.38 89.75 89.00 89.50 16100.0 0.0 \n", "1923224 BP 1977-06-30 89.50 89.75 88.25 88.75 44700.0 0.0 \n", "1923225 BP 1977-07-01 88.75 89.00 88.50 88.62 12000.0 0.0 \n", "1923226 BP 1977-07-05 88.62 89.00 87.75 87.75 40700.0 0.0 \n", "1923227 BP 1977-07-06 87.75 88.00 87.50 87.50 21100.0 0.0 \n", "1923228 BP 1977-07-07 87.50 87.75 87.00 87.12 9700.0 0.0 \n", "1923229 BP 1977-07-08 87.12 87.88 87.00 87.00 39400.0 0.0 \n", "1923230 BP 1977-07-11 87.00 87.12 84.25 84.25 45700.0 0.0 \n", "1923231 BP 1977-07-12 83.50 83.50 81.25 83.25 131600.0 0.0 \n", "1923232 BP 1977-07-13 83.25 83.75 83.00 83.75 165700.0 0.0 \n", "1923233 BP 1977-07-15 83.75 84.12 83.00 83.50 91200.0 0.0 \n", "1923234 BP 1977-07-18 83.50 83.50 83.12 83.38 45100.0 0.0 \n", "1923235 BP 1977-07-19 83.88 84.50 83.88 84.38 32500.0 0.0 \n", "1923236 BP 1977-07-20 84.38 84.75 83.12 84.00 28700.0 0.0 \n", "1923237 BP 1977-07-21 84.00 84.50 82.75 83.00 297900.0 0.0 \n", "1923238 BP 1977-07-22 83.00 84.25 83.00 84.25 26100.0 0.0 \n", "1923239 BP 1977-07-25 83.88 83.88 83.00 83.00 13800.0 0.0 \n", "1923240 BP 1977-07-26 82.50 82.50 80.25 80.50 74400.0 0.0 \n", "1923241 BP 1977-07-27 80.25 80.25 77.25 78.25 48000.0 0.0 \n", "1923242 BP 1977-07-28 78.25 80.75 77.25 80.00 76000.0 0.0 \n", "1923243 BP 1977-07-29 80.00 80.00 78.25 79.75 25200.0 0.0 \n", "1923244 BP 1977-08-01 79.75 79.88 79.38 79.38 11600.0 0.0 \n", "1923245 BP 1977-08-02 79.38 79.50 78.12 78.25 30200.0 0.0 \n", "1923246 BP 1977-08-03 78.25 78.38 77.25 77.50 25500.0 0.0 \n", "1923247 BP 1977-08-04 77.50 78.00 76.75 78.00 76700.0 0.0 \n", "1923248 BP 1977-08-05 78.00 78.62 78.00 78.50 50300.0 0.0 \n", "1923249 BP 1977-08-08 78.38 78.38 77.75 78.00 11000.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \n", "1923200 1.0 2.267155 2.283549 2.257526 2.270538 267200.0 \n", "1923201 1.0 2.264032 2.264032 2.244514 2.260909 241600.0 \n", "1923202 1.0 2.260909 2.267155 2.241131 2.264032 305600.0 \n", "1923203 1.0 2.264032 2.280166 2.251020 2.270538 363200.0 \n", "1923204 1.0 2.270538 2.280166 2.254143 2.257526 305600.0 \n", "1923205 1.0 2.257526 2.273921 2.251020 2.273921 489600.0 \n", "1923206 1.0 2.280166 2.309573 2.280166 2.293178 403200.0 \n", "1923207 1.0 2.293178 2.296561 2.280166 2.280166 446400.0 \n", "1923208 1.0 2.280166 2.290055 2.264032 2.290055 331200.0 \n", "1923209 1.0 2.286932 2.286932 2.273921 2.286932 403200.0 \n", "1923210 1.0 2.286932 2.290055 2.270538 2.270538 308800.0 \n", "1923211 1.0 2.270538 2.277044 2.264032 2.277044 505600.0 \n", "1923212 1.0 2.290055 2.322584 2.290055 2.322584 545600.0 \n", "1923213 1.0 2.322584 2.325967 2.303067 2.322584 336000.0 \n", "1923214 1.0 2.322584 2.322584 2.296561 2.316079 312000.0 \n", "1923215 1.0 2.316079 2.325967 2.293178 2.309573 435200.0 \n", "1923216 1.0 2.309573 2.316079 2.303067 2.306190 294400.0 \n", "1923217 1.0 2.306190 2.329090 2.306190 2.316079 366400.0 \n", "1923218 1.0 2.316079 2.316079 2.296561 2.312956 316800.0 \n", "1923219 1.0 2.312956 2.338979 2.309573 2.338979 236800.0 \n", "1923220 1.0 2.338979 2.348608 2.332213 2.332213 758400.0 \n", "1923221 1.0 2.332213 2.342102 2.329090 2.329090 318400.0 \n", "1923222 1.0 2.329090 2.335596 2.322584 2.325967 204800.0 \n", "1923223 1.0 2.325967 2.335596 2.316079 2.329090 257600.0 \n", "1923224 1.0 2.329090 2.335596 2.296561 2.309573 715200.0 \n", "1923225 1.0 2.309573 2.316079 2.303067 2.306190 192000.0 \n", "1923226 1.0 2.306190 2.316079 2.283549 2.283549 651200.0 \n", "1923227 1.0 2.283549 2.290055 2.277044 2.277044 337600.0 \n", "1923228 1.0 2.277044 2.283549 2.264032 2.267155 155200.0 \n", "1923229 1.0 2.267155 2.286932 2.264032 2.264032 630400.0 \n", "1923230 1.0 2.264032 2.267155 2.192468 2.192468 731200.0 \n", "1923231 1.0 2.172950 2.172950 2.114398 2.166444 2105600.0 \n", "1923232 1.0 2.166444 2.179456 2.159938 2.179456 2651200.0 \n", "1923233 1.0 2.179456 2.189085 2.159938 2.172950 1459200.0 \n", "1923234 1.0 2.172950 2.172950 2.163061 2.169827 721600.0 \n", "1923235 1.0 2.182839 2.198973 2.182839 2.195851 520000.0 \n", "1923236 1.0 2.195851 2.205479 2.163061 2.185962 459200.0 \n", "1923237 1.0 2.185962 2.198973 2.153433 2.159938 4766400.0 \n", "1923238 1.0 2.159938 2.192468 2.159938 2.192468 417600.0 \n", "1923239 1.0 2.182839 2.182839 2.159938 2.159938 220800.0 \n", "1923240 1.0 2.146927 2.146927 2.088374 2.094880 1190400.0 \n", "1923241 1.0 2.088374 2.088374 2.010304 2.036328 768000.0 \n", "1923242 1.0 2.036328 2.101386 2.010304 2.081868 1216000.0 \n", "1923243 1.0 2.081868 2.081868 2.036328 2.075363 403200.0 \n", "1923244 1.0 2.075363 2.078746 2.065734 2.065734 185600.0 \n", "1923245 1.0 2.065734 2.068857 2.032944 2.036328 483200.0 \n", "1923246 1.0 2.036328 2.039711 2.010304 2.016810 408000.0 \n", "1923247 1.0 2.016810 2.029822 1.997292 2.029822 1227200.0 \n", "1923248 1.0 2.029822 2.045956 2.029822 2.042833 804800.0 \n", "1923249 1.0 2.039711 2.039711 2.023316 2.029822 176000.0 " ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "i = 1923200\n", "df.iloc[i:i+50]" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "Symbol object\n", "Date object\n", "Open float64\n", "High float64\n", "Low float64\n", "Close float64\n", "Volume float64\n", "Ex-Dividend float64\n", "Split Ratio float64\n", "Adj. Open float64\n", "Adj. High float64\n", "Adj. Low float64\n", "Adj. Close float64\n", "Adj. Volume float64\n", "dtype: object" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.dtypes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Summary statistics across the entire dataset are not that informative:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/numpy/lib/function_base.py:3834: RuntimeWarning: Invalid value encountered in percentile\n", " RuntimeWarning)\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
count1.432819e+071.432886e+071.432886e+071.432913e+071.432935e+071.432932e+071.432922e+071.432819e+071.432886e+071.432886e+071.432913e+071.432934e+07
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
25%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
50%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
75%NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 1.432819e+07 1.432886e+07 1.432886e+07 1.432913e+07 1.432935e+07 \n", "mean 7.092291e+01 7.188109e+01 7.047024e+01 7.120251e+01 1.182026e+06 \n", "std 2.193723e+03 2.220224e+03 2.191789e+03 2.206792e+03 8.868551e+06 \n", "min 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 2.281800e+05 2.293740e+05 2.275300e+05 2.293000e+05 6.674913e+09 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 1.432932e+07 1.432922e+07 1.432819e+07 1.432886e+07 1.432886e+07 \n", "mean 1.982789e-03 1.000210e+00 7.518079e+01 7.633755e+01 7.451613e+01 \n", "std 3.370723e-01 2.165061e-02 2.266636e+03 2.295340e+03 2.261718e+03 \n", "min 0.000000e+00 1.000000e-02 0.000000e+00 0.000000e+00 0.000000e+00 \n", "25% NaN NaN NaN NaN NaN \n", "50% NaN NaN NaN NaN NaN \n", "75% NaN NaN NaN NaN NaN \n", "max 9.625000e+02 5.000000e+01 2.281800e+05 2.293740e+05 2.275300e+05 \n", "\n", " Adj. Close Adj. Volume \n", "count 1.432913e+07 1.432934e+07 \n", "mean 7.544570e+01 1.402925e+06 \n", "std 2.279264e+03 6.620816e+06 \n", "min 0.000000e+00 0.000000e+00 \n", "25% NaN NaN \n", "50% NaN NaN \n", "75% NaN NaN \n", "max 2.293000e+05 2.304019e+09 " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.describe()" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df.loc[:,'Daily Variation'] = df.loc[:,'High'] - df.loc[:,'Low']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# BP Data: Exploratory" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Total 10010 rows. \n", "* Start date: 1977 January 3\n", "* End date: 2016 Sept 9" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [], "source": [ "bp = df[1923099:1933109]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']\n", "\n", "# 1923099 - 1933108" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
1923099BP1977-01-0376.5077.6276.5077.6212400.00.01.01.9907872.0199331.9907872.019933198400.00
1923100BP1977-01-0477.6278.0076.7577.0019300.00.01.02.0199332.0298221.9972922.003798308800.00
1923101BP1977-01-0577.0077.0074.5074.5017900.00.01.02.0037982.0037981.9387401.938740286400.00
1923102BP1977-01-0674.5075.5074.5075.1223900.00.01.01.9387401.9647631.9387401.954874382400.00
1923103BP1977-01-0775.1275.3874.6275.1241700.00.01.01.9548741.9616401.9418631.954874667200.00
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume Ex-Dividend \\\n", "1923099 BP 1977-01-03 76.50 77.62 76.50 77.62 12400.0 0.0 \n", "1923100 BP 1977-01-04 77.62 78.00 76.75 77.00 19300.0 0.0 \n", "1923101 BP 1977-01-05 77.00 77.00 74.50 74.50 17900.0 0.0 \n", "1923102 BP 1977-01-06 74.50 75.50 74.50 75.12 23900.0 0.0 \n", "1923103 BP 1977-01-07 75.12 75.38 74.62 75.12 41700.0 0.0 \n", "\n", " Split Ratio Adj. Open Adj. High Adj. Low Adj. Close Adj. Volume \\\n", "1923099 1.0 1.990787 2.019933 1.990787 2.019933 198400.0 \n", "1923100 1.0 2.019933 2.029822 1.997292 2.003798 308800.0 \n", "1923101 1.0 2.003798 2.003798 1.938740 1.938740 286400.0 \n", "1923102 1.0 1.938740 1.964763 1.938740 1.954874 382400.0 \n", "1923103 1.0 1.954874 1.961640 1.941863 1.954874 667200.0 \n", "\n", " Daily Variation \n", "1923099 0 \n", "1923100 0 \n", "1923101 0 \n", "1923102 0 \n", "1923103 0 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.head()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
1933104BP2016-09-0234.2534.75034.16034.506896283.00.01.034.2534.75034.16034.506896283.00
1933105BP2016-09-0634.5534.76034.38034.694090421.00.01.034.5534.76034.38034.694090421.00
1933106BP2016-09-0734.7834.91034.65034.763902827.00.01.034.7834.91034.65034.763902827.00
1933107BP2016-09-0834.8935.17534.66035.085161379.00.01.034.8935.17534.66035.085161379.00
1933108BP2016-09-0934.6334.70034.23534.355434710.00.01.034.6334.70034.23534.355434710.00
\n", "
" ], "text/plain": [ " Symbol Date Open High Low Close Volume \\\n", "1933104 BP 2016-09-02 34.25 34.750 34.160 34.50 6896283.0 \n", "1933105 BP 2016-09-06 34.55 34.760 34.380 34.69 4090421.0 \n", "1933106 BP 2016-09-07 34.78 34.910 34.650 34.76 3902827.0 \n", "1933107 BP 2016-09-08 34.89 35.175 34.660 35.08 5161379.0 \n", "1933108 BP 2016-09-09 34.63 34.700 34.235 34.35 5434710.0 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low Adj. Close \\\n", "1933104 0.0 1.0 34.25 34.750 34.160 34.50 \n", "1933105 0.0 1.0 34.55 34.760 34.380 34.69 \n", "1933106 0.0 1.0 34.78 34.910 34.650 34.76 \n", "1933107 0.0 1.0 34.89 35.175 34.660 35.08 \n", "1933108 0.0 1.0 34.63 34.700 34.235 34.35 \n", "\n", " Adj. Volume Daily Variation \n", "1933104 6896283.0 0 \n", "1933105 4090421.0 0 \n", "1933106 3902827.0 0 \n", "1933107 5161379.0 0 \n", "1933108 5434710.0 0 " ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
count10010.00000010010.00000010010.00000010010.0000001.001000e+0410010.00000010010.00000010010.00000010010.00000010010.00000010010.0000001.001000e+0410010.0
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.0
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.0
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.0
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.0
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+060.0
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+080.0
\n", "
" ], "text/plain": [ " Open High Low Close Volume \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 1.001000e+04 \n", "mean 59.428433 59.908222 58.943809 59.446137 2.816082e+06 \n", "std 20.589378 20.676885 20.513272 20.598500 7.217241e+06 \n", "min 27.250000 27.850000 26.500000 27.020000 0.000000e+00 \n", "25% 44.750000 45.162500 44.250000 44.770000 1.831500e+05 \n", "50% 53.940000 54.360000 53.500000 53.940000 6.371500e+05 \n", "75% 69.750000 70.230000 69.327500 69.795000 3.784475e+06 \n", "max 147.120000 147.380000 146.380000 146.500000 2.408085e+08 \n", "\n", " Ex-Dividend Split Ratio Adj. Open Adj. High Adj. Low \\\n", "count 10010.000000 10010.000000 10010.000000 10010.000000 10010.000000 \n", "mean 0.004626 1.000400 18.705367 18.855246 18.547576 \n", "std 0.048270 0.019987 14.127674 14.228791 14.011973 \n", "min 0.000000 1.000000 1.522366 1.528872 1.503109 \n", "25% 0.000000 1.000000 5.426399 5.493816 5.373302 \n", "50% 0.000000 1.000000 15.077767 15.165769 15.033179 \n", "75% 0.000000 1.000000 31.849522 32.207689 31.524772 \n", "max 0.840000 2.000000 50.669004 50.988683 50.039144 \n", "\n", " Adj. Close Adj. Volume Daily Variation \n", "count 10010.000000 1.001000e+04 10010.0 \n", "mean 18.707358 3.408274e+06 0.0 \n", "std 14.122609 7.532096e+06 0.0 \n", "min 1.522366 0.000000e+00 0.0 \n", "25% 5.442764 7.536000e+05 0.0 \n", "50% 15.099474 1.904100e+06 0.0 \n", "75% 31.889513 4.051675e+06 0.0 \n", "max 50.533702 2.408085e+08 0.0 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.describe()" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:465: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self.obj[item] = s\n" ] } ], "source": [ "bp.loc[:,'Daily Variation'] = bp.loc[:,'High'] - bp.loc[:,'Low']" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:3: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " app.launch_new_instance()\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:4: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:5: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:6: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" ] } ], "source": [ "# Create additional features\n", "# These features are not used in the current model\n", "bp['Daily Variation'] = bp['High'] - bp['Low']\n", "bp['Percentage Variation'] = bp['Daily Variation'] / bp['Open'] * 100\n", "bp['Adj. Daily Variation'] = bp['Adj. High'] - bp['Adj. Low']\n", "bp['Adj. Percentage Variation'] = bp['Adj. Daily Variation'] / bp['Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plots" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAEZCAYAAAC5AHPcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VFX6wPFvegiEHnpR2pGqgIqNKopd1N/qrrquvesW\n665l7b2tvaKuq2sXyyqiggKCDamKL0WQDqEmJCGkzO+Pc2cy5c5kMpNkJsn7eR4eZm499+TOPff0\nFI/Hg1JKKVVTqYkOgFJKqYZJExCllFIx0QREKaVUTDQBUUopFRNNQJRSSsVEExCllFIxSU90AJKJ\nMaYnsAJYCKQAaUARcJWIzA5aj7MNwKMi8mKE474DjAR6iMjuMNu0A/JFJNUYczxwuIj8JcbruAmY\nLyIf1nC/QmCgiKx2WTcUuA0wwC7n34Mi8n4sYawpY0wlsAiocBalA6+JyD0u2w4HrhORU+swPBnA\n48BhgAf4BLhWRMK2izfGjAYeF5HBtRyWI4F7RWSo37IrgMuAYmAJcLmIbDfGtAGeAvbD/g1fFJEn\njDH9gdecawEbv4OAk0Vksss5jwVuAJo52/6E/Z2si+M6wt63LtdzmYjscNnuTOBqoNLZ9s8iMtcY\nkwo8BEzA/q4fFJFngvY9F5goIif4LRsF3Otc5w7gHBFZGes1NjaaAwlVLCLDRGSoiAzB3nQvuawf\n5vxgjwUeNMYMcjuYMaYzNvH4BvhThPOm4Px4ReTDWBMPxzggI4b9XB9+xpgDgA+AJ0Skn4gMAy4A\n7jDGXBB7MGsctjHeuAcOBS4wxhwTvKGIzK3LxMNxOdBORAYCQ5zwRHPOWut4ZYzJNsbcDryBfSh6\nl48FrgHGOnH1CfCss/oRoFBE9gEOBo4xxhwjIkuce94bv1OBV8MkHp2xv4lTnX0GY1+q3ojzklzv\n2zDX85zLdv2wD/sjne3uBN51Vl8M9AEGAAcCfzHG7O/s18YY8xTwaNDxujr7Xywi+wHvAE/EeY2N\niuZAqtceWB9upYisN8YsA/oBi102uRD4HHgbuAPwvfUYY052lhUBP/gt/xPwfyJyvDFmOvCYiLzr\nrPN9N8bcCpwI7AG2AucAJwP7A/cbYyqAj7E/qlHYh8w84EoR2WWMGYn90VQ65w/3QnE7cLuITPG7\nbjHG/BH43BjzEvAPYCDQCejonOd85zxdsG/r3bEPiNdF5B4nR/eFE8YRQBvgBhF5yyUMKVTl+BCR\nQmPMD8A+xpgi4F9OPOYA12HfMAcbY5oDj2Ef8GXA+yJyg5ODCBcvlwAXAaXAbuAiEfnFPzAi8rAx\nxvvAyQNaA9vCxF8IY0wH7L3QwYmz37AP5C3GmJXYB/ThTpy9KSLXuRxmgnO952Bzh17DgM9FZIPz\n/V3gOWNMurPuMucayowx/wP+D/s38IZtJHAKEC6n1B77d2zpt+wRbBx6j3EucCn2b7YVmwNaaox5\nEZuI9neOMxX4M/Z34rtvg3K2btfzvDEmXUTK/bYrxd5zm53vc4GOznVPBJ5xcog7jDGvA2di7/tT\nsb/xq7AvhF7/B3wsIguc788Cn4aJkyZJcyChcowxPxpj5hljVgEPA3eH29gYczDQG/jWZV0a9k39\nFeAjoIMxZoKzrgPwAnCSiByAfYD4i/imaozphv3hHSAiB2J/iAeKyJPYH8XVzo/weqBMRPZ3ckwb\ngHucB+ibwF9FZDgwHZtNd3MIMDN4oYjMd8I5wFk0AlvkYbBFTTc7y18BXnCucwRwhDHm/5x1vYBP\nRGSEE9b7I1233/Ub7MP/K2fRQOA05xpLqYq/24EsJ0xDgUOcYolw8ZKK/ZtPcML0LLaYKoSIVBhj\n7gaWAxvd4iiC3wOzReRQEekNlAB/9FvfXERGYRO+K5zENvj874vIVcD2oFXfAeOMMd2d7+cCmUA7\n7H36R2NMujGmBTah6By0//3AP0Rkl1vARWQRNgcwzxiz2BjzLHA89h70Fvv8CTjMubfuB97zO8QQ\nbG5jAPbvdqHffXuNS7Go2/VkONfjH67fROQTv0UPYV8YyrEJ8Rq/dWuBbs5+z4jI7diXBX/9gGJj\nzH+NMT8Cr2NfQpRDE5BQ/kVYewFjgTf8fsD+CcwibDb59DBlvxOxcfypiOzBZvH/6qw7DFgoIuJ8\nf8Zl/0jWAfOxP+L7gQUi8oHfeu/b+nHAiU5452FzLP2xb5d7RORLABF5HVsmHk64IrEsqh7Wb4nI\nFufzC8AEY0wOMBq43Tn/N9gf837Odnv8fvQ/YnMh4Ux34n4h8CK2zH2us26NiKx12edwJyyISJmI\njBWRGYSJFxGpxCasc4wxjwEF3v3diMjfsbmP34CnI4Q9eL9HnXP81RjzJPZB2sJvk/ed7dYDm4G2\nNTj2TOBWYLIx5jugHJs72oN9ywabW3gH+9Df493XGHMItmjuv9Wc4xpszukmbF3DfcCXxpgU7Ft8\nb2C2E7f3Aa2NMa2d3V8SkRIRKQP+jc1JxXo9IYwxOcaYt7AvJ+c7i92edRUuy/xlACdgc8XDgGlU\nFYkptAirWiIyxxgj2HLT73ASmCh3vxj7Vr/cvjCTCXR2Kiw9+BXJEP5mDt4u0wmXBxjjVBiPBx42\nxkwTkb8G7Z+GrUj8FOyPC8gGegYdF+wP080sbEK60H+hUzeyB/AW7/jvn+pcU5pznoNFpNTZrx32\njTuPwIdA8LUGGyMiwW/bXuESv3L8cnNOzq2Y8PGCiJxljBmAjdfrgPOwLwP4HecQbKOHZU5O5CWC\nytCd7SYAc52ENQXnDdYYcy+2yGYS9sGUEXTtJX6fq4uX4HO2AGaI07DDye3eLrYSvTv2LX+Hs+5a\nbA7K61TsQ93/eM85YfVgE8kN2ETmJWzO4j1jzA3YN/yh2Lh9xUlcvcfoIiI7nN+B230S0/W4bNsD\nW1/3E/Z+8d5fqwnMaXXF5kIiWY/NJf7qfH8BeMQYk+W9l5s6zYGECvihOhVzfbFvxyHrw3H2Gw0M\nFZFezr9u2IfxX7DFHQONMd5y5rPDHCof++PFGNMbm/3HGDPEGLMYWCIi92KLXfZ19imnKsfwKXC5\nMSbDKZ55AVsktwhIMcYc5RzvBOybtJt/ANd6t3W274/NBdzo9yM90RiT65znAuADESkE5mBbxuC8\nhX6NfeOH0PiMFL9RP0T9fA78yRiTYozJwtZFjQKmYIuGAuLFGNPOGLMa2OrkEm7EifMg44CHjDFp\nzv5nYBOCYNdgi3cAhmNb8QEcCTwiIq8CW4Aj8KsIj1MXbG4g1/l+E7aFFdiXmtsBjDEdsX+n1/z2\nHY2tl/IRkQukqoL9WaAQuMu5B7x6YRO9FdhczR+MMZ2c81wadMzTjDGZxphsbFGXN+fsf99Wdz0h\nOSRjW5h9BbwjImf43Zdgc3TnOn+v1tgixJAGAkHeAw71K304BfhJE48qmgMJle2Ud0JVxe0FIrLC\nuZGibUVzMfCuiKwKWn4r8CHwd+B04DVjTCn2xnc79h3Ay8Y2m/zF2Q4RWWiMeQOYa4zZhX2rvsLZ\n50PgAWNMJrZy9UFskUUqttjrKhEpN8ZMBJ4xxtzlLN+MCxGZb2xT0TuMMQ9j3xi3AzeJiH/Z9iZs\nZWx7YAZVdUenA084RU8Z2NY9/w0Tn+HiN9bWS7diK9gXYK//dRGZbIyZgi2bD46XXca2bJpmjCnB\n5hjOczmuN9FegI2PWdi/abCrsRW+V2EfvN56jtuwrfduxj44Z2JbCblda42u3amsvhv41ilSmoVt\nNQb2b/KKU/wKcLNfMSBOGFZVc/wvjTGXY+/LVk74NwAnishOYKqTw/rM2IYcBcBJfocoxl5va2yx\n50vOct99KyKvRHk9/i7B1mucZGwDFbBxdzi26XJv7N8rA3jaKRqLdJ0LjG1QMdnYivjtwO8i7dPU\npOhw7snHGHMltsjnD4kOS7SMMf/EFmtcmeiwqORlbCusRSLyUKLDouIXdw7EGHM9tqIpA3gS++b5\nErZp6GIRuSzeczQlTm7gT1RV/inVmOgbayMSVw7E2J61fxORE41tb381ts32AyIy09jOOVNcmuUp\npZRq4OKtRJ8ALDbGTMZWhH0EDPMrW/wE25JFKaVUIxNvEVZ7oAe2TX0vbCLinygVAq3iPIdSSqkk\nFG8CshXbjLQcWGqM2Y3Tu9ORix2ALCKPx+NJSYmlhaZSSjVpCX1wxpuAzAKuxHZi6wI0B74wxowW\nka+Ao3FvGx8gJSWF/PzCOIPSOOTl5WpcODQuqmhcVNG4qJKXl1v9RnUorgRERP5njBnpDC+Qgm2H\nvQrb7j0DO+zy23GHUimlVNKJuxmviFzvsnhMvMdVSimV3HQoE6WUUjHRBEQppVRMNAFRSikVE01A\nlFJKxUQTEKWUUjHR4dyVUk3Kq6++zJtv/pe33/6QjIzA6UcmT36H7du3ceKJJ/PSS8/zt7+5TUVv\nbdiwnieeeISCggLKy8vp06cvF198BTk5OXV9CUlDcyBKqSZl6tQpjB8/gc8//zTsNm3btouYeJSW\nlnL99X/jzDPP5tFHn+bJJ5+nf/+B3HLLDXUR5KSlORClVL17c9pyvv/Fdf6yaqWlpVBRETqK+AH7\ndODUcX1c9qgyb95cunXrxsSJp3DbbTdy9NHHsWDBfB599EFatmxJamoagwYNZuPGDfzzn//gmWde\ndD3OnDmzGDp0OPvsM8C37Oijj+P9999l48YNTJr0LB6Ph82bN1FSUsKNN95Kjx49eeedN/jss09J\nSUlh/PgjOeWU07jrrlvJyMhgw4YNbNu2lRtu+Cd9+5qY4qa+aQ5EKdVkfPTRZI47biLdu/cgIyOT\nn39ezEMP3cNtt93Nww8/QefOXXzbRhqfb/36dXTp0i1keadOndm4cQMAXbt241//eopzzrmAJ5/8\nF6tWreSLLz7jqade4IknnmPGjC9Zvfo3Z78uPPTQY5xyyqm8//57IcdNVpoDUUrVu1PH9ak2txBO\nrGNhFRYWMmfObLZv38Hbb79BUVER77zzJtu3b6drV5sYDBmyL+vWra32WO3bd2DJkp9Clq9bt4aO\nHTsBMHz4AQAMHrwvjz32ECtXrmDjxg38+c+X4PF42LWrkHXr1gDQr5/NcXTo0JFFixbU+NoSRRMQ\npVST8Omn/+O4407k0kvtrMulpbv53e9OJDs7m99+W0XPnnuxZMnPtGzZstpjjRw5mldemcQvv/zs\nK8b68MPJtG7dxpeLEVnC4MH7snDhfHr16k2PHnvRq1dvHnjgUQDefPO/9O7dl+nTv4iY20lmmoAo\npZqE//3vA2666Tbf96ysbMaMGUfbtu24446bad68BTk5zUMSkDfeeJVu3Xpw6KEjfcuaNWvGvfc+\nzKOPPkhBQQEVFRX07t2HW26507fNN9/MZubMr6isrOSGG26hU6fODBt2AJdcch5lZWUMGDCQ9u3z\n6v7C61BcU9rWIo8Oz2zpUNVVNC6qaFxUqY+4WLNmNffeewePP/5sTPvfddetjB8/gQMPPKiWQxYo\nLy83oVkXrURXSik/+fmbue22Gxk1amyig5L0NAeSZPRNs4rGRRWNiyoaF1U0B6KUUqpB0gREKaVU\nTDQBUUopFRNNQJRSSsVEExCllFIx0QREKaVUTDQBUUopFRNNQJRSSsVEExCllFIx0QREKaVUTDQB\nUUopFRNNQJRSSsVEExCllFIx0QREKaVUTOKekdAYMxfY6XxdCdwFvARUAotF5LJ4z6GUahpKSsuZ\nPm8do/frQvPsDAB++W07ZRWVDO7VLsGhU8HiyoEYY7IARGSc8+884CHgHyIyGkg1xpxYC+FUSjUB\nb01fzttfruC/ny/zLbvvv/N4+M0FCQyVCifeHMi+QHNjzKdAGnADMExEZjrrPwGOAN6P8zxKqSZg\n47ZiAPJ3lCQ4JCoa8daBFAP3i8gE4BLgVcB/hqxCoFWc51BKNRGVlXaG1LTUhE60p6IUbw5kKbAc\nQESWGWO2AsP81ucCO6I5UF5ebpxBaTw0LqpoXFRpCnGxdK2tTk1LTwu5Xv/vTSEuGoJ4E5BzgcHA\nZcaYLkBLYKoxZrSIfAUcDUyL5kA6x7Gl8z1X0bio0tTi4qdft4Zcr/d7U4uLSBKdkMabgLwAvGiM\nmYltdXU2sBV43hiTASwB3o7zHEoppZJQXAmIiJQBZ7qsGhPPcZVSqtLjITVF60KSmXYkVEolpbmS\nH/Dd4/EkKCQqHE1AlFJJ6anJiwO+a/qRfDQBUUo1CJWagiQdTUCUUknLP9Hw9hFRyUMTEKVU0vJP\nNCo0AUk6moAopZKWf6KhlejJRxMQpVTCFe0uo7yiMmT5+7NW+j43hgzIzl2lfPzNb42mPifu4dyV\nUioeBcV7+Mujs8jOTAtZN+Xb1b7PjaEI66+Pfw3YQSPPPaZ/gkMTP82BKKXqzMIVW1i2NvJweOvz\niwDYvaciZF1uTobvc2OqRJ+1cEOig1ArNAFRStUJWb2dR95ayN3/+THidlO+Wx123aC9qyaR2law\nu9bCpmqHJiBKqToxeebK6jcCundo4bq8Q5tm7N25arDAN6Ytr5VwJYO9OjWO0YQ1AVFK1Yl1W4qi\n2q5T2xzX5ZWVnoCK8+Xrdrpu1xBt2dk4clOagCil6sSukrKotitzaX0FttluY6r38Bdt3CQ7TUCU\nUnWiWVZoqyo3ZeXuCUilp3H1/Vj869ZEB6HWaQKilKoTFRXRPfzd+n+AHcYknv4SH81exdTv1+Dx\neJIiIXrozQWJDkKt034gSqk6UR5lAuKWA2nfKpuy8kqWrY2t3qOsvIJ3Z/wKwOtfLANg0vXjYjqW\nCk9zIEqpOuGfe1i9qZDC4j2u27nlQDLSU/F4PCxcEVuxj1ufElX7NAeilKpzt7z4PRCaC9hTVsFH\ns38L2T4lJaXWhy6pqKwkLbX+35l3Fu3hf7NX1ft564PmQJRSCfNhmAdrSkp8Fehue67dHF2z4tr2\nxrRlfD53bcCynKzG8e6uCYhSqlYV7y7nhY9+jmrbTduKXZenkILHAwf27xBTGNwq8BM1gGFwk902\nuVmNYlwv0CIspVQtm/Ldar5evLHa7UpKy/khaN5zr9QUKC4tp6DI1ps0z47+UbW9sJSrnvg6ZHlG\nWmLel1NTUgK+79hVisdjE7TgdQ2N5kCUUnHzeDzMWbyRnUV7KNldHtU+kQZZ9FaC/7LablO0u5yi\n3eVR5SK+XuQ+UGGzBBUbBScR3kvwH2m4odIERCkVty/nr+e5j37mr4/NiviQX7B8Cz/8shkI34EQ\nYHeZeyuqXcXV9+BeEWbIE49rzUjdSwmTy3j7yxX1HJLapwmIUipuc36qKrJam78r7Hb/enshT05e\nzOYdJWETkBMO3YtwJTvRVKwvCNP0Nwn6EjY6moAopeK23K/DXzSd/65/eg65OZmu6yaO7BVS7OMV\nTxqQiPSjsHgP85dvCVjWoU2zBISkbmgCopSKy4KgB2S0UlPDVyAHN1Jq3yobwFepHotEDGfy/EdL\nQpalJ6gyvy40nitRSiXExqCmuB3DDM8erCLMGFgQmlB4hz//aE5op8OoJSALsshlAMXzjq2ayrak\nNLoGB8lKExClVFyCX+w7R5mA/CCba3yuPWEq16ORqH4gwfbu3NL3OZY4SCaagCilalX+jpKotluz\n2Va2nz6+L2OGdo1qn0i5FlX/aqVhtDGmA/ADMB6oAF4CKoHFInJZbZxDKZWcgpvHRjsT4coNhc7/\nBWRl2LlDWuZkRNznp1XbYwihVd+dv79bsilkmfc6vZIkUxSzuHMgxph04GnAWxD6EPAPERkNpBpj\nToz3HEqp5BXpIeg/p3k4qzYWViVBddkzu56f1k+//1PIshvOGh7wPVJfmIagNoqwHgCeAtZjO10O\nE5GZzrpPsLkSpVQjFal1kzeXUf0x7P91ObBHMrztd2nfPOB7Tg2GaElGcSUgxpizgc0i8hlVf3v/\nYxYCreI5h1IquUU782A444d3w9dEqi4zIHV36KgM2KtNyNhXaX5NmX9etY0HX5/XoFpmxZv8nQNU\nGmOOAPYF/g3k+a3PBcIPeOMnL6/6rG5ToXFRReOiSrLGRZvW0bW6Cmfk8B4Uzl5pj5Wb7XqdeW2a\nkb+9qnI+XFzMnL8OgNycDAqDhj1p3TonoXF47xWjfJ8P27cLsxasp1lOli9MD9wzDYDPflzHeScM\nSkgYayquBMSp5wDAGDMNuBi43xgzSkRmAEcD06I5Vn5+dFndxi4vL1fjwqFxUSWZ42LHTvch2cHO\nLFhdOf+OHUUcPrQLW7YXc+xBPV2vc9BebZm+fZ3ve7i4uO+VHwBCEg+AbduKyM1MXMNT/zDv070V\nsxasZ/uO4pBrmfzVCk44uGdUx0z0S0VdxObVwG3GmK+BDODtOjiHUipJvDdzpevygwd24r5LDgHg\nlNG9wu6flppK8+wMzj2mf9hOiIcN6VzjcLVrmRXwPVGDKbrx9kZv6JXotVaDIyL+c1WOqa3jKqWS\n185dpWHXXXD8AKBqGtt3vvrVdbu0CEOaeHUNqnyORvAouImsRH/qqtEB371zk7jNB9+QaEdCpVTM\najKz3oOXHcpRB/Zg0N5tA5ZHGhPLK9Ov/0RhcezjYdWn1JQUurRvzhN/HRXS/yMjXRMQpVQTdcuL\n3/Ha50trtE+b3CxOHdcnpOlqdTkQ70CKXt8udp8wKljwcWcuWB/VfrXB4/FQ6fGQ2yzDdSIrbxHW\nhq3FeDweysoDh2jZEmVv/kTTBEQpVSM7dpWyetMuPv9hrW+Qw5po2TxwGPfqEpBxw7oFfC8ti+6t\nPa914LDp3y6pv3GnvMVl4XJX3tK12Ys3ct6907noga8C1t/60vd1GbxaowmIUqpG/Psp3PPqjzXe\n/4RD9w74npYWPgG55g9DOWpEj4Bl0Rb7nHtsf447JLrWTJHcMqnmuS1v0V64xHFzNTmMoiinBU40\nTUCUUrXiilMG07NTLjf8cTgPXHpI2O1aNMvgqtP2830P7lznL9dlbKxyl5ZLazfvYltBYG6odYss\nTh7VO5qgh7WtYDerN9vcVk1UOglIuBzIvr3bxxWuZNGw+9ErpepduHrzoX3zGNo3z31lEP/nqtuc\n4df8YSgLV2xxbX1VFpQDqaz0cPOk76I6b00Fz3USLW8OJNzIxJFyXQ2J5kCUUjWycEVsMxAGqGbQ\nxP4923DauL4BicvgXu0AeHXKLwHburUEy3GpuA4ezKSktJy3v1zB35/9htWb3Dsm+s8eWJMZDb3H\n27DVPQGKlOtqSDQBUUrVyMLlobPs9erS0mXL8GKZXrZnpxbhjhayxO0NPzideXnKL3z8zW9s2lbM\ny1PE9cjL11XN717qMpnVD79s5tx7prFyQwErNxQw9fs1AOysZurdaPq+NARahKWUqpFWLTJDlvlP\n0xqNmvQf8UpLdX/fdTuU2xu+J2jDFesKfJ9XbigI3hyAt79c4ftcVl5JdtClPzl5MQBvTluOrLHD\n/r3+xTLG729bju3Xx72uI54irMLiPXzyzWomHNi9UQ5lopRqxNwqgHNzQhOVSPbp0Yb+Pdtw2UnR\nDxo4fd461+W//BY6ydSEA3uELOvULr5BHyM1Wf4tqAjMW+ner3tr1+2jKcIKNwXvl/PXM+W71bz2\n+bJqj1HXNAFRSkVty84SSstDi3Iqa5ijyEhP5Zo/DGW46RD1PgVhioXcZkD0b/p78YkDAThgn+jP\n5ea9Ge5DsQDs3uM+V/vWMImOW8OBYOGGyf/VKVbbvD3xnQ01AVFKRWXzjhKufWoO/3apLwjuHFgX\nfjfWvUludfUJzbNtU+DgNC74DX/pmtCZJ/b3S3SKY5inI54BHCsq3fu7eBOfcDmU+qQJiFIqKqvC\n1BPUlxbZ7vOlBxcHDe0bWMTm7YsRnEvaXhg4EOQ9r/7InMUbAzpK+idOW51+JuUVlaxYvzOqB3gs\n87AP3KsNUH09UU1zfXVBK9GVUlFpHuYBXl/CdcrLzgocqDAzaOBCbyIQTcX9cx/9DFSNIOxfbLZz\nl/387oxfmfLt6pBzuB2/pqMIn3FEP2S1rdMJV4Q1f7ltRu1WdFffNAeilIpKuCKV+hKu2qBVUPHZ\nxJGBQ6WEy4FEMm9pPlO+Xc0Slwr64MQDwidOo/btEvYcx7pMGpWSAmlO35Pi0nKu/NdMPvn2t2iD\nXe80AVFKRSW4yKe+hat4Dk7XOrYJbG2VFkMC8ti7i3hz+vKaBTDIVaft5xu23c0po93rdLwV798t\n2cSukjLemr7CdbtkoAmIUqpalZWesJ3t6qtTdbjT+L/9D+8XOpSKt44klr4nwQpqMBdJz04176Ph\n8VR1XpwcZqZH/97xiZY8IVFKJa2vXObSME4fh9H7da2XMITNgfhVZrslEbHkQMLZFOXYWM9eM4YW\nzWpeZxRNYpxMk1BpJbpSqlpvTAvttHbt6UPZuK2YDm2auexR+8I9XFeur2od9uPS/JD13jqQL35c\nyxlH9osrDN6K9HBG79eFnp1yY84ltG6RVf1GSURzIEqpau1xmcQpJSWFzu2ahx1ipC59NX+dr4J7\nynehldr+3PqJxFqf4zYelj/TvTVjYsyRnXWUCWmCnOw0AVFKNQj+c6m/PEW4/7/zotrPrfnvp9Uk\nOuG88L8lEdcHT9dbE2P26xpVD/VkogmIUqpByMnOYO/OgaP+bt5eTJ+urSLuF5wDKSuv8I2aW5ta\ntchkkDPkfG3z1nskQ+9zf5qAKKUajODMxKqNhQFDrrvuE7RTcQ2niz1ldK+I6/915WFcdMJAHr78\nsFqZ5+PaPwwNWTbnp40ALP41dCj9RNJKdKVURFP9inuevWYMG7cWxz2ybawKS8oCvofrre0vOAGp\nrjlvVmYapX6DIw7rl8c7X4UOpJiZkcoR+3cnNyeTEQM6VhuOaPXpFpqj8iZMj7y1sNbOUxs0AVFK\nRfT6NNuhLiXFFgd16xBuYqe6F9wKKrhIx20O9eAiLP99Ught+huch0hLTWHM0K58GTSc/NNXjYkm\nyDXmVmfTsnkmG7YGDl3y0OWH1sn5a0KLsJRSUclIT014JW9wK6jg4GS69PwOLlbyz7X8fnxf2rbM\n4ky/5r0ZUu0kAAAgAElEQVTBCYoHaNcysHlt/55tog90DaWmpIQkYpWVnpB+LLH0M6ltmoAopcLy\nb+7q1pQ30VJIoa9fkU/r3NB+FCGV6H4d8XKbZfDApYcydmhV09vSoLk9PB7ISA8aoDGOGQWjEZwL\nqfSEDgyfDNPiagKilArrxY8jN1tNtJQUKHdyFOP378ZFJwwM2Sb4YX/zC9/5Pns7/KWkpNAlzMi5\nHdo0CxnT6txjajaFbzjeya4GB7XeCk4cPJ7QnvSJzg2C1oEopcL4edU2Fq/cluhgRPTxN6tJTYFm\nWWmcPt69l7l/EVZw3xH/HuN3nD+Cc++Z5rp/cNFYbfUYP7B/Rw7sH1oBH5wD8Xg8JFkLXiDOBMQY\nkwo8BxigErgYKAVecr4vFpHL4gyjUioBHnh9fqKDUK21+bvo0j5yb3j/N/Xg4dmjfYmPNKpuXQjO\ngRTtLqfSk/gpbIPFGyvHAx4ROQy4CbgLeAj4h4iMBlKNMSfGeQ6lGr15y/L55ueNiQ6Gz7YC97m8\nk1F5eSXpMdZJVPdWv08PO2BkRj2PgFsU1FflpU9+4anJi+s1DNGIK1ZE5H3gQudrT2A7MExEZjrL\nPgHGx3MOpRq7rxdt4LF3FvHsBz+ze0/N592uC1c/OTtkmVsLp2RQVlEZ8+CFkXp2d26XwxWnDPGd\nwyu4RVZTFvcdISKVxpiXgEeB1whsRl0IRB5nQKkm7rXPl/o+lyZhSyev9q3rZ9Tdmiorr4y5iCnS\nEO+mRxuaZdlS/o1+w7hnZya+6jhZBl2slZgQkbONMR2A7wH/uywX2BHNMfLyaj75SmOlcVGlscbF\nxq1F3D7pWy49ZV9KSquajea2bEZeW/de3omOi9zmmQkPg5s9ZRVkZzWLGLa9Ordk1YaCkOXNW2SF\n3e/Leeu46sz9AejcoWqbK38/NKHxkJICt12c+E6EEH8l+plANxG5B9gNVAA/GGNGi8hXwNFAaLMG\nF/n5hfEEpdHIy8vVuHA05rh45ZMlrN5YyL3//j5g+Zp1O0itqKCsvJKFK7YypHc7MtJTExoXqSkp\nDO7VltMO75uUf4895ZXgifwMqXCZhGmfHq3p1bFFxP286/bvU9XMNq9FZkLjITsz3Xf+RCfo8RZh\nvQsMNcZ8ha3vuBK4DLjVGPM1kAG8Hec5lGq0gueluPUlm6BMnvUrT7y3iPdnuU9rWtfa+pXz33fJ\nwfz5d/vSKUzOKBlUV4kevLZ/zzZce/owsjLSXLcP2T8J+lx4JU9I4syBiEgxcJrLqjHxHFeppm7F\nWjvC7IIVWxiwVxtG1/Ob5l6dWrKtIJ+81tm0bZldr+eORXW9sot2Bw7CGNyc16tHxxas3rQLgN5d\nW7puo6okvjZIKRViqZOArMsv4oHX59Oja2taZNRfKyhvkc8t5xxYb+eMR3U5hK0F0c1AGDBuVlD9\n+pN/G+Xr9V7XcrLSKS51b5E3ceTe9RKGaCRnuzylGr2aFURs2VGzTmTVTb0aSXlFJQtW2HknYu1f\nUd/Kymun9dq4Yd18n4Ob+GZnptfbAIZuQ7p79eqSPA1bNQFRqp55PB5+CVOEEs7jby0I+F5SWk5+\nmETl9S+WccmDX7F5e7Hr+kgKivZw4f1f+r4nYr7zWFQ3qVSwcA/oNgGDMSYu8TxpZPhJrDxJNKZJ\nw7g7lGokPB4PFz3wFZtrmKPYVrDb12ehsHgPlz08g+uensOmbaGJhHe61qVravZQBfjLY7MCvrvN\nTdEY/H5cX9flyXK9zSLMrZ5M09pqAqJUPSqvqPTNb11T3t7QX8xd61v2/Ec/h91+1qINSfW2mkzC\nVbr7L05kw6tIf7eObZKnNZwmIErVo10l1Q9V8sHX7k13dzvzVPi/ga5YH9g5zn++76VrdjBX8mMJ\nZqMTPOVsuATEvzI+kXmR1s1tUVqvLoEtwS6ZOIiWzTMTESRXmoAoVY/enL682m0mz3RPQGYuWA+E\nDgB47j3TfP1Jlq4NHPjhycmLKQ5qwtoUBecmwhVV+bfCSuSETVmZaUy6fhw3nrV/QJjat0quJtWa\ngChVj9bl74p5310lZWzZWcL/5vwWsu6NacsA9x7X9/83tmHZTzh0r5j2S0bB09qGm1Fw7y5V/W06\nJElR0UEDq3JPe3dOrr4pmoAoVY/iaV67cVsx1z41x3Xdd0s289Mq98mffttUGHHQwHAmRmgJ1NAE\n50DCVTGkpaYycO+2ALRvnRxv+6ePd6/wTwaagChVj+IZbXeh0zcjnAdfnx92pNjH311U7fFrqy9F\nItx/ySER1wd3NIxUSX3B8QM4dWwfjjqwR62ELV452fXT9yQW2hNdqXoUTw4kGnvCHH/+8i3V7luS\nJHORROvkUb14d8avALSrpm4guAgrUs/1ljmZHDUiORIPrz8c3jdpmhj70wREqXpUusf9Ad+xTTM2\nbY9vytJ9e7ejtDz2BMrbyqtHxxZccPzAuMJS1zq3ywkeaSSi4Gdv29yGNSnUEQd0T3QQXGkRllIJ\ncuNZ+/s+337+CA4d1Ml1u35hek0HzxC4YMVWX2usfXu3c9slot3O2Ev9urWma/vmNd6/PuzVyVZy\nn3NM/+rno/WT4peC9O3WiswoR+FVkWkORKkE6dwuh6evGk1pWQXpaalkZgY+1C4+cSD79WnPxQ9+\n5br/Hpc6i7emrwAgL4bZA705kOys5H24Xv37oRTsqaBTyyx+DtNowE2q06sjPS2Vv585vK6C1+Ro\nDkSpBLju9KE0y0onMyON3BzbMWxlUKfAYf3yyMxIo1kMD/Ttu6offba0rIIlv233VSiXODmQZkkw\nZWs4OdnpDO5tp3MtLI6+f0uKPunqhEarUgmQlhb601u1MXCWu3Rnm9PH96vx8ft1a13tNi9+vIT7\n/zuP73/ZTNHuMl8rr+zM5M2B+Pt60Yaot/VWoifRvFCNQvK+aijViNWkl/PgGOozDh7Uic9+WMOW\nnbvDbjN/mW2Z9ev6Ap5+/yff8uyshvFYqMmgggVFe4CG3VQ5GWkORKl6sq2g6mFekwSkZU7Nxz7K\nykjl0pMGRdzGW5HsHb3Xq6HkQHp0jH6Wxm9+3lSHIWm6NAFRqp74v/0G90uIxaBebcOuS09LZcOW\nyPOB7Cpxr0PYFuXsfYl21an70altDrecc0Cig9JkNYy8qlKNgH+uI55OYfv0aM1+fdrTskUmi391\nb4mUkpJCRQzDl0DyDdgXTlZmGnddeFCig9GkaQKiVD1ZvblqIMXqiomOO2SvsOuuPX2Y73P/nm35\na9AkUF6h4z95qp07HKBf9+or4JUCTUCUqjXFu8uYPm8dbXOzOXBAB990sO/OWMGKdQX06NjCt211\nczqcPCpwIMPuHXNZs6mQA/bpELC8VYTjBOdyVm/aRc9O1dcbNGsglegq8fROUaqWvDJ1Kd86lbWy\nZgdnH70PAB/NtsOv9/XrUZ7u0ow3ktsvOpiPZ/7K+P27Vbvt38+0OZQBPdsELL/1pe+ZdP24sPtd\nfvJghsTQ4ks1XVqJrlQtWZdf5Ps8w5n8yd9nP9ipaMcM7VrjY7dr1YyjRvSIKuHp6/QBqWlOYli/\nvBonbKpp07tFqTgEzvYXWmntP2y4t6d3Xh1WUl93+lDfZ7eK+h9+2YzH42HLzsCBG383tnedhUk1\nXlqEpVSMvpi7llc/W8oVJw9maL88123Ou3d6yLJwfUCG9m3PvGXVD7seiX8dh1t9+ZOTFwOhLa2G\nhQl/Y/HHI/vxytSliQ5Go6MJiFIxevUz+0B67N1FTLp+XMjgsG9/ucJ1P7dhTACOP3SvmBKQ564d\nQ6rTbNe/CCpSX5PgHurhJqJqLBr79SWKxqpStWDLzhKKSwMnZPr4m9C5yyF8DqRbXgsG9WrLwQPc\nh3UPx9vaKz0t+kmTgjXPbtyPAh1MsW407rtGqTrUPDudot020bj2qTm0bRndJEXhOhGmp6Xyt1P3\nq7XwRWNI73ZcOnFQo688r42e/ypU475rlKpD3sTDK9qHVE3Gwaprfbo2jcmVNAGpG3HlQIwx6cAk\nYC8gE7gT+Bl4CagEFovIZfEFUanks25LUciy1i2yIo5+65WWljwPs+o6NDYWNSnOU9GLNwdyJrBF\nREYBRwGPAw8B/xCR0UCqMebEOM+hVNK56flvQ5Z5hwyvzs+rttd2cGIycO+2HDakc6KDUS9yczIA\nnQ+ktsVbB/Im8JbzOQ0oB4aJyExn2SfAEcD7cZ5HqaS3eUdJ9RsBO3dFl9DUhpbNM9ldWu46/e3v\nxvRuMkU7fbu14veH92VwhBGMVc3FlYCISDGAMSYXm5DcADzgt0kh0Mpl1xB5edGP7d/YaVxUaYhx\n0bFtDpu2hR9K/azjBsR0XbHs859bj2JbwW7Ovm1qwPKJo3szfFCXGh8vWcQSF2ccM6AOQtK0xd0K\nyxjTHXgXeFxEXjfG3Oe3OhfYEc1x8vMLq9+oCcjLy9W4cCRrXHiqmQlvRP8OzF2a7xvapGv75tz0\np/25+MGvAMjNSK3xddV2XOy7d9ukjNtoJOt9kQiJfsGKqw7EGNMR+BS4VkRedhbPM8aMcj4fDcx0\n3VmpBmr3noqI6wfu3ZYOrZv5vh99UA8yM9K47KRBTDxs74S0eurQplnA9yZScqXqWLw5kL8DrYGb\njDE3YwcD+jPwmDEmA1gCvB3nOZRKKmv85vVw06drKxau2Or77q1nGG46MNzUadDCuvWcA9lZVMr1\nz3wTECal4hFvHchfgL+4rBoTz3GVSma/ri+IuD4lJYVh/fL4/pfNgNsQi/UvKzONDpk5vu+afqja\noB0JlaqhKd9WDVFy3CE9XbfZy29Qw+rqTOrTBccPYFi/PDq3b57ooKhGQBMQpWpo5L629dIpo3tx\n8qjeXHbSIN+6zHT7k/IfMDGJ0g8OHtiJy08erEVYqlZoAqJUDXknauqaZ6eoLfPrY3H3RQcDth5E\nqcZOExClasg7TPuqDbYuJCO9qlVVqxZ2aJBeXVrSrqWdc6NT2xyUaox0NF6lolDp8ZACrN5U1QKr\nUzubMAzp3db5v11A0dBt5x3Ims276K25EdVIaQKiVBTOv3c62ZlpAX1AujlFWBnpaUy6flzIPs2y\n0unXvXW9hVGp+qZFWEpV44WPfgZCOxA29jk0lKqO/gKUimDD1iK+XrzRdV0yzeuhVCJoAqJUBPf9\nd57r8pNG7k37Vtn1HBqlkovWgSgVQVFJuevy4w/du55DolTy0RyIUhGUV4TOo6GUsjQBUSoM71hW\nSil3moAoFcZTkxe7Lr/v4oPrOSRKJSetA1EqCndeMIKy8kp6dGx4MyQqVVc0AVEqCp3b6ei1SgXT\nIiylXJSVV3UazErADIJKNQSagCjl4ou563yfH7r80ASGRKnkpQmIUi7enL7c99k7fLtSKpAmIEpF\ncGD/DokOglJJSxMQpYIsXbPD9/miEwYmMCRKJTdNQJQKcs+rPwJ2UqgUnfpVqbC0cFcpx52v/MCK\ndQW+77+uL4iwtVJKcyBKAdsKdgckHgB9uulMgkpFogmIUsADr88PWXb9GcMSEBKlGg4twlJN2vbC\nUq564mvXdala/6FURJqAqCbNLfEw3Vtz9R/2S0BolGpYNAFRys9ZEwxjhnZNdDCUahC0DkQpP4N6\ntU10EJRqMDQHopqkzTtK2F0aOF3t9WcMo32rZgkKkVINT60kIMaYEcA9IjLWGNMbeAmoBBaLyGW1\ncQ6lastLnyxhxoINAcv+cHhf+nVvnaAQKdUwxV2EZYy5BngOyHIWPQT8Q0RGA6nGmBPjPYdStWH5\nup289eXykMQD4IgDuicgREo1bLVRB7IcOMnv+3ARmel8/gQYXwvnUCpud70yl0++WR2y/IB9dMBE\npWIRdwIiIu8B/oXJ/o3nCwHtzqsSYtnaHWzZWQJA0e6ysNude0z/+gqSUo1KXVSiV/p9zgV2hNvQ\nX16ezjXt1VDjoqLSQ8GuUtq0zK61Y8YaF8W7y7j7P3ZQxA8fPJEPP/wpYP15JwxkmOlA25bZtMjJ\njDuc9aGh3hd1QeMiOdRFAvKjMWaUiMwAjgamRbNTfn5hHQQlOnf++wdKyyq47bwRCQuDV15ebkLj\nIh4PvTGfxSu30Tw7nXsvPoSc7Phur3ji4qeV23yfJ17zgW9a2uH98ti3T3sO3qcDqakplBSVUlJU\nGlc460NDvi9qm8ZFlUQnpHXRD+Rq4DZjzNdABvB2HZyjVq1YX8Da/CIqKz2JDkqDtth5aBftLufJ\nyYsor6isZo+6Iau38+AbVWNbVVR6KHaa7F5y0iAOG9KZ1FQdpkSpeNVKDkREfgMOcT4vA8bUxnHr\nW2lZhU5fWkt+XrWd/0wVzj66fusXZi3cwKSPl4Rdr+NbKVV7mvzT0v8tefeexpmArN9SRPHu8nof\nnnzGgg3MWLCBLu2bc80fhtKqed3WNXwwayWTZ60Muz4zQwdeUKo2Nb6nZQ3tKavwfd6wtYg2uVkR\ntm54PB4PNz7/LQDPXzc2IW/g67cU8dfHZjHp+nEAbNxWzKZtxezbp32tnWPHrtKQxOOco/ehS/vm\ntG+VTU52BhnpmoAoVZuafAJSWlaVA3ng9fm+h1xjsa2gqoL4n5O+45ZzDiAttfYfpD8uzfd9vvGs\n/bnj3z+EbHPxA1+yp7wqvptlpfHEX0fHdd6y8koefGN+wDzmAE/9bTRZmWlxHVspFVmTfyXbU15R\n/UYN1JyfNnLNU7N939flF3HBfV/W2vGffG8Rb0xbBsB/popvea8uLbnq96HDofsnHgAlpfHH/UUP\nfBmSeAzp3U4TD6XqQZPPgfz9mW8SHYQ6sXztTp778GfXdRWVlXHnQvJ3lPCD2FyH6dGGHbv2AHD+\ncbbSvF+31jTLSqckaMDCYD+t3MbAvWs+Aq7H42H6vHUhy/ft3Y6LThxY4+MppWquyedAgq3fUpTo\nINSKxSu3+j6PGxY4v8XWnbvjOnZFZSXXPT3H9/3Rtxf6Pg/rlwdARnoq9158MM9eM4Z/nn1AwP5p\nfk1oH3xjPmvzd9U4DJc/MoP/TF0asvzK/xtCdmaTfy9Sql5oAhKksHhPooNQK7xFOOccvQ9nHmkC\n1u3eU+H3OXIOwc1Hs38Lu87/4d2iWQbpaan07JTLsQf3BCAnK53bzw/ssHnzC9/x49J8zr1nGis3\nFLged8uOEp6avJjC4j1s2VkStvgrRZvpKlVvmvSrmscT2nEwf8duTI8EBKaWFe+2CUPHtjkATLp+\nHG9MW8an362hwukwuXDFVh55awFHHtCd3x/eN+QYG7YWsXTNDkbv15W1+bv4YNZKfpB8+oVpDvz0\nVeErxE8Z3ZvR+3WhdYss0tNSefCyQwOmk3383UUA3P7yDyENGSo9Hq51cjzf/7I55NhHHtCdqd+v\nCXtupVTdaNIJiH8fkFPH9uHN6csbRRHWlh0l/G+OzSX4DyfirfeoqPBQ6fHwyFsLAJj6/RoO6N+B\n3l2qEoZla3f4xpJ6eUpVBTnA0rU7AcjNyeD4Q/bitc+XkZuTQWZG5Ipr/8ma2uRmMen6cZx7T+BI\nN27NqJ//yL0ux6tHxxZcf8Yw33AlSqn60aQTkBK/opw1m+3YOlO+W82EET1qrdPbklXbuP/1+dz0\np/3Zu3PLWjlmdW57uaoJbfPsDN/n9DRbvHPXf+aG7HPnv+f63vy3Fez2JR6R3H3hweRkp9OhTQ69\nutTOtW0vDB2X6pufNrluu1+f9nTv0IIRAzrWSdNkpVRkTeZXV+nxsHztzoBcx8wF632f9+ub5/u8\naVtxrZ33/tftmEy3vxzaL6KmohlbqrSsgl0lVUOX+7/RL1yx1W0Xnynfrmb1pkKufnJ2xO28vLmb\nIb3b0aJZRjVbx6aisuqa2/mN8nvjWftz5f8N4aRRvTTxUCpBmswv799ThLv+M5cn31sM2PoP/yqQ\noX2rekV/NGcVHo+HFz76mXe+WhHzOe97LfAtftqPa2M+1rK1O7jw/i85955pEVtR7SoOP+/Fqo2h\nI5iOHVrVQuvN6cu55cXvA9Zfd/pQ3+c7zh/BE38dxbnH9Oe5a8fUIPThPXtN6HHOvWcapU7uUFZX\n9fG4/9JDOG1cHy44fkCt5XiUUrFrMkVYM5zcxvzlW3hlqjD9x6o+BKeO7UN6WirDTR5zJZ/Fv27j\nzlfm8ut62yJo4si9a/yWu3Xnbn5ZHdjB7T9TlzJuWDfA9tzultecDm1yXPcv3l3G5JkrOf7QvcjN\nyeTDr1f51l3z1GyOPKA7E0fu7Wv19O6MX9lesJuvF2/0bXfB8QOqDeeEA7u79qfomtecG/44nOzM\n9JBK7cOGdK72uNFKT0vlkSsPo6LCE1CpfslDX3HrhQfzwOvzA7afcGAjaOGgVCPRZBIQf/6JB0C2\n0+R1wgE9mOt0jvMmHgBbC0rp0LoZ0SqvqAzoAe5v0/bigM6LF584kMkzV7JxWzEPXHoIeXm5VFRW\ncvkjdlbgz+euZUjvdmwMKlab+v0aZi/eyGnj+tC7ays+mr0qYH3/nm04eGCngGWXThzEk5NtDuz+\nSw6hXStbJPTCdWP5etFG3yi2ea2zub0e50ZpGWZCp38+W9XX5NKJg+orOEqpKKW4NWVNAE9dThDz\n1pfLXefC9nru2jG+HEZwqyCAljkZFBSXsb/J49KTBld7vuBjHHtwT1+rqOo8ee04Lr0vqjm4IvrH\nmcNdR9/dXlhK6xaZrv0lPvthDUUlZZx42N4J6U+xZvMu/jnpO9d1jW2MsprSSZSqaFxUycvLTWjH\np0ZfB7KrpCxi4vG30/YNKJ46YJ8OIdsUOPUKP0g+ldUkuN8tCWwxNOHA7pwyunfU4a0u8Tjv2Orn\n17ju9KFhh25vk5sVNnE4Yv/uTBzZK2Gd8bp3aMHTV43m8b+MYpDf8CZ/PLJfQsKjlIqs0Rdh3fua\ne3PUgwZ25OSRvWgfVDR1wfEDOGCfDjw5eTH79WnP/OVbAtbnby/xdc7zuvzhGZRXVIYMFnjxiQN9\nlfOXnTSYJ95b5Fs3Zr8ufDm/qhXYgL3a8POq7QH7T7p+HJWVHnbsKuXqJ2cz3ORx6ODO7Cmv5JVP\nA/tmgG0IcMnEQaSnNdz3gsyMNDIz4G+n7advmkoluUadgKzbUsS6/KqOgVedth9fzF3LKWN607V9\nc9d90tNS2X+fDky6fhwej4fz7p0esP7n37azfmsRj72ziKzMNB7/y0jfdKn+UlLgwP4dfd+H9atq\n5eUtjmnZPJNPvl3No38eSVZGGo+/u8g3LLp3m9TUFNq2zA4owhk7tKuv9VRh8R7+/OgsAK44ZUj0\nkaOUUnFqtHUgFZWVAUOX333hQSE5h2h46zPOOsrw7ymhb/1HjejBlG9Di8juuvAgOgWdr7yikpQU\nIrboKk9JpWz3nkY5M2JNaQ6kisZFFY2LKomuA2m0Tylvfw+vWBIPgAcvO5Q9ZRW0apHpmoC4JR7P\nXD2ajPTQYTWiKVrq3L45+fnVdxhUSqlEa5QJyLszfmXesqq6i3ha8NR0itvnrx1LaqqOCKuUavwa\nbm1rGB/OXhXQJ8Ktp3OsLjzBdszr2Sk3ZPTam/60P3deMEITD6VUk9FociDzl23h0XcWBiy75ZwD\narVF0kEDOjHCqRgvKa3g9S/sdK5nTTD1NlCiUkoli6RIQIp3l/Htz5t45oOfAOjZMdcOzx3lvNZf\nzlvHv4Oatf5+XB96dMyt9bB6+0jkZNshPsorKht0s1mllIpVUiQgp93wccD33zYVcslDX/m+/+V3\n+zKkd7uAbS5/eIZr89mObXM488h+DNyr5vNsx0ITD6VUU5UUCYi/M47ox6ufBc517Z346JBBnZjt\nN1hgsCf/Nkrnw1ZKqXqSFE/b9LQUHrjsUN+geiOHdGbdliKe+eAnNm8v8W0XKfF44bqxOh+2UkrV\nowbRkXDKt6t5c/rykOWTrh9H/o4S2rXKJrWRJB7aSaqKxkUVjYsqGhdVtCNhFI4a0YOjRrjPA5FX\ng2HWlVJK1Z46SUCMMSnAk8C+wG7gfBH5tS7OpZRSKjHqqgnRRCBLRA4B/g48VEfnUUoplSB1lYAc\nBkwBEJFvgf3r6DxKKaUSpK4SkJbATr/v5cYY7TChlFKNSF1VohcA/t3AU0Uk0hCzKXl5td9rvKHS\nuKiicVFF46KKxkVyqKtcwdfAMQDGmIOARZE3V0op1dDUVQ7kPeAIY8zXzvdz6ug8SimlEiRZOhIq\npZRqYLRiWymlVEw0AVFKKRUTTUCUUkrFJKpKdGPMCOAeERlrjBkGPIUdomS+iPzZGLMv8AjgAVKA\ng4ATgaHAUc7yNkBHEekSdOxs4D9AB2zz3z+JyFZnXRrwOvCciEwNE65/AWXAZyJym7P8TuBwoBL4\nu4h8FbxvrKqLC2ebq4A/ABXA3SIy2W//fYBvgA4isifMOU4C/k9EzvBbVl1cHA7cDuwBNgNnichu\nY8wjwKFAIXC9iHwXdyRUnTOauLgO+D22X9D9IvI/Y0xL7N+8JZABXCUi34Q5R0BchPubRxkXD2I7\nuVYAV4vI7FqIg3RgErAXkAncCfwMvIS9/xaLyGXOthcAFzphv9OJi7D3v985XLcxxhwJ3APsAqaI\nyF0NPC5aYu/xFtj76EwR2VxbceHsH/I7MsZMBto5YSkRkWPrMy6c7fOAWcBgEdnj9Jt7CBgOZAG3\niMjHQecIFxfjgbud6/lcRG52CV+4++Js4GJs5uJ9Ebkz0nVWmwMxxlwDPOdcBMAzwJUiMhrYaYw5\nXUQWiMhYERkHPAG8LSJTReRev+VrgT+6nOISYKGIjAJeAW5yztsL+IrIvdifBn4vIiOBEcaYfY0x\n+wEHishB2If4v6q7xmhVExcFxpjTjTGtgCuBEcAEbMLq3T8XeAD74wh3jkewN1uK37Jo4uJx4AQR\nGQMsB843xhwL9BORA4DfYf82tSKa+8IYMwibeByIjYvbnJv+b9gbewy2hZ5ruNziApe/ucuubnEx\nBCx6MawAAAijSURBVDhYREYAZwGPxnzxgc4Etjj371HOuR8C/uHERaox5kRjTEfgCuBgZ7u7jTEZ\nhLn/g4Rs44w39xxwkrO8vzHmEJd9G1JcnO13nW8C17qcI+a4iPA76isiI0VkXG0kHo6o4sIJ15HA\np0BHv/3/CKQ79/lEoI/LOcLdO/dhE99DgLHGmIEu+7rdF72Ai4DR2OdXppPghhVNEdZy4CS/792c\n4UkAZmPfYgAwxuQAtwJ/9j+AMeZkYJuIfOFyfN+wJ8AnwHjncwvgPGC6W6Cch3GmiKxyFn0KjBeR\n+diHFdjUf3vky6uRSHHxNfZaioBV2I6ULbBveF7PYscGK45wjq+xN4a/5kSIC8cYEdnifE7HJlID\nsPGC81ZbYYzpEOEYNVHdfTES6A98KSJlIlIKLAOGYH9IzzjbZgAluAuIi3B/c5f93OJiHVBsjMkC\nWmHfvGrDm1T9cNOAcmCYiMx0ln0CHIFNRGeJSLmIFGDjYl/C3//+grc5HGgPbBeR35zl3vsvWEOJ\niyHY/mItnW1bhglXPHER8jtyfg+tjTEfGGNmOC9dtSGauPD+rSuc69jmt/8EYL0x5iPsc+NDl3O4\nxQXAj0B7Y0wmkE3gM8jL7b4YD8wF/g18CXwtIm77+lSbgIjIe9iL91phjBnpfD4e+0fxOg94U0T8\nIwLgemzC4sZ/2JNC5zsislBEhMC3z+D9Cvy+F2J/DIhIpTHmDuAD4MUw+9dYDeJiLTa7+gPO250x\n5hbgIxFZRPhrQkTeclm2qJq4QEQ2Oec5GRiDvQnmA0cZY9Kdt4sBBP69YhZFXORgHwijjDHNjTHt\ngEOA5iJSICKlxphO2Den68OcIzguwv7Ng/Zzi4tybFHqL8BUbE4wbiJSLCJFTuL2FnADgX8n7z2d\nS+DwPrucsPsv993/QYJ/I61EJB9oZozp57wlHoPL37aBxcVW4EhjzE/A1cALLqeJJy7cfkeZ2Ouf\nCJwCPGyMaV+zKw8VZVx4n1dfiMj2oPXtgd4ichw2R/GSy2lC4sL5vBj4CPgJWC0iv7iEz+2+aI99\n8TsH+D/gMadYMaxYOhKeC/zLKeObSWBxzBnYP4KPMaY/9u3gV+d7b+B57A38H2wEeMclyAV2hDux\nMeYy7IV5sNld/4sL2FdEbjTG3A18a4yZKSIra3yl1XOLi6OBTkBP7A0x1RgzGxs3a4wx5zvrpxpj\nzqMqLl4RkagTu6C4OENENhhj/oKN/wli61c+M8YcgH3j+gn7drE13DHjFBIXIvKLMeYJ7FvSamzd\nzxYn/IOB17D1H7OC7otwcVGAy988mrgwxlwEbBCRI5wfxdfGmG9EZH28F26M6Q68CzwuIq8bY+4L\nDmOYsG8ncNgf7/X0wj48q/uNnIUt0tuNfWhsacBxsQP4J3CviDzn3B/vGlsHVmtx4RLkjcAzYoda\nyjfGzAMMzn0ajyjjwp9/p7yt2EQAEZlhjOkbzX3hFKH/HegvIhuNMfcaY67G5vKruy+2YksMirE5\n1CVAP+yLsKtYEpBjgdNFZLsx5lHgYwDnRswUkXVB24/HZq9wImMFMNb73RjTGvvG8IPz/0zCEJEn\n8CsvN8aUGmP2xhYZTQBuMcaMBU4RkcuxWeA92EqruuAWF7uwFXFlThh3YN+S+vqFeyVwhLPNWJfj\nVsslLm7ANloY7xQXYYzpC6wRkZHGmG7Ay06RQV0IiQvnTS7XOX9LbJHTYmPMAGwW/1QnRxZyX7gR\nkUK3v7mIfE81cYF9WO9yPhdhHzRx58ac8vxPgctExFs0Ms8YM0pEZmBfKKYB3wN3OsUKzYB9sA+6\n2QTd/87LVjS/kQnAkSJSbox5F3hRRJY04LjYRtUbdT723qm1uAhjPLY+5lhjTAtgILAk1jjwC2e0\nceHPPwcyC3t97xlbz7c6yrgoweZGipzNNgDtReQBqr8vvgYudf4uGdgi6NCpYP3EkoAsA6YZY4qA\n6SLiLYPrh/1RB+sHfBbheE8BLxtjZgKlwOlB6yN1lb8Y+xabCkwVke+Nbb3wO2PMLGf5E35lo7XN\nNS6MMT8YY77Blj3OEpHPg/bztlarKde4cMpxb8bmMKYYYzzAG9hs793GmEuxN9ZlbvvXknBx0d8Y\n8x32b3u1iHiMMXdhK9//ZWwF6A4ROSnskQOF/M39V0aIi2eBQ40dXicVeFVElsV5zWDf9lpjK3Nv\nxv6N/ozN/mdgH0ZvO9f9KPbBkIKtTN1jjKnu/ofwv5H1wPfGmGLnegIefA0wLm4GnndyDunA+bUV\nF0F8vyMRmWKMOdIYMwf7e/27SxF8LKKKi3DhwjYKeMoJF9j7PlhIXDjxeBW29KEEm8s523+ncPeF\niDxjjHkB+1IDcJuIhC0RAh3KRCmlVIy0I6FSSqmYaAKilFIqJpqAKKWUiokmIEoppWKiCYhSSqmY\naAKilFIqJnU1pa1SSc0Y0xNYiu2hn4IdM2ghcIUEjQAbtN80sYODKtXkaQKimrJ1IjLM+8Xp4Pg2\nMCrCPmPqOlBKNRSagChV5Z/ARmccpiuAQdi5FgQ7ZtC9AMaYOSJysDHmKOwgoenASuACZ1A8pZoE\nrQNRyuGMTbYcOxlaqdj5FPpiRxY+WpxJspzEoz120p4jRWQ4dlTb+9yPrFTjpDkQpQJ5gHnASmcM\nsX2wk/m08FsPdsKdHsB0ZzyvVOpupGOlkpImIEo5nEHuDNAbuAM7m+Qk7DwJwYNfpmFHzp3o7JtJ\n1dDaSjUJWoSlmjL/aYNTsPUZc4Be2NFJX8bOFz0Km2CAndUxFfgWONgZMh9s/cn99RVwpZKB5kBU\nU9bZGPMjNiFJxRZdnQ50A14zxvwOO0z2HGBvZ58PgAXAcOwkWm86Ccpa7DzYSjUZOpy7UkqpmGgR\nllJKqZhoAqKUUiommoAopZSKiSYgSimlYqIJiFJKqZhoAqKUUiommoAopZSKiSYgSimlYvL/WVfH\nyww8ifgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot Open and Adjusted Open\n", "\n", "bp.plot(x='Date', y='Open', title='BP Open Prices 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Open', title='BP Adjusted Open Prices 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is extraordinary: the adjusted open and the open are radically different for BP, whereas with stock 'A' in the first few rows of the df, Adj. Open and Open had similar values. We are predicting the Adjusted Close - my guess is that the Adjusted figures will be more useful in predicting the adjusted price. The non-adjusted figures may be good for predicting momentum though.\n", "\n", "The stock price looks volatile. From the descriptive statistics, the mean daily percentage variation is 1.72% and the maximum daily percentage variation is 16.0%." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\nWjvRWwMHAmcBB2EJke7+XsjLyw068PS02hXita8WMXb4uW7X9iypESrNmjVyuzdmwjK/6ajysjEs\nJycz6DR6+tnKy8tl8vyNVFZWMeDI2grZ+OlrwOHgjLxct7JokpvlM47MzHS3Zz3LMKdxls9yrUt5\nxwJn+uI9nU5at25CTnZG9e8tBaXVf3vLQzD58nwm0Due9/eVuQ+gnnhvdq02Eu+0bNGYvNaNfd4P\nqn6k4KZ25LXOJTU1PoRKotRvX0RLgOwA/hSRCmCZMWafMaa1iGz39UJ+fvCeb32N1DzDePubRTX3\ntgc3yegMw9uxt3v2BK+xeAqg/Pwinh0zG4BDD2wOwOYdJWzIL6Fv9za89tkfAJzRv7NbPoqLS/FF\nWVmF27Oe+S8pKfVZrnUp71iQn19EXl5u3KfTyfbtxTTKqmlOu3fXzMt5y0Mw+XJ9Jpiy8LxfWlbb\nJJYo5elk585i0h2+l8IHkx9PUZG/vShu3KCE+z1iLYCiZcKaApwOYIzZH8jBEiox4+UvFtbtBS8y\nKtJ17sE3ZzLyq0UU+BES/ifRI5seJXLESf+U9IyZIFz99ES+m7E2+Je03USMqAgQEfkWmGeM+R34\nGrhZRBLmsy1evZP3vl8aVhh1yWykJ0+daB+mJDvOlY6f/bIyxilpmETNG6+I3BetsKPN8I/ne72+\nZefekMNUtyJKfRNJd+dl5ZWkpaWQlpqQW8eC5uspq9mYX8zN5x8W66QkBAnpzn3rTu/7PqKNt5Ve\nwfLcR96FEgTQVsJQIxJG5UsCkt2ceOPwX2mRm8XwW46LdVLqTK1Nnjjw1bC+tjcMVzkccTNPEs8k\n93Aiprj3KLESeooSKXYV+Zmri2vqLgh2FKjFIBhUgESJiI1Iw9mJrjRokqF6uGbB72ITP4SiSLzx\nzWKK6rDqsqGiAiSB8ewfyiuq+OH3dTX3k6EHSRjqVtY6J1Z3dhSGKEBCeGfVpkK+UW8SAVEB4oHn\n5qtEYtLcDUnnYK6isiopBeE73/0Z9TjKK/QUQm8EW53KorQ60pW5y/K59cXfyN/te4FOQXEpv87f\n6HVvWqxRAeLBF79GxnOuv0+93U9lqUUdhk9bdoW+Sixeuf65X/j3f2fHOhkB8fe9vZ0JU7wnOEeA\n4TDmB4l6HAlBHM+Fv/71Ikr2VfDr/E0+nxn+8Xze+174/c+t9Ziy4IgbAbJuaxEvfPIHhSWxtTv+\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "bp.plot(x='Date', y='Percentage Variation', title='BP Percentage Variation 3 Jan 1997-Sept 9 2016')\n", "bp.plot(x='Date', y='Adj. Percentage Variation', title='BP Adj. Percentage Variation 3 Jan 1997-Sept 9 2016')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Adjusted Percentage Variation and Percentage Variation look similar, however." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Feature Engineering\n", "x-day running averages\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:7: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/pandas/core/indexing.py:132: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", " self._setitem_with_indexer(indexer, value)\n", "/Users/jessica/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py:11: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n" ] } ], "source": [ "# N-day running averages\n", "moving_average = 30\n", "\n", "# 3-day, 7-day, 10-day, 14-day moving averages.\n", "def n_day_moving_average(df, moving_average):\n", " # Create a column `N-day moving Average`.\n", " df['%s-day Moving Average' % str(moving_average)] = 0\n", "\n", " for i in range(moving_average, len(bp)):\n", " m_average = sum(df.iloc[i-moving_average:i]['Adj. Close'])/moving_average\n", " df.iloc[i].loc['%s-day Moving Average' % str(moving_average)] = m_average\n", "\n", "n_day_moving_average(bp, 30)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.iloc[40].loc['%s-day Moving Average' % str(moving_average)]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "for i in range(moving_average, 40):\n", " bp.iloc[i].loc['%s-day Moving Average' % str(moving_average)] = m_average" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1933104 0\n", "1933105 0\n", "1933106 0\n", "1933107 0\n", "1933108 0\n", "Name: 30-day Moving Average, dtype: int64" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.tail()['30-day Moving Average']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Finding the stocks that are relevant to BP" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Stock symbols:\n", "China Petroleum and Chemical Corp: SNP,\n", "GAIL (India): GAIA or GAID,\n", "Gazprom: GAZ or 81jk or OGZD,\n", "Green Dragon Gas Ltd: GDG,\n", "Hellenic Petroleum SA: 98LQ or HLPD,\n", "Lukoil PJSC: LKOE, LKOD or LKOH,\n", "Magyar Olaj-es Gazipare Reszvenytar: MOLD,\n", "Mando Machinery Corp: MNMD or 05IS,\n", "Rosneft Oil Co: 40XT or ROSN,\n", "Royal Dutch Shell: RDSA or RDSB,\n", "Sacoil Hldgs Ltd: SAC,\n", "Surgutneftegaz: SGGD,\n", "Tatneft PJSC: ATAD,\n", "Total SA: TTA,\n", "Zoltav Resources Inc: ZOL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feat: FTSE 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I scraped data from Google Finance." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "ename": "NameError", "evalue": "name 'pd' is not defined", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mftse100_csv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"ftse100-figures.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mftse100_csv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mNameError\u001b[0m: name 'pd' is not defined" ] } ], "source": [ "ftse100_csv = pd.read_csv(\"ftse100-figures.csv\")\n", "ftse100_csv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Data Preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Raw cells because I've done this above." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Read HUGE csv that has all the daily LSE data from 1977\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Extract df with only BP data in it\n", "bp = df[df['Symbol'] == 'BP']" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Create additional features\n", "# These features are not used in the current model\n", "bp['Daily Variation'] = bp['High'] - bp['Low']\n", "bp['Percentage Variation'] = bp['Daily Variation'] / bp['Open'] * 100\n", "bp['Adj. Daily Variation'] = bp['Adj. High'] - bp['Adj. Low']\n", "bp['Adj. Percentage Variation'] = bp['Adj. Daily Variation'] / bp['Adj. Open'] * 100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build training and test sets" ] }, { "cell_type": "code", "execution_count": 197, "metadata": { "collapsed": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['i-1', 'i-2', 'i-3', 'i-4', 'i-5', 'i-6', 'i-7', 'Adj. High', 'Adj. Low']\n", "Start date: 1977-01-12\n", " i-1 i-2 i-3 i-4 i-5 i-6 i-7 \\\n", "1977-01-12 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 2.01993 \n", "1977-01-13 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 2.0038 \n", "1977-01-14 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 1.93874 \n", "1977-01-15 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 1.95487 \n", "1977-01-16 1.95826 1.95175 1.97777 1.93223 1.95175 1.96789 1.95487 \n", "\n", " Adj. High Adj. Low \n", "1977-01-12 2.02982 1.93874 \n", "1977-01-13 2.02982 1.91272 \n", "1977-01-14 2.0038 1.91272 \n", "1977-01-15 1.98766 1.91272 \n", "1977-01-16 1.98766 1.91272 \n", " Target\n", "1977-01-12 1.93223\n", "1977-01-13 1.97777\n", "1977-01-14 1.95175\n", "1977-01-15 1.95826\n", "1977-01-16 1.94863\n" ] } ], "source": [ "# Initialise variables\n", "# Number of days prior that we consider\n", "days = 7\n", "# Number of train and test examples combined\n", "periods = 9000\n", "\n", "# Columns\n", "columns = []\n", "for j in range(1,days+1):\n", " columns.append('i-%s' % str(j))\n", "columns.append('Adj. High')\n", "columns.append('Adj. Low')\n", "print(columns)\n", "\n", "# Index\n", "start_date = bp.iloc[days][\"Date\"]\n", "print(\"Start date: \", start_date)\n", "index = pd.date_range(start_date, periods=periods, freq='D')\n", "\n", "# Create empty dataframes for features and prices\n", "features = pd.DataFrame(index=index, columns=columns)\n", "prices = pd.DataFrame(index=index, columns=[\"Target\"])\n", "\n", "# Prepare test and training sets\n", "for i in range(periods):\n", " prices.iloc[i]['Target'] = bp.iloc[i+days]['Adj. Close']\n", " for j in range(days):\n", " features.iloc[i]['i-%s' % str(7-j)] = bp.iloc[i+j]['Adj. Close']\n", " features.iloc[i]['Adj. High'] = max(bp[i:i+days]['Adj. High'])\n", " features.iloc[i]['Adj. Low'] = min(bp[i:i+days]['Adj. Low'])\n", "print(features.head())\n", "print(prices.head())" ] }, { "cell_type": "code", "execution_count": 202, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DateAdj. Close
19230991977-01-032.019933
19231001977-01-042.003798
19231011977-01-051.938740
19231021977-01-061.954874
19231031977-01-071.954874
19231041977-01-101.967886
19231051977-01-111.951752
19231061977-01-121.932234
19231071977-01-131.977775
19231081977-01-141.951752
19231091977-01-171.958257
19231101977-01-181.948629
19231111977-01-192.010304
19231121977-01-201.977775
19231131977-01-211.967886
19231141977-01-241.990787
19231151977-01-251.993909
19231161977-01-262.003798
19231171977-01-272.000676
19231181977-01-282.003798
\n", "
" ], "text/plain": [ " Date Adj. Close\n", "1923099 1977-01-03 2.019933\n", "1923100 1977-01-04 2.003798\n", "1923101 1977-01-05 1.938740\n", "1923102 1977-01-06 1.954874\n", "1923103 1977-01-07 1.954874\n", "1923104 1977-01-10 1.967886\n", "1923105 1977-01-11 1.951752\n", "1923106 1977-01-12 1.932234\n", "1923107 1977-01-13 1.977775\n", "1923108 1977-01-14 1.951752\n", "1923109 1977-01-17 1.958257\n", "1923110 1977-01-18 1.948629\n", "1923111 1977-01-19 2.010304\n", "1923112 1977-01-20 1.977775\n", "1923113 1977-01-21 1.967886\n", "1923114 1977-01-24 1.990787\n", "1923115 1977-01-25 1.993909\n", "1923116 1977-01-26 2.003798\n", "1923117 1977-01-27 2.000676\n", "1923118 1977-01-28 2.003798" ] }, "execution_count": 202, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bp.iloc[:20][['Date', 'Adj. Close']]" ] }, { "cell_type": "code", "execution_count": 203, "metadata": { "collapsed": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Day 0Day 1Day 2Day 3Day 4Day 5Day 6
1977-01-121.932231.977771.951751.958261.948632.01031.97777
1977-01-131.977771.951751.958261.948632.01031.977771.96789
1977-01-141.951751.958261.948632.01031.977771.967891.99079
1977-01-151.958261.948632.01031.977771.967891.990791.99391
1977-01-161.948632.01031.977771.967891.990791.993912.0038
1977-01-172.01031.977771.967891.990791.993912.00382.00068
1977-01-181.977771.967891.990791.993912.00382.000682.0038
1977-01-191.967891.990791.993912.00382.000682.00381.99079
1977-01-201.990791.993912.00382.000682.00381.990791.99729
1977-01-211.993912.00382.000682.00381.990791.997291.99729
1977-01-222.00382.000682.00381.990791.997291.997291.99391
1977-01-232.000682.00381.990791.997291.997291.993912.00692
1977-01-242.00381.990791.997291.997291.993912.006922.03633
1977-01-251.990791.997291.997291.993912.006922.036332.10139
1977-01-261.997291.997291.993912.006922.036332.101392.17295
1977-01-271.997291.993912.006922.036332.101392.172952.19247
1977-01-281.993912.006922.036332.101392.172952.192472.19247
1977-01-292.006922.036332.101392.172952.192472.192472.17946
1977-01-302.036332.101392.172952.192472.192472.179462.18596
1977-01-312.101392.172952.192472.192472.179462.185962.16644
1977-02-012.172952.192472.192472.179462.185962.166442.12741
1977-02-022.192472.192472.179462.185962.166442.127412.12741
1977-02-032.192472.179462.185962.166442.127412.127412.1144
1977-02-042.179462.185962.166442.127412.127412.11442.1144
1977-02-052.185962.166442.127412.127412.11442.11442.08837
1977-02-062.166442.127412.127412.11442.11442.088372.09176
1977-02-072.127412.127412.11442.11442.088372.091762.09488
1977-02-082.127412.11442.11442.088372.091762.094882.1209
1977-02-092.11442.11442.088372.091762.094882.12092.1438
1977-02-102.11442.088372.091762.094882.12092.14382.16306
........................
2001-08-0431.741131.939931.780832.6432.9933.809433.9844
2001-08-0531.939931.780832.6432.9933.809433.984433.9683
2001-08-0631.780832.6432.9933.809433.984433.968334.1131
2001-08-0732.6432.9933.809433.984433.968334.113133.8637
2001-08-0832.9933.809433.984433.968334.113133.863733.9361
2001-08-0933.809433.984433.968334.113133.863733.936134.1453
2001-08-1033.984433.968334.113133.863733.936134.145334.3947
2001-08-1133.968334.113133.863733.936134.145334.394734.3706
2001-08-1234.113133.863733.936134.145334.394734.370634.3465
2001-08-1333.863733.936134.145334.394734.370634.346534.1131
2001-08-1433.936134.145334.394734.370634.346534.113134.3062
2001-08-1534.145334.394734.370634.346534.113134.306233.9925
2001-08-1634.394734.370634.346534.113134.306233.992533.9442
2001-08-1734.370634.346534.113134.306233.992533.944233.9522
2001-08-1834.346534.113134.306233.992533.944233.952233.9361
2001-08-1934.113134.306233.992533.944233.952233.936133.7672
2001-08-2034.306233.992533.944233.952233.936133.767233.7189
2001-08-2133.992533.944233.952233.936133.767233.718933.8396
2001-08-2233.944233.952233.936133.767233.718933.839633.4936
2001-08-2333.952233.936133.767233.718933.839633.493632.4719
2001-08-2433.936133.767233.718933.839633.493632.471933.1316
2001-08-2533.767233.718933.839633.493632.471933.131633.735
2001-08-2633.718933.839633.493632.471933.131633.73533.8235
2001-08-2733.839633.493632.471933.131633.73533.823534.2499
2001-08-2833.493632.471933.131633.73533.823534.249934.258
2001-08-2932.471933.131633.73533.823534.249934.25835.0947
2001-08-3033.131633.73533.823534.249934.25835.094735.2878
2001-08-3133.73533.823534.249934.25835.094735.287834.8131
2001-09-0133.823534.249934.25835.094735.287834.813134.4913
2001-09-0234.249934.25835.094735.287834.813134.491334.6683
\n", "

9000 rows × 7 columns

\n", "
" ], "text/plain": [ " Day 0 Day 1 Day 2 Day 3 Day 4 Day 5 Day 6\n", "1977-01-12 1.93223 1.97777 1.95175 1.95826 1.94863 2.0103 1.97777\n", "1977-01-13 1.97777 1.95175 1.95826 1.94863 2.0103 1.97777 1.96789\n", "1977-01-14 1.95175 1.95826 1.94863 2.0103 1.97777 1.96789 1.99079\n", "1977-01-15 1.95826 1.94863 2.0103 1.97777 1.96789 1.99079 1.99391\n", "1977-01-16 1.94863 2.0103 1.97777 1.96789 1.99079 1.99391 2.0038\n", "1977-01-17 2.0103 1.97777 1.96789 1.99079 1.99391 2.0038 2.00068\n", "1977-01-18 1.97777 1.96789 1.99079 1.99391 2.0038 2.00068 2.0038\n", "1977-01-19 1.96789 1.99079 1.99391 2.0038 2.00068 2.0038 1.99079\n", "1977-01-20 1.99079 1.99391 2.0038 2.00068 2.0038 1.99079 1.99729\n", "1977-01-21 1.99391 2.0038 2.00068 2.0038 1.99079 1.99729 1.99729\n", "1977-01-22 2.0038 2.00068 2.0038 1.99079 1.99729 1.99729 1.99391\n", "1977-01-23 2.00068 2.0038 1.99079 1.99729 1.99729 1.99391 2.00692\n", "1977-01-24 2.0038 1.99079 1.99729 1.99729 1.99391 2.00692 2.03633\n", "1977-01-25 1.99079 1.99729 1.99729 1.99391 2.00692 2.03633 2.10139\n", "1977-01-26 1.99729 1.99729 1.99391 2.00692 2.03633 2.10139 2.17295\n", "1977-01-27 1.99729 1.99391 2.00692 2.03633 2.10139 2.17295 2.19247\n", "1977-01-28 1.99391 2.00692 2.03633 2.10139 2.17295 2.19247 2.19247\n", "1977-01-29 2.00692 2.03633 2.10139 2.17295 2.19247 2.19247 2.17946\n", "1977-01-30 2.03633 2.10139 2.17295 2.19247 2.19247 2.17946 2.18596\n", "1977-01-31 2.10139 2.17295 2.19247 2.19247 2.17946 2.18596 2.16644\n", "1977-02-01 2.17295 2.19247 2.19247 2.17946 2.18596 2.16644 2.12741\n", "1977-02-02 2.19247 2.19247 2.17946 2.18596 2.16644 2.12741 2.12741\n", "1977-02-03 2.19247 2.17946 2.18596 2.16644 2.12741 2.12741 2.1144\n", "1977-02-04 2.17946 2.18596 2.16644 2.12741 2.12741 2.1144 2.1144\n", "1977-02-05 2.18596 2.16644 2.12741 2.12741 2.1144 2.1144 2.08837\n", "1977-02-06 2.16644 2.12741 2.12741 2.1144 2.1144 2.08837 2.09176\n", "1977-02-07 2.12741 2.12741 2.1144 2.1144 2.08837 2.09176 2.09488\n", "1977-02-08 2.12741 2.1144 2.1144 2.08837 2.09176 2.09488 2.1209\n", "1977-02-09 2.1144 2.1144 2.08837 2.09176 2.09488 2.1209 2.1438\n", "1977-02-10 2.1144 2.08837 2.09176 2.09488 2.1209 2.1438 2.16306\n", "... ... ... ... ... ... ... ...\n", "2001-08-04 31.7411 31.9399 31.7808 32.64 32.99 33.8094 33.9844\n", "2001-08-05 31.9399 31.7808 32.64 32.99 33.8094 33.9844 33.9683\n", "2001-08-06 31.7808 32.64 32.99 33.8094 33.9844 33.9683 34.1131\n", "2001-08-07 32.64 32.99 33.8094 33.9844 33.9683 34.1131 33.8637\n", "2001-08-08 32.99 33.8094 33.9844 33.9683 34.1131 33.8637 33.9361\n", "2001-08-09 33.8094 33.9844 33.9683 34.1131 33.8637 33.9361 34.1453\n", "2001-08-10 33.9844 33.9683 34.1131 33.8637 33.9361 34.1453 34.3947\n", "2001-08-11 33.9683 34.1131 33.8637 33.9361 34.1453 34.3947 34.3706\n", "2001-08-12 34.1131 33.8637 33.9361 34.1453 34.3947 34.3706 34.3465\n", "2001-08-13 33.8637 33.9361 34.1453 34.3947 34.3706 34.3465 34.1131\n", "2001-08-14 33.9361 34.1453 34.3947 34.3706 34.3465 34.1131 34.3062\n", "2001-08-15 34.1453 34.3947 34.3706 34.3465 34.1131 34.3062 33.9925\n", "2001-08-16 34.3947 34.3706 34.3465 34.1131 34.3062 33.9925 33.9442\n", "2001-08-17 34.3706 34.3465 34.1131 34.3062 33.9925 33.9442 33.9522\n", "2001-08-18 34.3465 34.1131 34.3062 33.9925 33.9442 33.9522 33.9361\n", "2001-08-19 34.1131 34.3062 33.9925 33.9442 33.9522 33.9361 33.7672\n", "2001-08-20 34.3062 33.9925 33.9442 33.9522 33.9361 33.7672 33.7189\n", "2001-08-21 33.9925 33.9442 33.9522 33.9361 33.7672 33.7189 33.8396\n", "2001-08-22 33.9442 33.9522 33.9361 33.7672 33.7189 33.8396 33.4936\n", "2001-08-23 33.9522 33.9361 33.7672 33.7189 33.8396 33.4936 32.4719\n", "2001-08-24 33.9361 33.7672 33.7189 33.8396 33.4936 32.4719 33.1316\n", "2001-08-25 33.7672 33.7189 33.8396 33.4936 32.4719 33.1316 33.735\n", "2001-08-26 33.7189 33.8396 33.4936 32.4719 33.1316 33.735 33.8235\n", "2001-08-27 33.8396 33.4936 32.4719 33.1316 33.735 33.8235 34.2499\n", "2001-08-28 33.4936 32.4719 33.1316 33.735 33.8235 34.2499 34.258\n", "2001-08-29 32.4719 33.1316 33.735 33.8235 34.2499 34.258 35.0947\n", "2001-08-30 33.1316 33.735 33.8235 34.2499 34.258 35.0947 35.2878\n", "2001-08-31 33.735 33.8235 34.2499 34.258 35.0947 35.2878 34.8131\n", "2001-09-01 33.8235 34.2499 34.258 35.0947 35.2878 34.8131 34.4913\n", "2001-09-02 34.2499 34.258 35.0947 35.2878 34.8131 34.4913 34.6683\n", "\n", "[9000 rows x 7 columns]" ] }, "execution_count": 203, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# N-day prices target\n", "\n", "# Initialise variables\n", "target_days = 7\n", "\n", "# Create target dataframe\n", "nday_columns = []\n", "for j in range(1,target_days+1):\n", " nday_columns.append('Day %s' % str(j-1))\n", "nday_prices = pd.DataFrame(index=index, columns=nday_columns)\n", "\n", "# Fill target dataframe\n", "for i in range(periods):\n", " for j in range(target_days):\n", " nday_prices.iloc[i]['Day %s' % str(j)] = bp.iloc[i+days+j]['Adj. Close']\n", "nday_prices" ] }, { "cell_type": "code", "execution_count": 206, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (X,y): (7200, 9) (7200, 1)\n", "Test shapes (X,y): (1800, 9) (1800, 1)\n" ] } ], "source": [ "# Train-test split\n", "from sklearn.cross_validation import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(train, prices, test_size=0.2, random_state=0)\n", "\n", "print(\"Train shapes (X,y): \", X_train.shape, y_train.shape)\n", "print(\"Test shapes (X,y): \", X_test.shape, y_test.shape)" ] }, { "cell_type": "code", "execution_count": 207, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Train shapes (Xnd,ynd): (7200, 9) (7200, 7)\n", "Test shapes (Xnd,ynd): (1800, 9) (1800, 7)\n" ] } ], "source": [ "# Train-test split\n", "\n", "Xnd_train, Xnd_test, ynd_train, ynd_test = train_test_split(train, nday_prices, test_size=0.2, random_state=0)\n", "\n", "print(\"Train shapes (Xnd,ynd): \", Xnd_train.shape, ynd_train.shape)\n", "print(\"Test shapes (Xnd,ynd): \", Xnd_test.shape, ynd_test.shape)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Classifier" ] }, { "cell_type": "code", "execution_count": 218, "metadata": { "collapsed": true }, "outputs": [ { "ename": "ImportError", "evalue": "cannot import name 'parallel_helper'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# clf = svm.SVR()\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmultioutput\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mMultiOutputRegressor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mclf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mMultiOutputRegressor\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msvm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSVR\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrandom_state\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/Users/jessica/anaconda/lib/python3.5/site-packages/sklearn/multioutput.py\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mRegressorMixin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mClassifierMixin\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcheck_array\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcheck_X_y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfixes\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mparallel_helper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 24\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalidation\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mcheck_is_fitted\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhas_fit_parameter\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 25\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mexternals\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoblib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdelayed\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mImportError\u001b[0m: cannot import name 'parallel_helper'" ] } ], "source": [ "# Classifier\n", "\n", "from sklearn import svm\n", "# clf = svm.SVR()\n", "\n", "from sklearn.multioutput import MultiOutputRegressor\n", "clf = MultiOutputRegressor(svm.SVR(random_state=0))\n", "\n", "clf.fit(Xnd_train, ynd_train)\n", "pred = clf.predict(Xnd_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Metrics" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Metrics\n", "\n", "from sklearn.metrics import mean_absolute_error\n", "from sklearn.metrics import explained_variance_score\n", "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import r2_score\n", "from sklearn.metrics import median_absolute_error\n", "\n", "print(\"Mean Absolute Error: \", mean_absolute_error(y_test, pred))\n", "print(\"Explained Variance Score: \", explained_variance_score(y_test, pred))\n", "print(\"Mean Squared Error: \", mean_squared_error(y_test, pred))\n", "print(\"R2 score: \", r2_score(y_test, pred))\n", "print(\"Median Absolute Error: \", median_absolute_error(y_test, pred))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Issues\n", "If `train_test_split` shuffles, we may have seen some data in the test set before." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/report-drafts/p5.1-definition.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# I. Definition" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Project Overview\n", "\n", "### Introduction\n", "People have used machine learning in trading for decades. Hedge funds, high-frequency trading shops and sole traders use all sorts of strategies, from Bayesian statistics to physics related strategies.\n", "\n", "### Scope of this project\n", "We will investigate **using machine learning in trading equities**, specifically to **predict equity prices for a 7-day period**. Equities are stocks - shares of companies like Apple and Google that are publically listed on the stock exchange. That means any licensed stock broker can trade those stocks. By trading, we mean buying and selling these shares on the stock exchange.\n", "\n", "We will only tackle trading equities and not other more complex financial products because calculating returns for those products is more complex and equities are sufficiently interesting.\n", "\n", "### Why trading is an interesting domain for machine learning\n", "1. Firstly, there are many non-engineered features. If we include only equities, we already have over 10,000 equities globally. That makes for at least 10,000 potential non-engineered features. \n", "\n", "2. Secondly, there are many datapoints. Even access to only daily trading information gives us 30 years * 365 days = over 10,000 datapoints for each of many stocks. (This is only an estimate because trading does not take place on Sundays in all non-Israeli exchanges.) If we were to look at intraday figures, there's even more data: in January 2009, an average of 881,609 trades were made per day in equities on the London Stock Exchange [(Source: LSE Group)](http://www.lseg.com/media-centre/news/corporate-press-releases/185-million-electronic-equity-trades-across-london-stock-exchange-group-order-books-january).\n", "\n", "3. It is also interesting because research in machine learning and statistics has affected how markets behave. There is no strategy or algorithm that will solve this problem or remain forever 'optimal' - if a profitable strategy is found, it may be copied by other people and so be priced in or it may be fought against or taken advantage of. This is more relevant to high-frequency trading than daily trading but nonetheless has an impact. \n", "\n", "### Aim of this project\n", "\n", "The aim of this exploratory study is to get a feel for what types of features are involved in predicting stock prices and how different models perform in this setting. The challenges will be discussed in more detail in the Problem Statement.\n", "\n", "Predicting stock prices accurately is difficult: there are many factors that influence stock prices and a lot of noise.\n", "\n", "This exploratory study does not aim to produce a state-of-the-art, better-than-benchmark-buy-and-hold (transaction costs included) trading strategy - that is extremely difficult and is a challenge even for top trading firms. \n", "\n", "### Data used in this project\n", "\n", "There is one primary dataset for this project and two supplementary datasets.\n", "\n", "* The primary dataset is a CSV with all the daily stock prices from 1977 for stocks listed on the the London Stock Exchange. This dataset was downloaded from Quandl. \n", "* The first supplementary dataset is a spreadsheet listing the stocks currently listed on the London Stock Exchange with information such as what each listed company's stock symbol is and which sector they belong to. This spreadsheet was downloaded from the London Stock Exchange website.\n", "* The second supplementary dataset is a CSV with Open, High, Low, and Close data for the FTSE100 from April 1, 1984 to Sept 9, 2016. This data was scraped from Google Finance and is used for feature engineering.\n", "\n", "The features and characteristics of the primary dataset will be discussed more thoroughly in Section II: Data Exploration." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Problem Statement\n", "\n", "### Problem\n", "\n", "Build a stock price predictor that satifies:\n", "\n", "\n", "\n", "\n", "\n", "
CategoryDetails
InputDaily trade data over a `start_date - end_date`. Daily trade data consists of adjusted and unadjusted Open, High, Low, Close figures for a set of stocks S.
Output
  • Projected estimates of Adjusted Close prices for query dates for pre-chosen stock BP in S.
  • Results satisfy predicted stock value 7 days out is within +/- 5% of actual value, on average.
Optional OutputSuggested trades
\n", "\n", "Glossary:\n", "* **Adjusted prices** are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open.\n", "* **BP** is the stock symbol for British Petroleum, an energy company.\n", "\n", "### Interesting characteristics of this problem\n", "There are a few interesting characteristics of this problem compared to previous projects in the Machine Learning Engineer Nanodegree.\n", "\n", "1. Predicting multiple outputs: We will predict the adjusted close prices for 7 days after the last input date.\n", "\n", "### Challenges\n", "1. The model has to be run for dates not within the training set for the model to be 'fair'. But given there may be big shifts in how people view the markets from year to year, it may be hard for the model to generalise from one year to the next.\n", "2. Energy companies' stock prices are volatile so they may be harder to predict.\n", "\n", "### Analysis of Problem\n", "\n", "This is a regression problem (as opposed to a classification problem) because we are predicting daily Adjusted Close prices for a stock. These prices are continuous.\n", "\n", "Compare this to a related problem: If this were high-frequency trading and we were trying to predict the stock price in the next nanosecond we could tackle price prediction as a binary classification problem instead (does the price go up or down?).\n", "\n", "It's not immediately obvious what kind of model will be best.\n", "\n", "Characteristic of problem: \n", "- Time-series data.\n", "- Noisy data\n", "- Datapoints (prices of different stocks) are not independent of each other -> Naive Bayes is not appropriate\n", "- Many features. (Daily open, high, low, adjusted close for many stocks) -> \n", "- Regression problem (continuous output).\n", "- Training cost or time: it is not critical to keep this lower than 12 hours because we are predicting daily prices based on stats from prior days' trading. \n", "- Prediction time: Again not critical to keep this low. Anything within an hour would do.\n", "\n", "### Strategy\n", "I intend to do the following:\n", "\n", "1. Explore the data\n", "- Come up with a basic model with which I can predict the next day's prices and then the next 7 days' prices as a benchmark\n", "- Try adding different features and using different algorithms\n", " - Features include x-day moving averages of BP stocks, stocks in the oil industry, and indices such as the FTSE 100. \n", "- Assess which model is best using the metric described below.\n", "\n", "### Expected Solution\n", "\n", "The solution will be 7 predicted prices for each trading day within 7 trading days after the last date in the input date range. We will compare the 7 predicted prices with the actual adjusted close prices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Metrics\n", "\n", "We will measure performance as the **root mean squared percentage error** (difference between the stock's actual and predicted Adjusted Close prices). This represents the error between the actual price and the predicted price. \n", "\n", "Reasoning: We have to square it and then take the square root because if we don't square it, errors from overestimates and underestimates will cancel each other out.\n", "\n", "We will also consider **the range of root mean squared percentage error** as a secondary metric - we want a model with lower error variance because a series of small good trades (gaining \\$1 ten times) can be more than cancelled out by a single large-magnitude bad trade (losing \\$50 once).\n", "\n", "We will not consider transaction costs (you have to pay every time you trade and that will reduce profits)." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/report-drafts/p5.2-4-report.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# II. Analysis\n", "\n", "## Data Exploration\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Description of Primary Dataset\n", "The primary dataset used is daily stock data for stocks on the London Stock Exchange (LSE). The date range for stock data varies depending on when the stock went public. The furthest date was in the year 1954. The most recent date in the dataset was 9 September 2016. The data was taken from Quandl's free access database.\n", "\n", "All the data is in one comma-separated value file (CSV), with each row being one datapoint. There are over 14 million datapoints in the dataset. \n", "\n", "Each row has 14 columns. That means we have 14 features for each stock on every trading day since the year when the stock was tradable (from 1954 onwards). Unless otherwise indicated, the column values are all floats.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
ColumnFormat or accuracy if floatMeaning
Stock symbolstringHow the stock is represented on the London Stock Exchange. E.g. GOOGLE's stock symbol is GOOGL.
DateYYYY-MM-DD
Opengiven to 2 decimal places (2 d.p.)Price of stock when the market opened on that day in GBP £.
High2 d.p.Maximum price of the stock during the trading day in GBP £.
Low2 d.p.Minimum price of the stock during the trading day in GBP £.
Close2 d.p.Price of stock when the market closed on that day in GBP £.
Volume1 d.p.The number of shares of that stock traded on that day.
Ex-Dividend1 d.p.The value of the declared or upcoming dividend that will belong to the seller of the stock share rather than the buyer. Dividend is profits distributed to shareholders. If the upcoming dividend will be given to the buyer, Ex-Dividend = 0.
Split Ratio1 d.p.A company may choose to split their stock. E.g. a 2.0 (2:1) split ratio means shareholders get two new shares for every share they hold. This halves the price to preserve the market capitalisation (total value) of the company.
Adjusted Open6 d.p.Adjusted opening price (price of stock when the market opened on that day). Adjusted prices are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open.
Adjusted High6 d.p.See Adjusted Open and High.
Adjusted Low6 d.p.See Adjusted Open and Low.
Adjusted Close6 d.p.See Adjusted Open and Close.
Adjusted Volume1 d.p.See Adjusted Open and Volume.
\n", "\n", "Reference: [Definition of Ex-Dividend (Investopedia)](http://www.investopedia.com/terms/e/ex-dividend.asp)\n", "\n", "#### Data sample\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
0A1999-11-1845.5050.0040.0044.0044739900.00.01.043.47181047.77121938.21697542.03867344739900.0
1A1999-11-1942.9443.0039.8140.3810897100.00.01.041.02592341.08324938.03544538.58003710897100.0
2A1999-11-2241.3144.0040.0644.004705200.00.01.039.46858142.03867338.27430142.0386734705200.0
3A1999-11-2342.5043.6340.2540.254274400.00.01.040.60553641.68516638.45583238.4558324274400.0
4A1999-11-2440.1341.9440.0041.063464400.00.01.038.34118140.07049938.21697539.2297253464400.0
\n", "*Obtained using `df.head()`*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Description of supplementary dataset (FTSE100)\n", "\n", "I wanted to add features that corresponded to the general market trend and thought the FTSE100 would be a good representation. The FTSE100 as a single index was not included in my primary dataset, so I obtained the data by scraping Google Finance with a python script (see `google-finance-scraper.py`).\n", "\n", "The supplementary dataset has Open, High, Low, Close data in the date range April 1, 1984 - September 9, 2016." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Defining Characteristics about Stock Data\n", "1. **Limit Down Circuit Breakers**: When the stock price falls by Limit Down during one trading day, trading curbs may kick in. This may mean no further trading of that stock is allowed on that day unless the trading prices are above the Limit Down. Curbs and Limit Downs vary by exchange.\n", " - This reduces the maximum daily variation of stock prices." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dataset Statistics \n", "\n", "The summary statistics for the dataset are not too meaningful, but it gives us an idea of the **variance within the dataset**. The standard deviation of the adjusted close price is of magnitude 10^3 ($1000), and the standard deviation of adjusted volume is of magnitude 10^6 (1,000,000 shares). \n", "\n", "The summary statistics suggest that the data is **positively skewed**. \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
\n", "\n", "I have checked the count is constant across all columns, i.e. that there are no missing values.\n", "\n", "### Interesting observations: Abnormalities in dataset\n", "The minimum Open, High, Low and Close are all zero. If a stock trades at a price of zero, it kind of doesn't exist. I will examine this in the Data Preprocessing section." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BP Statistics\n", "\n", "More meaningful than the summary statistics for all 3,000+ stocks is the summary statistics for one stock. Since one of the stocks we are hoping to predict is that of BP (British Petroleum), let's examine the corresponding summary statistics.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.0
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.0
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.0
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.0
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+060.0
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+080.0
\n", "\n", "I have checked the count is 10010 across all columns, i.e. that there are no missing values.\n", "\n", "This is much better understood with a visualisation of the BP data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploratory Visualisations\n", "\n", "### Open and Adjusted Open Prices\n", "Let's first get an idea of the open and adjusted open prices. This is equivalent to visualising the the close and adjusted close prices - the variable we want to predict - shifted by one day.\n", "\n", "\n", "\n", "\n", "*Prices are in GBP £.*\n", "\n", "#### Observations\n", "1. **Adjusted vs non-adjusted figures** It is extraordinary: the adjusted open and the open are radically different for BP, whereas with stock 'A' in the first few rows of the df, Adj. Open and Open had similar values. This makes sense because some stocks that have few corporate actions e.g. stocks that don't have stock splits or give out dividends will require little value adjustment.\n", " - Since we are predicting the Adjusted Close, my guess is that the Adjusted figures (Open, High, Low, Volume) will be more useful in predicting the adjusted price. The non-adjusted figures (specifically Volume) may still useful in predicting momentum.\n", "\n", "2. **Trend** The non-adjusted prices do not show an upward trend. The adjusted open prices show somewhat of an upward trend but it has been too volatile in recent years to draw any conclusions.\n", "\n", "3. **Volatility** The stock price looks volatile, which is expected for an oil stock. From the descriptive statistics, the mean daily percentage variation is 1.72% and the maximum daily percentage variation is 16.0%." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Volatility: Percentage Variation\n", "\n", "To examine the volatility of BP stock, I constructed the features Percentage Variation and Adj. Percentage Variation, where\n", "\n", "`Percentage Variation = (High - Low)/Open * 100`.\n", "\n", "\n", "\n", "\n", "#### Observations\n", "The Adjusted Percentage Variation and Percentage Variation look similar. There does not seem to be marked trends. It is of note that the stocks are consistently volatile with typical percentage variation of 0-4% in recent years, punctuated with spikes of extremely volatile periods of up to 16% variation." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Algorithms and techniques\n", "\n", "\n", "### Algorithm\n", "\n", "I intend to use **linear regression**. \n", "\n", "#### Algorithm Description\n", "\n", "Linear Regression is a way of modelling data by observing data and constructing an equation that minimises error. This regression is linear because the equation takes the form\n", "$$\\hat y = \\sum \\beta_i x_i$$\n", "\n", "where $y$ is what we want to predict (stock prices) and $x_i$s are features such as the date. The hat on top of $y$ indicates it is an estimate.\n", "\n", "That is, this regression is linear because the $x_i$s all have degree 1.\n", "\n", "\n", "#### Algorithm Justification\n", "1. I am using a **linear algorithm** because the the **signal-to-noise ratio in trading is low** and more complicated models seem like they would overfit.\n", "2. A linear regression is appropriate because this is a **regression problem** - that is, the output are continuous. \n", " - Note that *regression* in linear regression does not mean the same thing as *regression* in a regression problem.\n", "\n", "#### Algorithm Parameters\n", "There are only four parameters for `LinearRegression`:\n", "- `fit_intercept` is set to True by default; setting it to false assumes the data is centered and will not produce better results.\n", "- `normalize` normalizes the regressors X before regression. It is set to `False` by default.\n", "- `copy_X` alters whether or not X may be overwritten, which does not affect the result.\n", "- `n_jobs` can provide a speedup if the problem is large and you ask the algorithm to use more CPUs, but it will not change error measures.\n", "\n", "Within these, there is only one parameter that it may be useful to adjust (`normalize`) to improve the error of the result.\n", "\n", "### Techniques\n", "\n", "1. **Time-series train-test split**\n", " - We will train our model on what we'll call the **training set**, a subset of the data that we have.\n", " - To make sure our model generalises, we need to test it on some data it has not seen before and evaluate how well it does predicting on that data. \n", " - To do this, we need to set aside data for testing our model - the **test set**.\n", " - Because our data is time series data (there is some ordering to it and the ordering influences prices), we cannot shuffle the data.\n", " - If the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating.\n", " - So we cannot use sklearn's `train_test_split` function which automatically shuffles the data. Instead, I will write my own function.\n", "2. **Time-series cross-validation**\n", " - But testing on only one test set and training on only one training set isn't robust enough. What if the test or training sets we choose have special characteristics that aren't common to other datasets?\n", " - To make our evaluation more robust so we choose the best model, it's better if we can run multiple train-test cycles. \n", " - To do this, I wrote the function `execute()`. In this function, I set a number of train-test cycles (`steps`), a total length of the train-test data (`periods` datapoints) and a number of datapoints between the starting points of each consecutive train-test cycle (`buffer_step`).\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Benchmark\n", "\n", "The benchmark given in the project outline was +/- 5% of the stock price 7 days out. That seems reasonable to start.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## III. Methodology\n", "_(approx. 3-5 pages)_\n", "\n", "### Data Preprocessing\n", "In this section, all of your preprocessing steps will need to be clearly documented, if any were necessary. From the previous section, any of the abnormalities or characteristics that you identified about the dataset will be addressed and corrected here. Questions to ask yourself when writing this section:\n", "- _If the algorithms chosen require preprocessing steps like feature selection or feature transformations, have they been properly documented?_\n", "- _Based on the **Data Exploration** section, if there were abnormalities or characteristics that needed to be addressed, have they been properly corrected?_\n", "- _If no preprocessing is needed, has it been made clear why?_" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# III. Methodology\n", "\n", "## Data Preprocessing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Minor edits\n", "1. On opening the CSV and sampling it with `df.head()`, I realised the CSV had no header. I added a header to the CSV:\n", "```python\n", "df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names)\n", "```\n", "where `header_names` was an slightly edited header I'd obtained from downloading the data for an individual stock from Quandl." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Examining Abnormalities\n", "\n", "I noted above that there were datapoints with opening price, high, low and closing price of 0.0. Were these mistakes? On investigating the data, it is plausble these were not mistakes.\n", "\n", "\n", "\n", "\n", "\n", "\n", "
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I've included three examples in the table above. The third example shows that the figures may not actually be zero but may be zero to one or two decimal places: the open and low prices were 0.0, but the high and close prices were 0.01.\n", "\n", "I assembled a list of stocks where the open or close was equal to 0 and will examine individual stocks on the list if they end up as features I'd like to use in my model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Feature Engineering" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Daily and Percentage Variation\n", "\n", "Reasoning: This is an indicator of how volatile prices have been. If the daily variation has been higher recently, that may mean there is a lot of uncertainty and that we can expect more fluctuations or that we shouldn't take big one-day changes too seriously when considering long-term predictions. \n", "\n", "I calculated the daily absolute and percentage variation (adjusted and unadjusted) for the entire data frame.\n", "\n", "### 2. Prices of related stocks (Oil stocks)\n", "\n", "Reasoning: BP's stock price is affected by how people feel about oil in general. Thus prices of oil stocks may correlate positively or negatively (if they are direct competitors) with BP's prices.\n", "\n", "I obtained a list of oil companies listed on the LSE by searching for stocks with the same group code (537 for oil) in `list-of-all-securities-ex-debt.csv`.\n", "\n", "Unfortunately there was only one other oil stock on my list that I found in this database (`GAIA`), so instead of creating an aggregated dataframe, I only included `GAIA`'s data in my additional set of features.\n", "\n", "Improvement for future studies: Collect data from another data source to come up with a more informative feature.\n", "\n", "#### Adding GAIA Features\n", "The GAIA trading dates started on 1999-10-29 whereas the BP trading dates started much earlier, so that cut out a large portion of the dataset. Data had to be taken out because it did not make sense to create proxy values for 20+ years' of volatile price data.\n", "\n", "**Complications** There was also a discrepancy in the trading dates. We have data for BP and GAIA on every trading day from 1999-10-29 to 2014-10-02, but beyond that the data for GAIA is incomplete. There was no information on GAIA trading on the second, fourth or fifth of October 2014 (whereas there was for BP). Thus our dataset is pared down even further to a size of 3754 as opposed to 10010 for BP. This is a huge cut.\n", "\n", "### 3. Prices of FTSE100\n", "\n", "Reasoning: Stock prices are also affected by how people feel about the market in general. The FTSE100 is fairly representative of the performance of the market in general, so including it as a feature can help us account for that aspect.\n", "\n", "**Complications** There were 158 dates for which we had BP trading data but not FTSE trading data. (This is unexpected because the FTSE should have values on all trading days. The discrepancy is likely due to problems with the data source. This is unexpected because the data source for FTSE prices was Google Finance, which should be reliable.) \n", "\n", "But because there were only 158 NaNs and they were spread thinly over 8000 datapoints, it made it impossible to truncate a large section with no NaNs that would be large enough to do multiple rounds of meaningful training and testing on. \n", "\n", "I thus proxied the missing prices by taking the means of the the FTSE prices from the trading day before and the trading day after. If those were also NaNs, I moved either one day forward or one day backward. (See `# Proxy remaining NaNs` in 1.2.2.3.) Since the FTSE does not usually fluctuate wildly, I considered the mean to be a reasonable proxy.\n", "\n", "As with prices of oil stocks, an improvement would be to consult another data source to fill in the gaps." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Initial implementation\n", "I initially implemented the Linear Regression algorithm with the following basic features:\n", "* Adjusted Close prices on each of the 7 days prior to the first prediction date\n", "* Max Adjusted High and Min Adjusted Low for that 7-day period prior to the first prediction date.\n", "\n", "### Process:\n", "1. Construct dataframe `X` containing initial features and dataframe `y` with 'Adjusted Close' prices.\n", " - This required some setting up to extract the relevant features from the dataset and put them in an appropriately formatted dataframe. This is in the first half of `prepare_train_test()` function in part 2.1 of `III. Methodology - Code.ipynb`.\n", " - The `y` target `nday_prices` had prices for the next `n` days.\n", "2. Split `X` and `y` into training and test datasets.\n", " - I wrote my own function to do this (initially in `train_test_split_noshuffle` before I absorbed it into `prepare_train_test()`) instead of using sklearn's `train_test_split`. This was because sklearn's function automatically shuffles the data. Shuffling the data is okay and desired for situations in which data is not ordered, but is not okay for time-series data. \n", " - As stated in the *Algorithms and Techniques* section, if the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating.\n", "3. Train model on training data.\n", " - Because there were multiple outputs to predict in `nday_prices` (the model had to forecast prices for each of the 7 trading days after the last date it was given), I wrapped `MultiOutputRegressor` from sklearn's `multioutput` module around my classifier.\n", " - This is in the first half of the function `classify_and_metrics` in `2.2 Classifier` in `III. Methodology - Code.ipynb`.\n", "4. Ask model to predict prices on test features.\n", "5. Print metrics\n", " - I included this in `classify_and_metrics()` using my helper functions `rmsp()` (root mean squared percentage error) and `print_metrics()`. See Section `2.2 Classifier` in `III. Methodology - Code.ipynb`.\n", "\n", "#### Refactoring\n", "I refactored the code so that I could run a full (1) train-test split, (2) train classifier, (3) test classifier and print metrics cycle using only one line. To do this, I wrapped all the functions those processes with the `execute()` function.\n", "\n", "### Initial Results\n", "The results are shown below. I also tried using an SVM regression for comparison. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Linear Regression\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
11.669
22.422
32.968
43.407
53.834
64.230
74.590
\n", "\n", "Mean R2 score: 0.807. Ranged from 0.606 to 0.936.\n", "\n", "#### SVM.SVR\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
111.230
211.460
311.761
412.022
512.323
612.667
713.060
\n", "Mean R2 score: -2.044. Ranged from -9.156 to 0.822." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Linear Regression did surprisingly well, with a mean R2 score above 0.807 overall for 7-day predictions and a mean RMS percentage error of under 5% for forecasts 7 days away. \n", "\n", "The SVM regression did horribly - it had a negative mean R2 score (-2.044) and negative median R2 score, which means it was worse than guessing randomly. It had a mean RMS percentage error of over 24% for all number-of-days ahead predicted.\n", "\n", "It is impressive that the Linear Regression model did so well with such basic features." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TODO: Insert plot of predictions vs actual prices" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Refinement\n", "\n", "### 1. Adjusting parameters\n", "\n", "As discussed in Analysis: Algorithm Parameters, there is only one parameter that it may be useful to adjust (`normalize`).\n", "\n", "I ran the algorithm with `normalize=True` to see if it produced better results. The metrics returned were exactly the same as when, by default, `normalize=False`.\n", "\n", "### 2. Add features (Feature Selection)\n", "\n", "I then experimented with adding the features I'd engineered earlier. (See *Data Preprocessing: Feature Engineering* for more details on how these features came about.)\n", "\n", "#### 2.1 Adding more of the same type of features:\n", "\n", "In the first implementation, I only used prices from the 7 days running up to the first prediction day. I then tried using prices from 10, 14, 21 and 30 days running up to the first prediction day. \n", "\n", "Reasoning: If we have more data, it makes sense to use it if we are confident it will give us better results.\n", "\n", "To do this, I changed the value of the parameter `days` in the function `execute`, which trains and tests the classifier and prints metrics. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "#### Mean Daily Error across 15 trials\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (used)10d14d21d30d100d
11.6691.7321.7291.7461.7841.924
22.4222.5432.5262.5552.5932.768
32.9683.1383.1033.1133.1523.370
43.4073.5793.5863.5863.6333.890
53.8343.9394.0023.9914.0484.355
64.2304.2694.3724.3424.3924.769
74.5904.5434.7024.6584.7055.163
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can see that mean RMS percentage error is slightly smaller in one instance (using 10d instead of 7d to predict precisely 7 days ahead),but otherwise that mean RMS percentage error is greater as the number of days of data given increases.\n", "\n", "This is because more days' of data in this case means more features (e.g. for 100 days' of data we have 102 features). This increases the risk of overfitting." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.2 Adding GAIA (Oil Stock) Prices\n", "\n", "\n", "There were far fewer datapoints to work with because because of date inconsistencies (3753 datapoints vs 10010 for the BP-only model), so I decreased the step length (the difference between start dates) between consecutive trials to 200 from 500. This does not affect individual trial performance, but reduces the variety of data used for trials. We should bear this in mind when comparing performance of adding GAIA prices as features and not adding GAIA prices as features. \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (no GAIA)7d (GAIA)10d (no GAIA)10d (GAIA)
11.6691.7441.7321.751
22.4222.4442.5432.467
32.9682.9383.1382.978
43.4073.4243.5793.479
53.8343.8813.9393.946
64.2304.2944.2694.368
74.5904.7024.5434.816
\n", "\n", "*Trial information: (1) Not GAIA: Mean over 15 trials, buffer step = 500. \n", "(2) GAIA: Mean over 13 trials, buffer step = 200. 1000 periods used (800 to train, 200 to test) per trial*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When considering 7 days' worth of data, adding GAIA features produces predictions with a similar mean RMS percentage error. The mean error is higher for 6 out of 7 days-ahead (the exception being 3 days ahead).\n", "\n", "When considering 10 days' worth of data, adding GAIA features performs slightly better for 2-4 days-ahead (0.08%, 0.16%, 0.1% improved) and slightly worse for all other days-ahead (0.02%, 0.01%, 0.1%, 0.27% worse). But these mean RMS percentage errors are all larger than the 7-day no-GAIA mean RMS percentage errors.\n", "\n", "**Action**: I conclude that adding GAIA features in this way does not reliably produce better results, likely because additional features increase the risk of overfitting.\n", "\n", "**Interpretation**: It makes sense because BP prices would not correlate perfectly in one direction or the other with GAIA prices: oil companies' stock prices incorporate sentiment about oil but companies are also often in different regions and compete against each other, muddying correlations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 2.3 Adding related features: FTSE100" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The timespan used for no-FTSE and with-FTSE trials was similar (since we had over 8000 FTSE datapoints), so we can compare the two more readily than we could compare the no-GAIA and with-GAIA figures." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predict7d (no FTSE)7d (FTSE)10d (no FTSE)10d (FTSE)
11.6691.5181.7321.531
22.4222.2222.5432.230
32.9682.7333.1382.743
43.4073.1793.5793.187
53.8343.5453.9393.574
64.2303.8574.2693.910
74.5904.1624.5434.236
\n", "\n", "\n", "*Trial information: (1) Not FTSE: Mean over 15 trials, buffer step = 500. \n", "(2) FTSE: Mean over 15 trials, buffer step = 450. 1000 periods used (800 to train, 200 to test) per trial*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally something that performs better than the initial model!\n", "\n", "Adding FTSE features makes the model perform better than not adding FTSE features when considering 7 days' or 10 days' worth of data. Using 7 days' worth of data is better than using 10 days' worth of data (reduces overfitting), but it's worth noting that adding FTSE features and using 10 days' worth of data is better than using 7 days' of data but not including FTSE data. \n", "\n", "This is a significant improvement. Note that the percentage error reduction increases the further away the prediction is (0.4% reduction for 6-7 days ahead vs 0.15% reduction for 1 day ahead)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Improvement (Implementation): Generalise functions `prepare_train_test_with_ftse()` so I don't have to write a function for each dataframe join." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# IV. Results\n", "\n", "## Model Evaluation and Validation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model Choice\n", "\n", "The final model is \n", "- Features:\n", " - BP Adjusted Close, max BP Adjusted High, min BP Adjusted Low\n", " - FTSE Close, max FTSE High and min FTSE Low \n", "for 7 days prior to the first prediction date.\n", "- Classifier:\n", " - Default Linear Regression\n", "\n", "This model had the **lowest mean root mean squared percentage error** across over 10 trials (across timespans of around 30 years) out of all the models I tried.\n", "\n", "Insight: Most of the improvements I tried to make only made the model worse. This goes to show that added complexity doesn't necessarily make a model better, especially when that complexity contains much noise." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generalisability\n", "When we evaluated the model in the previous section, each iteration of the model was run on 13-15 training and test sets. We then looked at the mean daily root mean squared percentage error. This **variation of input data** is to ensure that the model can generalise well and does not only perform well on one set of data.\n", "\n", "There are two types of metrics we need to look at: mean performance and variance of performance. Both are encapsulated in mean daily RMS percentage error because (1) it measures the performance (error) and (2) it penalises larger errors more because we sum the squared percentage errors before taking the square root. Additionally, by observation, the error of our chosen model does not vary significantly from trial to trial.\n", "\n", "#### Performance Metrics\n", "\n", "\n", " \n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
Day to predictMean root mean squared percentage error across 15 trials
11.518
22.222
32.733
43.179
53.545
63.857
74.162
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Justification (Comparison with expectations)\n", "\n", "Overall, this model aligns with solution expectations and on average performs slightly better than the benchmark of predicting within +/- 5% of the stock's adjusted closing price 7 days after the last training date. The model has mean performance of 4.162% error predicting adjusted closing price 7 days ahead. \n", "\n", "The solution gives a reasonably accurate predictions but it **is not significant enough** to reliably give advice on trades because a 5% error is significant in trading. There are also transaction costs with every trade, which would cut into profits.\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/report-drafts/p5.5-conclusion.ipynb ================================================ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# V. Conclusion" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Free-Form Visualisation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualisation 1: Plotting predictions compared with actual prices\n", "\n", "This graph visualises the 7th-day predictions compared with the actual adjusted close prices.\n", "By 7th-day predictions, I am referring to the price predicted for e.g. Sept 7 if we are given training data up till Aug 30th. The purpose is to see how predictions vary with actual prices. I picked 200 datapoints to visualise because visualising all the points at once does not provide much insight.\n", "\n", "\n", "\n", "Here is the visualisation with all points for reference:\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reflection\n", "\n", "### Summary\n", "\n", "In this project, we predicted BP's stock price. \n", "\n", "Initially we used a linear regression only on BP stock prices from the past 7 days, which produced impressive results, with 7-day predictions having a root mean squared percentage error of 5.4%.\n", "\n", "In this initial iteration, we perfomed the following steps:\n", "1. Import data (CSV) and format it as a Pandas Dataframe\n", "2. Create features dataframe: Select features we wanted to use and put it into a separate dataframe\n", "3. Create target dataframe (Prices for 7 days following the last date provided in the features).\n", "4. Split into training and testing sets. (No shuffle because we are dealing with time series data.)\n", "5. Train chosen classifier.\n", "6. Predict test target.\n", "7. Evaluate test target and print evaluation metrics.\n", "\n", "After the initial iteration, I then repeated the process firstly with different classifiers (altering parameters, tried SVM regression) and then with new features (more days' worth of data, GAIA data, FTSE data). \n", "\n", "I then chose the model with the lowest mean root mean squared percentage error, which was a Linear Regression classifier trained on 7 days of BP and FTSE data (Close, max High and min Low prices. Adjusted for BP, not adjusted for FTSE).\n", "\n", "### Interesting Aspects of the Project\n", "1. **Coming up with new features from scratch as opposed to selecting them from a given set**. This resulted in much analysis paralysis because the universe of possible features is so large.\n", "2. **Collating data from different sources.** I wanted to use FTSE prices that weren't in the Quandl database I downloaded, so I wrote a Python script to scrape the data from Google Finance. I then had to combine this data with the BP price data. This was made more tedious because there were missing data values when I joined the two dataframes by dates, so I also had to **proxy data values**.\n", "2. **A simple model turned out to be better than several more complex models.** E.g. Linear Regression did better than SVM regression, and adding GAIA features or increasing the number of days' worth of data we considered both made increased RMS percentage error.\n", "\n", "### Difficult Aspects of the Project\n", "1. It was hard **selecting the algorithm** to use for this problem. \n", " - It seemed as though any regression algorithm could work - and there are so many of them! I dealt with this by (1) first implementing an SVM regression to get the code to implement the algorithm down on the page so things would feel more concrete. Then I (2) chose the simplest algorithm that seemed to fit the problem and tried that.\n", " - I was also conflicted as to whether or not I should use reinforcement learning. On the one hand there are profits that can act as rewards, but on the other hand trading would not impact the environment.\n", "2. **Putting different features together** in a dataframe took effort. \n", " - Different stocks or indices had data for different dates (e.g. some had data for 1984-04-20, some didn't). I had to find these differences and decide what to do with missing data. \n", "3. There were **many possible features**. \n", " - The project just got longer and longer and I hadn't even looked through half of the features I wanted to investigate or tried different algorithms. I decided to test out only a few features in this exploratory study and leave the rest for another study.\n", " \n", "It is worth noting that the interesting and difficult parts of this project overlapped." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Improvements\n", "\n", "\n", "\n", "\n", "\n", "\n", "
ImprovementExpected Change
1. Try a wider selection of features.\n", " - Stocks from other stock markets (e.g. NYSE)\n", " - Company-specific figures such as P/E ratiosMore accurate model
2. Obtain and combine data from different data sources to minimise missing data\n", " - e.g. FTSE100 prices because they must exist somewhere.Increase number of datapoints with accurate data and so improve predictive range and capabilities
3. Add measure of confidence for predictions (Probabilities)Better idea of how reliable each prediction is so we can then recommend trades for high-confidence, postive-profit predictions.
\n", "\n", "### Things to Explore\n", "1. Try more algorithms (different classes).\n", " - Different types of regressions\n", " - Reinforcement Learning\n", " - Deep Learning, EnsemblesGenerically \n", "\n", "2. It would also be interesting to try this as a binary classification problem (predicting whether the price would go up or down) as opposed to predicting the exact price.\n", "\n", "### A Better Solution?\n", "Given the openness of this problem and the large universe it is contained in, I am confident that better solutions exist. That is a beautiful characteristic of this problem - than many things (even things which are beyond the scope of financial figures and stock prices, such as Wikipedia page views) can be used as features or proxies for stock prices." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.1" } }, "nbformat": 4, "nbformat_minor": 0 } ================================================ FILE: p5-capstone/archive/robot_motion_planning/maze.py ================================================ import numpy as np class Maze(object): def __init__(self, filename): ''' Maze objects have two main attributes: - dim: mazes should be square, with sides of even length. (integer) - walls: passages are coded as a 4-bit number, with a bit value taking 0 if there is a wall and 1 if there is no wall. The 1s register corresponds with a square's top edge, 2s register the right edge, 4s register the bottom edge, and 8s register the left edge. (numpy array) The initialization function also performs some consistency checks for wall positioning. ''' with open(filename, 'rb') as f_in: # First line should be an integer with the maze dimensions self.dim = int(f_in.next()) # Subsequent lines describe the permissability of walls walls = [] for line in f_in: walls.append(map(int,line.split(','))) self.walls = np.array(walls) # Perform validation on maze # Maze dimensions if self.dim % 2: raise Exception('Maze dimensions must be even in length!') if self.walls.shape != (self.dim, self.dim): raise Exception('Maze shape does not match dimension attribute!') # Wall permeability wall_errors = [] # vertical walls for x in range(self.dim-1): for y in range(self.dim): if (self.walls[x,y] & 2 != 0) != (self.walls[x+1,y] & 8 != 0): wall_errors.append([(x,y), 'v']) # horizontal walls for y in range(self.dim-1): for x in range(self.dim): if (self.walls[x,y] & 1 != 0) != (self.walls[x,y+1] & 4 != 0): wall_errors.append([(x,y), 'h']) if wall_errors: for cell, wall_type in wall_errors: if wall_type == 'v': cell2 = (cell[0]+1, cell[1]) print 'Inconsistent vertical wall betweeen {} and {}'.format(cell, cell2) else: cell2 = (cell[0], cell[1]+1) print 'Inconsistent horizontal wall betweeen {} and {}'.format(cell, cell2) raise Exception('Consistency errors found in wall specifications!') def is_permissible(self, cell, direction): """ Returns a boolean designating whether or not a cell is passable in the given direction. Cell is input as a list. Directions may be input as single letter 'u', 'r', 'd', 'l', or complete words 'up', 'right', 'down', 'left'. """ dir_int = {'u': 1, 'r': 2, 'd': 4, 'l': 8, 'up': 1, 'right': 2, 'down': 4, 'left': 8} try: return (self.walls[tuple(cell)] & dir_int[direction] != 0) except: print 'Invalid direction provided!' def dist_to_wall(self, cell, direction): """ Returns a number designating the number of open cells to the nearest wall in the indicated direction. Cell is input as a list. Directions may be input as a single letter 'u', 'r', 'd', 'l', or complete words 'up', 'right', 'down', 'left'. """ dir_move = {'u': [0, 1], 'r': [1, 0], 'd': [0, -1], 'l': [-1, 0], 'up': [0, 1], 'right': [1, 0], 'down': [0, -1], 'left': [-1, 0]} sensing = True distance = 0 curr_cell = list(cell) # make copy to preserve original while sensing: if self.is_permissible(curr_cell, direction): distance += 1 curr_cell[0] += dir_move[direction][0] curr_cell[1] += dir_move[direction][1] else: sensing = False return distance ================================================ FILE: p5-capstone/archive/robot_motion_planning/robot.py ================================================ import numpy as np class Robot(object): def __init__(self, maze_dim): ''' Use the initialization function to set up attributes that your robot will use to learn and navigate the maze. Some initial attributes are provided based on common information, including the size of the maze the robot is placed in. ''' self.location = [0, 0] self.heading = 'up' self.maze_dim = maze_dim def next_move(self, sensors): ''' Use this function to determine the next move the robot should make, based on the input from the sensors after its previous move. Sensor inputs are a list of three distances from the robot's left, front, and right-facing sensors, in that order. Outputs should be a tuple of two values. The first value indicates robot rotation (if any), as a number: 0 for no rotation, +90 for a 90-degree rotation clockwise, and -90 for a 90-degree rotation counterclockwise. Other values will result in no rotation. The second value indicates robot movement, and the robot will attempt to move the number of indicated squares: a positive number indicates forwards movement, while a negative number indicates backwards movement. The robot may move a maximum of three units per turn. Any excess movement is ignored. If the robot wants to end a run (e.g. during the first training run in the maze) then returing the tuple ('Reset', 'Reset') will indicate to the tester to end the run and return the robot to the start. ''' rotation = 0 movement = 0 return rotation, movement ================================================ FILE: p5-capstone/archive/robot_motion_planning/showmaze.py ================================================ from maze import Maze import turtle import sys if __name__ == '__main__': ''' This function uses Python's turtle library to draw a picture of the maze given as an argument when running the script. ''' # Create a maze based on input argument on command line. testmaze = Maze( str(sys.argv[1]) ) # Intialize the window and drawing turtle. window = turtle.Screen() wally = turtle.Turtle() wally.speed(0) wally.hideturtle() wally.penup() # maze centered on (0,0), squares are 20 units in length. sq_size = 20 origin = testmaze.dim * sq_size / -2 # iterate through squares one by one to decide where to draw walls for x in range(testmaze.dim): for y in range(testmaze.dim): if not testmaze.is_permissible([x,y], 'up'): wally.goto(origin + sq_size * x, origin + sq_size * (y+1)) wally.setheading(0) wally.pendown() wally.forward(sq_size) wally.penup() if not testmaze.is_permissible([x,y], 'right'): wally.goto(origin + sq_size * (x+1), origin + sq_size * y) wally.setheading(90) wally.pendown() wally.forward(sq_size) wally.penup() # only check bottom wall if on lowest row if y == 0 and not testmaze.is_permissible([x,y], 'down'): wally.goto(origin + sq_size * x, origin) wally.setheading(0) wally.pendown() wally.forward(sq_size) wally.penup() # only check left wall if on leftmost column if x == 0 and not testmaze.is_permissible([x,y], 'left'): wally.goto(origin, origin + sq_size * y) wally.setheading(90) wally.pendown() wally.forward(sq_size) wally.penup() window.exitonclick() ================================================ FILE: p5-capstone/archive/robot_motion_planning/test_maze_01.txt ================================================ 12 1,5,7,5,5,5,7,5,7,5,5,6 3,5,14,3,7,5,15,4,9,5,7,12 11,6,10,10,9,7,13,6,3,5,13,4 10,9,13,12,3,13,5,12,9,5,7,6 9,5,6,3,15,5,5,7,7,4,10,10 3,5,15,14,10,3,6,10,11,6,10,10 9,7,12,11,12,9,14,9,14,11,13,14 3,13,5,12,2,3,13,6,9,14,3,14 11,4,1,7,15,13,7,13,6,9,14,10 11,5,6,10,9,7,13,5,15,7,14,8 11,5,12,10,2,9,5,6,10,8,9,6 9,5,5,13,13,5,5,12,9,5,5,12 ================================================ FILE: p5-capstone/archive/robot_motion_planning/test_maze_02.txt ================================================ 14 1,5,5,7,7,5,5,6,3,6,3,5,5,6 3,5,6,10,9,5,5,15,14,11,14,3,7,14 11,6,11,14,1,7,6,10,10,10,11,12,8,10 10,9,12,10,3,12,11,14,11,14,10,3,5,14 11,5,6,8,11,7,12,8,10,9,12,9,7,12 11,7,13,7,14,11,5,5,13,5,4,3,13,6 8,9,5,14,9,12,3,7,6,3,6,11,6,10 3,5,5,14,3,6,9,12,11,12,10,10,10,10 10,3,5,13,14,10,3,5,13,7,14,8,9,14 9,14,3,6,11,14,9,5,6,10,10,3,6,10 3,13,14,11,14,11,4,3,13,15,13,14,10,10 10,3,15,12,9,12,3,13,5,14,3,12,11,14 11,12,11,7,5,6,10,1,5,15,13,7,12,10 9,5,12,9,5,13,13,5,5,12,1,13,5,12 ================================================ FILE: p5-capstone/archive/robot_motion_planning/test_maze_03.txt ================================================ 16 1,5,5,6,3,7,5,5,5,5,7,5,5,5,5,6 3,5,6,10,10,9,6,3,5,5,13,7,5,5,6,10 11,6,11,15,15,5,14,8,2,3,5,13,5,6,10,10 10,10,10,10,11,5,13,5,12,9,7,6,3,15,13,14 10,10,10,9,12,3,5,6,3,6,10,11,14,11,6,10 9,14,9,4,3,13,6,11,14,10,9,12,11,12,10,10 1,13,6,3,14,3,15,12,9,15,6,3,13,7,12,10 3,6,10,10,9,14,8,3,6,8,10,9,7,13,7,12 10,10,10,10,3,13,7,13,12,3,14,3,13,7,13,6 10,10,10,11,12,3,14,3,6,10,10,10,3,15,7,14 10,9,12,9,7,14,11,14,10,8,10,10,10,10,10,10 11,5,5,6,10,11,14,11,15,6,9,13,14,10,10,10 11,7,6,10,9,14,9,14,10,10,3,7,15,14,10,10 10,10,9,12,2,9,5,15,14,10,10,10,10,11,14,10 10,11,5,5,12,3,5,12,10,11,13,12,10,10,9,14 9,13,5,5,5,13,5,5,13,13,5,5,12,9,5,12 ================================================ FILE: p5-capstone/archive/robot_motion_planning/tester.py ================================================ from maze import Maze from robot import Robot import sys # global dictionaries for robot movement and sensing dir_sensors = {'u': ['l', 'u', 'r'], 'r': ['u', 'r', 'd'], 'd': ['r', 'd', 'l'], 'l': ['d', 'l', 'u'], 'up': ['l', 'u', 'r'], 'right': ['u', 'r', 'd'], 'down': ['r', 'd', 'l'], 'left': ['d', 'l', 'u']} dir_move = {'u': [0, 1], 'r': [1, 0], 'd': [0, -1], 'l': [-1, 0], 'up': [0, 1], 'right': [1, 0], 'down': [0, -1], 'left': [-1, 0]} dir_reverse = {'u': 'd', 'r': 'l', 'd': 'u', 'l': 'r', 'up': 'd', 'right': 'l', 'down': 'u', 'left': 'r'} # test and score parameters max_time = 1000 train_score_mult = 1/30. if __name__ == '__main__': ''' This script tests a robot based on the code in robot.py on a maze given as an argument when running the script. ''' # Create a maze based on input argument on command line. testmaze = Maze( str(sys.argv[1]) ) # Intitialize a robot; robot receives info about maze dimensions. testrobot = Robot(testmaze.dim) # Record robot performance over two runs. runtimes = [] total_time = 0 for run in range(2): print "Starting run {}.".format(run) # Set the robot in the start position. Note that robot position # parameters are independent of the robot itself. robot_pos = {'location': [0, 0], 'heading': 'up'} run_active = True hit_goal = False while run_active: # check for end of time total_time += 1 if total_time > max_time: run_active = False print "Allotted time exceeded." break # provide robot with sensor information, get actions sensing = [testmaze.dist_to_wall(robot_pos['location'], heading) for heading in dir_sensors[robot_pos['heading']]] rotation, movement = testrobot.next_move(sensing) # check for a reset if (rotation, movement) == ('Reset', 'Reset'): if run == 0 and hit_goal: run_active = False runtimes.append(total_time) print "Ending first run. Starting next run." break elif run == 0 and not hit_goal: print "Cannot reset - robot has not hit goal yet." continue else: print "Cannot reset on runs after the first." continue # perform rotation if rotation == -90: robot_pos['heading'] = dir_sensors[robot_pos['heading']][0] elif rotation == 90: robot_pos['heading'] = dir_sensors[robot_pos['heading']][2] elif rotation == 0: pass else: print "Invalid rotation value, no rotation performed." # perform movement if abs(movement) > 3: print "Movement limited to three squares in a turn." movement = max(min(int(movement), 3), -3) # fix to range [-3, 3] while movement: if movement > 0: if testmaze.is_permissible(robot_pos['location'], robot_pos['heading']): robot_pos['location'][0] += dir_move[robot_pos['heading']][0] robot_pos['location'][1] += dir_move[robot_pos['heading']][1] movement -= 1 else: print "Movement stopped by wall." movement = 0 else: rev_heading = dir_reverse[robot_pos['heading']] if testmaze.is_permissible(robot_pos['location'], rev_heading): robot_pos['location'][0] += dir_move[rev_heading][0] robot_pos['location'][1] += dir_move[rev_heading][1] movement += 1 else: print "Movement stopped by wall." movement = 0 # check for goal entered goal_bounds = [testmaze.dim/2 - 1, testmaze.dim/2] if robot_pos['location'][0] in goal_bounds and robot_pos['location'][1] in goal_bounds: hit_goal = True if run != 0: runtimes.append(total_time - sum(runtimes)) run_active = False print "Goal found; run {} completed!".format(run) # Report score if robot is successful. if len(runtimes) == 2: print "Task complete! Score: {:4.3f}".format(runtimes[1] + train_score_mult*runtimes[0]) ================================================ FILE: p5-capstone/archive/udacity-materials/project_report_template.md ================================================ # Capstone Project ## Machine Learning Engineer Nanodegree Joe Udacity December 31st, 2050 ## I. Definition _(approx. 1-2 pages)_ ### Project Overview In this section, look to provide a high-level overview of the project in layman’s terms. Questions to ask yourself when writing this section: - _Has an overview of the project been provided, such as the problem domain, project origin, and related datasets or input data?_ - _Has enough background information been given so that an uninformed reader would understand the problem domain and following problem statement?_ ### Problem Statement In this section, you will want to clearly define the problem that you are trying to solve, including the strategy (outline of tasks) you will use to achieve the desired solution. You should also thoroughly discuss what the intended solution will be for this problem. Questions to ask yourself when writing this section: - _Is the problem statement clearly defined? Will the reader understand what you are expecting to solve?_ - _Have you thoroughly discussed how you will attempt to solve the problem?_ - _Is an anticipated solution clearly defined? Will the reader understand what results you are looking for?_ ### Metrics In this section, you will need to clearly define the metrics or calculations you will use to measure performance of a model or result in your project. These calculations and metrics should be justified based on the characteristics of the problem and problem domain. Questions to ask yourself when writing this section: - _Are the metrics you’ve chosen to measure the performance of your models clearly discussed and defined?_ - _Have you provided reasonable justification for the metrics chosen based on the problem and solution?_ ## II. Analysis _(approx. 2-4 pages)_ ### Data Exploration In this section, you will be expected to analyze the data you are using for the problem. This data can either be in the form of a dataset (or datasets), input data (or input files), or even an environment. The type of data should be thoroughly described and, if possible, have basic statistics and information presented (such as discussion of input features or defining characteristics about the input or environment). Any abnormalities or interesting qualities about the data that may need to be addressed have been identified (such as features that need to be transformed or the possibility of outliers). Questions to ask yourself when writing this section: - _If a dataset is present for this problem, have you thoroughly discussed certain features about the dataset? Has a data sample been provided to the reader?_ - _If a dataset is present for this problem, are statistics about the dataset calculated and reported? Have any relevant results from this calculation been discussed?_ - _If a dataset is **not** present for this problem, has discussion been made about the input space or input data for your problem?_ - _Are there any abnormalities or characteristics about the input space or dataset that need to be addressed? (categorical variables, missing values, outliers, etc.)_ ### Exploratory Visualization In this section, you will need to provide some form of visualization that summarizes or extracts a relevant characteristic or feature about the data. The visualization should adequately support the data being used. Discuss why this visualization was chosen and how it is relevant. Questions to ask yourself when writing this section: - _Have you visualized a relevant characteristic or feature about the dataset or input data?_ - _Is the visualization thoroughly analyzed and discussed?_ - _If a plot is provided, are the axes, title, and datum clearly defined?_ ### Algorithms and Techniques In this section, you will need to discuss the algorithms and techniques you intend to use for solving the problem. You should justify the use of each one based on the characteristics of the problem and the problem domain. Questions to ask yourself when writing this section: - _Are the algorithms you will use, including any default variables/parameters in the project clearly defined?_ - _Are the techniques to be used thoroughly discussed and justified?_ - _Is it made clear how the input data or datasets will be handled by the algorithms and techniques chosen?_ ### Benchmark In this section, you will need to provide a clearly defined benchmark result or threshold for comparing across performances obtained by your solution. The reasoning behind the benchmark (in the case where it is not an established result) should be discussed. Questions to ask yourself when writing this section: - _Has some result or value been provided that acts as a benchmark for measuring performance?_ - _Is it clear how this result or value was obtained (whether by data or by hypothesis)?_ ## III. Methodology _(approx. 3-5 pages)_ ### Data Preprocessing In this section, all of your preprocessing steps will need to be clearly documented, if any were necessary. From the previous section, any of the abnormalities or characteristics that you identified about the dataset will be addressed and corrected here. Questions to ask yourself when writing this section: - _If the algorithms chosen require preprocessing steps like feature selection or feature transformations, have they been properly documented?_ - _Based on the **Data Exploration** section, if there were abnormalities or characteristics that needed to be addressed, have they been properly corrected?_ - _If no preprocessing is needed, has it been made clear why?_ ### Implementation In this section, the process for which metrics, algorithms, and techniques that you implemented for the given data will need to be clearly documented. It should be abundantly clear how the implementation was carried out, and discussion should be made regarding any complications that occurred during this process. Questions to ask yourself when writing this section: - _Is it made clear how the algorithms and techniques were implemented with the given datasets or input data?_ - _Were there any complications with the original metrics or techniques that required changing prior to acquiring a solution?_ - _Was there any part of the coding process (e.g., writing complicated functions) that should be documented?_ ### Refinement In this section, you will need to discuss the process of improvement you made upon the algorithms and techniques you used in your implementation. For example, adjusting parameters for certain models to acquire improved solutions would fall under the refinement category. Your initial and final solutions should be reported, as well as any significant intermediate results as necessary. Questions to ask yourself when writing this section: - _Has an initial solution been found and clearly reported?_ - _Is the process of improvement clearly documented, such as what techniques were used?_ - _Are intermediate and final solutions clearly reported as the process is improved?_ ## IV. Results _(approx. 2-3 pages)_ ### Model Evaluation and Validation In this section, the final model and any supporting qualities should be evaluated in detail. It should be clear how the final model was derived and why this model was chosen. In addition, some type of analysis should be used to validate the robustness of this model and its solution, such as manipulating the input data or environment to see how the model’s solution is affected (this is called sensitivity analysis). Questions to ask yourself when writing this section: - _Is the final model reasonable and aligning with solution expectations? Are the final parameters of the model appropriate?_ - _Has the final model been tested with various inputs to evaluate whether the model generalizes well to unseen data?_ - _Is the model robust enough for the problem? Do small perturbations (changes) in training data or the input space greatly affect the results?_ - _Can results found from the model be trusted?_ ### Justification In this section, your model’s final solution and its results should be compared to the benchmark you established earlier in the project using some type of statistical analysis. You should also justify whether these results and the solution are significant enough to have solved the problem posed in the project. Questions to ask yourself when writing this section: - _Are the final results found stronger than the benchmark result reported earlier?_ - _Have you thoroughly analyzed and discussed the final solution?_ - _Is the final solution significant enough to have solved the problem?_ ## V. Conclusion _(approx. 1-2 pages)_ ### Free-Form Visualization In this section, you will need to provide some form of visualization that emphasizes an important quality about the project. It is much more free-form, but should reasonably support a significant result or characteristic about the problem that you want to discuss. Questions to ask yourself when writing this section: - _Have you visualized a relevant or important quality about the problem, dataset, input data, or results?_ - _Is the visualization thoroughly analyzed and discussed?_ - _If a plot is provided, are the axes, title, and datum clearly defined?_ ### Reflection In this section, you will summarize the entire end-to-end problem solution and discuss one or two particular aspects of the project you found interesting or difficult. You are expected to reflect on the project as a whole to show that you have a firm understanding of the entire process employed in your work. Questions to ask yourself when writing this section: - _Have you thoroughly summarized the entire process you used for this project?_ - _Were there any interesting aspects of the project?_ - _Were there any difficult aspects of the project?_ - _Does the final model and solution fit your expectations for the problem, and should it be used in a general setting to solve these types of problems?_ ### Improvement In this section, you will need to provide discussion as to how one aspect of the implementation you designed could be improved. As an example, consider ways your implementation can be made more general, and what would need to be modified. You do not need to make this improvement, but the potential solutions resulting from these changes are considered and compared/contrasted to your current solution. Questions to ask yourself when writing this section: - _Are there further improvements that could be made on the algorithms or techniques you used in this project?_ - _Were there algorithms or techniques you researched that you did not know how to implement, but would consider using if you knew how?_ - _If you used your final solution as the new benchmark, do you think an even better solution exists?_ ----------- **Before submitting, ask yourself. . .** - Does the project report you’ve written follow a well-organized structure similar to that of the project template? - Is each section (particularly **Analysis** and **Methodology**) written in a clear, concise and specific fashion? Are there any ambiguous terms or phrases that need clarification? - Would the intended audience of your project be able to understand your analysis, methods, and results? - Have you properly proof-read your project report to assure there are minimal grammatical and spelling mistakes? - Are all the resources used for this project correctly cited and referenced? - Is the code that implements your solution easily readable and properly commented? - Does the code execute without error and produce results similar to those reported? ================================================ FILE: p5-capstone/ftse100-figures.csv ================================================ Date,Open,High,Low,Close 2016-09-09,6858.7,6862.38,6762.3,6776.95 2016-09-08,6846.58,6889.64,6819.82,6858.7 2016-09-07,6826.05,6856.12,6814.87,6846.58 2016-09-06,6879.42,6887.92,6818.96,6826.05 2016-09-05,6894.6,6910.66,6867.08,6879.42 2016-09-02,6745.97,6928.25,6745.97,6894.6 2016-09-01,6781.51,6826.22,6723.21,6745.97 2016-08-31,6820.79,6832.89,6779.54,6781.51 2016-08-30,6838.05,6851.83,6808.07,6820.79 2016-08-26,6816.9,6857.29,6798.82,6838.05 2016-08-25,6835.78,6836.22,6779.15,6816.9 2016-08-24,6868.51,6868.51,6825.22,6835.78 2016-08-23,6828.54,6885.39,6828.54,6868.51 2016-08-22,6858.95,6884.61,6812.07,6828.54 2016-08-19,6868.96,6871.48,6840.94,6858.95 2016-08-18,6859.15,6893.35,6850.61,6868.96 2016-08-17,6893.92,6920.76,6849.9,6859.15 2016-08-16,6941.19,6941.19,6893.92,6893.92 2016-08-15,6916.02,6955.34,6907.17,6941.19 2016-08-12,6914.71,6931.04,6896.04,6916.02 2016-08-11,6866.42,6914.71,6812.73,6914.71 2016-08-10,6851.3,6866.42,6820.04,6866.42 2016-08-09,6809.13,6863.1,6807.76,6851.3 2016-08-08,6793.47,6829.47,6781.47,6809.13 2016-08-05,6740.16,6802.41,6738.57,6793.47 2016-08-04,6634.4,6749.67,6615.83,6740.16 2016-08-03,6645.4,6673.63,6621.42,6634.4 2016-08-02,6693.95,6694.14,6630.76,6645.4 2016-08-01,6724.43,6769.41,6678.45,6693.95 2016-07-29,6721.06,6740.47,6691.13,6724.43 2016-07-28,6750.43,6762.72,6718.9,6721.06 2016-07-27,6724.03,6780.05,6723.71,6750.43 2016-07-26,6710.13,6744.8,6708.58,6724.03 2016-07-25,6730.48,6756.13,6691.03,6710.13 2016-07-22,6699.89,6735.94,6663.72,6730.48 2016-07-21,6728.99,6732.07,6694.52,6699.89 2016-07-20,6697.37,6736.57,6694.36,6728.99 2016-07-19,6695.42,6711.69,6660.87,6697.37 2016-07-18,6669.24,6715.58,6653.67,6695.42 2016-07-15,6654.47,6669.24,6616.51,6669.24 2016-07-14,6670.4,6743.42,6648.4,6654.47 2016-07-13,6680.69,6717.17,6654.64,6670.4 2016-07-12,6682.86,6703.09,6663.66,6680.69 2016-07-11,6590.64,6695.07,6590.64,6682.86 2016-07-08,6533.79,6605.83,6515.24,6590.64 2016-07-07,6463.59,6579.25,6463.59,6533.79 2016-07-06,6545.37,6580.32,6432.47,6463.59 2016-07-05,6522.26,6561.58,6472.25,6545.37 2016-07-04,6577.83,6612.13,6514.81,6522.26 2016-07-01,6504.33,6587.44,6498.56,6577.83 2016-06-30,6360.06,6504.33,6309.98,6504.33 2016-06-29,6140.39,6360.06,6140.39,6360.06 2016-06-28,5982.2,6170.26,5982.2,6140.39 2016-06-27,6138.69,6138.69,5958.66,5982.2 2016-06-24,6338.1,6338.55,5788.74,6138.69 2016-06-23,6261.19,6380.58,6261.19,6338.1 2016-06-22,6226.55,6315.62,6222.01,6261.19 2016-06-21,6204.0,6250.19,6156.23,6226.55 2016-06-20,6021.09,6236.53,6021.09,6204.0 2016-06-17,5950.48,6046.1,5950.48,6021.09 2016-06-16,5966.8,5966.8,5899.97,5950.48 2016-06-15,5923.53,6007.49,5923.39,5966.8 2016-06-14,6044.97,6044.97,5921.72,5923.53 2016-06-13,6115.76,6115.76,6044.97,6044.97 2016-06-10,6231.89,6231.89,6097.24,6115.76 2016-06-09,6301.52,6301.73,6229.07,6231.89 2016-06-08,6284.53,6304.51,6263.8,6301.52 2016-06-07,6273.4,6322.6,6273.4,6284.53 2016-06-06,6209.63,6301.56,6209.63,6273.4 2016-06-03,6185.61,6251.74,6168.19,6209.63 2016-06-02,6191.93,6220.27,6173.05,6185.61 2016-06-01,6230.79,6233.18,6151.9,6191.93 2016-05-31,6270.79,6290.07,6230.11,6230.79 2016-05-27,6265.65,6275.9,6250.27,6270.79 2016-05-26,6262.85,6281.73,6243.49,6265.65 2016-05-25,6219.26,6270.25,6219.26,6262.85 2016-05-24,6136.43,6231.85,6109.58,6219.26 2016-05-23,6156.32,6173.06,6122.57,6136.43 2016-05-20,6053.35,6156.5,6053.35,6156.32 2016-05-19,6165.8,6165.8,6050.21,6053.35 2016-05-18,6167.77,6169.33,6115.99,6165.8 2016-05-17,6151.4,6215.88,6147.16,6167.77 2016-05-16,6138.5,6157.24,6092.21,6151.4 2016-05-13,6104.19,6138.5,6060.1,6138.5 2016-05-12,6162.49,6193.21,6094.14,6104.19 2016-05-11,6156.65,6172.72,6131.22,6162.49 2016-05-10,6114.81,6180.19,6114.81,6156.65 2016-05-09,6125.7,6177.6,6108.37,6114.81 2016-05-06,6117.25,6129.9,6054.74,6125.7 2016-05-05,6112.02,6152.59,6102.29,6117.25 2016-05-04,6185.59,6185.59,6100.76,6112.02 2016-05-03,6241.89,6270.03,6159.86,6185.59 2016-04-29,6322.4,6322.4,6241.89,6241.89 2016-04-28,6319.91,6322.4,6224.47,6322.4 2016-04-27,6284.52,6319.91,6255.2,6319.91 2016-04-26,6260.92,6297.88,6260.92,6284.52 2016-04-25,6310.44,6324.6,6249.34,6260.92 2016-04-22,6381.44,6381.58,6289.34,6310.44 2016-04-21,6410.26,6427.32,6352.93,6381.44 2016-04-20,6405.35,6421.91,6367.36,6410.26 2016-04-19,6353.52,6418.25,6353.49,6405.35 2016-04-18,6343.75,6354.88,6261.71,6353.52 2016-04-15,6365.1,6372.52,6328.19,6343.75 2016-04-14,6362.89,6373.93,6335.4,6365.1 2016-04-13,6242.39,6362.89,6242.39,6362.89 2016-04-12,6200.12,6248.27,6176.28,6242.39 2016-04-11,6204.41,6229.66,6165.46,6200.12 2016-04-08,6136.89,6216.28,6136.89,6204.41 2016-04-07,6161.63,6204.11,6119.38,6136.89 2016-04-06,6091.23,6161.63,6091.23,6161.63 2016-04-05,6164.72,6164.74,6061.85,6091.23 2016-04-04,6146.05,6201.95,6132.9,6164.72 2016-04-01,6174.9,6174.9,6076.89,6146.05 2016-03-31,6203.17,6203.39,6149.82,6174.9 2016-03-30,6105.9,6221.8,6105.9,6203.17 2016-03-29,6106.48,6156.67,6070.77,6105.9 2016-03-24,6199.11,6199.11,6090.03,6106.48 2016-03-23,6192.74,6216.76,6171.13,6199.11 2016-03-22,6184.58,6193.47,6110.39,6192.74 2016-03-21,6189.64,6215.3,6154.12,6184.58 2016-03-18,6201.12,6237.02,6186.24,6189.64 2016-03-17,6175.49,6220.02,6125.7,6201.12 2016-03-16,6139.97,6186.18,6134.27,6175.49 2016-03-15,6174.57,6174.57,6114.77,6139.97 2016-03-14,6139.79,6197.83,6139.79,6174.57 2016-03-11,6036.7,6150.88,6036.7,6139.79 2016-03-10,6146.32,6203.4,6036.7,6036.7 2016-03-09,6125.44,6174.82,6118.23,6146.32 2016-03-08,6182.4,6182.45,6101.89,6125.44 2016-03-07,6199.43,6216.1,6125.64,6182.4 2016-03-04,6130.46,6204.14,6130.46,6199.43 2016-03-03,6147.06,6173.7,6108.35,6130.46 2016-03-02,6152.88,6194.01,6097.77,6147.06 2016-03-01,6097.09,6153.75,6070.51,6152.88 2016-02-29,6096.01,6104.98,6033.21,6097.09 2016-02-26,6012.81,6115.37,6012.81,6096.01 2016-02-25,5867.18,6028.97,5867.18,6012.81 2016-02-24,5962.31,5966.73,5845.55,5867.18 2016-02-23,6037.73,6037.73,5954.18,5962.31 2016-02-22,5950.23,6065.81,5950.23,6037.73 2016-02-19,5971.95,6001.22,5916.26,5950.23 2016-02-18,6030.32,6036.46,5948.25,5971.95 2016-02-17,5862.17,6030.32,5862.17,6030.32 2016-02-16,5824.28,5880.72,5812.49,5862.17 2016-02-15,5707.6,5844.53,5707.6,5824.28 2016-02-12,5536.97,5707.6,5536.97,5707.6 2016-02-11,5672.3,5672.3,5499.51,5536.97 2016-02-10,5632.19,5712.78,5616.88,5672.3 2016-02-09,5689.36,5739.25,5596.26,5632.19 2016-02-08,5848.06,5882.43,5666.13,5689.36 2016-02-05,5898.76,5945.9,5839.36,5848.06 2016-02-04,5837.14,5938.12,5831.12,5898.76 2016-02-03,5922.01,5924.58,5791.04,5837.14 2016-02-02,6060.1,6060.45,5889.6,5922.01 2016-02-01,6083.79,6115.11,5993.84,6060.1 2016-01-29,5931.78,6083.79,5931.78,6083.79 2016-01-28,5990.37,6020.54,5889.37,5931.78 2016-01-27,5911.46,5990.37,5870.75,5990.37 2016-01-26,5877.0,5919.17,5771.37,5911.46 2016-01-25,5900.01,5933.47,5851.83,5877.0 2016-01-22,5773.79,5926.94,5773.79,5900.01 2016-01-21,5673.58,5781.24,5659.15,5773.79 2016-01-20,5876.8,5876.8,5639.88,5673.58 2016-01-19,5779.92,5915.69,5779.92,5876.8 2016-01-18,5804.1,5852.09,5766.5,5779.92 2016-01-15,5918.23,5934.62,5769.23,5804.1 2016-01-14,5960.97,5960.97,5829.26,5918.23 2016-01-13,5929.24,6011.13,5929.24,5960.97 2016-01-12,5871.83,5985.8,5866.67,5929.24 2016-01-11,5912.44,5941.93,5871.83,5871.83 2016-01-08,5954.08,6013.38,5912.44,5912.44 2016-01-07,6073.38,6073.38,5887.97,5954.08 2016-01-06,6137.24,6137.24,6018.65,6073.38 2016-01-05,6093.43,6166.26,6079.23,6137.24 2016-01-04,6242.32,6242.32,6071.01,6093.43 2015-12-31,6274.05,6278.31,6233.03,6242.32 2015-12-30,6314.57,6314.57,6261.48,6274.05 2015-12-29,6254.64,6314.57,6245.24,6314.57 2015-12-24,6240.98,6259.86,6236.85,6254.64 2015-12-23,6083.1,6248.5,6083.1,6240.98 2015-12-22,6034.84,6090.58,6031.82,6083.1 2015-12-21,6052.42,6113.96,6034.84,6034.84 2015-12-18,6102.54,6105.57,6051.74,6052.42 2015-12-16,6017.79,6089.31,6016.25,6061.19 2015-12-15,5874.06,6036.68,5874.06,6017.79 2015-12-14,5952.78,6009.92,5871.88,5874.06 2015-12-11,6088.05,6088.05,5949.84,5952.78 2015-12-10,6126.68,6127.09,6079.96,6088.05 2015-12-09,6135.22,6175.75,6101.22,6126.68 2015-12-08,6223.52,6224.86,6120.68,6135.22 2015-12-07,6238.29,6287.23,6215.17,6223.52 2015-12-04,6275.0,6277.59,6219.5,6238.29 2015-12-03,6420.93,6444.72,6275.0,6275.0 2015-12-02,6395.65,6447.34,6395.2,6420.93 2015-12-01,6356.09,6402.36,6356.09,6395.65 2015-11-30,6375.15,6387.11,6329.92,6356.09 2015-11-27,6393.13,6393.13,6345.3,6375.15 2015-11-26,6337.64,6395.33,6333.92,6393.13 2015-11-25,6277.23,6348.05,6277.23,6337.64 2015-11-24,6305.49,6305.49,6221.33,6277.23 2015-11-23,6334.63,6334.63,6267.05,6305.49 2015-11-20,6329.93,6360.73,6311.76,6334.63 2015-11-19,6278.97,6366.85,6278.97,6329.93 2015-11-18,6268.76,6283.9,6228.15,6278.97 2015-11-17,6146.38,6269.44,6146.38,6268.76 2015-11-16,6118.28,6161.9,6079.79,6146.38 2015-11-13,6178.68,6178.95,6088.76,6118.28 2015-11-12,6297.2,6300.9,6178.68,6178.68 2015-11-11,6275.28,6327.16,6272.69,6297.2 2015-11-10,6295.16,6329.69,6250.31,6275.28 2015-11-09,6353.83,6380.42,6292.05,6295.16 2015-11-06,6364.9,6395.19,6332.73,6353.83 2015-11-05,6412.88,6421.81,6358.12,6364.9 2015-11-04,6383.61,6459.46,6383.04,6412.88 2015-11-03,6361.8,6383.61,6344.7,6383.61 2015-11-02,6361.09,6364.42,6317.29,6361.8 2015-10-30,6395.8,6410.28,6337.65,6361.09 2015-10-29,6437.8,6437.85,6358.16,6395.8 2015-10-28,6365.27,6448.46,6355.78,6437.8 2015-10-27,6417.02,6419.62,6365.27,6365.27 2015-10-26,6444.08,6453.0,6405.38,6417.02 2015-10-23,6376.28,6487.89,6376.28,6444.08 2015-10-22,6348.42,6387.28,6321.65,6376.28 2015-10-21,6345.13,6387.29,6316.3,6348.42 2015-10-20,6352.33,6367.75,6319.25,6345.13 2015-10-19,6378.04,6408.09,6336.27,6352.33 2015-10-16,6338.67,6398.23,6338.67,6378.04 2015-10-15,6269.61,6351.43,6269.61,6338.67 2015-10-14,6342.28,6342.28,6268.29,6269.61 2015-10-13,6371.18,6371.18,6303.02,6342.28 2015-10-12,6416.16,6416.16,6351.34,6371.18 2015-10-09,6374.82,6453.22,6374.82,6416.16 2015-10-08,6336.35,6380.3,6303.46,6374.82 2015-10-07,6326.16,6396.34,6319.77,6336.35 2015-10-06,6298.92,6343.71,6255.1,6326.16 2015-10-05,6129.98,6301.05,6129.98,6298.92 2015-10-02,6072.47,6176.2,6051.62,6129.98 2015-10-01,6061.61,6172.78,6053.26,6072.47 2015-09-30,5909.24,6061.61,5909.24,6061.61 2015-09-29,5958.86,5958.86,5877.08,5909.24 2015-09-28,6109.01,6110.31,5958.86,5958.86 2015-09-25,5961.49,6120.67,5961.49,6109.01 2015-09-24,6032.24,6055.64,5947.19,5961.49 2015-09-23,5935.84,6067.56,5933.23,6032.24 2015-09-22,6108.71,6111.57,5935.84,5935.84 2015-09-21,6104.11,6168.74,6083.64,6108.71 2015-09-18,6186.99,6188.74,6053.87,6104.11 2015-09-17,6229.21,6239.86,6182.63,6186.99 2015-09-16,6137.6,6244.94,6137.6,6229.21 2015-09-15,6084.59,6158.08,6019.92,6137.6 2015-09-14,6117.76,6191.82,6065.43,6084.59 2015-09-11,6155.81,6174.28,6113.1,6117.76 2015-09-10,6229.01,6229.01,6127.52,6155.81 2015-09-09,6146.1,6284.17,6146.1,6229.01 2015-09-08,6074.52,6196.47,6074.52,6146.1 2015-09-07,6042.92,6125.67,6042.92,6074.52 2015-09-04,6194.1,6194.1,6040.49,6042.92 2015-09-03,6083.31,6215.74,6083.31,6194.1 2015-09-02,6058.54,6161.68,6021.36,6083.31 2015-09-01,6247.94,6247.94,6028.71,6058.54 2015-08-28,6192.03,6247.94,6152.01,6247.94 2015-08-27,5979.2,6212.48,5979.2,6192.03 2015-08-26,6081.34,6095.05,5949.94,5979.2 2015-08-25,5898.87,6115.74,5898.87,6081.34 2015-08-24,6187.65,6187.65,5768.22,5898.87 2015-08-21,6367.89,6367.89,6187.65,6187.65 2015-08-20,6403.45,6408.61,6359.71,6367.89 2015-08-19,6526.29,6526.52,6403.45,6403.45 2015-08-18,6550.3,6564.55,6505.69,6526.29 2015-08-17,6550.74,6585.88,6507.76,6550.3 2015-08-14,6568.33,6603.17,6544.42,6550.74 2015-08-13,6571.19,6634.71,6553.45,6568.33 2015-08-12,6664.54,6664.54,6536.41,6571.19 2015-08-11,6736.22,6736.22,6663.98,6664.54 2015-08-10,6718.49,6751.49,6653.65,6736.22 2015-08-07,6747.09,6754.77,6718.49,6718.49 2015-08-06,6752.41,6763.34,6717.49,6747.09 2015-08-05,6686.57,6764.82,6686.57,6752.41 2015-08-04,6688.62,6715.51,6644.65,6686.57 2015-08-03,6696.28,6710.79,6668.18,6688.62 2015-07-31,6668.87,6705.42,6646.26,6696.28 2015-07-30,6631.0,6697.4,6631.0,6668.87 2015-07-29,6555.28,6634.04,6555.28,6631.0 2015-07-28,6505.13,6569.45,6505.13,6555.28 2015-07-27,6579.81,6589.48,6495.67,6505.13 2015-07-24,6655.01,6684.81,6573.96,6579.81 2015-07-23,6667.34,6711.49,6644.85,6655.01 2015-07-22,6769.07,6769.07,6653.39,6667.34 2015-07-21,6788.69,6800.13,6758.75,6769.07 2015-07-20,6775.08,6813.41,6772.09,6788.69 2015-07-17,6796.45,6799.78,6764.8,6775.08 2015-07-16,6753.75,6805.14,6752.09,6796.45 2015-07-15,6753.75,6775.91,6728.49,6753.75 2015-07-14,6737.95,6753.75,6710.62,6753.75 2015-07-13,6673.38,6743.05,6673.38,6737.95 2015-07-10,6581.63,6687.57,6581.63,6673.38 2015-07-09,6490.7,6594.18,6490.7,6581.63 2015-07-08,6432.21,6515.06,6430.36,6490.7 2015-07-07,6535.68,6543.8,6432.21,6432.21 2015-07-06,6585.78,6585.78,6506.71,6535.68 2015-07-03,6630.47,6630.75,6572.46,6585.78 2015-07-02,6608.59,6647.7,6600.37,6630.47 2015-07-01,6520.98,6637.34,6520.98,6608.59 2015-06-30,6620.48,6620.75,6520.98,6520.98 2015-06-29,6753.7,6753.7,6598.64,6620.48 2015-06-26,6807.82,6807.82,6731.13,6753.7 2015-06-25,6844.8,6869.04,6798.8,6807.82 2015-06-24,6834.87,6873.43,6834.32,6844.8 2015-06-23,6825.67,6856.49,6825.67,6834.87 2015-06-22,6710.45,6825.67,6710.45,6825.67 2015-06-19,6707.88,6759.29,6691.82,6710.45 2015-06-18,6680.55,6707.88,6625.16,6707.88 2015-06-17,6710.1,6731.54,6665.95,6680.55 2015-06-16,6710.52,6723.49,6656.9,6710.1 2015-06-15,6784.92,6784.92,6708.5,6710.52 2015-06-12,6846.74,6846.74,6760.06,6784.92 2015-06-11,6830.27,6870.19,6807.29,6846.74 2015-06-10,6753.8,6843.57,6734.15,6830.27 2015-06-09,6790.04,6803.75,6736.88,6753.8 2015-06-08,6804.6,6827.16,6781.66,6790.04 2015-06-05,6859.24,6859.24,6785.15,6804.6 2015-06-04,6950.46,6950.46,6838.95,6859.24 2015-06-03,6928.27,6985.69,6901.79,6950.46 2015-06-02,6953.58,6972.25,6872.12,6928.27 2015-06-01,6984.43,7037.58,6942.66,6953.58 2015-05-29,7040.92,7069.93,6967.92,6984.43 2015-05-28,7033.33,7049.62,7005.88,7040.92 2015-05-27,6948.99,7054.14,6948.62,7033.33 2015-05-26,7031.72,7039.55,6930.28,6948.99 2015-05-22,7013.47,7061.66,7013.47,7031.72 2015-05-21,7007.26,7026.01,6994.26,7013.47 2015-05-20,6995.1,7018.7,6962.06,7007.26 2015-05-19,6968.87,7011.35,6968.87,6995.1 2015-05-18,6960.49,7015.49,6931.64,6968.87 2015-05-15,6973.04,7009.41,6937.12,6960.49 2015-05-14,6949.63,6977.93,6884.63,6973.04 2015-05-13,6933.8,6989.91,6920.65,6949.63 2015-05-12,7029.85,7029.85,6887.52,6933.8 2015-05-11,7046.82,7083.72,7025.17,7029.85 2015-05-08,6886.95,7046.82,6885.79,7046.82 2015-05-07,6933.74,6933.74,6810.05,6886.95 2015-05-06,6927.58,6974.82,6913.46,6933.74 2015-05-05,6985.95,7053.18,6927.58,6927.58 2015-05-01,6960.63,6995.41,6919.39,6985.95 2015-04-30,6946.28,6970.34,6906.24,6960.63 2015-04-29,7030.53,7058.19,6945.56,6946.28 2015-04-28,7103.98,7103.99,6983.97,7030.53 2015-04-27,7070.7,7122.74,7025.27,7103.98 2015-04-24,7053.67,7102.59,7051.17,7070.7 2015-04-23,7028.24,7055.15,6995.79,7053.67 2015-04-22,7062.93,7092.34,6997.15,7028.24 2015-04-21,7052.13,7105.13,7030.0,7062.93 2015-04-20,6994.63,7067.84,6994.63,7052.13 2015-04-17,7060.45,7093.52,6979.32,6994.63 2015-04-16,7096.78,7119.35,7057.74,7060.45 2015-04-15,7075.26,7111.72,7058.34,7096.78 2015-04-14,7064.3,7086.06,7044.6,7075.26 2015-04-13,7089.77,7089.84,7046.68,7064.3 2015-04-10,7015.36,7095.36,7015.36,7089.77 2015-04-09,6937.41,7016.99,6937.41,7015.36 2015-04-08,6961.77,7012.06,6931.59,6937.41 2015-04-07,6833.46,6967.69,6833.46,6961.77 2015-04-02,6809.5,6849.91,6801.27,6833.46 2015-04-01,6773.04,6856.43,6765.4,6809.5 2015-03-31,6891.43,6910.07,6765.05,6773.04 2015-03-30,6855.02,6914.6,6855.02,6891.43 2015-03-27,6895.33,6910.55,6839.88,6855.02 2015-03-26,6990.97,6990.97,6876.84,6895.33 2015-03-25,7019.68,7035.11,6983.94,6990.97 2015-03-24,7037.67,7065.08,7012.51,7019.68 2015-03-23,7022.51,7037.67,6991.43,7037.67 2015-03-20,6962.32,7024.21,6960.81,7022.51 2015-03-19,6945.2,6982.79,6929.73,6962.32 2015-03-18,6837.61,6945.2,6837.26,6945.2 2015-03-17,6804.08,6846.9,6798.47,6837.61 2015-03-16,6740.58,6809.08,6740.58,6804.08 2015-03-13,6761.07,6777.77,6713.5,6740.58 2015-03-12,6721.51,6799.84,6721.51,6761.07 2015-03-11,6702.84,6738.95,6693.8,6721.51 2015-03-10,6876.47,6876.86,6702.84,6702.84 2015-03-09,6911.8,6911.8,6859.81,6876.47 2015-03-06,6961.14,6961.23,6911.8,6911.8 2015-03-05,6919.24,6968.64,6914.06,6961.14 2015-03-04,6889.13,6919.24,6862.87,6919.24 2015-03-03,6940.64,6963.55,6889.13,6889.13 2015-03-02,6946.66,6974.26,6924.33,6940.64 2015-02-27,6949.73,6967.24,6929.84,6946.66 2015-02-26,6935.38,6949.98,6920.54,6949.73 2015-02-25,6949.63,6955.41,6904.88,6935.38 2015-02-24,6912.16,6958.89,6899.59,6949.63 2015-02-23,6915.2,6943.61,6885.89,6912.16 2015-02-20,6888.9,6920.51,6884.77,6915.2 2015-02-19,6898.08,6907.3,6858.67,6888.9 2015-02-18,6898.13,6921.32,6876.3,6898.08 2015-02-17,6857.05,6898.13,6819.78,6898.13 2015-02-16,6873.52,6878.66,6851.77,6857.05 2015-02-13,6828.11,6887.57,6828.11,6873.52 2015-02-12,6818.17,6854.62,6817.23,6828.11 2015-02-11,6829.12,6838.33,6786.12,6818.17 2015-02-10,6837.15,6843.9,6788.89,6829.12 2015-02-09,6853.44,6853.44,6777.99,6837.15 2015-02-06,6865.93,6886.22,6835.48,6853.44 2015-02-05,6860.02,6870.1,6808.19,6865.93 2015-02-04,6871.8,6883.49,6804.1,6860.02 2015-02-03,6782.55,6886.31,6782.39,6871.8 2015-02-02,6749.4,6795.52,6731.99,6782.55 2015-01-30,6810.6,6843.98,6749.4,6749.4 2015-01-29,6825.94,6825.94,6750.22,6810.6 2015-01-28,6811.61,6863.0,6777.08,6825.94 2015-01-27,6852.4,6864.97,6773.54,6811.61 2015-01-26,6832.83,6855.92,6790.13,6852.4 2015-01-23,6796.63,6841.73,6796.58,6832.83 2015-01-22,6728.04,6808.18,6726.24,6796.63 2015-01-21,6620.1,6728.04,6620.1,6728.04 2015-01-20,6585.53,6640.44,6585.53,6620.1 2015-01-19,6550.27,6598.89,6548.0,6585.53 2015-01-16,6498.78,6553.2,6443.28,6550.27 2015-01-15,6388.46,6498.78,6298.15,6498.78 2015-01-14,6542.2,6542.2,6353.65,6388.46 2015-01-13,6501.42,6558.83,6465.19,6542.2 2015-01-12,6501.14,6542.43,6447.91,6501.42 2015-01-09,6569.96,6570.24,6471.38,6501.14 2015-01-08,6419.83,6580.82,6419.83,6569.96 2015-01-07,6366.51,6459.74,6366.51,6419.83 2015-01-06,6417.16,6452.66,6328.59,6366.51 2015-01-05,6547.8,6576.74,6404.49,6417.16 2014-12-31,6547.0,6578.24,6547.0,6566.09 2014-12-30,6633.51,6633.51,6528.89,6547.0 2014-12-29,6609.93,6651.96,6587.87,6633.51 2014-12-24,6598.18,6618.09,6586.05,6609.93 2014-12-23,6576.74,6620.47,6576.74,6598.18 2014-12-22,6545.27,6620.95,6545.27,6576.74 2014-12-19,6466.0,6566.9,6466.0,6545.27 2014-12-18,6336.48,6466.0,6336.48,6466.0 2014-12-17,6331.83,6359.68,6240.32,6336.48 2014-12-16,6182.72,6331.83,6144.72,6331.83 2014-12-15,6300.63,6356.34,6182.72,6182.72 2014-12-12,6461.7,6461.7,6297.44,6300.63 2014-12-11,6500.04,6521.66,6441.28,6461.7 2014-12-10,6529.47,6565.77,6500.04,6500.04 2014-12-09,6672.15,6672.15,6529.47,6529.47 2014-12-08,6742.84,6742.84,6672.15,6672.15 2014-12-05,6679.37,6751.32,6679.37,6742.84 2014-12-04,6716.63,6733.96,6672.67,6679.37 2014-12-03,6742.1,6753.19,6713.81,6716.63 2014-12-02,6656.37,6744.31,6656.37,6742.1 2014-12-01,6722.62,6722.62,6637.39,6656.37 2014-11-28,6723.42,6734.71,6667.08,6722.62 2014-11-27,6729.17,6749.91,6713.76,6723.42 2014-11-26,6731.14,6765.01,6718.53,6729.17 2014-11-25,6729.79,6750.87,6709.31,6731.14 2014-11-24,6750.76,6763.97,6720.09,6729.79 2014-11-21,6678.9,6773.14,6678.9,6750.76 2014-11-20,6696.6,6696.82,6641.14,6678.9 2014-11-19,6709.13,6718.88,6678.13,6696.6 2014-11-18,6671.97,6714.12,6671.75,6709.13 2014-11-17,6654.37,6681.55,6616.12,6671.97 2014-11-14,6635.45,6654.37,6610.13,6654.37 2014-11-13,6611.04,6645.9,6596.89,6635.45 2014-11-12,6627.4,6629.33,6588.93,6611.04 2014-11-11,6611.25,6632.57,6605.34,6627.4 2014-11-10,6567.24,6611.25,6566.78,6611.25 2014-11-07,6551.15,6608.23,6551.15,6567.24 2014-11-06,6539.14,6580.21,6503.81,6551.15 2014-11-05,6453.97,6539.14,6453.97,6539.14 2014-11-04,6487.97,6510.31,6444.89,6453.97 2014-11-03,6546.47,6559.56,6478.49,6487.97 2014-10-31,6463.55,6553.37,6463.55,6546.47 2014-10-30,6453.87,6483.24,6378.15,6463.55 2014-10-29,6402.17,6475.35,6402.17,6453.87 2014-10-28,6363.46,6412.0,6363.46,6402.17 2014-10-27,6388.73,6443.76,6336.06,6363.46 2014-10-24,6419.15,6419.15,6372.43,6388.73 2014-10-23,6399.73,6430.32,6313.32,6419.15 2014-10-22,6372.33,6401.51,6341.39,6399.73 2014-10-21,6267.07,6372.33,6229.4,6372.33 2014-10-20,6310.29,6320.31,6238.6,6267.07 2014-10-17,6195.91,6312.97,6188.04,6310.29 2014-10-16,6211.64,6282.95,6072.68,6195.91 2014-10-15,6392.68,6404.96,6211.64,6211.64 2014-10-14,6366.24,6403.43,6304.27,6392.68 2014-10-13,6339.97,6387.36,6294.64,6366.24 2014-10-10,6431.85,6431.85,6328.39,6339.97 2014-10-09,6482.24,6544.21,6425.16,6431.85 2014-10-08,6495.58,6502.36,6453.81,6482.24 2014-10-07,6563.65,6563.84,6495.58,6495.58 2014-10-06,6527.91,6588.31,6527.91,6563.65 2014-10-03,6446.39,6542.87,6446.39,6527.91 2014-10-02,6557.52,6557.67,6446.39,6446.39 2014-10-01,6622.72,6622.81,6539.73,6557.52 2014-09-30,6646.6,6658.91,6601.62,6622.72 2014-09-29,6649.39,6653.94,6608.66,6646.6 2014-09-26,6639.71,6664.0,6615.12,6649.39 2014-09-25,6706.27,6726.4,6621.48,6639.71 2014-09-24,6676.08,6707.26,6651.98,6706.27 2014-09-23,6773.63,6777.27,6647.21,6676.08 2014-09-22,6837.92,6838.35,6766.89,6773.63 2014-09-19,6819.29,6876.0,6819.29,6837.92 2014-09-18,6780.9,6822.6,6769.58,6819.29 2014-09-17,6792.24,6816.89,6780.9,6780.9 2014-09-16,6804.21,6804.34,6748.09,6792.24 2014-09-15,6806.96,6813.87,6771.69,6804.21 2014-09-12,6799.62,6832.16,6799.39,6806.96 2014-09-11,6830.11,6857.54,6764.86,6799.62 2014-09-10,6829.0,6847.79,6800.04,6830.11 2014-09-09,6834.77,6846.18,6812.5,6829.0 2014-09-08,6855.1,6855.1,6773.78,6834.77 2014-09-05,6877.97,6884.96,6829.1,6855.1 2014-09-04,6873.58,6904.86,6866.25,6877.97 2014-09-03,6829.17,6898.62,6826.73,6873.58 2014-09-02,6825.31,6849.28,6812.31,6829.17 2014-09-01,6819.75,6825.31,6798.33,6825.31 2014-08-29,6805.8,6828.92,6782.63,6819.75 2014-08-28,6830.66,6831.19,6796.86,6805.8 2014-08-27,6822.76,6830.66,6813.24,6830.66 2014-08-26,6775.25,6827.32,6775.25,6822.76 2014-08-22,6777.66,6784.63,6746.37,6775.25 2014-08-21,6755.48,6780.73,6752.7,6777.66 2014-08-20,6779.31,6781.23,6739.76,6755.48 2014-08-19,6741.25,6782.9,6740.65,6779.31 2014-08-18,6689.08,6745.72,6689.08,6741.25 2014-08-15,6685.26,6742.82,6685.25,6689.08 2014-08-14,6656.68,6694.64,6641.81,6685.26 2014-08-13,6632.42,6664.34,6625.98,6656.68 2014-08-12,6632.82,6643.7,6612.52,6632.42 2014-08-11,6567.36,6645.83,6567.36,6632.82 2014-08-08,6597.37,6597.37,6528.73,6567.36 2014-08-07,6636.16,6649.05,6589.78,6597.37 2014-08-06,6682.48,6682.48,6588.43,6636.16 2014-08-05,6677.52,6713.52,6671.46,6682.48 2014-08-04,6679.18,6715.56,6669.93,6677.52 2014-08-01,6730.11,6730.11,6624.72,6679.18 2014-07-31,6773.44,6797.09,6716.29,6730.11 2014-07-30,6807.75,6815.29,6758.24,6773.44 2014-07-29,6788.07,6833.67,6784.04,6807.75 2014-07-28,6791.55,6809.61,6761.77,6788.07 2014-07-25,6821.46,6830.77,6780.65,6791.55 2014-07-24,6798.15,6821.46,6767.33,6821.46 2014-07-23,6795.34,6822.65,6773.11,6798.15 2014-07-22,6728.44,6801.84,6728.44,6795.34 2014-07-21,6749.45,6753.42,6715.78,6728.44 2014-07-18,6738.32,6749.89,6690.9,6749.45 2014-07-17,6784.67,6784.67,6727.71,6738.32 2014-07-16,6710.45,6792.55,6710.45,6784.67 2014-07-15,6746.14,6764.0,6709.15,6710.45 2014-07-14,6690.17,6760.73,6690.17,6746.14 2014-07-11,6672.37,6696.1,6663.67,6690.17 2014-07-10,6718.04,6724.8,6643.62,6672.37 2014-07-09,6738.45,6740.82,6692.77,6718.04 2014-07-08,6823.51,6831.02,6738.45,6738.45 2014-07-07,6866.05,6866.37,6817.6,6823.51 2014-07-04,6865.21,6875.31,6856.35,6866.05 2014-07-03,6816.37,6866.56,6815.45,6865.21 2014-07-02,6802.92,6829.49,6796.61,6816.37 2014-07-01,6743.94,6805.9,6743.94,6802.92 2014-06-30,6757.77,6777.11,6730.45,6743.94 2014-06-27,6735.12,6767.63,6735.12,6757.77 2014-06-26,6733.62,6753.25,6701.59,6735.12 2014-06-25,6787.07,6787.07,6716.35,6733.62 2014-06-24,6800.56,6824.45,6776.8,6787.07 2014-06-23,6825.2,6829.76,6785.83,6800.56 2014-06-20,6808.11,6840.62,6791.2,6825.2 2014-06-19,6778.56,6837.57,6778.56,6808.11 2014-06-18,6766.77,6799.59,6766.77,6778.56 2014-06-17,6754.64,6774.87,6736.11,6766.77 2014-06-16,6777.85,6779.4,6748.04,6754.64 2014-06-13,6843.11,6843.11,6758.15,6777.85 2014-06-12,6838.87,6853.18,6827.03,6843.11 2014-06-11,6873.55,6873.55,6825.24,6838.87 2014-06-10,6875.0,6875.24,6835.8,6873.55 2014-06-09,6858.21,6878.96,6857.7,6875.0 2014-06-06,6813.49,6862.91,6813.49,6858.21 2014-06-05,6818.63,6847.0,6795.27,6813.49 2014-06-04,6836.3,6840.6,6800.1,6818.63 2014-06-03,6864.1,6865.38,6817.96,6836.3 2014-06-02,6844.51,6874.38,6844.51,6864.1 2014-05-30,6871.29,6874.33,6831.99,6844.51 2014-05-29,6851.22,6882.14,6848.06,6871.29 2014-05-28,6844.94,6855.83,6833.61,6851.22 2014-05-27,6815.75,6857.1,6815.37,6844.94 2014-05-23,6820.56,6825.53,6793.47,6815.75 2014-05-22,6821.04,6846.57,6810.19,6820.56 2014-05-21,6802.0,6821.04,6782.8,6821.04 2014-05-20,6844.55,6848.36,6792.51,6802.0 2014-05-19,6855.81,6862.2,6804.31,6844.55 2014-05-16,6840.89,6855.94,6813.5,6855.81 2014-05-15,6878.49,6894.88,6821.66,6840.89 2014-05-14,6873.08,6880.07,6854.02,6878.49 2014-05-13,6851.75,6877.39,6845.95,6873.08 2014-05-12,6814.57,6851.75,6814.57,6851.75 2014-05-09,6839.25,6839.42,6805.39,6814.57 2014-05-08,6796.44,6840.37,6796.44,6839.25 2014-05-07,6798.56,6799.34,6766.84,6796.44 2014-05-06,6822.42,6828.62,6785.32,6798.56 2014-05-02,6808.87,6838.17,6798.61,6822.42 2014-05-01,6780.03,6811.64,6773.69,6808.87 2014-04-30,6769.91,6794.88,6748.76,6780.03 2014-04-29,6700.16,6769.91,6700.1,6769.91 2014-04-28,6685.69,6720.33,6682.9,6700.16 2014-04-25,6703.0,6704.37,6657.3,6685.69 2014-04-24,6674.74,6724.58,6667.65,6703.0 2014-04-23,6681.76,6694.82,6661.42,6674.74 2014-04-22,6625.25,6706.19,6625.25,6681.76 2014-04-17,6584.17,6627.25,6559.35,6625.25 2014-04-16,6541.61,6596.99,6541.61,6584.17 2014-04-15,6583.76,6594.24,6534.2,6541.61 2014-04-14,6561.7,6583.76,6507.08,6583.76 2014-04-11,6641.97,6641.97,6538.75,6561.7 2014-04-10,6635.61,6688.28,6620.39,6641.97 2014-04-09,6590.69,6654.05,6590.41,6635.61 2014-04-08,6622.84,6625.19,6549.75,6590.69 2014-04-07,6695.55,6695.55,6614.73,6622.84 2014-04-04,6649.14,6706.34,6649.14,6695.55 2014-04-03,6659.04,6680.78,6638.52,6649.14 2014-04-02,6652.61,6672.73,6639.63,6659.04 2014-04-01,6598.37,6660.27,6598.37,6652.61 2014-03-31,6615.58,6658.4,6583.09,6598.37 2014-03-28,6588.32,6631.48,6585.73,6615.58 2014-03-27,6605.3,6605.3,6561.39,6588.32 2014-03-26,6604.89,6643.58,6601.78,6605.3 2014-03-25,6520.39,6604.89,6520.39,6604.89 2014-03-24,6557.17,6568.96,6506.42,6520.39 2014-03-21,6542.44,6572.09,6537.89,6557.17 2014-03-20,6573.13,6573.13,6492.62,6542.44 2014-03-19,6605.28,6609.46,6566.85,6573.13 2014-03-18,6568.35,6628.2,6534.86,6605.28 2014-03-17,6527.89,6592.37,6527.87,6568.35 2014-03-14,6553.78,6553.78,6500.37,6527.89 2014-03-13,6620.9,6631.38,6552.46,6553.78 2014-03-12,6685.52,6685.52,6598.36,6620.9 2014-03-11,6689.45,6718.3,6660.59,6685.52 2014-03-10,6712.67,6757.0,6671.62,6689.45 2014-03-07,6788.49,6800.66,6706.38,6712.67 2014-03-06,6775.42,6806.62,6770.95,6788.49 2014-03-05,6823.77,6824.16,6771.5,6775.42 2014-03-04,6708.35,6827.22,6708.35,6823.77 2014-03-03,6809.7,6809.7,6671.89,6708.35 2014-02-28,6810.27,6833.82,6785.54,6809.7 2014-02-27,6799.15,6819.24,6733.54,6810.27 2014-02-26,6830.5,6834.09,6785.28,6799.15 2014-02-25,6862.73,6866.35,6790.93,6830.5 2014-02-24,6838.06,6865.86,6797.83,6865.86 2014-02-21,6812.99,6859.91,6812.99,6838.06 2014-02-20,6796.71,6812.99,6732.03,6812.99 2014-02-19,6796.43,6810.48,6759.86,6796.71 2014-02-18,6736.0,6802.89,6716.64,6796.43 2014-02-17,6663.62,6745.63,6661.47,6736.0 2014-02-14,6659.42,6672.21,6646.47,6663.62 2014-02-13,6675.03,6675.24,6608.09,6659.42 2014-02-12,6672.66,6708.17,6669.06,6675.03 2014-02-11,6591.55,6672.66,6591.55,6672.66 2014-02-10,6571.68,6597.0,6565.3,6591.55 2014-02-07,6558.28,6596.28,6540.81,6571.68 2014-02-06,6457.89,6566.01,6457.89,6558.28 2014-02-05,6449.27,6483.73,6423.79,6457.89 2014-02-04,6465.66,6478.16,6416.72,6449.27 2014-02-03,6510.44,6538.3,6459.95,6465.66 2014-01-31,6538.45,6548.46,6421.26,6510.44 2014-01-30,6544.28,6573.92,6503.25,6538.45 2014-01-29,6572.33,6645.23,6482.74,6544.28 2014-01-28,6550.66,6590.66,6550.65,6572.33 2014-01-27,6663.74,6665.39,6539.33,6550.66 2014-01-24,6773.28,6784.42,6654.86,6663.74 2014-01-23,6826.33,6837.21,6760.63,6773.28 2014-01-22,6834.26,6864.87,6821.8,6826.33 2014-01-21,6836.73,6867.42,6822.31,6834.26 2014-01-20,6829.3,6837.53,6810.62,6836.73 2014-01-17,6815.42,6840.5,6800.0,6829.3 2014-01-16,6819.86,6831.74,6811.16,6815.42 2014-01-15,6766.86,6825.2,6766.86,6819.86 2014-01-14,6757.15,6772.63,6694.08,6766.86 2014-01-13,6739.94,6765.6,6730.97,6757.15 2014-01-10,6691.34,6769.94,6691.34,6739.94 2014-01-09,6721.78,6746.41,6679.31,6691.34 2014-01-08,6755.45,6755.53,6713.39,6721.78 2014-01-07,6730.73,6768.89,6718.07,6755.45 2014-01-06,6730.67,6751.98,6714.64,6730.73 2014-01-03,6717.91,6747.33,6699.27,6730.67 2014-01-02,6749.09,6759.37,6707.48,6717.91 2013-12-31,6731.27,6756.98,6731.25,6749.09 2013-12-30,6750.87,6768.44,6718.16,6731.27 2013-12-27,6694.17,6754.11,6694.17,6750.87 2013-12-24,6678.61,6712.1,6672.22,6694.17 2013-12-23,6606.58,6678.61,6606.2,6678.61 2013-12-20,6584.7,6616.8,6576.79,6606.58 2013-12-19,6492.08,6584.7,6492.08,6584.7 2013-12-18,6486.19,6524.46,6486.19,6492.08 2013-12-17,6522.2,6522.2,6482.59,6486.19 2013-12-16,6439.96,6531.16,6422.23,6522.2 2013-12-13,6445.25,6462.76,6433.51,6439.96 2013-12-12,6507.72,6507.72,6435.99,6445.25 2013-12-11,6523.31,6555.57,6507.72,6507.72 2013-12-10,6559.48,6571.91,6519.0,6523.31 2013-12-09,6551.99,6568.44,6534.74,6559.48 2013-12-06,6498.33,6555.73,6496.33,6551.99 2013-12-05,6509.97,6518.88,6487.15,6498.33 2013-12-04,6532.43,6544.7,6479.73,6509.97 2013-12-03,6595.33,6595.48,6531.34,6532.43 2013-12-02,6650.57,6657.41,6595.2,6595.33 2013-11-29,6654.47,6681.57,6648.53,6650.57 2013-11-28,6649.47,6679.51,6642.57,6654.47 2013-11-27,6636.22,6664.14,6635.71,6649.47 2013-11-26,6694.62,6696.95,6636.22,6636.22 2013-11-25,6674.3,6709.08,6674.3,6694.62 2013-11-22,6681.33,6711.03,6661.04,6674.3 2013-11-21,6681.08,6697.69,6643.47,6681.33 2013-11-20,6698.01,6711.42,6661.7,6681.08 2013-11-19,6723.46,6723.46,6677.85,6698.01 2013-11-18,6693.44,6732.1,6671.63,6723.46 2013-11-15,6666.13,6703.12,6665.45,6693.44 2013-11-14,6630.0,6696.16,6630.0,6666.13 2013-11-13,6726.79,6726.81,6613.98,6630.0 2013-11-12,6728.37,6728.37,6693.26,6726.79 2013-11-11,6708.42,6744.77,6702.01,6728.37 2013-11-08,6697.22,6713.9,6643.86,6708.42 2013-11-07,6741.69,6779.18,6679.99,6697.22 2013-11-06,6746.84,6768.16,6735.64,6741.69 2013-11-05,6763.62,6773.86,6708.52,6746.84 2013-11-04,6734.74,6780.11,6734.56,6763.62 2013-11-01,6731.43,6760.87,6715.3,6734.74 2013-10-31,6777.7,6778.27,6719.51,6731.43 2013-10-30,6774.73,6819.86,6763.66,6777.7 2013-10-29,6725.82,6777.16,6718.85,6774.73 2013-10-28,6721.34,6739.66,6704.15,6725.82 2013-10-25,6713.18,6729.74,6700.37,6721.34 2013-10-24,6674.48,6719.25,6674.16,6713.18 2013-10-23,6695.66,6695.92,6655.2,6674.48 2013-10-22,6654.2,6719.27,6653.7,6695.66 2013-10-21,6622.58,6654.2,6617.81,6654.2 2013-10-18,6576.16,6622.7,6576.16,6622.58 2013-10-17,6571.59,6576.16,6529.16,6576.16 2013-10-16,6549.11,6584.39,6504.27,6571.59 2013-10-15,6507.65,6569.28,6507.65,6549.11 2013-10-14,6487.19,6507.8,6464.44,6507.65 2013-10-11,6430.49,6489.16,6430.47,6487.19 2013-10-10,6337.91,6446.22,6337.91,6430.49 2013-10-09,6365.83,6372.63,6316.91,6337.91 2013-10-08,6437.28,6437.73,6364.97,6365.83 2013-10-07,6453.88,6453.88,6391.47,6437.28 2013-10-04,6449.04,6473.58,6428.96,6453.88 2013-10-03,6437.5,6472.43,6436.21,6449.04 2013-10-02,6460.01,6460.01,6386.18,6437.5 2013-10-01,6462.22,6466.3,6424.37,6460.01 2013-09-30,6512.66,6512.66,6438.72,6462.22 2013-09-27,6565.59,6568.94,6487.3,6512.66 2013-09-26,6551.53,6580.94,6535.78,6565.59 2013-09-25,6571.46,6587.97,6526.42,6551.53 2013-09-24,6557.37,6585.4,6549.92,6571.46 2013-09-20,6625.39,6629.93,6594.17,6596.43 2013-09-19,6558.82,6659.12,6558.82,6625.39 2013-09-18,6570.17,6587.58,6532.5,6558.82 2013-09-17,6622.86,6623.04,6570.17,6570.17 2013-09-16,6583.8,6652.66,6583.8,6622.86 2013-09-13,6588.98,6588.98,6561.78,6583.8 2013-09-12,6588.43,6606.12,6558.61,6588.98 2013-09-11,6583.99,6589.85,6559.72,6588.43 2013-09-10,6530.74,6599.51,6530.74,6583.99 2013-09-09,6547.33,6555.86,6508.76,6530.74 2013-09-06,6532.44,6568.18,6492.49,6547.33 2013-09-05,6474.74,6543.22,6461.68,6532.44 2013-09-04,6468.41,6486.4,6423.51,6474.74 2013-09-03,6506.19,6523.16,6456.95,6468.41 2013-09-02,6412.93,6532.3,6412.93,6506.19 2013-08-30,6483.05,6502.19,6409.6,6412.93 2013-08-29,6430.06,6500.51,6429.95,6483.05 2013-08-28,6440.97,6440.97,6393.65,6430.06 2013-08-27,6492.1,6494.2,6424.0,6440.97 2013-08-23,6446.87,6516.71,6422.35,6492.1 2013-08-22,6390.84,6468.88,6390.62,6446.87 2013-08-21,6453.46,6453.55,6386.72,6390.84 2013-08-20,6465.73,6465.73,6398.63,6453.46 2013-08-19,6499.99,6506.59,6457.73,6465.73 2013-08-16,6483.34,6502.27,6461.3,6499.99 2013-08-15,6587.43,6587.88,6460.12,6483.34 2013-08-14,6611.94,6627.96,6582.58,6587.43 2013-08-13,6574.34,6620.43,6568.44,6611.94 2013-08-12,6583.39,6598.39,6547.0,6574.34 2013-08-09,6529.68,6601.21,6529.48,6583.39 2013-08-08,6511.21,6558.59,6507.24,6529.68 2013-08-07,6604.21,6624.99,6511.21,6511.21 2013-08-06,6619.58,6630.14,6562.32,6604.21 2013-08-05,6647.87,6684.95,6590.1,6619.58 2013-08-02,6681.98,6696.63,6623.85,6647.87 2013-08-01,6621.06,6681.98,6607.27,6681.98 2013-07-31,6570.95,6659.35,6556.65,6621.06 2013-07-30,6560.25,6600.72,6560.25,6570.95 2013-07-29,6554.79,6606.36,6544.14,6560.25 2013-07-26,6587.95,6629.89,6535.18,6554.79 2013-07-25,6620.43,6625.35,6540.42,6587.95 2013-07-24,6597.44,6662.19,6581.61,6620.43 2013-07-23,6623.17,6657.66,6597.44,6597.44 2013-07-22,6630.67,6645.01,6608.17,6623.17 2013-07-19,6634.36,6635.22,6592.1,6630.67 2013-07-18,6571.93,6657.38,6555.82,6634.36 2013-07-17,6556.35,6595.62,6517.38,6571.93 2013-07-16,6586.11,6606.42,6556.35,6556.35 2013-07-15,6544.94,6605.9,6544.94,6586.11 2013-07-12,6543.41,6583.9,6540.24,6544.94 2013-07-11,6504.96,6585.74,6504.96,6543.41 2013-07-10,6513.08,6535.91,6472.41,6504.96 2013-07-09,6450.07,6530.86,6450.07,6513.08 2013-07-08,6375.52,6476.09,6375.52,6450.07 2013-07-05,6421.67,6498.59,6364.38,6375.52 2013-07-04,6229.87,6431.41,6229.87,6421.67 2013-07-03,6303.94,6303.94,6185.21,6229.87 2013-07-02,6307.78,6314.13,6266.5,6303.94 2013-07-01,6215.47,6317.02,6215.44,6307.78 2013-06-28,6243.4,6268.84,6207.72,6215.47 2013-06-27,6165.48,6271.8,6165.45,6243.4 2013-06-26,6101.91,6177.92,6089.21,6165.48 2013-06-25,6029.1,6114.61,6029.1,6101.91 2013-06-24,6116.17,6136.11,6023.44,6029.1 2013-06-21,6159.51,6244.17,6116.17,6116.17 2013-06-20,6348.82,6348.82,6144.98,6159.51 2013-06-19,6374.21,6383.61,6327.01,6348.82 2013-06-18,6330.49,6397.33,6311.35,6374.21 2013-06-17,6308.26,6370.75,6308.26,6330.49 2013-06-14,6304.63,6343.51,6290.62,6308.26 2013-06-13,6299.45,6310.95,6205.71,6304.63 2013-06-12,6340.08,6364.26,6295.92,6299.45 2013-06-11,6400.45,6401.18,6280.08,6340.08 2013-06-10,6411.99,6421.24,6379.62,6400.45 2013-06-07,6336.11,6421.37,6313.6,6411.99 2013-06-06,6419.31,6435.39,6336.11,6336.11 2013-06-05,6558.58,6558.58,6419.31,6419.31 2013-06-04,6525.12,6577.0,6525.12,6558.58 2013-06-03,6583.09,6583.09,6514.08,6525.12 2013-05-31,6656.99,6657.07,6577.75,6583.09 2013-05-30,6627.17,6656.99,6611.03,6656.99 2013-05-29,6762.01,6762.01,6620.82,6627.17 2013-05-28,6654.34,6790.7,6654.34,6762.01 2013-05-24,6696.79,6720.08,6640.08,6654.34 2013-05-23,6840.27,6840.27,6658.77,6696.79 2013-05-22,6803.87,6875.62,6781.45,6840.27 2013-05-21,6755.63,6803.87,6744.2,6803.87 2013-05-20,6723.06,6755.63,6709.14,6755.63 2013-05-17,6687.8,6726.9,6669.93,6723.06 2013-05-16,6693.55,6714.48,6677.15,6687.8 2013-05-15,6686.06,6701.68,6669.04,6693.55 2013-05-14,6631.76,6686.06,6618.36,6686.06 2013-05-13,6624.98,6633.26,6602.82,6631.76 2013-05-10,6592.74,6637.84,6591.58,6624.98 2013-05-09,6583.48,6597.26,6571.73,6592.74 2013-05-08,6557.3,6587.39,6547.0,6583.48 2013-05-07,6521.46,6563.9,6521.43,6557.3 2013-05-03,6460.71,6541.69,6451.5,6521.46 2013-05-02,6451.29,6470.34,6409.81,6460.71 2013-05-01,6430.12,6475.87,6429.8,6451.29 2013-04-30,6458.02,6483.08,6412.69,6430.12 2013-04-29,6426.42,6458.02,6419.27,6458.02 2013-04-26,6442.59,6442.59,6399.37,6426.42 2013-04-25,6431.76,6467.11,6411.94,6442.59 2013-04-24,6406.12,6438.93,6396.19,6431.76 2013-04-23,6280.62,6406.14,6278.48,6406.12 2013-04-22,6286.59,6341.98,6258.98,6280.62 2013-04-19,6243.67,6288.7,6243.67,6286.59 2013-04-18,6244.21,6277.79,6225.86,6243.67 2013-04-17,6304.58,6334.44,6225.16,6244.21 2013-04-16,6343.6,6343.6,6297.53,6304.58 2013-04-15,6384.39,6384.42,6300.12,6343.6 2013-04-12,6416.14,6416.14,6368.2,6384.39 2013-04-11,6387.37,6423.56,6377.54,6416.14 2013-04-10,6313.21,6405.2,6313.2,6387.37 2013-04-09,6276.94,6326.54,6276.94,6313.21 2013-04-08,6249.78,6289.59,6249.78,6276.94 2013-04-05,6344.12,6346.82,6214.36,6249.78 2013-04-04,6420.28,6426.37,6341.43,6344.12 2013-04-03,6490.66,6491.84,6416.67,6420.28 2013-04-02,6411.74,6501.78,6408.84,6490.66 2013-03-28,6387.56,6447.86,6381.99,6411.74 2013-03-27,6399.37,6420.9,6344.19,6387.56 2013-03-26,6378.38,6404.52,6369.58,6399.37 2013-03-25,6392.76,6458.53,6366.62,6378.38 2013-03-22,6388.55,6426.45,6374.51,6392.76 2013-03-21,6432.7,6435.59,6364.0,6388.55 2013-03-20,6441.32,6475.61,6421.29,6432.7 2013-03-19,6457.92,6474.57,6414.45,6441.32 2013-03-18,6489.65,6489.65,6386.17,6457.92 2013-03-15,6529.41,6533.78,6470.1,6489.65 2013-03-14,6481.5,6532.57,6478.54,6529.41 2013-03-13,6510.62,6510.62,6437.61,6481.5 2013-03-12,6503.63,6533.99,6491.75,6510.62 2013-03-11,6483.58,6505.3,6473.56,6503.63 2013-03-08,6439.16,6489.54,6439.16,6483.58 2013-03-07,6427.64,6459.68,6427.31,6439.16 2013-03-06,6431.95,6460.96,6418.72,6427.64 2013-03-05,6345.63,6437.34,6344.78,6431.95 2013-03-04,6378.6,6379.29,6333.17,6345.63 2013-03-01,6360.81,6391.67,6308.56,6378.6 2013-02-28,6325.88,6372.0,6325.88,6360.81 2013-02-27,6270.44,6335.9,6269.26,6325.88 2013-02-26,6355.37,6355.37,6258.62,6270.44 2013-02-25,6335.7,6390.09,6323.98,6355.37 2013-02-22,6291.54,6347.25,6291.49,6335.7 2013-02-21,6395.37,6395.37,6277.96,6291.54 2013-02-20,6379.07,6412.44,6368.2,6395.37 2013-02-19,6318.19,6385.14,6304.4,6379.07 2013-02-18,6328.26,6330.17,6306.83,6318.19 2013-02-15,6327.36,6352.2,6309.78,6328.26 2013-02-14,6359.11,6364.72,6302.0,6327.36 2013-02-13,6338.38,6384.7,6311.59,6359.11 2013-02-12,6277.06,6338.38,6259.82,6338.38 2013-02-11,6263.93,6294.81,6252.31,6277.06 2013-02-08,6228.42,6278.07,6228.42,6263.93 2013-02-07,6295.34,6313.0,6216.72,6228.42 2013-02-06,6282.76,6321.45,6265.55,6295.34 2013-02-05,6246.84,6296.47,6244.07,6282.76 2013-02-04,6347.24,6347.26,6236.66,6246.84 2013-02-01,6276.88,6353.95,6275.5,6347.24 2013-01-31,6323.11,6451.01,6142.02,6276.88 2013-01-30,6339.19,6354.46,6316.29,6323.11 2013-01-29,6294.41,6346.37,6285.77,6339.19 2013-01-28,6284.45,6311.26,6277.04,6294.41 2013-01-25,6264.91,6284.45,6247.33,6284.45 2013-01-24,6197.64,6271.4,6186.48,6264.91 2013-01-23,6179.17,6200.49,6178.47,6197.64 2013-01-22,6180.98,6188.58,6149.18,6179.17 2013-01-21,6154.41,6182.23,6154.41,6180.98 2013-01-18,6132.36,6172.49,6131.93,6154.41 2013-01-17,6103.98,6135.89,6087.49,6132.36 2013-01-16,6117.31,6117.33,6076.12,6103.98 2013-01-15,6107.86,6117.31,6086.21,6117.31 2013-01-14,6121.58,6134.17,6104.9,6107.86 2013-01-11,6101.51,6121.58,6095.07,6121.58 2013-01-10,6098.65,6118.3,6090.61,6101.51 2013-01-09,6053.63,6112.27,6053.63,6098.65 2013-01-08,6064.58,6088.18,6053.63,6053.63 2013-01-07,6089.84,6091.5,6060.75,6064.58 2013-01-04,6047.34,6089.84,6038.02,6089.84 2013-01-03,6027.37,6051.3,6016.8,6047.34 2013-01-02,5897.81,6044.57,5897.81,6027.37 2012-12-31,5925.37,5925.43,5873.43,5897.81 2012-12-28,5954.3,5975.97,5915.32,5925.37 2012-12-27,5954.18,5997.04,5942.44,5954.3 2012-12-24,5939.99,5957.69,5937.1,5954.18 2012-12-21,5958.34,5958.34,5894.1,5939.99 2012-12-20,5961.59,5970.87,5950.07,5958.34 2012-12-19,5935.9,5977.82,5935.9,5961.59 2012-12-18,5912.15,5946.41,5911.1,5935.9 2012-12-17,5921.76,5923.92,5881.01,5912.15 2012-12-14,5929.61,5944.5,5915.34,5921.76 2012-12-13,5945.85,5947.85,5918.57,5929.61 2012-12-12,5924.97,5948.5,5915.91,5945.85 2012-12-11,5921.63,5937.93,5908.32,5924.97 2012-12-10,5914.4,5923.97,5891.33,5921.63 2012-12-07,5901.42,5923.11,5889.92,5914.4 2012-12-06,5892.08,5923.91,5889.65,5901.42 2012-12-05,5869.04,5902.66,5869.04,5892.08 2012-12-04,5871.24,5885.36,5852.88,5869.04 2012-12-03,5866.82,5902.0,5859.56,5871.24 2012-11-30,5870.3,5904.39,5860.27,5866.82 2012-11-29,5803.28,5883.98,5803.28,5870.3 2012-11-28,5799.71,5808.34,5755.23,5803.28 2012-11-27,5786.72,5823.18,5786.72,5799.71 2012-11-26,5819.14,5819.14,5773.86,5786.72 2012-11-23,5791.03,5830.53,5781.43,5819.14 2012-11-22,5752.03,5796.47,5752.03,5791.03 2012-11-21,5748.1,5760.12,5727.86,5752.03 2012-11-20,5737.66,5751.82,5706.7,5748.1 2012-11-19,5605.59,5739.74,5605.59,5737.66 2012-11-16,5677.75,5682.68,5605.59,5605.59 2012-11-15,5722.01,5722.01,5674.26,5677.75 2012-11-14,5786.25,5786.25,5719.61,5722.01 2012-11-13,5767.27,5786.25,5710.99,5786.25 2012-11-12,5769.68,5795.25,5762.01,5767.27 2012-11-09,5776.05,5786.43,5715.23,5769.68 2012-11-08,5791.63,5824.36,5770.7,5776.05 2012-11-07,5884.9,5921.78,5789.43,5791.63 2012-11-06,5839.06,5885.16,5839.06,5884.9 2012-11-05,5868.55,5868.55,5825.55,5839.06 2012-11-02,5861.92,5890.11,5844.3,5868.55 2012-11-01,5782.7,5866.76,5777.96,5861.92 2012-10-31,5849.9,5866.67,5782.7,5782.7 2012-10-30,5795.1,5852.17,5794.92,5849.9 2012-10-29,5806.71,5812.67,5763.51,5795.1 2012-10-26,5805.05,5817.94,5753.31,5806.71 2012-10-25,5804.78,5840.57,5802.22,5805.05 2012-10-24,5797.91,5823.24,5776.64,5804.78 2012-10-23,5882.91,5893.43,5788.96,5797.91 2012-10-22,5896.15,5911.03,5869.88,5882.91 2012-10-19,5917.05,5919.73,5892.23,5896.15 2012-10-18,5910.91,5928.27,5896.49,5917.05 2012-10-17,5870.54,5915.59,5868.68,5910.91 2012-10-16,5805.61,5878.09,5805.61,5870.54 2012-10-15,5793.32,5827.87,5786.03,5805.61 2012-10-12,5829.75,5829.75,5793.32,5793.32 2012-10-11,5776.71,5846.3,5766.69,5829.75 2012-10-10,5810.25,5810.52,5776.71,5776.71 2012-10-09,5841.74,5856.42,5795.18,5810.25 2012-10-08,5871.02,5871.02,5818.76,5841.74 2012-10-05,5827.78,5885.57,5827.61,5871.02 2012-10-04,5825.81,5854.16,5803.22,5827.78 2012-10-03,5809.45,5832.48,5785.0,5825.81 2012-10-02,5820.45,5840.36,5781.42,5809.45 2012-10-01,5742.07,5843.54,5738.59,5820.45 2012-09-28,5779.42,5807.82,5740.52,5742.07 2012-09-27,5768.09,5804.09,5762.98,5779.42 2012-09-26,5859.71,5859.71,5751.35,5768.09 2012-09-25,5838.84,5869.17,5828.34,5859.71 2012-09-24,5852.62,5852.62,5806.09,5838.84 2012-09-21,5854.64,5887.57,5838.86,5852.62 2012-09-20,5888.48,5888.48,5824.36,5854.64 2012-09-19,5868.16,5894.39,5861.01,5888.48 2012-09-18,5893.52,5893.52,5837.52,5868.16 2012-09-17,5915.55,5915.68,5883.22,5893.52 2012-09-14,5819.92,5932.62,5819.92,5915.55 2012-09-13,5782.08,5826.57,5770.26,5819.92 2012-09-12,5792.19,5821.24,5757.58,5782.08 2012-09-11,5793.2,5796.56,5764.22,5792.19 2012-09-10,5794.8,5806.79,5777.07,5793.2 2012-09-07,5777.34,5807.57,5772.87,5794.8 2012-09-06,5657.86,5785.98,5657.86,5777.34 2012-09-05,5672.01,5675.91,5634.88,5657.86 2012-09-04,5758.41,5758.41,5658.34,5672.01 2012-09-03,5711.48,5758.41,5701.06,5758.41 2012-08-31,5719.45,5763.77,5707.99,5711.48 2012-08-30,5743.53,5743.53,5705.65,5719.45 2012-08-29,5775.71,5775.76,5739.23,5743.53 2012-08-28,5776.69,5779.49,5749.75,5775.71 2012-08-24,5776.6,5791.39,5739.41,5776.6 2012-08-23,5774.2,5809.26,5764.02,5776.6 2012-08-22,5857.52,5857.52,5771.22,5774.2 2012-08-21,5824.37,5872.59,5824.37,5857.52 2012-08-20,5852.42,5857.5,5802.91,5824.37 2012-08-17,5834.51,5854.72,5834.39,5852.42 2012-08-16,5833.04,5846.7,5811.31,5834.51 2012-08-15,5864.78,5864.78,5822.25,5833.04 2012-08-14,5831.88,5876.22,5831.88,5864.78 2012-08-13,5847.11,5852.79,5813.63,5831.88 2012-08-10,5851.51,5858.56,5827.71,5847.11 2012-08-09,5845.92,5860.16,5828.44,5851.51 2012-08-08,5841.24,5845.92,5801.08,5845.92 2012-08-07,5808.77,5841.24,5785.01,5841.24 2012-08-06,5787.28,5837.61,5767.1,5808.77 2012-08-03,5662.3,5794.01,5662.3,5787.28 2012-08-02,5712.82,5765.81,5657.25,5662.3 2012-08-01,5635.28,5712.82,5632.97,5712.82 2012-07-31,5693.63,5695.54,5635.28,5635.28 2012-07-30,5627.21,5706.47,5625.67,5693.63 2012-07-27,5573.16,5631.0,5550.9,5627.21 2012-07-26,5498.32,5594.51,5478.04,5573.16 2012-07-25,5499.23,5526.09,5478.02,5498.32 2012-07-24,5533.87,5556.63,5486.99,5499.23 2012-07-23,5651.77,5651.77,5510.92,5533.87 2012-07-20,5714.19,5714.19,5644.93,5651.77 2012-07-19,5685.77,5718.61,5685.77,5714.19 2012-07-18,5629.09,5688.29,5624.54,5685.77 2012-07-17,5662.43,5676.47,5621.19,5629.09 2012-07-16,5666.13,5670.6,5640.88,5662.43 2012-07-13,5608.25,5675.62,5608.25,5666.13 2012-07-12,5664.48,5664.48,5588.84,5608.25 2012-07-11,5664.07,5674.65,5625.6,5664.48 2012-07-10,5627.33,5688.66,5622.29,5664.07 2012-07-09,5662.63,5669.75,5610.71,5627.33 2012-07-06,5692.63,5695.06,5647.47,5662.63 2012-07-05,5684.47,5727.45,5662.48,5692.63 2012-07-04,5687.73,5699.85,5669.73,5684.47 2012-07-03,5640.64,5689.0,5636.05,5687.73 2012-07-02,5590.14,5640.64,5582.25,5640.64 2012-06-29,5493.06,5619.65,5493.06,5571.15 2012-06-28,5523.92,5533.75,5436.5,5493.06 2012-06-27,5446.96,5525.14,5446.96,5523.92 2012-06-26,5450.65,5476.5,5436.27,5446.96 2012-06-25,5513.69,5513.69,5435.46,5450.65 2012-06-22,5566.36,5566.36,5499.97,5513.69 2012-06-21,5622.29,5622.29,5564.79,5566.36 2012-06-20,5586.31,5623.85,5566.0,5622.29 2012-06-19,5491.09,5603.14,5491.03,5586.31 2012-06-18,5478.81,5555.32,5461.08,5491.09 2012-06-15,5467.05,5522.87,5465.09,5478.81 2012-06-14,5483.81,5483.81,5424.4,5467.05 2012-06-13,5473.74,5507.65,5436.67,5483.81 2012-06-12,5432.37,5478.63,5414.64,5473.74 2012-06-11,5435.08,5536.27,5419.56,5432.37 2012-06-08,5447.79,5447.79,5381.83,5435.08 2012-06-07,5384.11,5494.54,5384.11,5447.79 2012-06-06,5260.19,5388.03,5260.19,5384.11 2012-06-01,5320.86,5354.45,5229.76,5260.19 2012-05-31,5297.28,5352.05,5272.66,5306.95 2012-05-30,5391.14,5391.14,5284.42,5297.28 2012-05-29,5356.34,5404.66,5342.46,5391.14 2012-05-28,5351.53,5413.83,5341.34,5356.34 2012-05-25,5350.05,5385.17,5312.2,5351.53 2012-05-24,5266.41,5371.75,5266.41,5350.05 2012-05-23,5403.28,5403.67,5262.9,5266.41 2012-05-22,5304.48,5408.65,5304.48,5403.28 2012-05-21,5267.62,5324.36,5253.92,5304.48 2012-05-18,5338.38,5338.38,5256.61,5267.62 2012-05-17,5405.25,5413.32,5309.75,5338.38 2012-05-16,5437.62,5448.38,5354.0,5405.25 2012-05-15,5465.52,5507.65,5411.82,5437.62 2012-05-14,5575.52,5575.65,5436.69,5465.52 2012-05-11,5543.95,5585.5,5499.27,5575.52 2012-05-10,5530.05,5566.14,5490.54,5543.95 2012-05-09,5554.55,5571.71,5464.41,5530.05 2012-05-08,5655.06,5668.09,5550.09,5554.55 2012-05-04,5766.55,5766.55,5639.79,5655.06 2012-05-03,5758.11,5800.81,5745.23,5766.55 2012-05-02,5812.23,5819.93,5736.64,5758.11 2012-05-01,5737.78,5819.0,5732.16,5812.23 2012-04-30,5777.11,5792.97,5728.87,5737.78 2012-04-27,5748.72,5788.99,5707.95,5777.11 2012-04-26,5718.89,5761.14,5691.72,5748.72 2012-04-25,5709.49,5745.0,5703.21,5718.89 2012-04-24,5665.57,5714.17,5658.49,5709.49 2012-04-23,5772.15,5772.15,5637.73,5665.57 2012-04-20,5744.55,5775.67,5724.2,5772.15 2012-04-19,5745.29,5792.07,5738.11,5744.55 2012-04-18,5766.95,5783.88,5730.91,5745.29 2012-04-17,5666.28,5773.73,5651.53,5766.95 2012-04-16,5651.79,5707.96,5641.07,5666.28 2012-04-13,5710.46,5710.82,5643.51,5651.79 2012-04-12,5634.74,5727.87,5602.56,5710.46 2012-04-11,5595.55,5655.87,5576.37,5634.74 2012-04-10,5723.67,5723.67,5595.55,5595.55 2012-04-05,5703.77,5731.67,5663.32,5723.67 2012-04-04,5838.34,5838.34,5685.65,5703.77 2012-04-03,5874.89,5890.16,5838.34,5838.34 2012-04-02,5768.45,5874.89,5748.63,5874.89 2012-03-30,5742.03,5782.71,5742.03,5768.45 2012-03-29,5808.99,5812.17,5726.5,5742.03 2012-03-28,5869.55,5877.94,5808.99,5808.99 2012-03-27,5902.7,5941.9,5863.83,5869.55 2012-03-26,5854.89,5913.06,5854.47,5902.7 2012-03-23,5845.65,5875.73,5801.72,5854.89 2012-03-22,5891.95,5891.95,5825.91,5845.65 2012-03-21,5891.41,5921.68,5880.79,5891.95 2012-03-20,5961.11,5961.11,5876.42,5891.41 2012-03-19,5965.58,5968.89,5928.45,5961.11 2012-03-16,5940.72,5974.05,5940.72,5965.58 2012-03-15,5945.43,5958.17,5919.21,5940.72 2012-03-14,5955.91,5989.07,5945.43,5945.43 2012-03-13,5892.75,5957.94,5892.75,5955.91 2012-03-12,5887.49,5894.07,5860.42,5892.75 2012-03-09,5859.73,5897.6,5842.94,5887.49 2012-03-08,5791.41,5874.34,5791.41,5859.73 2012-03-07,5765.8,5801.12,5755.69,5791.41 2012-03-06,5874.82,5874.82,5758.42,5765.8 2012-03-05,5911.13,5911.13,5865.38,5874.82 2012-03-02,5931.25,5939.97,5908.48,5911.13 2012-03-01,5871.51,5936.07,5858.85,5931.25 2012-02-29,5927.91,5944.75,5871.51,5871.51 2012-02-28,5915.55,5937.02,5899.99,5927.91 2012-02-27,5935.13,5935.13,5865.85,5915.55 2012-02-24,5937.89,5964.02,5925.47,5935.13 2012-02-23,5916.55,5952.47,5900.5,5937.89 2012-02-22,5928.2,5937.96,5894.6,5916.55 2012-02-21,5945.25,5948.84,5916.58,5928.2 2012-02-20,5905.07,5956.33,5905.07,5945.25 2012-02-17,5885.38,5923.62,5885.38,5905.07 2012-02-16,5892.16,5892.36,5829.38,5885.38 2012-02-15,5899.87,5923.78,5880.62,5892.16 2012-02-14,5905.7,5920.61,5877.21,5899.87 2012-02-13,5852.39,5920.09,5852.39,5905.7 2012-02-10,5895.47,5895.47,5839.85,5852.39 2012-02-09,5875.93,5916.31,5870.55,5895.47 2012-02-08,5890.26,5916.2,5871.33,5875.93 2012-02-07,5892.2,5906.65,5850.49,5890.26 2012-02-06,5901.07,5901.07,5863.55,5892.2 2012-02-03,5796.07,5901.07,5784.23,5901.07 2012-02-02,5790.72,5809.82,5765.72,5796.07 2012-02-01,5681.61,5790.72,5680.67,5790.72 2012-01-31,5671.09,5730.32,5671.09,5681.61 2012-01-30,5733.45,5733.45,5651.56,5671.09 2012-01-27,5795.2,5795.2,5728.96,5733.45 2012-01-26,5723.0,5806.24,5722.83,5795.2 2012-01-25,5751.9,5777.69,5694.05,5723.0 2012-01-24,5782.56,5782.56,5719.86,5751.9 2012-01-23,5728.55,5789.85,5723.09,5782.56 2012-01-20,5741.15,5749.77,5721.61,5728.55 2012-01-19,5702.37,5743.93,5693.16,5741.15 2012-01-18,5693.95,5709.87,5647.92,5702.37 2012-01-17,5657.44,5724.41,5657.44,5693.95 2012-01-16,5636.64,5662.88,5609.87,5657.44 2012-01-13,5662.42,5709.22,5583.45,5636.64 2012-01-12,5670.82,5699.57,5640.3,5662.42 2012-01-11,5696.7,5700.75,5644.75,5670.82 2012-01-10,5612.26,5711.89,5612.26,5696.7 2012-01-09,5649.68,5673.82,5604.62,5612.26 2012-01-06,5624.26,5682.78,5623.36,5649.68 2012-01-05,5668.45,5689.33,5614.38,5624.26 2012-01-04,5699.91,5719.83,5646.36,5668.45 2012-01-03,5572.28,5699.91,5572.28,5699.91 2011-12-30,5572.28,5572.28,5572.28,5572.28 2011-12-29,5507.4,5566.77,5496.87,5566.77 2011-12-28,5512.7,5567.86,5490.96,5507.4 2011-12-23,5512.7,5512.7,5512.7,5512.7 2011-12-22,5389.74,5469.03,5389.74,5456.97 2011-12-21,5419.6,5479.19,5371.65,5389.74 2011-12-20,5364.99,5426.28,5328.67,5419.6 2011-12-19,5387.34,5410.06,5343.08,5364.99 2011-12-16,5400.85,5452.65,5387.34,5387.34 2011-12-15,5366.8,5434.02,5366.8,5400.85 2011-12-14,5490.15,5490.15,5366.8,5366.8 2011-12-13,5427.86,5525.96,5413.7,5490.15 2011-12-12,5529.21,5529.21,5427.86,5427.86 2011-12-09,5483.77,5540.52,5440.86,5529.21 2011-12-08,5546.91,5605.27,5483.77,5483.77 2011-12-07,5568.72,5631.88,5497.96,5546.91 2011-12-06,5567.96,5592.95,5521.91,5568.72 2011-12-05,5552.29,5602.8,5545.93,5567.96 2011-12-02,5489.34,5595.54,5489.07,5552.29 2011-12-01,5505.42,5553.89,5486.87,5489.34 2011-11-30,5337.0,5538.96,5274.95,5505.42 2011-11-29,5312.76,5344.18,5272.44,5337.0 2011-11-28,5164.65,5327.76,5164.65,5312.76 2011-11-25,5127.57,5200.31,5075.22,5164.65 2011-11-24,5139.78,5184.26,5098.99,5127.57 2011-11-23,5206.82,5206.82,5139.78,5139.78 2011-11-22,5222.6,5281.95,5206.82,5206.82 2011-11-21,5362.94,5362.94,5221.69,5222.6 2011-11-18,5423.14,5423.14,5347.89,5362.94 2011-11-17,5509.02,5509.02,5366.12,5423.14 2011-11-16,5517.44,5562.91,5450.24,5509.02 2011-11-15,5519.04,5551.38,5428.6,5517.44 2011-11-14,5545.38,5575.19,5489.25,5519.04 2011-11-11,5444.82,5548.75,5439.81,5545.38 2011-11-10,5460.38,5497.2,5360.19,5444.82 2011-11-09,5567.34,5615.84,5426.25,5460.38 2011-11-08,5510.82,5616.0,5509.57,5567.34 2011-11-07,5527.16,5557.76,5432.16,5510.82 2011-11-04,5545.64,5599.46,5495.38,5527.16 2011-11-03,5484.1,5564.54,5402.63,5545.64 2011-11-02,5421.57,5493.29,5383.37,5484.1 2011-11-01,5544.22,5544.22,5338.36,5421.57 2011-10-31,5702.24,5702.24,5544.22,5544.22 2011-10-28,5713.82,5746.88,5684.95,5702.24 2011-10-27,5553.24,5747.33,5553.24,5713.82 2011-10-26,5525.54,5576.63,5498.51,5553.24 2011-10-25,5548.06,5574.13,5465.52,5525.54 2011-10-24,5488.65,5552.79,5487.21,5548.06 2011-10-21,5384.68,5500.54,5384.68,5488.65 2011-10-20,5450.49,5450.49,5363.16,5384.68 2011-10-19,5410.35,5483.79,5410.35,5450.49 2011-10-18,5436.7,5436.7,5348.64,5410.35 2011-10-17,5466.36,5543.72,5405.2,5436.7 2011-10-14,5403.38,5501.39,5395.57,5466.36 2011-10-13,5441.8,5456.09,5368.37,5403.38 2011-10-12,5395.7,5458.02,5348.16,5441.8 2011-10-11,5399.0,5399.0,5330.42,5395.7 2011-10-10,5303.4,5413.43,5303.4,5399.0 2011-10-07,5291.26,5370.89,5261.43,5303.4 2011-10-06,5102.17,5291.26,5102.17,5291.26 2011-10-05,4944.44,5121.4,4944.44,5102.17 2011-10-04,5075.5,5075.5,4868.6,4944.44 2011-10-03,5128.48,5128.48,4983.28,5075.5 2011-09-30,5196.84,5197.33,5068.63,5128.48 2011-09-29,5217.63,5250.18,5160.77,5196.84 2011-09-28,5294.05,5314.29,5191.36,5217.63 2011-09-27,5089.37,5294.05,5089.37,5294.05 2011-09-26,5066.81,5148.81,4974.03,5089.37 2011-09-23,5041.61,5105.38,4928.14,5066.81 2011-09-22,5288.41,5288.41,5013.55,5041.61 2011-09-21,5363.71,5366.09,5268.82,5288.41 2011-09-20,5259.56,5377.39,5219.09,5363.71 2011-09-19,5368.41,5368.41,5231.62,5259.56 2011-09-16,5337.54,5406.1,5337.54,5368.41 2011-09-15,5227.02,5366.74,5227.02,5337.54 2011-09-14,5174.25,5270.42,5146.39,5227.02 2011-09-13,5129.62,5203.07,5069.52,5174.25 2011-09-12,5214.65,5214.65,5059.22,5129.62 2011-09-09,5340.38,5352.03,5202.24,5214.65 2011-09-08,5318.59,5369.82,5269.7,5340.38 2011-09-07,5156.84,5322.21,5156.84,5318.59 2011-09-06,5102.58,5190.27,5086.79,5156.84 2011-09-05,5292.03,5292.03,5097.71,5102.58 2011-09-02,5418.65,5418.65,5258.5,5292.03 2011-09-01,5394.53,5449.67,5346.7,5418.65 2011-08-31,5268.66,5411.6,5258.62,5394.53 2011-08-30,5129.92,5283.6,5129.92,5268.66 2011-08-26,5129.92,5129.92,5129.92,5129.92 2011-08-25,5205.85,5254.17,5102.06,5131.1 2011-08-24,5129.42,5250.59,5098.14,5205.85 2011-08-23,5095.3,5193.17,5076.74,5129.42 2011-08-22,5040.76,5182.98,4993.34,5095.3 2011-08-19,5092.23,5107.91,4929.55,5040.76 2011-08-18,5331.6,5331.6,5041.59,5092.23 2011-08-17,5357.63,5371.08,5279.93,5331.6 2011-08-16,5350.58,5362.15,5265.83,5357.63 2011-08-15,5320.03,5377.23,5319.38,5350.58 2011-08-12,5162.83,5320.03,5099.31,5320.03 2011-08-11,5007.16,5172.66,4943.01,5162.83 2011-08-10,5164.92,5262.72,4990.79,5007.16 2011-08-09,5068.95,5175.6,4791.01,5164.92 2011-08-08,5246.99,5295.78,5062.42,5068.95 2011-08-05,5393.14,5393.14,5202.62,5246.99 2011-08-04,5584.51,5644.05,5393.14,5393.14 2011-08-03,5718.39,5718.39,5557.74,5584.51 2011-08-02,5774.43,5778.92,5705.34,5718.39 2011-08-01,5815.19,5913.46,5767.06,5774.43 2011-07-29,5873.21,5873.21,5772.43,5815.19 2011-07-28,5856.58,5882.56,5801.58,5873.21 2011-07-27,5929.73,5932.0,5841.03,5856.58 2011-07-26,5925.26,5951.34,5895.58,5929.73 2011-07-25,5935.02,5938.55,5892.64,5925.26 2011-07-22,5899.89,5966.84,5899.89,5935.02 2011-07-21,5853.82,5934.28,5797.48,5899.89 2011-07-20,5789.99,5856.36,5789.99,5853.82 2011-07-19,5752.81,5801.99,5752.81,5789.99 2011-07-18,5843.66,5843.66,5752.81,5752.81 2011-07-15,5846.95,5863.57,5805.99,5843.66 2011-07-14,5906.43,5906.43,5841.17,5846.95 2011-07-13,5868.96,5911.0,5850.96,5906.43 2011-07-12,5929.16,5929.16,5793.04,5868.96 2011-07-11,5990.58,5998.58,5900.75,5929.16 2011-07-08,6054.55,6084.08,5981.73,5990.58 2011-07-07,6002.92,6071.67,6002.92,6054.55 2011-07-06,6024.03,6026.48,5973.82,6002.92 2011-07-05,6017.54,6036.31,6011.07,6024.03 2011-07-04,5989.76,6030.82,5985.69,6017.54 2011-07-01,5945.71,5999.04,5936.96,5989.76 2011-06-30,5855.95,5945.71,5855.95,5945.71 2011-06-29,5766.88,5860.92,5766.88,5855.95 2011-06-28,5722.34,5795.1,5722.34,5766.88 2011-06-27,5697.72,5728.43,5679.6,5722.34 2011-06-24,5674.38,5768.54,5674.38,5697.72 2011-06-23,5772.99,5772.99,5663.3,5674.38 2011-06-22,5775.31,5789.12,5741.82,5772.99 2011-06-21,5693.39,5778.07,5692.97,5775.31 2011-06-20,5714.94,5714.94,5647.23,5693.39 2011-06-17,5698.81,5733.2,5644.98,5714.94 2011-06-16,5742.55,5742.55,5644.38,5698.81 2011-06-15,5803.13,5803.35,5742.55,5742.55 2011-06-14,5773.46,5822.6,5773.46,5803.13 2011-06-13,5765.8,5793.84,5763.42,5773.46 2011-06-10,5856.34,5866.95,5758.33,5765.8 2011-06-09,5808.89,5861.17,5795.0,5856.34 2011-06-08,5864.65,5864.65,5791.8,5808.89 2011-06-07,5863.16,5890.58,5849.23,5864.65 2011-06-06,5855.01,5881.06,5827.51,5863.16 2011-06-03,5847.92,5868.19,5802.67,5855.01 2011-06-02,5928.61,5928.61,5847.92,5847.92 2011-06-01,5989.99,5995.22,5911.68,5928.61 2011-05-31,5938.87,6009.98,5938.87,5989.99 2011-05-27,5938.87,5938.87,5938.87,5938.87 2011-05-26,5870.14,5910.77,5866.67,5880.99 2011-05-25,5858.41,5881.18,5810.46,5870.14 2011-05-24,5835.89,5884.66,5835.89,5858.41 2011-05-23,5948.49,5948.49,5833.44,5835.89 2011-05-20,5955.99,6017.56,5927.74,5948.49 2011-05-19,5923.49,6003.92,5923.49,5955.99 2011-05-18,5861.0,5934.51,5860.65,5923.49 2011-05-17,5923.69,5942.81,5861.0,5861.0 2011-05-16,5925.87,5936.19,5862.16,5923.69 2011-05-13,5944.96,6001.33,5919.91,5925.87 2011-05-12,5976.0,5976.44,5882.39,5944.96 2011-05-11,6018.89,6040.24,5965.26,5976.0 2011-05-10,5942.69,6023.11,5940.06,6018.89 2011-05-09,5976.77,5999.9,5922.23,5942.69 2011-05-06,5919.98,5984.92,5871.57,5976.77 2011-05-05,5984.07,6009.1,5912.61,5919.98 2011-05-04,6082.88,6083.84,5972.83,5984.07 2011-05-03,6069.9,6103.73,6050.71,6082.88 2011-04-28,6069.9,6069.9,6069.9,6069.9 2011-04-27,6069.36,6089.4,6045.87,6068.16 2011-04-26,6018.3,6070.59,6006.95,6069.36 2011-04-21,6018.3,6018.3,6018.3,6018.3 2011-04-20,5896.87,6033.79,5896.87,6022.26 2011-04-19,5870.08,5922.21,5870.08,5896.87 2011-04-18,5996.01,5997.46,5858.32,5870.08 2011-04-15,5963.8,5996.76,5963.55,5996.01 2011-04-14,6010.44,6010.48,5943.75,5963.8 2011-04-13,5964.47,6043.36,5964.47,6010.44 2011-04-12,6053.44,6053.63,5958.28,5964.47 2011-04-11,6055.75,6070.78,6044.52,6053.44 2011-04-08,6007.37,6066.39,6007.37,6055.75 2011-04-07,6041.13,6053.12,6007.37,6007.37 2011-04-06,6007.06,6056.37,6007.06,6041.13 2011-04-05,6016.98,6026.3,5989.05,6007.06 2011-04-04,6009.92,6035.12,5987.7,6016.98 2011-04-01,5908.76,6014.77,5908.76,6009.92 2011-03-31,5948.3,5972.8,5908.76,5908.76 2011-03-30,5932.17,5970.98,5932.17,5948.3 2011-03-29,5904.49,5932.73,5879.9,5932.17 2011-03-28,5900.76,5922.99,5900.6,5904.49 2011-03-25,5880.87,5918.73,5878.22,5900.76 2011-03-24,5795.88,5888.7,5780.41,5880.87 2011-03-23,5762.71,5802.44,5731.4,5795.88 2011-03-22,5786.09,5813.81,5742.62,5762.71 2011-03-21,5718.13,5798.78,5718.13,5786.09 2011-03-18,5696.11,5758.17,5696.11,5718.13 2011-03-17,5598.23,5707.68,5598.23,5696.11 2011-03-16,5695.28,5720.92,5598.23,5598.23 2011-03-15,5775.24,5775.24,5591.59,5695.28 2011-03-14,5828.67,5842.04,5769.04,5775.24 2011-03-11,5845.29,5845.29,5796.44,5828.67 2011-03-10,5937.3,5937.3,5833.23,5845.29 2011-03-09,5974.76,5979.33,5922.66,5937.3 2011-03-08,5973.78,5999.93,5911.0,5974.76 2011-03-07,5990.39,6043.12,5967.68,5973.78 2011-03-04,6005.09,6052.08,5983.21,5990.39 2011-03-03,5914.89,6017.08,5914.89,6005.09 2011-03-02,5935.76,5941.82,5865.92,5914.89 2011-03-01,5994.01,6040.43,5927.43,5935.76 2011-02-28,6001.2,6022.33,5963.58,5994.01 2011-02-25,5919.98,6011.5,5919.98,6001.2 2011-02-24,5923.53,5936.68,5860.95,5919.98 2011-02-23,5996.76,5996.76,5915.52,5923.53 2011-02-22,6014.8,6028.56,5926.55,5996.76 2011-02-21,6082.99,6105.77,6013.14,6014.8 2011-02-18,6087.38,6096.78,6048.83,6082.99 2011-02-17,6085.27,6101.42,6066.71,6087.38 2011-02-16,6037.08,6095.76,6033.51,6085.27 2011-02-15,6060.09,6072.07,6023.77,6037.08 2011-02-14,6062.9,6091.48,6042.1,6060.09 2011-02-11,6020.01,6071.4,5973.44,6062.9 2011-02-10,6052.29,6052.29,5986.48,6020.01 2011-02-09,6091.33,6091.33,6049.5,6052.29 2011-02-08,6051.03,6091.33,6032.88,6091.33 2011-02-07,5997.38,6054.09,5996.61,6051.03 2011-02-04,5983.34,6023.41,5983.33,5997.38 2011-02-03,6000.07,6000.29,5951.82,5983.34 2011-02-02,5957.82,6020.46,5957.82,6000.07 2011-02-01,5862.94,5963.72,5862.94,5957.82 2011-01-31,5881.37,5881.72,5815.44,5862.94 2011-01-28,5965.08,5965.84,5877.88,5881.37 2011-01-27,5969.21,5997.33,5950.72,5965.08 2011-01-26,5917.71,6003.28,5917.71,5969.21 2011-01-25,5943.85,5964.69,5904.33,5917.71 2011-01-24,5896.25,5960.55,5887.6,5943.85 2011-01-21,5867.91,5939.33,5867.91,5896.25 2011-01-20,5976.7,5977.5,5867.29,5867.91 2011-01-19,6056.43,6077.06,5974.79,5976.7 2011-01-18,5985.7,6065.71,5985.48,6056.43 2011-01-17,6002.07,6013.4,5975.64,5985.7 2011-01-14,6023.88,6031.74,5948.47,6002.07 2011-01-13,6050.72,6055.47,6005.51,6023.88 2011-01-12,6014.03,6050.72,6013.87,6050.72 2011-01-11,5956.3,6035.89,5956.3,6014.03 2011-01-10,5984.33,5984.33,5939.89,5956.3 2011-01-07,6019.51,6023.7,5973.41,5984.33 2011-01-06,6043.86,6090.49,6004.56,6019.51 2011-01-05,6013.87,6043.86,5964.43,6043.86 2011-01-04,5899.94,6049.45,5899.94,6013.87 2010-12-31,5899.94,5899.94,5899.94,5899.94 2010-12-30,5996.36,6009.84,5969.71,5971.01 2010-12-29,6008.92,6021.46,5976.98,5996.36 2010-12-24,6008.92,6008.92,6008.92,6008.92 2010-12-23,5983.49,6000.55,5982.16,5996.07 2010-12-22,5951.8,5991.9,5936.3,5983.49 2010-12-21,5891.61,5953.94,5891.14,5951.8 2010-12-20,5871.75,5913.83,5865.51,5891.61 2010-12-17,5881.12,5902.53,5857.33,5871.75 2010-12-16,5882.18,5907.1,5862.86,5881.12 2010-12-15,5891.21,5898.04,5858.11,5882.18 2010-12-14,5860.75,5891.21,5847.15,5891.21 2010-12-13,5812.95,5873.71,5812.94,5860.75 2010-12-10,5807.96,5827.59,5794.51,5812.95 2010-12-09,5794.53,5837.96,5794.53,5807.96 2010-12-08,5808.45,5826.59,5774.28,5794.53 2010-12-07,5770.28,5850.4,5769.67,5808.45 2010-12-06,5745.32,5785.7,5728.46,5770.28 2010-12-03,5767.56,5784.26,5720.2,5745.32 2010-12-02,5642.5,5770.94,5642.5,5767.56 2010-12-01,5528.27,5656.22,5528.27,5642.5 2010-11-30,5550.95,5597.0,5519.19,5528.27 2010-11-29,5668.7,5722.7,5550.95,5550.95 2010-11-26,5698.93,5699.02,5599.29,5668.7 2010-11-25,5657.1,5707.92,5654.7,5698.93 2010-11-24,5581.28,5671.87,5573.33,5657.1 2010-11-23,5680.83,5681.06,5581.28,5581.28 2010-11-22,5732.83,5783.14,5668.48,5680.83 2010-11-19,5768.71,5774.07,5684.49,5732.83 2010-11-18,5692.56,5782.98,5692.56,5768.71 2010-11-17,5681.9,5704.39,5659.65,5692.56 2010-11-16,5820.41,5820.43,5680.87,5681.9 2010-11-15,5796.87,5832.88,5755.68,5820.41 2010-11-12,5815.23,5831.81,5711.73,5796.87 2010-11-11,5816.94,5846.45,5792.56,5815.23 2010-11-10,5875.19,5876.97,5796.23,5816.94 2010-11-09,5849.96,5902.11,5847.43,5875.19 2010-11-08,5875.35,5880.99,5841.29,5849.96 2010-11-05,5862.79,5899.37,5834.03,5875.35 2010-11-04,5748.97,5876.03,5748.97,5862.79 2010-11-03,5757.43,5773.73,5730.47,5748.97 2010-11-02,5694.62,5771.63,5690.44,5757.43 2010-11-01,5675.16,5733.01,5667.39,5694.62 2010-10-29,5677.89,5699.23,5647.05,5675.16 2010-10-28,5646.02,5711.82,5645.96,5677.89 2010-10-27,5707.3,5707.3,5630.85,5646.02 2010-10-26,5751.98,5754.2,5677.2,5707.3 2010-10-25,5741.37,5794.31,5741.37,5751.98 2010-10-22,5757.86,5758.01,5724.31,5741.37 2010-10-21,5728.93,5786.73,5698.02,5757.86 2010-10-20,5703.89,5729.96,5680.43,5728.93 2010-10-19,5742.52,5761.93,5690.58,5703.89 2010-10-18,5703.37,5748.81,5670.07,5742.52 2010-10-15,5727.21,5743.92,5665.95,5703.37 2010-10-14,5747.35,5770.92,5712.88,5727.21 2010-10-13,5661.59,5760.49,5661.59,5747.35 2010-10-12,5672.4,5677.02,5597.46,5661.59 2010-10-11,5657.61,5685.95,5655.7,5672.4 2010-10-08,5662.13,5663.74,5606.6,5657.61 2010-10-07,5681.39,5707.33,5650.78,5662.13 2010-10-06,5635.76,5695.51,5635.76,5681.39 2010-10-05,5555.97,5646.08,5550.57,5635.76 2010-10-04,5592.9,5601.22,5550.79,5555.97 2010-10-01,5548.62,5615.14,5547.55,5592.9 2010-09-30,5569.27,5650.33,5539.06,5548.62 2010-09-29,5578.44,5624.5,5544.72,5569.27 2010-09-28,5573.42,5582.05,5506.07,5578.44 2010-09-27,5598.48,5615.78,5569.89,5573.42 2010-09-24,5547.08,5612.54,5516.46,5598.48 2010-09-23,5551.91,5588.79,5471.69,5547.08 2010-09-22,5576.19,5597.55,5516.86,5551.91 2010-09-21,5602.54,5635.72,5576.19,5576.19 2010-09-20,5508.45,5607.31,5508.45,5602.54 2010-09-17,5540.14,5612.89,5508.45,5508.45 2010-09-16,5555.56,5564.46,5533.96,5540.14 2010-09-15,5567.41,5578.69,5535.95,5555.56 2010-09-14,5565.53,5582.46,5541.5,5567.41 2010-09-13,5501.64,5571.39,5501.64,5565.53 2010-09-10,5494.16,5511.52,5475.94,5501.64 2010-09-09,5429.74,5505.66,5412.48,5494.16 2010-09-08,5407.82,5445.62,5361.42,5429.74 2010-09-07,5439.19,5439.21,5381.07,5407.82 2010-09-06,5428.15,5459.4,5428.15,5439.19 2010-09-03,5371.04,5454.01,5371.04,5428.15 2010-09-02,5366.41,5383.72,5346.96,5371.04 2010-09-01,5225.22,5366.41,5225.22,5366.41 2010-08-31,5201.56,5225.22,5129.66,5225.22 2010-08-27,5155.84,5211.58,5121.0,5201.56 2010-08-26,5109.4,5167.76,5109.4,5155.84 2010-08-25,5155.95,5168.46,5070.94,5109.4 2010-08-24,5234.84,5234.84,5109.88,5155.95 2010-08-23,5195.28,5268.43,5186.92,5234.84 2010-08-20,5211.29,5233.02,5160.43,5195.28 2010-08-19,5302.87,5336.35,5205.64,5211.29 2010-08-18,5350.55,5350.55,5296.93,5302.87 2010-08-17,5276.1,5351.45,5276.1,5350.55 2010-08-16,5275.44,5304.64,5228.64,5276.1 2010-08-13,5266.06,5308.84,5225.91,5275.44 2010-08-12,5245.21,5272.5,5210.55,5266.06 2010-08-11,5376.41,5376.41,5245.03,5245.21 2010-08-10,5410.52,5411.56,5348.11,5376.41 2010-08-09,5332.39,5418.58,5332.39,5410.52 2010-08-06,5365.78,5408.06,5307.6,5332.39 2010-08-05,5386.16,5416.76,5356.83,5365.78 2010-08-04,5396.48,5406.83,5318.79,5386.16 2010-08-03,5397.11,5397.26,5353.49,5396.48 2010-08-02,5258.02,5401.69,5258.02,5397.11 2010-07-30,5313.95,5322.67,5245.52,5258.02 2010-07-29,5319.68,5375.23,5313.95,5313.95 2010-07-28,5365.67,5398.1,5314.57,5319.68 2010-07-27,5351.12,5411.45,5351.12,5365.67 2010-07-26,5312.62,5351.92,5301.29,5351.12 2010-07-23,5313.81,5328.51,5272.67,5312.62 2010-07-22,5214.64,5319.48,5180.98,5313.81 2010-07-21,5139.46,5244.88,5139.46,5214.64 2010-07-20,5148.28,5179.99,5090.57,5139.46 2010-07-19,5158.85,5196.77,5111.89,5148.28 2010-07-16,5211.29,5273.58,5153.29,5158.85 2010-07-15,5253.52,5268.41,5187.46,5211.29 2010-07-14,5271.02,5287.28,5205.78,5253.52 2010-07-13,5167.02,5272.3,5167.01,5271.02 2010-07-12,5132.94,5193.22,5128.6,5167.02 2010-07-09,5105.45,5150.64,5098.79,5132.94 2010-07-08,5014.82,5123.53,5014.82,5105.45 2010-07-07,4965.0,5014.82,4891.97,5014.82 2010-07-06,4823.53,4967.65,4823.53,4965.0 2010-07-05,4838.09,4863.35,4821.09,4823.53 2010-07-02,4805.75,4880.88,4805.75,4838.09 2010-07-01,4916.87,4916.87,4790.04,4805.75 2010-06-30,4914.22,4961.9,4898.51,4916.87 2010-06-29,5071.68,5071.68,4899.02,4914.22 2010-06-28,5046.47,5085.65,5024.7,5071.68 2010-06-25,5100.23,5130.5,5031.72,5046.47 2010-06-24,5178.52,5211.8,5090.96,5100.23 2010-06-23,5246.98,5247.85,5165.82,5178.52 2010-06-22,5299.11,5299.11,5210.02,5246.98 2010-06-21,5250.84,5331.46,5250.84,5299.11 2010-06-18,5253.89,5289.14,5239.37,5250.84 2010-06-17,5237.92,5293.76,5233.2,5253.89 2010-06-16,5217.82,5257.26,5209.39,5237.92 2010-06-15,5202.13,5242.08,5149.13,5217.82 2010-06-14,5163.68,5215.22,5163.68,5202.13 2010-06-11,5132.5,5184.37,5116.72,5163.68 2010-06-10,5085.86,5149.69,5030.93,5132.5 2010-06-09,5028.15,5085.86,4998.06,5085.86 2010-06-08,5069.06,5084.13,4984.66,5028.15 2010-06-07,5126.0,5126.0,5040.26,5069.06 2010-06-04,5211.18,5261.71,5102.05,5126.0 2010-06-03,5151.32,5262.5,5151.32,5211.18 2010-06-02,5163.3,5163.3,5072.53,5151.32 2010-06-01,5188.43,5192.08,5063.2,5163.3 2010-05-28,5195.17,5240.27,5186.04,5188.43 2010-05-27,5038.08,5195.37,5038.08,5195.17 2010-05-26,4940.68,5097.91,4940.48,5038.08 2010-05-25,5069.61,5069.61,4898.49,4940.68 2010-05-24,5062.93,5109.44,5021.6,5069.61 2010-05-21,5073.13,5083.96,4957.06,5062.93 2010-05-20,5158.08,5230.18,5000.76,5073.13 2010-05-19,5307.34,5307.34,5158.08,5158.08 2010-05-18,5262.54,5341.41,5262.54,5307.34 2010-05-17,5262.85,5327.46,5231.6,5262.54 2010-05-14,5433.73,5433.73,5245.38,5262.85 2010-05-13,5383.45,5435.99,5381.55,5433.73 2010-05-11,5387.42,5387.42,5257.15,5334.21 2010-05-10,5123.02,5399.75,5123.02,5387.42 2010-05-07,5260.99,5264.48,5045.3,5123.02 2010-05-06,5341.93,5371.54,5251.28,5260.99 2010-05-05,5411.11,5428.77,5304.61,5341.93 2010-05-04,5553.29,5565.99,5398.86,5411.11 2010-04-30,5617.84,5643.87,5540.6,5553.29 2010-04-29,5586.61,5638.82,5579.69,5617.84 2010-04-28,5603.52,5639.98,5533.6,5586.61 2010-04-27,5753.85,5758.64,5603.52,5603.52 2010-04-26,5723.65,5800.66,5723.65,5753.85 2010-04-23,5665.33,5740.88,5665.33,5723.65 2010-04-22,5723.43,5761.36,5652.35,5665.33 2010-04-21,5783.69,5796.99,5721.28,5723.43 2010-04-16,5825.01,5833.73,5726.35,5743.96 2010-04-15,5796.25,5832.34,5778.37,5825.01 2010-04-14,5761.66,5812.84,5761.66,5796.25 2010-04-13,5777.65,5778.92,5741.92,5761.66 2010-04-12,5770.98,5803.71,5755.78,5777.65 2010-04-09,5712.7,5773.6,5712.7,5770.98 2010-04-08,5762.06,5762.06,5684.52,5712.7 2010-04-07,5780.35,5782.25,5753.42,5762.06 2010-04-06,5744.89,5790.4,5744.59,5780.35 2010-04-01,5679.64,5744.89,5679.48,5744.89 2010-03-31,5672.32,5698.47,5646.29,5679.64 2010-03-30,5710.66,5742.75,5662.84,5672.32 2010-03-29,5703.02,5733.11,5684.62,5710.66 2010-03-26,5727.65,5727.65,5695.5,5703.02 2010-03-25,5677.88,5737.1,5673.14,5727.65 2010-03-24,5673.63,5698.87,5636.01,5677.88 2010-03-23,5644.54,5695.94,5644.54,5673.63 2010-03-22,5650.12,5650.12,5583.49,5644.54 2010-03-19,5642.62,5691.22,5633.53,5650.13 2010-03-18,5644.63,5660.99,5619.17,5642.62 2010-03-17,5620.43,5657.77,5620.43,5644.63 2010-03-16,5593.85,5637.7,5593.85,5620.43 2010-03-15,5625.65,5627.02,5588.2,5593.85 2010-03-12,5617.26,5646.68,5612.39,5625.65 2010-03-11,5640.57,5642.87,5594.74,5617.26 2010-03-10,5602.3,5645.25,5585.35,5640.57 2010-03-09,5606.72,5618.43,5563.14,5602.3 2010-03-08,5599.76,5621.15,5579.16,5606.72 2010-03-05,5527.16,5605.38,5527.16,5599.76 2010-03-04,5533.21,5544.23,5501.08,5527.16 2010-03-03,5484.06,5541.81,5465.29,5533.21 2010-03-02,5405.94,5485.01,5403.73,5484.06 2010-03-01,5354.52,5420.83,5354.52,5405.94 2010-02-26,5278.22,5367.75,5278.22,5354.52 2010-02-25,5342.92,5370.44,5259.71,5278.23 2010-02-24,5315.09,5357.87,5298.23,5342.92 2010-02-23,5352.07,5395.48,5302.03,5315.09 2010-02-22,5358.17,5387.03,5348.15,5352.07 2010-02-19,5325.09,5366.14,5281.41,5358.17 2010-02-18,5276.64,5326.42,5261.71,5325.09 2010-02-17,5244.06,5304.54,5244.06,5276.64 2010-02-16,5167.47,5248.08,5167.47,5244.06 2010-02-15,5142.45,5194.29,5142.45,5167.47 2010-02-12,5161.48,5207.73,5117.38,5142.45 2010-02-11,5131.99,5201.82,5114.53,5161.48 2010-02-10,5111.84,5181.21,5105.3,5131.99 2010-02-09,5092.33,5132.93,5084.75,5111.84 2010-02-08,5060.92,5118.12,5033.01,5092.33 2010-02-05,5139.31,5139.31,5033.78,5060.92 2010-02-04,5253.15,5262.22,5123.86,5139.31 2010-02-03,5283.31,5305.41,5237.72,5253.15 2010-02-02,5247.41,5289.05,5208.21,5283.31 2010-02-01,5188.52,5250.07,5163.57,5247.41 2010-01-29,5145.74,5230.16,5145.74,5188.52 2010-01-28,5217.47,5280.36,5145.74,5145.74 2010-01-27,5276.85,5276.85,5192.58,5217.47 2010-01-26,5260.31,5276.85,5215.73,5276.85 2010-01-25,5302.99,5330.61,5252.92,5260.31 2010-01-22,5335.1,5345.6,5253.04,5302.99 2010-01-21,5420.8,5468.38,5331.56,5335.1 2010-01-20,5513.14,5513.14,5404.03,5420.8 2010-01-19,5494.39,5531.93,5431.25,5513.14 2010-01-18,5455.37,5504.0,5454.31,5494.39 2010-01-15,5498.2,5527.02,5450.38,5455.37 2010-01-14,5473.48,5521.9,5473.48,5498.2 2010-01-13,5498.71,5509.67,5450.85,5473.48 2010-01-12,5538.07,5549.61,5459.94,5498.71 2010-01-11,5534.24,5600.48,5527.89,5538.07 2010-01-08,5526.72,5549.25,5494.79,5534.24 2010-01-07,5530.04,5551.66,5499.8,5526.72 2010-01-06,5522.5,5536.48,5497.65,5530.04 2010-01-05,5500.34,5536.38,5480.71,5522.5 2010-01-04,5412.88,5500.34,5410.82,5500.34 2009-12-31,5397.86,5431.9,5390.39,5412.88 2009-12-30,5437.61,5442.82,5390.58,5397.86 2009-12-29,5402.41,5445.17,5402.41,5437.61 2009-12-24,5372.38,5402.41,5367.84,5402.41 2009-12-23,5328.66,5386.6,5328.66,5372.38 2009-12-22,5293.99,5361.9,5293.99,5328.66 2009-12-21,5196.81,5319.98,5196.81,5293.99 2009-12-18,5217.61,5287.62,5196.81,5196.81 2009-12-17,5320.26,5320.26,5217.61,5217.61 2009-12-16,5285.77,5335.32,5283.89,5320.26 2009-12-15,5315.34,5328.11,5250.78,5285.77 2009-12-14,5261.57,5330.96,5261.57,5315.34 2009-12-11,5244.37,5311.98,5244.37,5261.57 2009-12-10,5203.89,5254.52,5194.49,5244.37 2009-12-09,5223.13,5245.94,5175.66,5203.89 2009-12-08,5310.66,5323.36,5206.38,5223.13 2009-12-07,5322.36,5328.78,5250.98,5310.66 2009-12-04,5313.0,5373.94,5272.75,5322.36 2009-12-03,5327.39,5372.39,5311.85,5313.0 2009-12-02,5312.17,5348.45,5283.04,5327.39 2009-12-01,5190.68,5312.17,5190.68,5312.17 2009-11-30,5245.73,5270.36,5190.68,5190.68 2009-11-27,5194.13,5270.99,5103.78,5245.73 2009-11-26,5364.81,5364.81,5189.38,5194.13 2009-11-25,5323.96,5372.22,5323.96,5364.81 2009-11-24,5355.5,5374.89,5309.13,5323.96 2009-11-23,5251.41,5379.48,5251.41,5355.5 2009-11-20,5267.7,5309.39,5224.01,5251.41 2009-11-19,5342.13,5343.82,5254.18,5267.7 2009-11-18,5345.93,5372.1,5331.64,5342.13 2009-11-17,5382.67,5382.67,5337.01,5345.93 2009-11-16,5296.38,5396.96,5296.38,5382.67 2009-11-13,5276.5,5297.44,5251.27,5296.38 2009-11-12,5266.75,5304.94,5254.11,5276.5 2009-11-11,5230.55,5301.14,5230.55,5266.75 2009-11-10,5235.18,5264.32,5221.51,5230.55 2009-11-09,5142.72,5240.02,5142.72,5235.18 2009-11-06,5125.64,5159.04,5077.86,5142.72 2009-11-05,5107.14,5154.63,5036.91,5125.64 2009-11-04,5037.21,5120.82,5037.21,5107.89 2009-11-03,5104.5,5104.5,4985.09,5037.21 2009-11-02,5044.55,5115.7,5022.52,5104.5 2009-10-30,5137.72,5169.85,5024.43,5044.55 2009-10-29,5080.42,5145.58,5042.66,5137.72 2009-10-28,5200.97,5200.97,5074.11,5080.42 2009-10-27,5191.74,5230.57,5181.91,5200.97 2009-10-26,5242.57,5281.12,5166.44,5191.74 2009-10-23,5207.36,5299.57,5207.36,5242.57 2009-10-22,5257.85,5257.85,5166.46,5207.36 2009-10-21,5243.4,5267.98,5174.48,5257.85 2009-10-20,5281.54,5298.54,5243.4,5243.4 2009-10-19,5190.24,5281.54,5190.24,5281.54 2009-10-16,5222.95,5272.92,5176.38,5190.24 2009-10-15,5256.1,5267.9,5218.92,5222.95 2009-10-14,5154.15,5261.26,5154.15,5256.1 2009-10-13,5210.17,5221.65,5154.15,5154.15 2009-10-12,5161.87,5231.19,5161.87,5210.17 2009-10-09,5154.64,5171.53,5130.37,5161.87 2009-10-08,5108.9,5172.82,5108.9,5154.64 2009-10-07,5137.98,5156.21,5104.49,5108.9 2009-10-06,5024.33,5149.9,5024.33,5137.98 2009-10-05,4988.7,5024.33,4976.88,5024.33 2009-10-02,5047.81,5047.81,4954.98,4988.7 2009-10-01,5133.9,5164.37,5043.98,5047.81 2009-09-30,5159.72,5190.0,5092.75,5133.9 2009-09-29,5165.7,5184.05,5136.49,5159.72 2009-09-28,5087.72,5170.81,5050.78,5165.7 2009-09-25,5079.27,5121.9,5079.02,5082.2 2009-09-24,5139.37,5165.41,5073.35,5079.27 2009-09-23,5142.6,5175.1,5126.6,5139.37 2009-09-22,5134.36,5189.88,5134.36,5142.6 2009-09-21,5172.89,5182.23,5107.71,5134.36 2009-09-18,5163.95,5183.88,5147.13,5172.89 2009-09-17,5124.13,5173.13,5124.13,5163.95 2009-09-16,5042.13,5131.26,5042.13,5124.13 2009-09-15,5018.85,5062.69,4996.52,5042.13 2009-09-14,5011.47,5020.86,4953.71,5018.85 2009-09-11,4987.68,5038.76,4987.68,5011.47 2009-09-10,5004.3,5035.34,4956.56,4987.68 2009-09-09,4947.34,5004.3,4928.39,5004.3 2009-09-08,4933.18,4971.99,4926.05,4947.34 2009-09-07,4851.7,4941.7,4851.7,4933.18 2009-09-04,4796.75,4873.78,4796.75,4851.7 2009-09-03,4817.55,4841.51,4788.89,4796.75 2009-09-01,4908.9,4921.16,4819.7,4819.7 2009-08-28,4869.35,4944.16,4869.35,4908.9 2009-08-27,4890.58,4906.2,4855.32,4869.35 2009-08-26,4916.8,4927.05,4872.35,4890.58 2009-08-25,4896.23,4923.28,4858.94,4916.8 2009-08-24,4850.89,4911.41,4850.89,4896.23 2009-08-21,4756.58,4858.53,4735.78,4850.89 2009-08-20,4689.67,4766.85,4689.67,4756.58 2009-08-19,4685.78,4698.5,4625.44,4689.67 2009-08-18,4645.01,4688.22,4645.01,4685.78 2009-08-17,4713.97,4713.97,4610.34,4645.01 2009-08-14,4755.46,4790.18,4699.5,4713.97 2009-08-13,4716.76,4789.98,4716.76,4755.46 2009-08-12,4671.34,4722.55,4631.7,4716.76 2009-08-10,4731.56,4731.56,4688.77,4722.2 2009-08-07,4690.53,4743.62,4632.16,4731.56 2009-08-06,4647.13,4729.58,4647.13,4690.53 2009-08-05,4671.37,4696.64,4630.63,4647.13 2009-08-04,4682.46,4682.46,4627.71,4671.37 2009-08-03,4608.36,4710.23,4595.58,4682.46 2009-07-31,4631.61,4645.5,4599.72,4608.36 2009-07-30,4547.53,4646.86,4547.53,4631.61 2009-07-29,4528.84,4581.78,4512.1,4547.53 2009-07-28,4586.13,4616.44,4520.26,4528.84 2009-07-27,4576.61,4615.12,4553.09,4586.13 2009-07-24,4559.8,4603.21,4536.45,4576.61 2009-07-23,4493.73,4566.77,4472.07,4559.8 2009-07-22,4481.17,4497.98,4449.19,4493.73 2009-07-21,4443.62,4502.12,4437.81,4481.17 2009-07-20,4410.9,4464.81,4396.75,4443.62 2009-07-17,4361.84,4411.91,4361.84,4388.75 2009-07-16,4346.46,4385.15,4329.43,4361.84 2009-07-15,4237.68,4346.46,4237.68,4346.46 2009-07-14,4202.13,4256.37,4198.74,4237.68 2009-07-13,4127.17,4209.25,4096.08,4202.13 2009-07-10,4158.66,4160.48,4123.49,4127.17 2009-07-09,4140.23,4186.41,4140.23,4158.66 2009-07-08,4187.0,4197.55,4130.56,4140.23 2009-07-07,4194.91,4242.07,4184.36,4187.0 2009-07-06,4236.28,4236.28,4172.33,4194.91 2009-07-03,4234.27,4264.81,4221.19,4236.28 2009-07-02,4340.71,4340.71,4230.76,4234.27 2009-07-01,4249.21,4353.03,4249.21,4340.71 2009-06-30,4294.03,4311.23,4230.63,4249.21 2009-06-29,4241.01,4303.55,4235.19,4294.03 2009-06-26,4252.57,4307.16,4216.46,4241.01 2009-06-24,4230.02,4293.0,4218.39,4279.98 2009-06-23,4234.05,4264.0,4214.88,4230.02 2009-06-22,4345.93,4345.93,4234.05,4234.05 2009-06-19,4280.86,4370.26,4279.85,4345.93 2009-06-18,4278.46,4305.43,4239.74,4280.86 2009-06-17,4328.57,4328.69,4254.62,4278.46 2009-06-16,4326.01,4372.85,4321.56,4328.57 2009-06-15,4441.95,4441.95,4319.79,4326.01 2009-06-12,4461.87,4471.95,4427.24,4441.95 2009-06-11,4436.75,4478.42,4409.15,4461.87 2009-06-10,4404.79,4505.89,4404.79,4436.75 2009-06-09,4405.22,4445.54,4387.34,4404.79 2009-06-08,4438.56,4438.56,4370.55,4405.22 2009-06-05,4386.94,4495.94,4386.94,4438.56 2009-06-04,4383.42,4436.25,4359.66,4386.94 2009-06-03,4477.02,4477.18,4359.33,4383.42 2009-06-02,4506.19,4506.19,4435.92,4477.02 2009-06-01,4417.94,4517.6,4417.94,4506.19 2009-05-29,4387.54,4469.43,4387.54,4417.94 2009-05-28,4416.23,4416.23,4341.08,4387.54 2009-05-27,4411.72,4439.79,4390.23,4416.23 2009-05-26,4365.29,4423.64,4294.98,4411.72 2009-05-22,4345.47,4393.07,4335.01,4365.29 2009-05-21,4468.41,4468.41,4325.77,4345.47 2009-05-20,4482.25,4504.2,4445.09,4468.41 2009-05-19,4446.45,4512.7,4445.48,4482.25 2009-05-18,4348.11,4446.45,4307.72,4446.45 2009-05-15,4362.58,4400.72,4317.23,4348.11 2009-05-14,4331.37,4371.28,4295.19,4362.58 2009-05-13,4425.54,4447.96,4328.17,4331.37 2009-05-12,4435.5,4457.46,4397.41,4425.54 2009-05-11,4462.09,4470.05,4401.52,4435.5 2009-05-08,4398.68,4487.5,4398.68,4462.09 2009-05-07,4396.49,4520.82,4380.27,4398.68 2009-05-06,4336.94,4437.61,4317.05,4396.49 2009-05-05,4243.22,4375.35,4243.22,4336.94 2009-05-01,4243.71,4251.57,4210.75,4243.22 2009-04-30,4189.59,4293.63,4189.59,4243.71 2009-04-29,4096.4,4193.32,4089.46,4189.59 2009-04-28,4167.01,4167.01,4058.73,4096.4 2009-04-27,4155.99,4179.17,4088.67,4167.01 2009-04-24,4018.23,4155.99,4018.23,4155.99 2009-04-23,4030.66,4082.31,3999.06,4018.23 2009-04-22,3987.46,4036.03,3948.22,4030.66 2009-04-21,3990.86,4019.16,3897.25,3987.46 2009-04-20,4092.8,4112.75,3962.87,3990.86 2009-04-17,4052.98,4114.32,4043.21,4092.8 2009-04-16,3968.4,4052.98,3963.57,4052.98 2009-04-15,3988.99,4023.35,3941.61,3968.4 2009-04-14,3983.71,4039.67,3939.61,3988.99 2009-04-09,3925.52,3986.28,3911.99,3983.71 2009-04-08,3930.52,3940.42,3876.11,3925.52 2009-04-07,3993.54,4039.52,3909.88,3930.52 2009-04-06,4029.67,4097.17,3959.6,3993.54 2009-04-03,4124.97,4132.93,4015.59,4029.67 2009-04-02,3955.61,4137.85,3955.61,4124.97 2009-04-01,3926.14,3972.68,3838.22,3955.61 2009-03-31,3762.91,3930.62,3762.91,3926.14 2009-03-30,3898.85,3898.85,3762.91,3762.91 2009-03-26,3900.25,3929.54,3877.79,3925.2 2009-03-25,3911.46,3939.16,3852.96,3900.25 2009-03-24,3952.81,3992.42,3878.42,3911.46 2009-03-23,3842.85,3978.6,3842.85,3952.81 2009-03-20,3816.93,3854.87,3777.73,3842.85 2009-03-19,3804.99,3912.64,3793.7,3816.93 2009-03-18,3857.1,3901.65,3768.5,3804.99 2009-03-17,3863.99,3863.99,3793.13,3857.1 2009-03-16,3753.68,3863.99,3753.68,3863.99 2009-03-13,3712.06,3816.02,3712.06,3753.68 2009-03-12,3693.81,3725.6,3616.5,3712.06 2009-03-11,3715.23,3763.24,3652.01,3693.81 2009-03-10,3542.4,3726.31,3516.3,3715.23 2009-03-09,3530.73,3564.75,3460.71,3542.4 2009-03-06,3529.86,3590.22,3492.1,3530.73 2009-03-05,3645.87,3645.87,3526.41,3529.86 2009-03-04,3512.09,3649.5,3512.09,3645.87 2009-03-03,3625.83,3676.86,3497.27,3512.09 2009-03-02,3830.09,3830.09,3625.83,3625.83 2009-02-27,3915.64,3915.64,3760.7,3830.09 2009-02-26,3848.98,3948.22,3848.98,3915.64 2009-02-25,3852.6,3884.06,3803.92,3848.98 2009-02-24,3850.73,3852.25,3772.45,3816.44 2009-02-23,3889.06,3959.98,3844.9,3850.73 2009-02-20,4018.37,4018.37,3877.76,3889.06 2009-02-19,4006.83,4045.2,3983.91,4018.37 2009-02-18,4034.13,4056.48,3938.12,4006.83 2009-02-17,4134.75,4134.75,3995.39,4034.13 2009-02-16,4189.59,4189.59,4127.26,4134.75 2009-02-13,4202.24,4291.57,4168.01,4189.59 2009-02-12,4234.26,4234.26,4135.07,4202.24 2009-02-11,4213.08,4244.53,4182.1,4234.26 2009-02-10,4307.61,4309.49,4210.46,4213.08 2009-02-09,4291.87,4333.97,4244.04,4307.61 2009-02-06,4228.93,4330.73,4225.62,4291.87 2009-02-05,4228.6,4235.28,4133.52,4228.93 2009-02-04,4164.46,4262.73,4160.43,4228.6 2009-02-03,4077.78,4173.24,4043.37,4164.46 2009-02-02,4149.64,4149.64,4036.93,4077.78 2009-01-30,4190.11,4228.0,4125.2,4149.64 2009-01-29,4295.2,4295.2,4147.7,4190.11 2009-01-28,4194.41,4317.61,4194.41,4295.2 2009-01-27,4209.01,4211.03,4130.79,4194.41 2009-01-26,4052.47,4225.21,4039.41,4209.01 2009-01-23,4052.23,4070.75,3956.67,4052.47 2009-01-22,4059.88,4153.88,4046.37,4052.23 2009-01-21,4091.4,4112.84,4001.35,4059.88 2009-01-20,4108.47,4184.25,4060.57,4091.4 2009-01-19,4147.06,4251.92,4032.39,4108.47 2009-01-16,4121.11,4251.68,4121.11,4147.06 2009-01-15,4180.64,4199.39,4090.87,4121.11 2009-01-14,4399.15,4426.47,4115.43,4180.64 2009-01-13,4426.19,4426.19,4321.34,4399.15 2009-01-12,4448.54,4471.34,4402.29,4426.19 2009-01-09,4505.37,4534.81,4431.88,4448.54 2009-01-08,4507.51,4514.71,4410.48,4505.37 2009-01-07,4638.92,4638.92,4477.99,4507.51 2009-01-06,4579.64,4675.68,4562.01,4638.92 2009-01-05,4561.79,4618.11,4520.76,4579.64 2009-01-02,4434.17,4561.79,4430.02,4561.79 2008-12-31,4392.68,4456.19,4392.68,4434.17 2008-12-30,4319.35,4406.07,4319.35,4392.68 2008-12-29,4216.59,4326.25,4216.59,4319.35 2008-12-24,4255.98,4255.98,4205.18,4216.59 2008-12-23,4249.16,4307.09,4244.17,4255.98 2008-12-22,4286.93,4305.43,4219.82,4249.16 2008-12-19,4330.66,4330.66,4200.71,4286.93 2008-12-18,4324.19,4352.68,4282.6,4330.66 2008-12-17,4309.08,4341.12,4231.13,4324.19 2008-12-16,4277.56,4330.13,4246.1,4309.08 2008-12-15,4280.35,4340.7,4238.87,4277.56 2008-12-12,4388.69,4388.69,4201.86,4280.35 2008-12-11,4367.28,4430.28,4307.83,4388.69 2008-12-10,4381.26,4407.13,4329.95,4367.28 2008-12-09,4300.06,4412.96,4232.62,4381.26 2008-12-08,4049.37,4318.0,4049.37,4300.06 2008-12-05,4163.61,4163.61,4002.21,4049.37 2008-12-04,4169.96,4261.07,4090.04,4163.61 2008-12-03,4122.86,4190.93,4042.31,4169.96 2008-12-02,4065.49,4137.11,3973.26,4122.86 2008-12-01,4288.01,4288.01,4038.45,4065.49 2008-11-28,4226.1,4288.01,4192.46,4288.01 2008-11-27,4152.69,4241.7,4152.69,4226.1 2008-11-26,4171.25,4198.74,4050.67,4152.69 2008-11-25,4152.96,4268.34,4069.34,4171.25 2008-11-24,3780.96,4153.08,3780.96,4152.96 2008-11-21,3874.99,3946.67,3734.07,3780.96 2008-11-20,4005.68,4005.68,3812.19,3874.99 2008-11-19,4208.55,4213.2,3999.13,4005.68 2008-11-18,4132.16,4208.55,4033.4,4208.55 2008-11-17,4232.97,4236.41,4110.68,4132.16 2008-11-14,4169.21,4342.29,4169.21,4232.97 2008-11-13,4182.02,4198.67,4079.62,4169.21 2008-11-12,4246.69,4333.37,4134.51,4182.02 2008-11-11,4403.92,4403.92,4231.49,4246.69 2008-11-10,4364.96,4524.87,4364.96,4403.92 2008-11-07,4272.41,4408.1,4263.78,4364.96 2008-11-06,4530.73,4530.73,4260.26,4272.41 2008-11-05,4639.5,4639.5,4495.7,4530.73 2008-11-04,4443.28,4639.5,4404.2,4639.5 2008-11-03,4377.34,4443.28,4348.29,4443.28 2008-10-31,4291.65,4383.9,4195.15,4377.34 2008-10-30,4242.54,4352.47,4200.24,4291.65 2008-10-29,3926.38,4242.54,3926.38,4242.54 2008-10-28,3852.59,4034.02,3847.55,3926.38 2008-10-27,3883.36,3911.61,3665.21,3852.59 2008-10-24,4087.83,4087.83,3715.24,3883.36 2008-10-23,4040.89,4108.36,3927.57,4087.83 2008-10-22,4229.73,4229.73,4031.79,4040.89 2008-10-21,4282.67,4347.69,4212.37,4229.73 2008-10-20,4063.01,4282.67,4063.01,4282.67 2008-10-17,3861.39,4077.58,3861.29,4063.01 2008-10-16,4079.59,4079.59,3808.11,3861.39 2008-10-15,4394.21,4394.21,4051.98,4079.59 2008-10-14,4256.9,4534.35,4256.9,4394.21 2008-10-13,3932.06,4256.9,3932.06,4256.9 2008-10-10,4313.8,4313.8,3873.99,3932.06 2008-10-09,4366.69,4512.45,4274.4,4313.8 2008-10-08,4605.22,4654.18,4245.29,4366.69 2008-10-07,4589.19,4745.01,4517.47,4605.22 2008-10-06,4980.25,4980.25,4549.66,4589.19 2008-10-03,4870.34,5003.9,4832.1,4980.25 2008-10-02,4959.59,5052.0,4862.11,4870.34 2008-10-01,4902.45,5012.24,4891.46,4959.59 2008-09-30,4818.77,4953.4,4671.02,4902.45 2008-09-29,5088.47,5088.47,4818.77,4818.77 2008-09-26,5197.02,5197.02,5057.33,5088.47 2008-09-25,5095.57,5211.64,5060.74,5197.02 2008-09-24,5136.12,5167.36,5087.3,5095.57 2008-09-23,5236.26,5236.26,5076.32,5136.12 2008-09-22,5311.33,5339.25,5236.26,5236.26 2008-09-19,4880.0,5351.2,4857.1,5311.3 2008-09-18,4912.4,5015.9,4860.7,4880.0 2008-09-17,5025.6,5124.4,4903.3,4912.4 2008-09-16,5204.2,5204.2,4961.2,5025.6 2008-09-15,5416.7,5416.7,5124.9,5204.2 2008-09-12,5318.4,5416.7,5318.4,5416.7 2008-09-11,5366.2,5377.9,5258.1,5318.4 2008-09-10,5415.6,5419.5,5327.8,5366.2 2008-09-09,5446.3,5524.8,5386.9,5415.6 2008-09-08,5240.7,5447.6,5240.7,5446.3 2008-09-05,5362.1,5362.1,5227.6,5240.7 2008-09-04,5499.7,5541.7,5362.1,5362.1 2008-09-03,5620.7,5620.7,5492.1,5499.7 2008-09-02,5602.8,5646.5,5574.9,5620.7 2008-09-01,5636.6,5636.6,5573.8,5602.8 2008-08-29,5601.2,5649.1,5587.4,5636.6 2008-08-28,5528.1,5634.0,5496.9,5601.2 2008-08-27,5470.7,5540.8,5434.7,5528.1 2008-08-26,5505.6,5505.6,5369.3,5470.7 2008-08-22,5370.2,5505.6,5368.0,5505.6 2008-08-21,5371.8,5408.0,5311.4,5370.2 2008-08-20,5320.4,5384.2,5320.4,5371.8 2008-08-19,5450.2,5450.2,5317.1,5320.4 2008-08-18,5454.8,5498.7,5425.3,5450.2 2008-08-15,5497.4,5538.8,5432.2,5454.8 2008-08-14,5448.6,5539.6,5445.6,5497.4 2008-08-13,5534.5,5534.5,5437.1,5448.6 2008-08-12,5541.8,5569.2,5491.3,5534.5 2008-08-11,5489.2,5541.8,5477.7,5541.8 2008-08-08,5477.5,5507.2,5410.8,5489.2 2008-08-07,5486.1,5539.3,5450.9,5477.5 2008-08-06,5454.5,5498.6,5440.1,5486.1 2008-08-05,5320.2,5454.5,5299.7,5454.5 2008-08-04,5354.7,5414.7,5310.3,5320.2 2008-08-01,5411.9,5411.9,5321.3,5354.7 2008-07-31,5420.7,5456.1,5371.3,5411.9 2008-07-30,5319.2,5435.9,5319.2,5420.7 2008-07-29,5312.6,5354.6,5261.4,5319.2 2008-07-28,5352.6,5365.8,5308.4,5312.6 2008-07-25,5362.3,5375.2,5291.4,5352.6 2008-07-24,5449.9,5463.7,5345.1,5362.3 2008-07-23,5364.1,5467.2,5364.1,5449.9 2008-07-22,5404.3,5404.3,5282.8,5364.1 2008-07-21,5376.4,5445.8,5334.6,5404.3 2008-07-18,5286.3,5376.4,5216.6,5376.4 2008-07-17,5150.6,5320.5,5150.6,5286.3 2008-07-16,5171.9,5210.1,5071.1,5150.6 2008-07-15,5300.4,5300.4,5119.0,5171.9 2008-07-14,5261.6,5373.2,5261.6,5300.4 2008-07-11,5406.8,5461.8,5261.6,5261.6 2008-07-10,5529.6,5529.6,5392.6,5406.8 2008-07-09,5440.5,5538.2,5440.5,5529.6 2008-07-08,5512.7,5512.7,5358.7,5440.5 2008-07-07,5412.8,5516.4,5400.1,5512.7 2008-07-04,5476.6,5490.2,5394.0,5412.8 2008-07-03,5426.3,5490.6,5358.5,5476.6 2008-07-02,5479.9,5566.8,5426.3,5426.3 2008-07-01,5625.9,5625.9,5466.3,5479.9 2008-06-30,5529.9,5625.9,5520.2,5625.9 2008-06-27,5518.2,5555.2,5470.9,5529.9 2008-06-26,5666.1,5666.1,5518.2,5518.2 2008-06-25,5634.7,5669.6,5634.7,5666.1 2008-06-24,5667.2,5693.8,5581.6,5634.7 2008-06-23,5620.8,5679.2,5603.2,5667.2 2008-06-20,5708.4,5731.9,5597.0,5620.8 2008-06-19,5756.9,5786.4,5707.2,5708.4 2008-06-18,5861.9,5861.9,5735.4,5756.9 2008-06-17,5794.6,5930.3,5794.6,5861.9 2008-06-16,5802.8,5832.6,5759.6,5794.6 2008-06-13,5790.5,5818.3,5719.5,5802.8 2008-06-12,5723.3,5797.8,5719.8,5790.5 2008-06-11,5827.3,5859.4,5708.3,5723.3 2008-06-10,5877.6,5877.6,5813.4,5827.3 2008-06-09,5906.8,5938.5,5869.6,5877.6 2008-06-06,5995.3,6074.5,5906.5,5906.8 2008-06-05,5970.1,6005.1,5941.0,5995.3 2008-06-04,6057.7,6057.7,5933.3,5970.1 2008-06-03,6007.6,6059.0,5993.3,6057.7 2008-06-02,6053.5,6060.8,5978.4,6007.6 2008-05-30,6068.1,6111.6,6044.7,6053.5 2008-05-29,6069.6,6130.5,6041.1,6068.1 2008-05-28,6058.5,6122.2,6052.5,6069.6 2008-05-27,6087.3,6141.7,6048.7,6058.5 2008-05-23,6181.6,6182.9,6087.3,6087.3 2008-05-22,6198.1,6226.2,6159.4,6181.6 2008-05-21,6191.6,6257.3,6183.5,6198.1 2008-05-20,6376.5,6376.5,6191.6,6191.6 2008-05-19,6304.3,6377.0,6302.8,6376.5 2008-05-16,6251.8,6348.6,6251.8,6304.3 2008-05-15,6216.0,6258.5,6168.8,6251.8 2008-05-14,6211.9,6253.1,6167.9,6216.0 2008-05-13,6220.6,6268.1,6142.3,6211.9 2008-05-12,6204.7,6251.9,6184.8,6220.6 2008-05-09,6270.8,6270.8,6167.6,6204.7 2008-05-08,6256.5,6273.3,6217.0,6270.8 2008-05-07,6215.2,6275.0,6214.1,6261.0 2008-05-06,6215.5,6233.7,6155.9,6215.2 2008-05-02,6087.3,6223.9,6087.3,6215.5 2008-05-01,6087.3,6118.2,6066.0,6087.3 2008-04-30,6089.4,6120.3,6035.8,6087.3 2008-04-29,6090.4,6133.5,6051.6,6089.4 2008-04-28,6091.4,6134.5,6083.5,6090.4 2008-04-25,6050.7,6098.8,6045.5,6091.4 2008-04-24,6083.6,6083.6,5951.9,6050.7 2008-04-23,6034.7,6083.6,5978.8,6083.6 2008-04-22,6053.0,6072.0,6007.5,6034.7 2008-04-21,6056.5,6089.5,6021.2,6053.0 2008-04-18,5980.4,6062.1,5974.3,6056.5 2008-04-17,6046.2,6086.4,5973.9,5980.4 2008-04-16,5906.9,6046.2,5906.9,6046.2 2008-04-15,5831.6,5943.3,5831.6,5906.9 2008-04-14,5895.5,5895.5,5827.0,5831.6 2008-04-11,5965.1,6016.3,5866.1,5895.5 2008-04-10,5983.9,6003.2,5881.9,5965.1 2008-04-09,5990.2,6015.6,5947.2,5983.9 2008-04-08,6014.8,6014.8,5942.2,5990.2 2008-04-07,5947.1,6014.8,5947.1,6014.8 2008-04-04,5891.3,5948.0,5888.0,5947.1 2008-04-03,5915.9,5935.2,5864.0,5891.3 2008-04-02,5852.6,5920.1,5827.2,5915.9 2008-04-01,5702.1,5865.8,5670.4,5852.6 2008-03-31,5692.9,5715.1,5585.6,5702.1 2008-03-28,5717.5,5747.2,5673.7,5692.9 2008-03-27,5660.4,5735.0,5650.9,5717.5 2008-03-26,5689.1,5689.1,5639.1,5660.4 2008-03-25,5495.2,5704.3,5495.2,5689.1 2008-03-20,5545.6,5545.6,5461.9,5495.2 2008-03-19,5605.8,5653.6,5524.8,5545.6 2008-03-18,5414.4,5610.0,5414.4,5605.8 2008-03-17,5631.7,5631.7,5414.4,5414.4 2008-03-14,5692.4,5782.0,5595.8,5631.7 2008-03-13,5776.4,5776.4,5628.9,5692.4 2008-03-12,5690.4,5812.7,5690.4,5776.4 2008-03-11,5629.1,5783.4,5629.1,5690.4 2008-03-10,5699.9,5718.8,5616.6,5629.1 2008-03-07,5766.4,5766.4,5655.7,5699.9 2008-03-06,5853.5,5871.1,5753.1,5766.4 2008-03-05,5767.7,5860.5,5763.9,5853.5 2008-03-04,5818.6,5872.9,5719.8,5767.7 2008-03-03,5884.3,5884.3,5770.1,5818.6 2008-02-29,5965.7,5986.2,5859.3,5884.3 2008-02-28,6076.5,6090.8,5960.3,5965.7 2008-02-27,6087.4,6104.5,5989.0,6076.5 2008-02-26,5999.5,6092.5,5991.6,6087.4 2008-02-25,5888.5,6011.7,5888.5,5999.5 2008-02-22,5932.2,5970.9,5863.8,5888.5 2008-02-21,5893.6,6004.4,5893.6,5932.2 2008-02-20,5966.9,5966.9,5847.4,5893.6 2008-02-19,5946.6,6033.7,5884.8,5966.9 2008-02-18,5787.6,5951.9,5787.6,5946.6 2008-02-15,5879.3,5915.0,5763.5,5787.6 2008-02-14,5880.1,5938.5,5859.4,5879.3 2008-02-13,5910.0,5915.0,5814.8,5880.1 2008-02-12,5707.7,5910.0,5707.7,5910.0 2008-02-11,5784.0,5789.6,5681.5,5707.7 2008-02-08,5724.1,5805.3,5703.1,5784.0 2008-02-07,5875.4,5875.4,5708.8,5724.1 2008-02-06,5868.0,5892.6,5816.4,5875.4 2008-02-05,6026.2,6026.2,5852.8,5868.0 2008-02-04,6029.2,6071.3,6000.2,6026.2 2008-02-01,5879.8,6044.9,5879.8,6029.2 2008-01-31,5837.3,5899.5,5689.4,5879.8 2008-01-30,5885.2,5885.2,5818.6,5837.3 2008-01-29,5788.9,5885.2,5788.9,5885.2 2008-01-28,5869.0,5869.0,5705.1,5788.9 2008-01-25,5875.8,5973.3,5848.5,5869.0 2008-01-24,5609.3,5882.3,5609.3,5875.8 2008-01-23,5740.1,5844.9,5518.3,5609.3 2008-01-22,5578.2,5764.0,5338.7,5740.1 2008-01-21,5901.7,5901.7,5571.0,5578.2 2008-01-18,5902.4,6030.9,5856.8,5901.7 2008-01-17,5942.9,6028.4,5895.4,5902.4 2008-01-16,6025.6,6031.5,5908.5,5942.9 2008-01-15,6215.7,6215.7,6025.6,6025.6 2008-01-14,6202.0,6247.3,6173.0,6215.7 2008-01-11,6222.7,6251.8,6147.0,6202.0 2008-01-10,6272.7,6314.5,6213.0,6222.7 2008-01-09,6356.5,6356.5,6241.8,6272.7 2008-01-08,6335.7,6399.6,6335.7,6356.5 2008-01-07,6348.5,6376.5,6275.2,6335.7 2008-01-04,6479.4,6534.7,6333.2,6348.5 2008-01-03,6416.7,6487.8,6394.6,6479.4 2008-01-02,6456.9,6512.3,6402.6,6416.7 2007-12-31,6476.9,6480.2,6432.8,6456.9 2007-12-28,6497.8,6497.8,6436.8,6476.9 2007-12-27,6479.3,6504.7,6468.7,6497.8 2007-12-24,6434.1,6485.6,6431.2,6479.3 2007-12-21,6345.6,6451.8,6345.6,6434.1 2007-12-20,6284.5,6367.7,6284.5,6345.6 2007-12-19,6279.3,6319.1,6251.8,6284.5 2007-12-18,6277.8,6344.3,6254.5,6279.3 2007-12-17,6397.0,6397.0,6264.3,6277.8 2007-12-14,6364.2,6426.2,6336.7,6397.0 2007-12-13,6559.8,6559.8,6364.2,6364.2 2007-12-12,6536.9,6610.9,6429.5,6559.8 2007-12-11,6565.4,6597.5,6513.4,6536.9 2007-12-10,6554.9,6596.7,6523.7,6565.4 2007-12-07,6485.6,6577.8,6485.6,6554.9 2007-12-06,6493.8,6591.8,6437.8,6485.6 2007-12-05,6315.2,6493.8,6315.2,6493.8 2007-12-04,6386.6,6398.2,6289.3,6315.2 2007-12-03,6432.5,6456.1,6379.9,6386.6 2007-11-30,6349.1,6455.8,6334.0,6432.5 2007-11-29,6306.2,6363.5,6273.4,6349.1 2007-11-28,6140.7,6307.4,6109.6,6306.2 2007-11-27,6180.5,6197.1,6061.8,6140.7 2007-11-26,6262.1,6307.8,6180.5,6180.5 2007-11-23,6155.3,6262.1,6153.6,6262.1 2007-11-22,6070.9,6155.3,6026.9,6155.3 2007-11-21,6226.5,6226.5,6041.8,6070.9 2007-11-20,6120.8,6227.7,6078.7,6226.5 2007-11-19,6291.2,6331.7,6120.8,6120.8 2007-11-16,6359.6,6359.6,6283.9,6291.2 2007-11-15,6432.1,6465.4,6335.5,6359.6 2007-11-14,6362.4,6460.8,6362.4,6432.1 2007-11-13,6337.9,6387.4,6279.7,6362.4 2007-11-12,6304.9,6365.2,6268.6,6337.9 2007-11-09,6381.9,6442.9,6268.9,6304.9 2007-11-08,6385.1,6432.3,6290.3,6381.9 2007-11-07,6474.9,6519.2,6381.3,6385.1 2007-11-06,6461.4,6512.1,6456.4,6474.9 2007-11-05,6530.6,6530.6,6420.4,6461.4 2007-11-02,6586.1,6586.1,6483.4,6530.6 2007-11-01,6721.6,6723.7,6549.7,6586.1 2007-10-31,6659.0,6721.6,6636.9,6721.6 2007-10-30,6706.0,6706.0,6653.8,6659.0 2007-10-29,6661.3,6726.9,6661.3,6706.0 2007-10-26,6576.3,6684.1,6567.1,6661.3 2007-10-25,6482.0,6587.6,6482.0,6576.3 2007-10-24,6514.0,6550.9,6460.9,6482.0 2007-10-23,6459.3,6562.7,6459.3,6514.0 2007-10-22,6527.9,6527.9,6413.4,6459.3 2007-10-19,6609.4,6615.8,6523.6,6527.9 2007-10-18,6677.7,6722.0,6584.9,6609.4 2007-10-17,6614.3,6690.5,6594.9,6677.7 2007-10-16,6644.5,6644.5,6596.3,6614.3 2007-10-15,6730.7,6751.7,6632.1,6644.5 2007-10-12,6724.5,6730.7,6660.0,6730.7 2007-10-11,6633.0,6730.1,6633.0,6724.5 2007-10-10,6615.4,6633.0,6587.7,6633.0 2007-10-09,6540.9,6625.3,6527.5,6615.4 2007-10-08,6595.8,6605.6,6540.9,6540.9 2007-10-05,6547.9,6605.1,6547.9,6595.8 2007-10-04,6535.2,6593.3,6507.2,6547.9 2007-10-03,6500.4,6542.8,6495.0,6535.2 2007-10-02,6506.2,6567.0,6489.6,6500.4 2007-10-01,6466.8,6514.5,6419.2,6506.2 2007-09-28,6486.4,6500.4,6411.8,6466.8 2007-09-27,6433.0,6508.0,6433.0,6486.4 2007-09-26,6396.9,6484.4,6396.9,6433.0 2007-09-25,6465.9,6465.9,6367.0,6396.9 2007-09-24,6456.7,6494.2,6437.3,6465.9 2007-09-21,6429.0,6481.6,6409.9,6456.7 2007-09-20,6460.0,6460.0,6395.1,6429.0 2007-09-19,6283.3,6512.4,6283.3,6460.0 2007-09-18,6182.8,6298.5,6158.8,6283.3 2007-09-17,6289.3,6289.3,6168.0,6182.8 2007-09-14,6363.9,6363.9,6209.1,6289.3 2007-09-13,6306.2,6374.5,6280.2,6363.9 2007-09-12,6280.7,6317.1,6232.0,6306.2 2007-09-11,6134.1,6280.7,6134.1,6280.7 2007-09-10,6191.2,6232.1,6123.1,6134.1 2007-09-07,6313.3,6342.7,6179.1,6191.2 2007-09-06,6270.7,6327.3,6217.5,6313.3 2007-09-05,6376.8,6390.5,6264.5,6270.7 2007-09-04,6315.2,6378.0,6274.9,6376.8 2007-09-03,6303.3,6334.4,6303.2,6315.2 2007-08-31,6212.0,6309.5,6212.0,6303.3 2007-08-30,6132.2,6220.8,6122.5,6212.0 2007-08-29,6102.2,6137.9,6056.5,6132.2 2007-08-28,6220.1,6220.1,6083.9,6102.2 2007-08-24,6196.9,6232.2,6182.4,6220.1 2007-08-23,6196.0,6287.2,6194.4,6196.9 2007-08-22,6086.1,6196.6,6086.1,6196.0 2007-08-21,6078.7,6118.9,6031.8,6086.1 2007-08-20,6064.2,6163.4,6064.2,6078.7 2007-08-17,5858.9,6134.0,5821.7,6064.2 2007-08-16,6109.3,6109.3,5858.9,5858.9 2007-08-15,6143.5,6143.5,6041.7,6109.3 2007-08-14,6219.0,6264.9,6132.2,6143.5 2007-08-13,6038.3,6237.8,6038.3,6219.0 2007-08-10,6271.2,6271.2,6038.3,6038.3 2007-08-09,6393.9,6393.9,6228.0,6271.2 2007-08-08,6308.8,6406.3,6308.8,6393.9 2007-08-07,6189.1,6308.8,6189.1,6308.8 2007-08-06,6224.3,6245.9,6161.5,6189.1 2007-08-03,6300.3,6333.5,6212.2,6224.3 2007-08-02,6250.6,6319.3,6250.6,6300.3 2007-08-01,6360.1,6360.1,6187.2,6250.6 2007-07-31,6206.1,6361.1,6206.1,6360.1 2007-07-30,6215.2,6256.5,6186.2,6206.1 2007-07-27,6251.2,6315.2,6192.3,6215.2 2007-07-26,6454.3,6474.7,6251.2,6251.2 2007-07-25,6498.7,6533.6,6436.7,6454.3 2007-07-24,6624.4,6624.4,6498.7,6498.7 2007-07-23,6585.2,6624.4,6583.5,6624.4 2007-07-20,6640.2,6674.3,6580.0,6585.2 2007-07-19,6567.1,6658.8,6567.1,6640.2 2007-07-18,6659.1,6659.1,6567.1,6567.1 2007-07-17,6697.7,6698.5,6628.1,6659.1 2007-07-16,6716.7,6735.8,6679.2,6697.7 2007-07-13,6697.7,6754.1,6697.7,6716.7 2007-07-12,6615.1,6697.7,6594.7,6697.7 2007-07-11,6630.9,6630.9,6574.2,6615.1 2007-07-10,6712.7,6734.3,6620.5,6630.9 2007-07-09,6690.1,6725.9,6690.1,6712.7 2007-07-06,6635.2,6690.4,6635.2,6690.1 2007-07-05,6673.1,6691.8,6625.8,6635.2 2007-07-04,6639.8,6682.9,6639.8,6673.1 2007-07-03,6590.6,6645.3,6590.6,6639.8 2007-07-02,6607.9,6612.8,6570.5,6590.6 2007-06-29,6571.3,6607.9,6519.6,6607.9 2007-06-28,6527.6,6575.5,6527.6,6571.3 2007-06-27,6559.3,6559.3,6496.4,6527.6 2007-06-26,6588.4,6593.5,6539.9,6559.3 2007-06-25,6567.4,6591.4,6522.3,6588.4 2007-06-22,6596.0,6612.3,6562.2,6567.4 2007-06-21,6649.3,6649.3,6563.9,6596.0 2007-06-20,6650.2,6692.6,6647.6,6649.3 2007-06-19,6703.5,6721.4,6650.2,6650.2 2007-06-18,6732.4,6751.3,6696.8,6703.5 2007-06-15,6649.9,6734.2,6649.9,6732.4 2007-06-14,6559.6,6654.3,6559.6,6649.9 2007-06-13,6520.4,6567.3,6483.6,6559.6 2007-06-12,6567.5,6586.6,6513.7,6520.4 2007-06-11,6505.1,6567.5,6505.1,6567.5 2007-06-08,6505.1,6519.4,6451.4,6505.1 2007-06-07,6522.7,6574.9,6478.0,6505.1 2007-06-06,6632.8,6636.9,6511.7,6522.7 2007-06-05,6664.1,6686.6,6625.7,6632.8 2007-06-04,6676.7,6686.1,6641.2,6664.1 2007-06-01,6621.4,6676.7,6621.3,6676.7 2007-05-31,6602.1,6650.2,6602.1,6621.4 2007-05-30,6606.5,6606.5,6533.5,6602.1 2007-05-29,6570.5,6613.4,6570.5,6606.5 2007-05-25,6565.4,6575.2,6532.5,6570.5 2007-05-24,6616.4,6619.5,6560.5,6565.4 2007-05-23,6606.6,6643.8,6602.5,6616.4 2007-05-22,6636.8,6641.9,6594.6,6606.6 2007-05-21,6640.9,6675.0,6619.4,6636.8 2007-05-18,6579.3,6656.3,6579.1,6640.9 2007-05-17,6559.5,6588.7,6553.6,6579.3 2007-05-16,6568.6,6578.6,6539.4,6559.5 2007-05-15,6555.5,6579.0,6532.9,6568.6 2007-05-14,6565.7,6596.3,6530.3,6555.5 2007-05-11,6524.1,6577.0,6451.9,6565.7 2007-05-10,6549.6,6565.1,6515.0,6524.1 2007-05-09,6550.4,6592.4,6529.0,6549.6 2007-05-08,6603.7,6603.7,6537.5,6550.4 2007-05-04,6537.8,6614.7,6537.8,6603.7 2007-05-03,6484.5,6542.5,6484.5,6537.8 2007-05-02,6419.6,6489.0,6419.6,6484.5 2007-05-01,6449.2,6449.2,6395.5,6419.6 2007-04-30,6418.7,6474.7,6410.5,6449.2 2007-04-27,6469.4,6469.4,6410.6,6418.7 2007-04-26,6461.9,6511.1,6443.7,6469.4 2007-04-25,6429.5,6479.0,6429.5,6461.9 2007-04-24,6479.7,6493.1,6408.4,6429.5 2007-04-23,6486.8,6504.5,6466.1,6479.7 2007-04-20,6440.6,6508.9,6440.6,6486.8 2007-04-19,6449.4,6451.8,6386.2,6440.6 2007-04-18,6497.8,6497.8,6440.8,6449.4 2007-04-17,6516.2,6516.2,6456.4,6497.8 2007-04-16,6462.4,6516.2,6462.4,6516.2 2007-04-13,6416.4,6462.4,6416.4,6462.4 2007-04-12,6413.3,6419.6,6376.4,6416.4 2007-04-11,6417.8,6445.9,6401.9,6413.3 2007-04-10,6397.3,6431.7,6394.3,6417.8 2007-04-05,6364.7,6398.7,6350.3,6397.3 2007-04-04,6366.1,6380.5,6345.9,6364.7 2007-04-03,6315.5,6366.1,6315.5,6366.1 2007-04-02,6308.0,6342.2,6293.9,6315.5 2007-03-30,6324.2,6330.0,6291.1,6308.0 2007-03-29,6267.2,6334.7,6267.2,6324.2 2007-03-28,6292.6,6304.9,6250.1,6267.2 2007-03-27,6291.9,6337.7,6276.8,6292.6 2007-03-26,6339.4,6355.3,6274.1,6291.9 2007-03-23,6318.0,6350.4,6296.6,6339.4 2007-03-22,6256.8,6342.1,6256.8,6318.0 2007-03-21,6220.3,6287.5,6207.7,6256.8 2007-03-20,6189.4,6220.3,6159.4,6220.3 2007-03-19,6130.6,6200.6,6130.6,6189.4 2007-03-16,6133.2,6142.2,6094.7,6130.6 2007-03-15,6000.7,6133.2,6000.7,6133.2 2007-03-14,6161.2,6161.2,6000.7,6000.7 2007-03-13,6233.3,6240.7,6161.2,6161.2 2007-03-12,6245.2,6276.3,6219.3,6233.3 2007-03-09,6227.7,6255.8,6190.3,6245.2 2007-03-08,6156.5,6233.1,6156.5,6227.7 2007-03-07,6138.5,6167.6,6106.1,6156.5 2007-03-06,6058.7,6138.5,6058.7,6138.5 2007-03-05,6116.2,6116.2,5989.6,6058.7 2007-03-02,6116.0,6164.4,6085.6,6116.2 2007-03-01,6171.5,6230.7,6038.9,6116.0 2007-02-28,6286.1,6286.1,6166.2,6171.5 2007-02-27,6434.7,6434.7,6270.5,6286.1 2007-02-26,6401.5,6446.8,6401.5,6434.7 2007-02-23,6380.9,6401.5,6357.1,6401.5 2007-02-22,6357.1,6416.0,6357.1,6380.9 2007-02-21,6412.3,6430.4,6352.1,6357.1 2007-02-20,6444.4,6448.1,6392.4,6412.3 2007-02-19,6419.5,6451.4,6419.5,6444.4 2007-02-16,6433.3,6439.2,6407.3,6419.5 2007-02-15,6421.2,6435.3,6397.2,6433.3 2007-02-14,6381.8,6421.2,6378.6,6421.2 2007-02-13,6353.5,6381.8,6353.5,6381.8 2007-02-12,6382.8,6383.1,6344.7,6353.5 2007-02-09,6346.4,6395.4,6346.4,6382.8 2007-02-08,6369.5,6375.0,6330.1,6346.4 2007-02-07,6346.3,6379.8,6338.2,6369.5 2007-02-06,6317.9,6369.7,6317.9,6346.3 2007-02-05,6310.9,6328.9,6294.7,6317.9 2007-02-02,6282.2,6329.0,6282.2,6310.9 2007-02-01,6203.1,6300.3,6203.1,6282.2 2007-01-31,6242.0,6257.3,6197.5,6203.1 2007-01-30,6239.9,6250.1,6212.5,6242.0 2007-01-29,6228.0,6253.7,6216.0,6239.9 2007-01-26,6269.3,6271.4,6226.4,6228.0 2007-01-25,6314.8,6335.1,6262.1,6269.3 2007-01-24,6227.6,6320.9,6227.6,6314.8 2007-01-23,6218.4,6240.7,6189.2,6227.6 2007-01-22,6237.2,6270.9,6215.8,6218.4 2007-01-19,6210.3,6243.3,6178.0,6237.2 2007-01-18,6204.5,6257.2,6204.5,6210.3 2007-01-17,6215.7,6227.0,6163.5,6204.5 2007-01-16,6263.5,6266.4,6206.4,6215.7 2007-01-15,6239.0,6279.7,6239.0,6263.5 2007-01-12,6230.1,6247.6,6204.3,6239.0 2007-01-11,6160.7,6233.1,6130.2,6230.1 2007-01-10,6196.1,6196.1,6142.0,6160.7 2007-01-09,6194.2,6218.5,6190.4,6196.1 2007-01-08,6220.1,6246.0,6187.0,6194.2 2007-01-05,6287.0,6287.0,6220.1,6220.1 2007-01-04,6319.0,6319.0,6261.0,6287.0 2007-01-03,6310.9,6322.0,6296.0,6319.0 2007-01-02,6220.8,6312.5,6220.8,6310.9 2006-12-29,6240.9,6245.2,6207.6,6220.8 2006-12-28,6245.2,6258.7,6232.3,6240.9 2006-12-27,6190.0,6248.1,6190.0,6245.2 2006-12-22,6183.7,6191.1,6175.5,6190.0 2006-12-21,6198.6,6203.5,6171.2,6183.7 2006-12-20,6203.9,6240.1,6197.9,6198.6 2006-12-19,6247.4,6247.4,6192.0,6203.9 2006-12-18,6260.0,6269.1,6240.1,6247.4 2006-12-15,6228.0,6271.4,6228.0,6260.0 2006-12-14,6192.5,6230.6,6192.5,6228.0 2006-12-13,6156.4,6196.6,6149.4,6192.5 2006-12-12,6159.8,6164.8,6137.8,6156.4 2006-12-11,6152.4,6187.0,6147.1,6159.8 2006-12-08,6131.5,6157.1,6106.6,6152.4 2006-12-07,6090.3,6145.3,6082.8,6131.5 2006-12-06,6086.4,6105.7,6068.1,6090.3 2006-12-05,6050.4,6097.4,6047.1,6086.4 2006-12-04,6021.5,6058.1,6019.4,6050.4 2006-12-01,6048.8,6087.4,5985.2,6021.5 2006-11-30,6084.4,6108.9,6043.9,6048.8 2006-11-29,6025.9,6098.6,6025.9,6084.4 2006-11-28,6050.1,6062.8,6011.8,6025.9 2006-11-27,6122.1,6129.5,6050.1,6050.1 2006-11-24,6140.0,6140.0,6068.1,6122.1 2006-11-23,6160.3,6181.7,6115.1,6140.0 2006-11-22,6202.6,6233.1,6146.3,6160.3 2006-11-21,6204.5,6228.4,6199.7,6202.6 2006-11-20,6192.0,6218.9,6148.3,6204.5 2006-11-17,6254.9,6254.9,6178.9,6192.0 2006-11-16,6229.8,6256.8,6212.1,6254.9 2006-11-15,6186.6,6229.8,6186.6,6229.8 2006-11-14,6194.2,6223.9,6167.3,6186.6 2006-11-13,6208.4,6239.8,6171.9,6194.2 2006-11-10,6231.5,6233.1,6198.6,6208.4 2006-11-09,6239.0,6250.4,6205.1,6231.5 2006-11-08,6244.0,6244.0,6205.7,6239.0 2006-11-07,6224.5,6244.5,6219.7,6244.0 2006-11-06,6148.1,6224.5,6146.5,6224.5 2006-11-03,6149.3,6177.3,6134.0,6148.1 2006-11-02,6149.6,6172.0,6112.9,6149.3 2006-11-01,6129.2,6180.7,6129.2,6149.6 2006-10-31,6126.8,6149.9,6110.9,6129.2 2006-10-30,6160.9,6160.9,6112.9,6126.8 2006-10-27,6184.8,6206.0,6132.7,6160.9 2006-10-26,6214.6,6244.6,6179.7,6184.8 2006-10-25,6182.5,6216.1,6178.8,6214.6 2006-10-24,6166.1,6186.9,6161.3,6182.5 2006-10-23,6155.2,6181.1,6129.1,6166.1 2006-10-20,6156.0,6199.8,6134.3,6155.2 2006-10-19,6150.4,6183.5,6113.1,6156.0 2006-10-18,6108.6,6166.8,6108.6,6150.4 2006-10-17,6172.4,6174.7,6105.8,6108.6 2006-10-16,6157.3,6184.3,6149.3,6172.4 2006-10-13,6121.3,6170.5,6105.3,6157.3 2006-10-12,6073.5,6121.7,6069.0,6121.3 2006-10-11,6072.7,6081.9,6044.7,6073.5 2006-10-10,6030.9,6076.3,6030.2,6072.7 2006-10-09,6001.2,6044.5,5994.8,6030.9 2006-10-06,6004.5,6014.3,5978.1,6001.2 2006-10-05,5966.5,6016.7,5966.5,6004.5 2006-10-04,5937.1,5969.1,5921.5,5966.5 2006-10-03,5957.8,5957.8,5897.3,5937.1 2006-10-02,5960.8,5985.5,5950.9,5957.8 2006-09-29,5971.3,6002.9,5950.1,5960.8 2006-09-28,5930.1,5978.8,5930.1,5971.3 2006-09-27,5873.6,5942.2,5872.8,5930.1 2006-09-26,5798.3,5879.2,5798.3,5873.6 2006-09-25,5822.3,5847.0,5774.5,5798.3 2006-09-22,5896.7,5896.7,5820.4,5822.3 2006-09-21,5866.2,5898.1,5848.5,5896.7 2006-09-20,5831.8,5880.8,5820.9,5866.2 2006-09-19,5890.2,5897.4,5831.8,5831.8 2006-09-18,5877.0,5911.9,5870.4,5890.2 2006-09-15,5877.2,5899.2,5864.8,5877.0 2006-09-14,5892.2,5943.7,5869.0,5877.2 2006-09-13,5895.5,5913.4,5874.5,5892.2 2006-09-12,5850.8,5896.9,5824.2,5895.5 2006-09-11,5879.3,5879.3,5820.0,5850.8 2006-09-08,5858.1,5899.0,5858.1,5879.3 2006-09-07,5929.3,5929.3,5853.3,5858.1 2006-09-06,5981.7,5981.7,5926.2,5929.3 2006-09-05,5986.6,5991.2,5956.3,5981.7 2006-09-04,5949.1,5986.6,5947.7,5986.6 2006-09-01,5906.1,5967.7,5906.1,5949.1 2006-08-31,5929.3,5937.0,5895.0,5906.1 2006-08-30,5888.3,5945.3,5888.2,5929.3 2006-08-29,5878.6,5921.3,5878.6,5888.3 2006-08-25,5869.1,5893.6,5858.6,5878.6 2006-08-24,5860.0,5892.3,5832.5,5869.1 2006-08-23,5902.6,5906.3,5853.8,5860.0 2006-08-22,5915.2,5939.2,5878.4,5902.6 2006-08-21,5903.4,5936.6,5883.8,5915.2 2006-08-18,5900.4,5932.5,5900.2,5903.4 2006-08-17,5896.6,5915.0,5888.8,5900.4 2006-08-16,5897.9,5902.8,5848.7,5896.6 2006-08-15,5870.9,5903.2,5845.0,5897.9 2006-08-14,5820.1,5870.9,5820.1,5870.9 2006-08-11,5823.4,5848.2,5797.0,5820.1 2006-08-10,5860.5,5860.5,5752.6,5823.4 2006-08-09,5818.1,5865.9,5778.2,5860.5 2006-08-08,5828.8,5866.6,5818.1,5818.1 2006-08-07,5889.4,5889.4,5820.9,5828.8 2006-08-04,5838.4,5893.3,5836.5,5889.4 2006-08-03,5932.1,5940.7,5827.1,5838.4 2006-08-02,5880.8,5932.1,5880.8,5932.1 2006-08-01,5928.3,5949.8,5867.4,5880.8 2006-07-31,5974.9,5977.2,5928.3,5928.3 2006-07-28,5929.5,5982.5,5904.7,5974.9 2006-07-27,5877.1,5936.8,5877.1,5929.5 2006-07-26,5851.2,5878.7,5851.2,5877.1 2006-07-25,5833.9,5872.8,5825.8,5851.2 2006-07-24,5719.7,5835.2,5719.7,5833.9 2006-07-21,5770.9,5770.9,5700.7,5719.7 2006-07-20,5778.0,5819.7,5756.4,5770.9 2006-07-19,5681.7,5785.3,5680.8,5778.0 2006-07-18,5701.0,5712.6,5658.3,5681.7 2006-07-17,5707.6,5721.1,5654.6,5701.0 2006-07-14,5765.0,5765.0,5707.6,5707.6 2006-07-13,5860.6,5860.6,5751.9,5765.0 2006-07-12,5857.3,5899.3,5842.7,5860.6 2006-07-11,5896.9,5896.9,5844.0,5857.3 2006-07-10,5888.9,5901.0,5856.5,5896.9 2006-07-07,5890.0,5908.5,5858.4,5888.9 2006-07-06,5826.7,5897.1,5826.7,5890.0 2006-07-05,5883.5,5883.5,5815.7,5826.7 2006-07-04,5884.4,5884.5,5848.3,5883.5 2006-07-03,5833.4,5884.4,5833.4,5884.4 2006-06-30,5791.5,5865.7,5791.5,5833.4 2006-06-29,5678.6,5791.7,5678.6,5791.5 2006-06-28,5652.3,5702.9,5633.8,5678.6 2006-06-27,5681.2,5729.8,5650.0,5652.3 2006-06-26,5692.1,5716.5,5677.5,5681.2 2006-06-23,5684.1,5716.7,5667.8,5692.1 2006-06-22,5665.0,5736.8,5657.2,5684.1 2006-06-21,5658.2,5673.5,5610.8,5665.0 2006-06-20,5626.1,5658.2,5585.0,5658.2 2006-06-19,5597.4,5665.7,5597.4,5626.1 2006-06-16,5619.3,5701.5,5594.3,5597.4 2006-06-15,5506.8,5636.8,5506.8,5619.3 2006-06-14,5519.6,5544.4,5475.6,5506.8 2006-06-13,5620.9,5620.9,5467.4,5519.6 2006-06-12,5655.2,5666.3,5612.3,5620.9 2006-06-09,5562.9,5673.6,5562.9,5655.2 2006-06-08,5706.3,5706.3,5562.9,5562.9 2006-06-07,5669.8,5720.6,5638.5,5706.3 2006-06-06,5762.1,5762.1,5656.6,5669.8 2006-06-05,5764.6,5789.8,5738.9,5762.1 2006-06-02,5749.7,5802.9,5745.7,5764.6 2006-06-01,5723.8,5754.8,5680.6,5749.7 2006-05-31,5652.0,5743.8,5591.5,5723.8 2006-05-30,5791.0,5793.6,5643.3,5652.0 2006-05-26,5677.7,5791.0,5677.7,5791.0 2006-05-25,5587.1,5677.7,5562.0,5677.7 2006-05-24,5678.7,5678.7,5563.5,5587.1 2006-05-23,5532.7,5705.9,5532.7,5678.7 2006-05-22,5657.4,5657.4,5510.5,5532.7 2006-05-19,5671.6,5715.0,5645.4,5657.4 2006-05-18,5675.5,5719.7,5618.7,5671.6 2006-05-17,5846.2,5871.6,5675.5,5675.5 2006-05-16,5841.3,5883.2,5807.1,5846.2 2006-05-15,5912.1,5912.1,5755.4,5841.3 2006-05-12,6042.0,6042.0,5912.1,5912.1 2006-05-11,6083.4,6114.5,6039.9,6042.0 2006-05-10,6105.6,6110.0,6079.6,6083.4 2006-05-09,6067.1,6109.7,6054.6,6105.6 2006-05-08,6091.7,6133.5,6058.8,6067.1 2006-05-05,6036.9,6093.1,6033.9,6091.7 2006-05-04,6010.0,6045.8,6001.1,6036.9 2006-05-03,6082.1,6100.0,6008.7,6010.0 2006-05-02,6023.1,6090.7,6022.3,6082.1 2006-04-28,6060.0,6060.0,6023.1,6023.1 2006-04-27,6104.3,6104.6,6026.2,6060.0 2006-04-26,6086.6,6126.5,6086.6,6104.3 2006-04-25,6098.7,6128.8,6084.6,6086.6 2006-04-24,6132.7,6136.5,6098.7,6098.7 2006-04-21,6081.4,6137.1,6077.9,6132.7 2006-04-20,6089.8,6113.4,6074.2,6081.4 2006-04-19,6044.1,6100.6,6044.1,6089.8 2006-04-18,6029.4,6056.1,6026.1,6044.1 2006-04-13,6000.8,6033.7,5987.2,6029.4 2006-04-12,6016.5,6020.0,5974.5,6000.8 2006-04-11,6067.0,6092.5,6012.9,6016.5 2006-04-10,6026.1,6067.0,6024.3,6067.0 2006-04-07,6045.7,6074.2,6020.6,6026.1 2006-04-06,6044.1,6073.3,6037.6,6045.7 2006-04-05,6004.7,6047.5,5983.5,6044.1 2006-04-04,6024.3,6024.3,5984.3,6004.7 2006-04-03,5964.6,6033.5,5964.6,6024.3 2006-03-31,6015.2,6019.2,5961.4,5964.6 2006-03-30,5959.2,6036.0,5959.2,6015.2 2006-03-29,5935.7,5979.7,5927.2,5959.2 2006-03-28,5972.2,6004.3,5929.7,5935.7 2006-03-27,6036.3,6047.0,5971.4,5972.2 2006-03-24,5990.1,6037.9,5990.1,6036.3 2006-03-23,6007.5,6029.4,5974.8,5990.1 2006-03-22,5991.3,6012.6,5957.8,6007.5 2006-03-21,5991.7,5992.9,5956.7,5991.3 2006-03-20,5999.4,6039.1,5986.9,5991.7 2006-03-17,5993.2,6044.0,5992.8,5999.4 2006-03-16,5965.1,5995.2,5951.0,5993.2 2006-03-15,5950.6,5980.5,5950.6,5965.1 2006-03-14,5952.8,5978.6,5940.7,5950.6 2006-03-13,5907.9,5959.9,5907.9,5952.8 2006-03-10,5855.9,5909.1,5838.2,5907.9 2006-03-09,5812.9,5857.1,5812.9,5855.9 2006-03-08,5857.4,5857.6,5790.9,5812.9 2006-03-07,5897.8,5897.8,5830.7,5857.4 2006-03-06,5858.7,5924.5,5858.7,5897.8 2006-03-03,5833.0,5864.0,5803.8,5858.7 2006-03-02,5844.1,5880.0,5803.7,5833.0 2006-03-01,5791.5,5844.1,5783.9,5844.1 2006-02-28,5875.9,5877.4,5788.7,5791.5 2006-02-27,5860.5,5893.3,5860.5,5875.9 2006-02-24,5836.0,5864.0,5836.0,5860.5 2006-02-23,5872.4,5878.8,5829.4,5836.0 2006-02-22,5857.7,5877.6,5836.8,5872.4 2006-02-21,5863.0,5888.0,5856.9,5857.7 2006-02-20,5846.2,5866.7,5839.4,5863.0 2006-02-17,5828.9,5863.3,5822.4,5846.2 2006-02-16,5791.5,5828.9,5791.5,5828.9 2006-02-15,5792.3,5814.5,5780.9,5791.5 2006-02-14,5793.5,5828.6,5773.7,5792.3 2006-02-13,5764.1,5793.5,5760.3,5793.5 2006-02-10,5808.7,5808.7,5764.1,5764.1 2006-02-09,5725.1,5808.9,5725.1,5808.7 2006-02-08,5746.8,5746.8,5681.9,5725.1 2006-02-07,5772.4,5781.3,5734.7,5746.8 2006-02-06,5759.3,5790.4,5759.3,5772.4 2006-02-03,5747.3,5766.7,5728.2,5759.3 2006-02-02,5801.6,5811.8,5743.0,5747.3 2006-02-01,5760.3,5816.0,5746.2,5801.6 2006-01-31,5779.8,5792.5,5760.3,5760.3 2006-01-30,5786.8,5796.1,5772.7,5779.8 2006-01-27,5722.6,5788.2,5722.6,5786.8 2006-01-26,5704.4,5744.0,5698.5,5722.6 2006-01-25,5633.8,5704.4,5633.8,5704.4 2006-01-24,5660.9,5679.0,5630.4,5633.8 2006-01-23,5672.4,5672.4,5625.0,5660.9 2006-01-20,5693.2,5729.8,5666.5,5672.4 2006-01-19,5663.7,5710.0,5663.7,5693.2 2006-01-18,5699.0,5699.0,5634.8,5663.7 2006-01-17,5740.2,5740.2,5693.1,5699.0 2006-01-16,5711.0,5740.2,5707.2,5740.2 2006-01-13,5735.1,5735.1,5690.9,5711.0 2006-01-12,5731.5,5744.6,5724.9,5735.1 2006-01-11,5688.8,5731.5,5688.8,5731.5 2006-01-10,5731.5,5731.5,5686.1,5688.8 2006-01-09,5731.8,5750.3,5725.9,5731.5 2006-01-06,5691.2,5731.8,5691.2,5731.8 2006-01-05,5714.6,5722.4,5686.4,5691.2 2006-01-04,5681.5,5716.4,5681.5,5714.6 2006-01-03,5618.8,5682.2,5618.8,5681.5 2005-12-30,5638.3,5640.0,5596.8,5618.8 2005-12-29,5622.8,5647.2,5622.8,5638.3 2005-12-28,5595.4,5622.8,5591.9,5622.8 2005-12-23,5597.0,5608.2,5588.0,5595.4 2005-12-22,5587.4,5599.3,5584.8,5597.0 2005-12-21,5547.9,5590.2,5547.9,5587.4 2005-12-20,5539.8,5552.2,5524.7,5547.9 2005-12-19,5531.6,5548.4,5525.7,5539.8 2005-12-16,5495.3,5552.6,5495.3,5531.6 2005-12-15,5521.1,5530.2,5489.3,5495.3 2005-12-14,5507.2,5525.0,5503.5,5521.1 2005-12-13,5501.5,5527.2,5499.2,5507.2 2005-12-12,5525.0,5525.6,5494.2,5501.5 2005-12-09,5531.1,5531.1,5504.4,5517.4 2005-12-08,5528.8,5531.9,5492.8,5531.1 2005-12-07,5538.8,5574.0,5518.4,5528.8 2005-12-06,5510.4,5546.9,5505.9,5538.8 2005-12-05,5528.1,5532.5,5498.3,5510.4 2005-12-02,5486.1,5528.1,5485.0,5528.1 2005-12-01,5423.2,5494.7,5423.2,5486.1 2005-11-30,5491.0,5491.0,5423.2,5423.2 2005-11-29,5477.4,5507.4,5451.3,5491.0 2005-11-28,5523.8,5554.9,5477.4,5477.4 2005-11-25,5511.0,5531.4,5511.0,5523.8 2005-11-24,5531.7,5539.0,5499.5,5511.0 2005-11-23,5517.2,5532.7,5507.1,5531.7 2005-11-22,5497.9,5522.4,5497.9,5517.2 2005-11-21,5498.9,5509.4,5486.2,5497.9 2005-11-18,5460.0,5531.6,5460.0,5498.9 2005-11-17,5430.0,5480.1,5430.0,5460.0 2005-11-16,5439.6,5442.2,5391.7,5430.0 2005-11-15,5470.0,5470.0,5424.6,5439.6 2005-11-14,5465.1,5485.9,5455.6,5470.0 2005-11-11,5423.5,5468.8,5423.5,5465.1 2005-11-10,5439.8,5463.9,5423.5,5423.5 2005-11-09,5460.9,5469.4,5439.0,5439.8 2005-11-08,5460.8,5481.7,5451.1,5460.9 2005-11-07,5423.6,5471.0,5415.5,5460.8 2005-11-04,5431.9,5446.4,5418.0,5423.6 2005-11-03,5358.6,5431.9,5358.6,5431.9 2005-11-02,5344.3,5364.7,5316.0,5358.6 2005-11-01,5317.3,5350.3,5304.9,5344.3 2005-10-31,5213.4,5318.4,5213.4,5317.3 2005-10-28,5182.8,5226.9,5157.6,5213.4 2005-10-27,5227.8,5227.8,5168.2,5182.8 2005-10-26,5182.1,5236.5,5182.1,5227.8 2005-10-25,5207.6,5222.4,5182.1,5182.1 2005-10-24,5142.1,5210.1,5140.1,5207.6 2005-10-21,5164.1,5164.1,5130.9,5142.1 2005-10-20,5167.8,5234.0,5146.7,5164.1 2005-10-19,5263.9,5263.9,5167.8,5167.8 2005-10-18,5286.5,5303.2,5259.6,5263.9 2005-10-17,5275.0,5297.1,5272.5,5286.5 2005-10-14,5265.2,5293.8,5245.6,5275.0 2005-10-13,5342.2,5342.2,5256.3,5265.2 2005-10-12,5380.7,5380.7,5342.2,5342.2 2005-10-11,5374.5,5404.4,5373.9,5380.7 2005-10-10,5362.3,5395.8,5362.3,5374.5 2005-10-07,5372.4,5394.4,5355.7,5362.3 2005-10-06,5427.8,5427.8,5358.1,5372.4 2005-10-05,5494.4,5494.4,5427.8,5427.8 2005-10-04,5501.5,5501.5,5475.2,5494.4 2005-10-03,5477.7,5515.0,5474.9,5501.5 2005-09-30,5478.2,5506.1,5462.6,5477.7 2005-09-29,5494.8,5508.4,5467.1,5478.2 2005-09-28,5447.3,5494.8,5447.3,5494.8 2005-09-27,5453.1,5471.2,5442.7,5447.3 2005-09-26,5413.6,5456.9,5413.6,5453.1 2005-09-23,5385.7,5417.4,5383.6,5413.6 2005-09-22,5369.7,5395.5,5354.3,5385.7 2005-09-21,5416.4,5416.4,5369.7,5369.7 2005-09-20,5429.7,5446.6,5410.9,5416.4 2005-09-19,5407.9,5435.8,5388.3,5429.7 2005-09-16,5383.5,5418.7,5375.3,5407.9 2005-09-15,5347.4,5387.1,5342.5,5383.5 2005-09-14,5338.0,5349.7,5327.1,5347.4 2005-09-13,5375.1,5377.8,5329.3,5338.0 2005-09-12,5359.3,5380.7,5359.3,5375.1 2005-09-09,5340.8,5362.4,5340.3,5359.3 2005-09-08,5365.9,5365.9,5338.4,5340.8 2005-09-07,5359.2,5376.1,5358.0,5365.9 2005-09-06,5337.8,5366.6,5337.8,5359.2 2005-09-05,5326.8,5341.8,5320.6,5337.8 2005-09-02,5328.5,5338.1,5319.6,5326.8 2005-09-01,5296.9,5342.1,5296.9,5328.5 2005-08-31,5255.8,5300.0,5255.8,5296.9 2005-08-30,5228.1,5270.2,5228.1,5255.8 2005-08-26,5255.7,5282.1,5228.1,5228.1 2005-08-25,5275.2,5275.2,5248.8,5255.7 2005-08-24,5300.2,5300.2,5270.0,5275.2 2005-08-23,5318.4,5318.4,5294.8,5300.2 2005-08-22,5312.6,5329.7,5312.6,5318.4 2005-08-19,5269.3,5313.1,5269.3,5312.6 2005-08-18,5292.7,5304.7,5263.7,5269.3 2005-08-17,5322.3,5322.3,5284.1,5292.7 2005-08-16,5344.2,5358.7,5316.1,5322.3 2005-08-15,5345.8,5367.8,5339.4,5344.2 2005-08-12,5358.6,5374.4,5343.5,5345.8 2005-08-11,5377.5,5379.6,5355.1,5358.6 2005-08-10,5363.7,5386.4,5351.2,5377.5 2005-08-09,5344.3,5363.7,5342.7,5363.7 2005-08-08,5314.7,5351.3,5314.7,5344.3 2005-08-05,5315.5,5341.8,5306.7,5314.7 2005-08-04,5332.3,5335.4,5300.0,5315.5 2005-08-03,5327.5,5332.3,5304.0,5332.3 2005-08-02,5290.8,5330.6,5290.8,5327.5 2005-08-01,5299.0,5300.8,5283.1,5290.8 2005-07-29,5270.3,5308.6,5270.3,5282.3 2005-07-28,5263.6,5282.3,5262.3,5270.3 2005-07-27,5256.2,5275.2,5253.5,5263.6 2005-07-26,5270.7,5279.4,5253.9,5256.2 2005-07-25,5241.8,5273.5,5241.8,5270.7 2005-07-22,5221.6,5244.6,5202.7,5241.8 2005-07-21,5215.2,5256.0,5180.2,5221.6 2005-07-20,5201.5,5249.5,5193.5,5215.2 2005-07-19,5214.2,5230.9,5191.0,5201.5 2005-07-18,5230.8,5258.4,5212.0,5214.2 2005-07-15,5259.7,5261.5,5222.6,5230.8 2005-07-14,5245.9,5283.9,5245.9,5259.7 2005-07-13,5217.2,5252.0,5217.2,5245.9 2005-07-12,5242.4,5249.4,5216.2,5217.2 2005-07-11,5232.2,5257.9,5232.2,5242.4 2005-07-08,5158.3,5232.2,5158.3,5232.2 2005-07-07,5229.6,5229.6,5022.1,5158.3 2005-07-06,5190.1,5237.6,5190.1,5229.6 2005-07-05,5184.3,5194.2,5173.8,5190.1 2005-07-04,5161.0,5188.6,5161.0,5184.3 2005-07-01,5113.2,5162.6,5106.6,5161.0 2005-06-30,5109.1,5138.2,5097.1,5113.2 2005-06-29,5090.4,5119.5,5090.2,5109.1 2005-06-28,5043.5,5090.4,5043.5,5090.4 2005-06-27,5079.0,5079.0,5036.9,5043.5 2005-06-24,5114.4,5114.4,5069.1,5079.0 2005-06-23,5099.3,5121.9,5099.1,5114.4 2005-06-22,5082.1,5110.5,5076.6,5099.3 2005-06-21,5072.0,5091.0,5072.0,5082.1 2005-06-20,5077.6,5078.0,5057.9,5072.0 2005-06-17,5045.0,5098.5,5044.6,5077.6 2005-06-16,5019.5,5046.4,5019.5,5045.0 2005-06-15,5046.8,5060.8,5013.4,5019.5 2005-06-14,5050.4,5054.3,5037.5,5046.8 2005-06-13,5030.4,5051.0,5026.1,5050.4 2005-06-10,5009.2,5047.3,5009.2,5030.4 2005-06-09,5003.7,5009.8,4984.2,5009.2 2005-06-08,5025.2,5025.2,4995.1,5003.7 2005-06-07,4980.4,5027.9,4980.4,5025.2 2005-06-06,4999.4,5006.8,4976.2,4980.4 2005-06-03,5005.0,5016.6,4987.2,4999.4 2005-06-02,5011.0,5014.9,4996.5,5005.0 2005-06-01,4964.0,5011.0,4964.0,5011.0 2005-05-31,4986.3,4999.7,4964.0,4964.0 2005-05-27,4994.9,5002.0,4976.6,4986.3 2005-05-26,4971.5,5004.3,4956.8,4994.9 2005-05-25,4982.5,4983.6,4964.1,4971.5 2005-05-24,4989.8,4990.2,4974.2,4982.5 2005-05-23,4971.8,4991.6,4971.8,4989.8 2005-05-20,4962.7,4981.1,4962.7,4971.8 2005-05-19,4949.4,4972.9,4949.4,4962.7 2005-05-18,4898.5,4956.9,4898.5,4949.4 2005-05-17,4884.2,4902.0,4880.7,4898.5 2005-05-16,4886.5,4887.7,4869.0,4884.2 2005-05-13,4893.2,4893.2,4854.2,4886.5 2005-05-12,4875.4,4909.8,4875.4,4893.2 2005-05-11,4892.4,4896.6,4868.2,4875.4 2005-05-10,4910.3,4929.1,4880.2,4892.4 2005-05-09,4918.9,4928.7,4895.1,4910.3 2005-05-06,4902.3,4924.6,4897.6,4918.9 2005-05-05,4882.5,4917.6,4882.5,4902.3 2005-05-04,4861.2,4882.5,4847.9,4882.5 2005-05-03,4801.7,4862.9,4801.7,4861.2 2005-04-29,4790.2,4824.4,4773.7,4801.7 2005-04-28,4789.4,4820.7,4775.5,4790.2 2005-04-27,4845.5,4845.5,4780.6,4789.4 2005-04-26,4864.9,4879.6,4831.5,4845.5 2005-04-25,4849.3,4867.8,4841.3,4864.9 2005-04-22,4819.6,4859.0,4819.6,4849.3 2005-04-21,4822.0,4839.1,4805.5,4819.6 2005-04-20,4855.6,4873.6,4817.8,4822.0 2005-04-19,4827.1,4862.6,4827.1,4855.6 2005-04-18,4891.6,4891.6,4794.8,4827.1 2005-04-15,4945.4,4945.4,4891.6,4891.6 2005-04-14,4954.4,4960.8,4937.0,4945.4 2005-04-13,4946.9,4973.8,4946.9,4960.8 2005-04-12,4971.7,4973.8,4941.1,4946.2 2005-04-11,4982.4,4982.4,4964.0,4973.2 2005-04-08,4979.7,4994.1,4975.0,4983.6 2005-04-07,4947.9,4984.5,4947.9,4977.0 2005-04-06,4947.1,4953.6,4937.4,4947.4 2005-04-05,4898.0,4943.8,4898.0,4942.9 2005-04-04,4914.1,4923.3,4877.0,4896.7 2005-04-01,4899.2,4942.0,4899.2,4914.0 2005-03-31,4915.0,4933.8,4894.4,4894.4 2005-03-30,4905.9,4905.9,4886.5,4900.7 2005-03-29,4924.3,4924.3,4892.8,4919.0 2005-03-24,4906.8,4933.7,4904.5,4922.5 2005-03-23,4937.1,4937.1,4887.2,4910.4 2005-03-22,4933.3,4946.8,4908.5,4937.3 2005-03-21,4926.8,4952.2,4925.3,4933.5 2005-03-18,4927.7,4947.9,4922.1,4923.3 2005-03-17,4945.2,4952.9,4920.0,4922.1 2005-03-16,4994.8,4994.8,4928.1,4937.6 2005-03-15,4977.9,5006.1,4976.3,5000.2 2005-03-14,4981.3,4995.0,4947.9,4975.0 2005-03-11,4968.0,4991.6,4968.0,4982.0 2005-03-10,4992.2,4992.2,4956.8,4962.1 2005-03-09,5011.8,5038.9,4992.9,4996.1 2005-03-08,5029.6,5029.6,5001.9,5010.9 2005-03-07,5032.7,5041.3,5014.5,5027.2 2005-03-04,5016.0,5042.0,5011.7,5036.3 2005-03-03,4993.0,5024.0,4992.9,5014.8 2005-03-02,5000.9,5000.9,4965.9,4992.8 2005-03-01,4968.8,5004.9,4966.9,5000.5 2005-02-28,5005.5,5030.2,4968.4,4968.5 2005-02-25,4972.1,5010.8,4972.8,5006.8 2005-02-24,4990.9,5002.5,4972.1,4972.1 2005-02-23,5030.9,5030.9,4970.8,4988.5 2005-02-22,5061.6,5063.3,5013.2,5032.9 2005-02-21,5063.7,5077.8,5047.5,5060.8 2005-02-18,5057.3,5066.5,5045.5,5057.2 2005-02-17,5055.3,5077.6,5051.8,5057.4 2005-02-16,5050.5,5059.5,5035.5,5053.2 2005-02-15,5041.2,5065.7,5036.1,5058.9 2005-02-14,5044.3,5049.6,5030.5,5041.8 2005-02-11,5000.1,5045.0,5000.1,5044.2 2005-02-10,4989.4,5014.8,4977.3,5000.0 2005-02-09,4996.2,5003.0,4974.5,4990.4 2005-02-08,4978.6,4995.5,4968.7,4995.5 2005-02-07,4950.1,4982.8,4950.1,4979.8 2005-02-04,4916.5,4947.4,4916.5,4941.5 2005-02-03,4914.2,4924.1,4898.4,4908.3 2005-02-02,4912.8,4918.8,4897.5,4916.2 2005-02-01,4854.2,4906.2,4854.2,4906.2 2005-01-31,4847.2,4879.5,4847.2,4852.3 2005-01-28,4857.0,4860.4,4827.3,4832.8 2005-01-27,4850.0,4860.3,4835.0,4853.4 2005-01-26,4843.3,4860.3,4839.0,4847.1 2005-01-25,4809.9,4850.0,4803.7,4843.2 2005-01-24,4796.0,4814.0,4770.1,4812.5 2005-01-21,4801.8,4813.9,4785.6,4803.3 2005-01-20,4812.3,4812.3,4783.3,4800.8 2005-01-19,4823.3,4845.4,4817.5,4818.3 2005-01-18,4847.4,4852.8,4800.8,4823.9 2005-01-17,4827.5,4846.7,4827.5,4846.7 2005-01-14,4800.1,4831.6,4786.5,4820.8 2005-01-13,4784.3,4809.8,4782.5,4800.3 2005-01-12,4816.1,4823.2,4765.4,4783.6 2005-01-11,4841.3,4847.6,4805.0,4818.7 2005-01-10,4857.2,4858.9,4833.4,4840.7 2005-01-07,4824.7,4863.5,4819.8,4854.1 2005-01-06,4806.7,4833.3,4806.7,4824.3 2005-01-05,4827.3,4827.3,4806.0,4806.0 2005-01-04,4809.4,4851.6,4809.4,4847.0 2004-12-31,4818.4,4822.3,4801.1,4814.3 2004-12-30,4819.2,4826.2,4813.5,4820.1 2004-12-29,4788.7,4819.8,4787.4,4819.8 2004-12-24,4787.5,4807.8,4780.9,4798.1 2004-12-23,4777.6,4789.5,4774.9,4787.7 2004-12-22,4746.8,4783.7,4746.8,4777.4 2004-12-21,4737.7,4742.1,4731.4,4733.0 2004-12-20,4710.8,4744.4,4710.6,4731.1 2004-12-17,4738.8,4747.3,4689.6,4696.8 2004-12-16,4740.8,4747.7,4729.7,4735.2 2004-12-15,4724.3,4750.1,4724.3,4728.2 2004-12-14,4741.7,4755.0,4709.7,4722.8 2004-12-13,4688.7,4737.5,4688.7,4736.8 2004-12-10,4695.1,4719.2,4682.2,4694.0 2004-12-09,4704.8,4719.2,4675.0,4688.4 2004-12-08,4701.2,4714.3,4695.6,4703.9 2004-12-07,4720.7,4741.5,4717.3,4728.7 2004-12-06,4732.9,4735.8,4707.1,4722.8 2004-12-03,4752.4,4771.2,4734.8,4747.9 2004-12-02,4741.3,4758.5,4733.3,4751.2 2004-12-01,4703.5,4748.6,4703.1,4735.7 2004-11-30,4754.0,4759.9,4696.8,4703.2 2004-11-29,4740.2,4791.0,4739.5,4749.8 2004-11-26,4749.2,4749.2,4726.1,4741.5 2004-11-25,4720.0,4753.4,4720.0,4753.4 2004-11-24,4744.7,4750.9,4713.6,4719.4 2004-11-23,4733.3,4767.7,4733.3,4742.4 2004-11-22,4756.8,4756.8,4717.4,4733.1 2004-11-19,4804.3,4804.3,4756.5,4760.8 2004-11-18,4805.3,4805.3,4805.3,4805.3 2004-11-17,4770.2,4800.4,4770.2,4795.9 2004-11-16,4805.0,4807.8,4761.5,4770.4 2004-11-15,4805.3,4823.8,4789.0,4803.1 2004-11-12,4784.0,4798.7,4777.4,4793.9 2004-11-11,4735.8,4779.5,4728.7,4776.9 2004-11-10,4718.4,4746.4,4718.4,4734.5 2004-11-09,4716.8,4727.0,4712.0,4717.7 2004-11-08,4739.2,4739.2,4706.4,4716.6 2004-11-05,4730.3,4761.9,4728.0,4739.8 2004-11-04,4714.0,4728.3,4698.2,4728.3 2004-11-03,4704.4,4723.6,4704.4,4718.5 2004-11-02,4686.5,4696.9,4675.6,4693.2 2004-11-01,4637.5,4681.6,4629.6,4673.8 2004-10-29,4642.0,4649.1,4624.2,4624.2 2004-10-28,4647.1,4663.4,4620.0,4642.8 2004-10-27,4583.8,4630.6,4583.8,4630.1 2004-10-26,4575.8,4585.4,4562.0,4583.4 2004-10-25,4615.1,4615.1,4551.6,4564.5 2004-10-22,4616.4,4642.3,4614.2,4615.4 2004-10-21,4616.6,4642.3,4592.2,4617.4 2004-10-20,4645.4,4645.4,4599.3,4616.4 2004-10-19,4627.4,4675.8,4627.4,4655.2 2004-10-18,4622.8,4638.6,4610.9,4626.6 2004-10-15,4626.0,4629.9,4605.8,4622.7 2004-10-14,4634.7,4642.5,4617.0,4629.4 2004-10-13,4654.6,4675.8,4633.4,4634.8 2004-10-12,4688.9,4689.4,4634.4,4647.9 2004-10-11,4698.3,4706.9,4684.1,4685.5 2004-10-08,4694.1,4724.4,4679.7,4698.9 2004-10-07,4712.0,4732.9,4686.0,4698.7 2004-10-06,4710.7,4713.4,4689.2,4706.3 2004-10-05,4682.1,4714.9,4674.6,4707.1 2004-10-04,4676.2,4701.5,4676.0,4681.8 2004-10-01,4571.4,4663.9,4571.4,4659.6 2004-09-30,4591.7,4607.8,4569.1,4570.8 2004-09-29,4570.2,4600.9,4570.2,4588.1 2004-09-28,4535.9,4576.2,4528.1,4567.3 2004-09-27,4577.6,4577.6,4532.0,4541.2 2004-09-24,4563.4,4581.9,4557.2,4578.1 2004-09-23,4591.9,4598.6,4560.7,4568.3 2004-09-22,4607.7,4630.7,4592.3,4592.3 2004-09-21,4578.7,4615.9,4578.7,4608.4 2004-09-20,4590.6,4590.6,4562.0,4579.5 2004-09-17,4551.1,4602.1,4544.4,4591.0 2004-09-16,4551.3,4564.0,4545.1,4556.5 2004-09-15,4548.4,4575.2,4541.9,4548.4 2004-09-14,4558.1,4561.6,4539.0,4545.6 2004-09-13,4545.9,4568.0,4543.3,4558.5 2004-09-10,4540.0,4565.1,4538.9,4545.0 2004-09-09,4554.8,4554.8,4529.6,4538.0 2004-09-08,4562.2,4574.0,4553.6,4558.4 2004-09-07,4565.0,4572.3,4547.3,4565.6 2004-09-06,4548.2,4569.5,4547.1,4563.8 2004-09-03,4523.1,4553.4,4508.3,4550.8 2004-09-02,4509.6,4531.9,4487.5,4518.6 2004-09-01,4460.8,4502.4,4460.8,4502.0 2004-08-31,4478.9,4488.7,4458.8,4459.3 2004-08-27,4453.8,4490.1,4453.6,4490.1 2004-08-26,4412.7,4453.9,4412.7,4453.9 2004-08-25,4413.9,4419.3,4399.8,4411.6 2004-08-24,4404.8,4421.2,4402.4,4407.5 2004-08-23,4374.4,4423.7,4374.4,4405.3 2004-08-20,4361.8,4373.2,4349.5,4369.2 2004-08-19,4359.8,4381.4,4353.2,4362.6 2004-08-18,4351.0,4360.3,4331.6,4355.2 2004-08-17,4349.1,4373.7,4338.6,4358.7 2004-08-16,4301.7,4353.4,4283.0,4350.2 2004-08-13,4326.6,4334.4,4297.0,4301.5 2004-08-12,4317.3,4342.9,4312.9,4328.1 2004-08-11,4356.3,4356.9,4289.6,4312.2 2004-08-10,4314.7,4350.9,4313.1,4350.9 2004-08-09,4340.1,4349.2,4293.5,4314.4 2004-08-06,4411.8,4411.8,4337.9,4337.9 2004-08-05,4416.2,4432.5,4413.4,4413.4 2004-08-04,4429.3,4429.3,4376.8,4408.1 2004-08-03,4422.0,4429.7,4408.1,4429.7 2004-08-02,4410.8,4419.8,4390.9,4415.7 2004-07-30,4418.9,4425.3,4398.0,4413.1 2004-07-29,4357.2,4420.0,4357.2,4418.7 2004-07-28,4341.5,4370.9,4341.5,4356.2 2004-07-27,4289.3,4324.9,4288.8,4324.9 2004-07-26,4324.8,4333.5,4283.2,4287.0 2004-07-23,4321.6,4349.6,4319.8,4326.3 2004-07-22,4363.3,4363.3,4306.3,4306.3 2004-07-21,4343.0,4391.5,4343.0,4377.3 2004-07-20,4321.1,4348.8,4297.5,4339.4 2004-07-19,4339.1,4349.3,4321.1,4321.1 2004-07-16,4344.8,4357.4,4328.3,4339.2 2004-07-15,4372.4,4372.4,4340.7,4340.7 2004-07-14,4357.0,4373.2,4324.5,4372.6 2004-07-13,4367.6,4379.9,4352.6,4357.7 2004-07-12,4387.4,4395.6,4354.3,4360.0 2004-07-09,4380.8,4393.2,4356.8,4393.2 2004-07-08,4353.5,4383.4,4324.1,4381.1 2004-07-07,4379.3,4392.9,4354.7,4358.4 2004-07-06,4404.2,4414.3,4365.3,4370.7 2004-07-05,4410.2,4423.3,4403.3,4403.3 2004-07-02,4427.9,4430.9,4398.3,4407.4 2004-07-01,4471.8,4487.9,4424.7,4424.7 2004-06-30,4512.2,4512.8,4464.1,4464.1 2004-06-29,4518.5,4518.5,4492.1,4512.4 2004-06-28,4492.3,4535.1,4478.5,4518.7 2004-06-25,4494.9,4503.9,4485.2,4494.1 2004-06-24,4497.8,4516.7,4488.7,4503.2 2004-06-23,4469.2,4498.1,4469.2,4486.7 2004-06-22,4501.7,4501.7,4459.8,4468.5 2004-06-21,4507.8,4511.1,4485.1,4502.2 2004-06-18,4491.9,4510.5,4474.4,4505.8 2004-06-17,4489.0,4504.7,4482.0,4493.3 2004-06-16,4458.5,4508.3,4454.8,4491.1 2004-06-15,4436.3,4462.3,4434.5,4458.6 2004-06-14,4484.1,4484.1,4430.3,4433.2 2004-06-11,4487.0,4492.3,4463.0,4484.0 2004-06-10,4485.5,4494.4,4475.8,4486.1 2004-06-09,4505.4,4513.7,4481.2,4489.5 2004-06-08,4495.1,4515.2,4486.9,4504.8 2004-06-07,4459.2,4496.3,4459.2,4491.6 2004-06-04,4435.5,4457.0,4428.3,4454.4 2004-06-03,4425.0,4435.4,4400.7,4435.4 2004-06-02,4426.5,4462.1,4422.8,4422.8 2004-06-01,4447.8,4448.4,4411.4,4422.7 2004-05-28,4460.3,4471.3,4423.1,4430.7 2004-05-27,4435.4,4470.3,4429.0,4453.6 2004-05-26,4449.6,4460.6,4415.3,4438.3 2004-05-25,4424.9,4424.9,4396.6,4418.0 2004-05-24,4431.5,4466.5,4427.3,4428.9 2004-05-21,4428.3,4453.5,4414.4,4431.4 2004-05-20,4470.9,4470.9,4418.8,4428.7 2004-05-19,4418.0,4471.8,4418.0,4471.8 2004-05-18,4415.4,4422.1,4403.9,4414.4 2004-05-17,4431.8,4431.8,4363.0,4403.0 2004-05-14,4452.6,4452.6,4412.3,4441.8 2004-05-13,4415.4,4454.1,4415.4,4453.8 2004-05-12,4445.4,4448.3,4410.0,4412.9 2004-05-11,4405.6,4454.7,4405.6,4454.7 2004-05-10,4498.1,4498.1,4395.2,4395.2 2004-05-07,4520.2,4531.2,4463.2,4498.4 2004-05-06,4568.2,4571.1,4511.7,4516.2 2004-05-05,4545.4,4573.7,4528.6,4569.5 2004-05-04,4501.4,4553.8,4500.9,4547.2 2004-04-30,4519.4,4529.0,4489.7,4489.7 2004-04-29,4524.3,4540.8,4494.6,4519.5 2004-04-28,4575.5,4584.5,4524.5,4524.5 2004-04-27,4578.0,4582.3,4550.2,4575.7 2004-04-26,4568.8,4586.9,4566.3,4571.8 2004-04-23,4575.9,4601.6,4565.3,4570.0 2004-04-22,4539.3,4575.6,4524.5,4571.8 2004-04-21,4551.3,4551.3,4527.2,4539.9 2004-04-20,4548.1,4581.7,4548.1,4569.0 2004-04-19,4536.0,4548.2,4519.8,4546.2 2004-04-16,4505.1,4540.2,4505.1,4537.3 2004-04-15,4485.7,4512.1,4478.3,4505.5 2004-04-14,4513.9,4513.9,4456.2,4485.4 2004-04-13,4511.2,4525.0,4498.3,4515.8 2004-04-08,4475.9,4504.7,4475.9,4489.7 2004-04-07,4471.8,4499.8,4468.7,4468.7 2004-04-06,4484.7,4495.2,4462.0,4472.8 2004-04-05,4466.4,4483.1,4451.4,4480.7 2004-04-02,4412.5,4471.3,4408.0,4465.6 2004-04-01,4397.5,4419.4,4385.1,4410.7 2004-03-31,4412.6,4427.2,4382.8,4385.7 2004-03-30,4411.2,4415.9,4393.5,4412.8 2004-03-29,4358.0,4417.2,4358.0,4406.7 2004-03-26,4376.2,4386.9,4345.0,4357.5 2004-03-25,4316.6,4373.6,4316.6,4373.6 2004-03-24,4324.9,4341.4,4291.3,4309.4 2004-03-23,4336.2,4360.6,4318.5,4318.5 2004-03-22,4415.2,4415.2,4319.5,4333.8 2004-03-19,4419.0,4428.2,4402.5,4417.7 2004-03-18,4457.0,4460.0,4397.9,4397.9 2004-03-17,4429.1,4463.0,4412.8,4456.8 2004-03-16,4414.9,4438.7,4394.6,4428.9 2004-03-15,4468.8,4471.2,4412.9,4412.9 2004-03-12,4443.5,4468.4,4374.5,4467.4 2004-03-11,4543.3,4543.3,4429.2,4445.2 2004-03-10,4541.8,4549.8,4520.6,4545.3 2004-03-09,4542.7,4552.6,4529.2,4542.0 2004-03-08,4547.6,4562.0,4543.5,4553.8 2004-03-05,4559.8,4566.2,4521.5,4547.1 2004-03-04,4524.7,4562.8,4524.7,4559.1 2004-03-03,4539.3,4539.3,4508.1,4525.1 2004-03-02,4556.4,4559.2,4522.7,4540.1 2004-03-01,4493.2,4540.7,4493.2,4537.0 2004-02-27,4522.5,4556.9,4492.2,4492.2 2004-02-26,4506.6,4526.9,4500.5,4515.9 2004-02-25,4491.6,4513.9,4478.7,4507.5 2004-02-24,4522.3,4537.5,4476.7,4496.8 2004-02-23,4522.0,4556.4,4520.7,4524.3 2004-02-20,4513.2,4549.6,4499.2,4515.0 2004-02-19,4444.8,4517.3,4444.8,4515.6 2004-02-18,4461.1,4468.9,4442.9,4442.9 2004-02-17,4408.0,4465.0,4397.3,4461.5 2004-02-16,4412.9,4412.9,4389.9,4408.1 2004-02-13,4379.8,4423.9,4379.8,4412.0 2004-02-12,4396.1,4416.4,4370.2,4377.7 2004-02-11,4407.7,4416.0,4377.3,4396.0 2004-02-10,4432.1,4432.1,4400.8,4404.9 2004-02-09,4404.2,4436.8,4404.2,4434.4 2004-02-06,4394.8,4407.5,4384.1,4402.7 2004-02-05,4398.0,4404.0,4378.4,4384.4 2004-02-04,4389.1,4409.3,4369.1,4398.5 2004-02-03,4391.5,4392.1,4357.4,4390.6 2004-02-02,4396.8,4411.6,4366.9,4381.4 2004-01-30,4420.3,4436.2,4390.7,4390.7 2004-01-29,4466.7,4466.7,4410.2,4411.5 2004-01-28,4446.3,4474.2,4426.8,4468.1 2004-01-27,4447.6,4479.5,4444.8,4447.0 2004-01-26,4469.9,4482.5,4432.9,4445.5 2004-01-23,4479.1,4483.0,4438.6,4460.8 2004-01-22,4528.6,4531.4,4476.8,4476.8 2004-01-21,4500.7,4511.2,4486.9,4511.2 2004-01-20,4518.5,4527.5,4498.5,4499.3 2004-01-19,4487.7,4526.3,4487.7,4518.1 2004-01-16,4457.2,4491.7,4457.2,4487.9 2004-01-15,4459.3,4474.0,4443.3,4456.1 2004-01-14,4438.6,4464.5,4431.1,4461.4 2004-01-13,4448.3,4477.9,4436.6,4440.1 2004-01-12,4466.0,4466.0,4443.4,4449.6 2004-01-09,4495.8,4495.8,4445.1,4466.3 2004-01-08,4480.0,4520.1,4480.0,4494.2 2004-01-07,4505.7,4512.1,4466.2,4473.0 2004-01-06,4513.9,4522.9,4489.9,4505.2 2004-01-05,4510.3,4515.2,4494.9,4513.3 2004-01-02,4477.8,4518.0,4477.8,4510.2 2003-12-31,4471.48,4491.77,4471.48,4476.9 2003-12-30,4457.6,4477.0,4452.8,4470.4 2003-12-29,4443.2,4460.9,4432.8,4457.5 2003-12-24,4441.0,4457.4,4432.9,4444.7 2003-12-23,4437.0,4440.9,4411.5,4440.9 2003-12-22,4412.0,4431.5,4392.4,4424.0 2003-12-19,4400.3,4427.8,4389.0,4412.3 2003-12-18,4354.5,4402.7,4347.7,4397.3 2003-12-17,4333.1,4366.5,4333.1,4354.2 2003-12-16,4336.4,4351.0,4329.0,4333.0 2003-12-15,4376.1,4397.2,4348.0,4348.0 2003-12-12,4334.7,4366.8,4329.8,4347.6 2003-12-11,4335.3,4347.2,4316.2,4331.3 2003-12-10,4379.3,4379.3,4312.5,4335.4 2003-12-09,4360.7,4407.5,4360.7,4379.6 2003-12-08,4367.3,4367.3,4338.3,4359.8 2003-12-05,4377.4,4385.4,4337.7,4367.0 2003-12-04,4391.3,4391.3,4371.5,4378.2 2003-12-03,4374.9,4401.6,4373.0,4392.0 2003-12-02,4411.7,4416.5,4359.9,4378.9 2003-12-01,4350.8,4410.0,4350.8,4410.0 2003-11-28,4363.6,4380.2,4333.2,4342.6 2003-11-27,4380.7,4390.4,4350.7,4361.1 2003-11-26,4388.7,4423.6,4366.7,4370.3 2003-11-25,4382.3,4409.4,4378.1,4388.7 2003-11-24,4320.8,4384.5,4320.8,4382.4 2003-11-21,4305.2,4324.0,4295.6,4319.0 2003-11-20,4336.5,4356.5,4270.5,4308.0 2003-11-19,4334.9,4340.3,4316.1,4327.4 2003-11-18,4339.6,4375.3,4339.6,4354.7 2003-11-17,4390.7,4390.7,4337.3,4338.9 2003-11-14,4375.1,4411.3,4375.1,4397.0 2003-11-13,4377.7,4406.8,4361.2,4373.0 2003-11-12,4343.6,4372.7,4336.2,4371.2 2003-11-11,4337.3,4349.2,4313.5,4345.1 2003-11-10,4371.7,4373.9,4338.6,4341.8 2003-11-07,4325.9,4389.2,4325.9,4376.9 2003-11-06,4306.0,4337.7,4283.4,4324.2 2003-11-05,4327.5,4327.5,4288.1,4303.4 2003-11-04,4329.2,4352.6,4322.4,4330.3 2003-11-03,4287.3,4338.1,4286.1,4332.6 2003-10-31,4290.6,4292.3,4274.0,4287.6 2003-10-30,4266.8,4332.9,4260.3,4300.9 2003-10-29,4278.4,4293.1,4256.2,4265.7 2003-10-28,4264.0,4280.1,4255.6,4272.9 2003-10-27,4246.2,4267.0,4238.1,4251.3 2003-10-24,4239.6,4248.7,4219.0,4239.0 2003-10-23,4277.6,4277.6,4212.5,4240.2 2003-10-22,4353.5,4359.4,4266.1,4285.6 2003-10-21,4350.2,4377.6,4347.1,4352.3 2003-10-20,4336.9,4370.4,4329.4,4347.5 2003-10-17,4343.8,4360.1,4334.5,4344.0 2003-10-16,4359.2,4371.2,4326.4,4339.7 2003-10-15,4341.0,4393.8,4341.0,4368.8 2003-10-14,4372.0,4375.0,4323.9,4334.1 2003-10-13,4362.3,4362.3,4362.3,4362.3 2003-10-10,4311.0,4311.0,4311.0,4311.0 2003-10-09,4272.2,4316.8,4259.2,4313.9 2003-10-08,4268.6,4268.6,4268.6,4268.6 2003-10-07,4272.0,4272.0,4272.0,4272.0 2003-10-06,4270.1,4270.1,4270.1,4270.1 2003-10-03,4274.0,4274.0,4274.0,4274.0 2003-10-02,4172.0,4209.1,4172.0,4209.1 2003-10-01,4169.2,4169.2,4169.2,4169.2 2003-09-30,4091.3,4091.3,4091.3,4091.3 2003-09-29,4142.7,4142.7,4142.7,4142.7 2003-09-26,4157.1,4157.1,4157.1,4157.1 2003-09-25,4225.4,4225.4,4176.5,4202.2 2003-09-24,4236.4,4236.4,4236.4,4236.4 2003-09-23,4221.7,4221.7,4221.7,4221.7 2003-09-22,4228.2,4228.2,4228.2,4228.2 2003-09-19,4257.0,4257.0,4257.0,4257.0 2003-09-18,4314.7,4314.7,4314.7,4314.7 2003-09-17,4293.0,4293.0,4293.0,4293.0 2003-09-16,4299.0,4299.0,4299.0,4299.0 2003-09-15,4260.9,4260.9,4260.9,4260.9 2003-09-12,4247.7,4276.2,4229.6,4237.8 2003-09-11,4242.2,4242.2,4242.2,4242.2 2003-09-10,4252.1,4252.1,4252.1,4252.1 2003-09-09,4263.9,4263.9,4263.9,4263.9 2003-09-08,4292.1,4292.1,4292.1,4292.1 2003-09-05,4257.2,4257.2,4257.2,4257.2 2003-09-04,4262.1,4270.2,4240.7,4248.8 2003-09-03,4204.4,4279.1,4204.4,4262.1 2003-09-02,4204.4,4218.5,4193.3,4204.4 2003-09-01,4161.1,4222.1,4161.1,4204.4 2003-08-29,4198.0,4227.7,4161.1,4161.1 2003-08-28,4206.4,4229.0,4182.5,4198.0 2003-08-27,4177.4,4214.3,4177.4,4206.4 2003-08-26,4225.9,4227.8,4171.6,4177.4 2003-08-22,4223.5,4265.3,4222.0,4225.9 2003-08-21,4217.4,4250.4,4217.1,4223.5 2003-08-20,4250.8,4254.4,4196.5,4217.4 2003-08-19,4272.1,4286.9,4246.3,4250.8 2003-08-18,4247.3,4272.6,4244.6,4272.1 2003-08-15,4237.8,4266.4,4233.5,4247.3 2003-08-14,4180.7,4242.8,4180.7,4237.8 2003-08-13,4185.6,4216.8,4175.1,4180.7 2003-08-12,4176.7,4203.5,4170.9,4185.6 2003-08-11,4147.8,4181.7,4147.8,4176.7 2003-08-08,4095.6,4160.7,4095.6,4147.8 2003-08-07,4070.4,4095.6,4059.7,4095.6 2003-08-06,4121.0,4121.0,4044.9,4070.4 2003-08-05,4100.1,4131.0,4091.1,4121.0 2003-08-04,4098.4,4147.4,4086.2,4100.1 2003-08-01,4157.0,4157.0,4096.7,4098.4 2003-07-31,4141.2,4171.0,4114.1,4157.0 2003-07-30,4137.0,4159.3,4131.7,4141.2 2003-07-29,4148.8,4164.4,4125.0,4137.0 2003-07-28,4131.2,4183.0,4131.2,4148.8 2003-07-25,4149.6,4149.6,4116.3,4131.2 2003-07-24,4086.5,4155.2,4086.5,4149.6 2003-07-23,4079.7,4115.2,4077.9,4086.5 2003-07-22,4044.3,4079.7,4043.5,4079.7 2003-07-21,4073.2,4097.9,4043.8,4044.3 2003-07-18,4056.6,4090.3,4056.6,4073.2 2003-07-17,4077.1,4082.6,4031.9,4056.6 2003-07-16,4102.5,4132.0,4077.1,4077.1 2003-07-15,4127.6,4135.6,4102.5,4102.5 2003-07-14,4058.1,4135.9,4058.1,4127.6 2003-07-11,4028.8,4064.2,4013.7,4058.1 2003-07-10,4054.7,4068.2,4014.5,4028.8 2003-07-09,4073.6,4086.6,4048.6,4054.7 2003-07-08,4074.8,4088.2,4051.4,4073.6 2003-07-07,4021.5,4076.8,4021.1,4074.8 2003-07-04,4024.8,4031.4,4001.3,4021.5 2003-07-03,4006.9,4031.4,3980.3,4024.8 2003-07-02,3963.9,4025.8,3963.9,4006.9 2003-07-01,4031.2,4040.7,3951.5,3963.9 2003-06-30,4067.8,4099.0,4021.6,4031.2 2003-06-27,4041.7,4073.1,4040.8,4067.8 2003-06-26,4067.9,4077.2,4029.2,4041.7 2003-06-25,4060.9,4089.9,4049.8,4067.9 2003-06-24,4087.9,4094.9,4052.4,4060.9 2003-06-23,4160.1,4160.1,4081.3,4087.9 2003-06-20,4131.5,4169.1,4119.0,4160.1 2003-06-19,4207.0,4210.8,4128.7,4131.5 2003-06-18,4190.4,4218.8,4172.8,4207.0 2003-06-17,4152.9,4199.1,4152.9,4190.4 2003-06-16,4134.1,4174.3,4112.4,4152.9 2003-06-13,4161.3,4180.1,4124.9,4134.1 2003-06-12,4150.1,4193.6,4150.0,4161.3 2003-06-11,4113.0,4162.1,4113.0,4150.1 2003-06-10,4129.1,4132.4,4108.6,4113.0 2003-06-09,4150.8,4150.8,4101.1,4129.1 2003-06-06,4104.3,4178.5,4104.3,4150.8 2003-06-05,4126.6,4148.4,4083.1,4104.3 2003-06-04,4115.7,4143.5,4093.1,4126.6 2003-06-03,4129.3,4129.3,4074.4,4115.7 2003-06-02,4048.1,4129.3,4048.1,4129.3 2003-05-30,4083.6,4096.0,4048.1,4048.1 2003-05-29,4071.9,4095.5,4044.4,4083.6 2003-05-28,3992.4,4073.1,3992.4,4071.9 2003-05-27,3979.8,4000.7,3920.2,3992.4 2003-05-23,3990.4,4012.0,3954.0,3979.8 2003-05-22,3936.4,3990.4,3936.4,3990.4 2003-05-21,3971.6,3971.6,3907.8,3936.4 2003-05-20,3941.3,3985.0,3928.4,3971.6 2003-05-19,4049.0,4049.0,3932.5,3941.3 2003-05-16,4011.1,4080.8,4011.1,4049.0 2003-05-15,3975.0,4020.3,3965.6,4011.1 2003-05-14,3999.9,4023.2,3971.7,3975.0 2003-05-13,3987.4,4008.8,3976.1,3999.9 2003-05-12,3969.4,3991.0,3941.1,3987.4 2003-05-09,3928.9,3974.5,3912.8,3969.4 2003-05-08,3992.9,3992.9,3919.5,3928.9 2003-05-07,4006.4,4038.5,3981.7,3992.9 2003-05-06,3952.6,4007.0,3952.6,4006.4 2003-05-02,3880.1,3952.6,3880.1,3952.6 2003-05-01,3926.0,3926.0,3875.3,3880.1 2003-04-30,3927.8,3943.0,3912.3,3926.0 2003-04-29,3940.3,3976.2,3915.0,3927.8 2003-04-28,3870.2,3943.0,3855.5,3940.3 2003-04-25,3899.0,3919.4,3859.9,3870.2 2003-04-24,3966.5,3977.8,3892.2,3899.0 2003-04-23,3917.7,3997.3,3917.7,3966.5 2003-04-22,3889.2,3924.2,3873.9,3917.7 2003-04-17,3854.9,3904.6,3826.1,3889.2 2003-04-16,3916.8,3967.8,3849.5,3854.9 2003-04-15,3849.4,3926.5,3849.4,3916.8 2003-04-14,3808.1,3857.4,3800.7,3849.4 2003-04-11,0.0,3808.08,3808.08,3808.08 2003-04-10,0.0,3803.27,3803.27,3803.27 2003-04-09,3868.8,3907.1,3824.5,3861.4 2003-04-08,3935.8,3935.8,3868.5,3868.8 2003-04-07,0.0,3935.82,3935.82,3935.82 2003-04-04,0.0,3814.36,3814.36,3814.36 2003-04-03,0.0,3771.05,3771.05,3771.05 2003-04-02,0.0,3753.41,3753.41,3753.41 2003-04-01,0.0,3684.78,3684.78,3684.78 2003-03-31,0.0,3613.28,3613.28,3613.28 2003-03-28,0.0,3708.53,3708.53,3708.53 2003-03-27,0.0,3729.05,3729.05,3729.05 2003-03-26,0.0,3793.12,3793.12,3793.12 2003-03-25,0.0,3761.96,3761.96,3761.96 2003-03-24,0.0,3743.27,3743.27,3743.27 2003-03-21,0.0,3861.07,3861.07,3861.07 2003-03-20,0.0,3765.66,3765.66,3765.66 2003-03-19,0.0,3765.43,3765.43,3765.43 2003-03-18,0.0,3747.28,3747.28,3747.28 2003-03-17,0.0,3722.27,3722.27,3722.27 2003-03-14,0.0,3601.83,3601.83,3601.83 2003-03-13,0.0,3486.9,3486.9,3486.9 2003-03-12,0.0,3287.04,3287.04,3287.04 2003-03-11,0.0,3452.73,3452.73,3452.73 2003-03-10,0.0,3436.05,3436.05,3436.05 2003-03-07,0.0,3491.59,3491.59,3491.59 2003-03-06,0.0,3555.42,3555.42,3555.42 2003-03-05,0.0,3563.54,3563.54,3563.54 2003-03-04,0.0,3625.34,3625.34,3625.34 2003-03-03,0.0,3684.67,3684.67,3684.67 2003-02-28,0.0,3655.58,3655.58,3655.58 2003-02-27,0.0,3569.88,3569.88,3569.88 2003-02-26,0.0,3593.29,3593.29,3593.29 2003-02-25,0.0,3621.47,3621.47,3621.47 2003-02-24,0.0,3701.84,3701.84,3701.84 2003-02-21,0.0,3727.11,3727.11,3727.11 2003-02-20,0.0,3687.25,3687.25,3687.25 2003-02-19,0.0,3658.3,3658.3,3658.3 2003-02-18,0.0,3729.54,3729.54,3729.54 2003-02-17,0.0,3692.37,3692.37,3692.37 2003-02-14,0.0,3611.9,3611.9,3611.9 2003-02-13,0.0,3610.82,3610.82,3610.82 2003-02-12,0.0,3616.12,3616.12,3616.12 2003-02-11,0.0,3669.21,3669.21,3669.21 2003-02-10,0.0,3579.07,3579.07,3579.07 2003-02-07,0.0,3599.16,3599.16,3599.16 2003-02-06,0.0,3597.04,3597.04,3597.04 2003-02-05,0.0,3678.72,3678.72,3678.72 2003-02-04,0.0,3590.09,3590.09,3590.09 2003-02-03,0.0,3689.36,3689.36,3689.36 2003-01-31,0.0,3567.41,3567.41,3567.41 2003-01-30,0.0,3578.67,3578.67,3578.67 2003-01-29,0.0,3483.79,3483.79,3483.79 2003-01-28,0.0,3489.98,3489.98,3489.98 2003-01-27,0.0,3480.83,3480.83,3480.83 2003-01-24,0.0,3603.72,3603.72,3603.72 2003-01-23,0.0,3622.16,3622.16,3622.16 2003-01-22,0.0,3677.98,3677.98,3677.98 2003-01-21,0.0,3736.69,3736.69,3736.69 2003-01-20,0.0,3778.61,3778.61,3778.61 2003-01-17,0.0,3820.57,3820.57,3820.57 2003-01-16,0.0,3881.81,3881.81,3881.81 2003-01-15,0.0,3887.75,3887.75,3887.75 2003-01-14,0.0,3945.59,3945.59,3945.59 2003-01-13,0.0,3948.27,3948.27,3948.27 2003-01-10,0.0,3974.12,3974.12,3974.12 2003-01-09,0.0,3933.98,3933.98,3933.98 2003-01-08,0.0,3924.82,3924.82,3924.82 2003-01-07,0.0,3957.39,3957.39,3957.39 2003-01-06,0.0,4001.37,4001.37,4001.37 2003-01-03,0.0,4004.95,4004.95,4004.95 2003-01-02,0.0,4009.46,4009.46,4009.46 2002-12-31,0.0,3940.36,3940.36,3940.36 2002-12-30,0.0,3900.62,3900.62,3900.62 2002-12-27,0.0,3829.39,3829.39,3829.39 2002-12-24,3936.9,3957.7,3923.4,3942.1 2002-12-23,0.0,3936.87,3936.87,3936.87 2002-12-20,0.0,3889.86,3889.86,3889.86 2002-12-19,0.0,3841.41,3841.41,3841.41 2002-12-18,0.0,3835.18,3835.18,3835.18 2002-12-17,0.0,3908.71,3908.71,3908.71 2002-12-16,0.0,3983.97,3983.97,3983.97 2002-12-13,0.0,3878.07,3878.07,3878.07 2002-12-12,0.0,3935.31,3935.31,3935.31 2002-12-11,0.0,3974.87,3974.87,3974.87 2002-12-10,0.0,3925.0,3925.0,3925.0 2002-12-09,0.0,3933.93,3933.93,3933.93 2002-12-06,0.0,4013.46,4013.46,4013.46 2002-12-05,0.0,4032.42,4032.42,4032.42 2002-12-04,0.0,4048.6,4048.6,4048.6 2002-12-03,0.0,4075.39,4075.39,4075.39 2002-12-02,0.0,4154.27,4154.27,4154.27 2002-11-29,0.0,4169.41,4169.41,4169.41 2002-11-28,0.0,4185.4,4185.4,4185.4 2002-11-27,0.0,4144.19,4144.19,4144.19 2002-11-26,0.0,4070.96,4070.96,4070.96 2002-11-25,0.0,4122.21,4122.21,4122.21 2002-11-22,0.0,4175.23,4175.23,4175.23 2002-11-21,0.0,4190.0,4190.0,4190.0 2002-11-20,0.0,4094.86,4094.86,4094.86 2002-11-19,0.0,4096.51,4096.51,4096.51 2002-11-18,0.0,4115.99,4115.99,4115.99 2002-11-15,0.0,4091.62,4091.62,4091.62 2002-11-14,0.0,4053.14,4053.14,4053.14 2002-11-13,0.0,4029.38,4029.38,4029.38 2002-11-12,0.0,4085.05,4085.05,4085.05 2002-11-11,0.0,4015.58,4015.58,4015.58 2002-11-08,0.0,4034.58,4034.58,4034.58 2002-11-07,0.0,4081.26,4081.26,4081.26 2002-11-06,0.0,4103.72,4103.72,4103.72 2002-11-05,0.0,4146.13,4146.13,4146.13 2002-11-04,0.0,4141.46,4141.46,4141.46 2002-11-01,0.0,3996.98,3996.98,3996.98 2002-10-31,0.0,4039.66,4039.66,4039.66 2002-10-30,0.0,4002.65,4002.65,4002.65 2002-10-29,0.0,3935.93,3935.93,3935.93 2002-10-28,0.0,4090.46,4090.46,4090.46 2002-10-25,0.0,4051.09,4051.09,4051.09 2002-10-24,0.0,4103.69,4103.69,4103.69 2002-10-23,0.0,4006.91,4006.91,4006.91 2002-10-22,0.0,4118.88,4118.88,4118.88 2002-10-21,0.0,4133.77,4133.77,4133.77 2002-10-18,0.0,4130.54,4130.54,4130.54 2002-10-17,0.0,4170.68,4170.68,4170.68 2002-10-16,0.0,4057.71,4057.71,4057.71 2002-10-15,0.0,4130.33,4130.33,4130.33 2002-10-14,0.0,3931.64,3931.64,3931.64 2002-10-11,0.0,3953.38,3953.38,3953.38 2002-10-10,0.0,3777.28,3777.28,3777.28 2002-10-09,0.0,3742.4,3742.4,3742.4 2002-10-08,0.0,3730.47,3730.47,3730.47 2002-10-07,0.0,3780.93,3780.93,3780.93 2002-10-04,0.0,3813.77,3813.77,3813.77 2002-10-03,0.0,3880.34,3880.34,3880.34 2002-10-02,0.0,3905.25,3905.25,3905.25 2002-10-01,0.0,3797.4,3797.4,3797.4 2002-09-30,0.0,3721.75,3721.75,3721.75 2002-09-27,0.0,3907.2,3907.2,3907.2 2002-09-26,0.0,3850.61,3850.61,3850.61 2002-09-25,0.0,3696.25,3696.25,3696.25 2002-09-24,0.0,3671.13,3671.13,3671.13 2002-09-23,0.0,3739.37,3739.37,3739.37 2002-09-20,0.0,3860.1,3860.1,3860.1 2002-09-19,0.0,3813.53,3813.53,3813.53 2002-09-18,0.0,3865.41,3865.41,3865.41 2002-09-17,0.0,4025.15,4025.15,4025.15 2002-09-16,0.0,4044.25,4044.25,4044.25 2002-09-13,0.0,4008.02,4008.02,4008.02 2002-09-12,0.0,4084.9,4084.9,4084.9 2002-09-11,0.0,4210.66,4210.66,4210.66 2002-09-10,0.0,4175.52,4175.52,4175.52 2002-09-09,0.0,4062.44,4062.44,4062.44 2002-09-06,0.0,4107.22,4107.22,4107.22 2002-09-05,0.0,4011.01,4011.01,4011.01 2002-09-04,0.0,4026.95,4026.95,4026.95 2002-09-03,0.0,4028.65,4028.65,4028.65 2002-09-02,0.0,4180.88,4180.88,4180.88 2002-08-30,0.0,4227.28,4227.28,4227.28 2002-08-29,0.0,4209.31,4209.31,4209.31 2002-08-28,0.0,4274.02,4274.02,4274.02 2002-08-27,0.0,4449.72,4449.72,4449.72 2002-08-23,0.0,4389.82,4389.82,4389.82 2002-08-22,0.0,4434.72,4434.72,4434.72 2002-08-21,0.0,4364.8,4364.8,4364.8 2002-08-20,0.0,4368.89,4368.89,4368.89 2002-08-19,0.0,4426.85,4426.85,4426.85 2002-08-16,0.0,4329.97,4329.97,4329.97 2002-08-15,0.0,4327.45,4327.45,4327.45 2002-08-14,0.0,4171.06,4171.06,4171.06 2002-08-13,0.0,4271.66,4271.66,4271.66 2002-08-12,0.0,4221.56,4221.56,4221.56 2002-08-09,0.0,4322.36,4322.36,4322.36 2002-08-08,0.0,4240.47,4240.47,4240.47 2002-08-07,0.0,4094.43,4094.43,4094.43 2002-08-06,0.0,4131.03,4131.03,4131.03 2002-08-05,0.0,3996.41,3996.41,3996.41 2002-08-02,0.0,4075.55,4075.55,4075.55 2002-08-01,0.0,4044.52,4044.52,4044.52 2002-07-31,0.0,4246.21,4246.21,4246.21 2002-07-30,0.0,4180.92,4180.92,4180.92 2002-07-29,4202.7,4202.7,4202.7,4202.7 2002-07-26,0.0,4016.65,4016.65,4016.65 2002-07-25,0.0,3965.89,3965.89,3965.89 2002-07-24,0.0,3777.13,3777.13,3777.13 2002-07-23,0.0,3857.99,3857.99,3857.99 2002-07-22,0.0,3895.5,3895.5,3895.5 2002-07-19,0.0,4098.32,4098.32,4098.32 2002-07-18,0.0,4297.3,4297.3,4297.3 2002-07-17,0.0,4190.63,4190.63,4190.63 2002-07-16,0.0,4021.93,4021.93,4021.93 2002-07-15,0.0,3994.5,3994.5,3994.5 2002-07-12,0.0,4224.11,4224.11,4224.11 2002-07-11,0.0,4230.05,4230.05,4230.05 2002-07-10,0.0,4420.13,4420.13,4420.13 2002-07-09,0.0,4542.94,4542.94,4542.94 2002-07-08,0.0,4601.29,4601.29,4601.29 2002-07-05,0.0,4615.65,4615.65,4615.65 2002-07-04,0.0,4471.19,4471.19,4471.19 2002-07-03,0.0,4392.55,4392.55,4392.55 2002-07-02,0.0,4546.77,4546.77,4546.77 2002-07-01,0.0,4685.76,4685.76,4685.76 2002-06-28,0.0,4656.36,4656.36,4656.36 2002-06-27,0.0,4540.65,4540.65,4540.65 2002-06-26,0.0,4531.01,4531.01,4531.01 2002-06-25,0.0,4630.96,4630.96,4630.96 2002-06-24,0.0,4541.87,4541.87,4541.87 2002-06-21,0.0,4605.35,4605.35,4605.35 2002-06-20,0.0,4580.34,4580.34,4580.34 2002-06-19,0.0,4652.43,4652.43,4652.43 2002-06-18,0.0,4702.01,4702.01,4702.01 2002-06-17,0.0,4756.75,4756.75,4756.75 2002-06-14,0.0,4630.77,4630.77,4630.77 2002-06-13,0.0,4771.91,4771.91,4771.91 2002-06-12,0.0,4851.67,4851.67,4851.67 2002-06-11,0.0,4934.82,4934.82,4934.82 2002-06-10,0.0,4928.21,4928.21,4928.21 2002-06-07,0.0,4920.4,4920.4,4920.4 2002-06-06,0.0,4957.63,4957.63,4957.63 2002-06-05,0.0,4989.15,4989.15,4989.15 2002-05-31,0.0,5085.07,5085.07,5085.07 2002-05-30,0.0,5040.75,5040.75,5040.75 2002-05-29,0.0,5082.98,5082.98,5082.98 2002-05-28,0.0,5074.22,5074.22,5074.22 2002-05-27,0.0,5136.26,5136.26,5136.26 2002-05-24,0.0,5169.07,5169.07,5169.07 2002-05-23,0.0,5175.31,5175.31,5175.31 2002-05-22,0.0,5151.89,5151.89,5151.89 2002-05-21,0.0,5197.21,5197.21,5197.21 2002-05-20,0.0,5208.1,5208.1,5208.1 2002-05-17,0.0,5217.98,5217.98,5217.98 2002-05-16,0.0,5248.53,5248.53,5248.53 2002-05-15,0.0,5259.11,5259.11,5259.11 2002-05-14,0.0,5239.47,5239.47,5239.47 2002-05-13,0.0,5204.84,5204.84,5204.84 2002-05-10,0.0,5171.24,5171.24,5171.24 2002-05-09,0.0,5197.58,5197.58,5197.58 2002-05-08,0.0,5209.1,5209.1,5209.1 2002-05-07,0.0,5119.9,5119.9,5119.9 2002-05-03,0.0,5203.05,5203.05,5203.05 2002-05-02,0.0,5174.06,5174.06,5174.06 2002-05-01,0.0,5125.51,5125.51,5125.51 2002-04-30,0.0,5165.58,5165.58,5165.58 2002-04-29,0.0,5153.86,5153.86,5153.86 2002-04-26,0.0,5159.01,5159.01,5159.01 2002-04-25,0.0,5197.54,5197.54,5197.54 2002-04-24,0.0,5218.17,5218.17,5218.17 2002-04-23,0.0,5190.99,5190.99,5190.99 2002-04-22,0.0,5221.47,5221.47,5221.47 2002-04-19,0.0,5243.6,5243.6,5243.6 2002-04-18,0.0,5229.37,5229.37,5229.37 2002-04-17,0.0,5263.88,5263.88,5263.88 2002-04-16,0.0,5259.88,5259.88,5259.88 2002-04-15,0.0,5201.44,5201.44,5201.44 2002-04-12,0.0,5161.02,5161.02,5161.02 2002-04-11,0.0,5137.43,5137.43,5137.43 2002-04-10,0.0,5229.12,5229.12,5229.12 2002-04-09,0.0,5179.56,5179.56,5179.56 2002-04-08,0.0,5178.55,5178.55,5178.55 2002-04-05,0.0,5233.63,5233.63,5233.63 2002-04-04,0.0,5209.46,5209.46,5209.46 2002-04-03,0.0,5247.84,5247.84,5247.84 2002-04-02,0.0,5251.44,5251.44,5251.44 2002-03-28,0.0,5271.76,5271.76,5271.76 2002-03-27,0.0,5214.7,5214.7,5214.7 2002-03-26,0.0,5195.46,5195.46,5195.46 2002-03-25,0.0,5203.61,5203.61,5203.61 2002-03-22,0.0,5250.5,5250.5,5250.5 2002-03-21,5253.3,5253.3,5253.3,5253.3 2002-03-20,0.0,5266.9,5253.3,5253.3 2002-03-19,0.0,5316.07,5266.9,5316.07 2002-03-18,0.0,5299.93,5299.93,5299.93 2002-03-15,0.0,5292.73,5292.73,5292.73 2002-03-14,0.0,5261.42,5261.42,5261.42 2002-03-13,0.0,5271.96,5271.96,5271.96 2002-03-12,0.0,5252.5,5252.5,5252.5 2002-03-11,0.0,5258.93,5258.93,5258.93 2002-03-08,0.0,5285.65,5285.65,5285.65 2002-03-07,0.0,5282.14,5282.14,5282.14 2002-03-06,0.0,5245.54,5245.54,5245.54 2002-03-05,0.0,5214.03,5214.03,5214.03 2002-03-04,0.0,5241.98,5241.98,5241.98 2002-03-01,0.0,5169.02,5169.02,5169.02 2002-02-28,0.0,5100.96,5100.96,5100.96 2002-02-27,0.0,5178.44,5178.44,5178.44 2002-02-26,0.0,5138.95,5138.95,5138.95 2002-02-25,0.0,5100.74,5100.74,5100.74 2002-02-22,0.0,5050.84,5050.84,5050.84 2002-02-21,0.0,5073.31,5073.31,5073.31 2002-02-20,0.0,5024.15,5024.15,5024.15 2002-02-19,0.0,5092.5,5092.5,5092.5 2002-02-18,0.0,5154.29,5154.29,5154.29 2002-02-15,0.0,5182.48,5182.48,5182.48 2002-02-14,0.0,5208.75,5208.75,5208.75 2002-02-13,0.0,5153.92,5153.92,5153.92 2002-02-12,0.0,5135.71,5135.71,5135.71 2002-02-11,0.0,5161.78,5161.78,5161.78 2002-02-08,0.0,5128.09,5128.09,5128.09 2002-02-07,0.0,5127.03,5127.03,5127.03 2002-02-06,0.0,5073.81,5073.81,5073.81 2002-02-05,0.0,5093.36,5093.36,5093.36 2002-02-04,0.0,5167.31,5167.31,5167.31 2002-02-01,0.0,5189.68,5189.68,5189.68 2002-01-31,0.0,5164.78,5164.78,5164.78 2002-01-30,0.0,5089.32,5089.32,5089.32 2002-01-29,0.0,5131.4,5131.4,5131.4 2002-01-28,0.0,5223.62,5223.62,5223.62 2002-01-25,5233.1,5233.1,5162.6,5193.0 2002-01-24,0.0,5233.14,5233.14,5233.14 2002-01-23,0.0,5180.65,5180.65,5180.65 2002-01-22,0.0,5149.19,5149.19,5149.19 2002-01-21,0.0,5138.53,5138.53,5138.53 2002-01-18,0.0,5126.79,5126.79,5126.79 2002-01-17,0.0,5138.45,5138.45,5138.45 2002-01-16,0.0,5127.58,5127.58,5127.58 2002-01-15,0.0,5166.0,5166.0,5166.0 2002-01-14,0.0,5113.5,5113.5,5113.5 2002-01-11,0.0,5198.57,5198.57,5198.57 2002-01-10,0.0,5190.7,5190.7,5190.7 2002-01-09,0.0,5228.46,5228.46,5228.46 2002-01-08,0.0,5250.37,5250.37,5250.37 2002-01-07,0.0,5293.57,5293.57,5293.57 2002-01-04,0.0,5323.76,5323.76,5323.76 2002-01-03,0.0,5318.79,5318.79,5318.79 2002-01-02,0.0,5218.29,5218.29,5218.29 2001-12-31,0.0,5217.35,5217.35,5217.35 2001-12-28,0.0,5242.42,5242.42,5242.42 2001-12-27,0.0,5213.22,5213.22,5213.22 2001-12-24,0.0,5177.41,5177.41,5177.41 2001-12-21,0.0,5159.23,5159.23,5159.23 2001-12-20,0.0,5080.23,5080.23,5080.23 2001-12-19,0.0,5120.55,5120.55,5120.55 2001-12-18,0.0,5151.08,5151.08,5151.08 2001-12-17,0.0,5136.31,5136.31,5136.31 2001-12-14,0.0,5061.02,5061.02,5061.02 2001-12-13,0.0,5074.86,5074.86,5074.86 2001-12-12,0.0,5119.99,5119.99,5119.99 2001-12-11,0.0,5160.77,5160.77,5160.77 2001-12-10,0.0,5185.04,5185.04,5185.04 2001-12-07,0.0,5264.74,5264.74,5264.74 2001-12-06,5369.78,5369.78,5369.78,5369.78 2001-12-05,0.0,5333.53,5333.53,5333.53 2001-12-04,0.0,5212.14,5212.14,5212.14 2001-12-03,0.0,5164.64,5164.64,5164.64 2001-11-30,0.0,5203.55,5203.55,5203.55 2001-11-29,0.0,5208.51,5208.51,5208.51 2001-11-28,0.0,5205.23,5205.23,5205.23 2001-11-27,0.0,5265.96,5265.96,5265.96 2001-11-26,0.0,5302.45,5302.45,5302.45 2001-11-23,0.0,5293.21,5293.21,5293.21 2001-11-22,0.0,5345.94,5345.94,5345.94 2001-11-21,0.0,5313.78,5313.78,5313.78 2001-11-20,0.0,5298.69,5298.69,5298.69 2001-11-19,0.0,5337.96,5337.96,5337.96 2001-11-16,0.0,5290.98,5290.98,5290.98 2001-11-15,0.0,5238.2,5238.2,5238.2 2001-11-14,0.0,5240.75,5240.75,5240.75 2001-11-13,0.0,5277.07,5277.07,5277.07 2001-11-12,0.0,5146.23,5146.23,5146.23 2001-11-09,0.0,5244.21,5244.21,5244.21 2001-11-08,5216.3,5294.6,5208.4,5278.1 2001-11-07,0.0,5216.27,5216.27,5216.27 2001-11-06,0.0,5214.06,5214.06,5214.06 2001-11-05,0.0,5209.12,5209.12,5209.12 2001-11-02,0.0,5129.54,5129.54,5129.54 2001-11-01,0.0,5071.23,5071.23,5071.23 2001-10-31,0.0,5039.71,5039.71,5039.71 2001-10-30,0.0,5003.6,5003.6,5003.6 2001-10-29,0.0,5085.89,5085.89,5085.89 2001-10-26,0.0,5188.65,5188.65,5188.65 2001-10-25,0.0,5086.59,5086.59,5086.59 2001-10-24,0.0,5167.6,5167.6,5167.6 2001-10-23,0.0,5193.34,5193.34,5193.34 2001-10-22,0.0,5070.42,5070.42,5070.42 2001-10-19,0.0,5017.69,5017.69,5017.69 2001-10-18,0.0,5116.03,5116.03,5116.03 2001-10-17,0.0,5203.41,5203.41,5203.41 2001-10-16,0.0,5082.58,5082.58,5082.58 2001-10-15,0.0,5067.26,5067.26,5067.26 2001-10-12,0.0,5145.5,5145.5,5145.5 2001-10-11,0.0,5164.92,5164.92,5164.92 2001-10-10,0.0,5153.06,5153.06,5153.06 2001-10-09,0.0,5009.79,5009.79,5009.79 2001-10-08,0.0,5032.71,5032.71,5032.71 2001-10-05,0.0,5036.03,5036.03,5036.03 2001-10-04,0.0,5016.24,5016.24,5016.24 2001-10-03,0.0,4881.81,4881.81,4881.81 2001-10-02,0.0,4832.34,4832.34,4832.34 2001-10-01,0.0,4785.63,4785.63,4785.63 2001-09-28,0.0,4903.39,4903.39,4903.39 2001-09-27,0.0,4763.63,4763.63,4763.63 2001-09-26,0.0,4696.1,4696.1,4696.1 2001-09-25,0.0,4663.42,4663.42,4663.42 2001-09-24,0.0,4613.86,4613.86,4613.86 2001-09-21,0.0,4433.69,4433.69,4433.69 2001-09-20,0.0,4556.9,4556.9,4556.9 2001-09-19,0.0,4721.69,4721.69,4721.69 2001-09-18,0.0,4848.7,4848.7,4848.7 2001-09-17,0.0,4898.85,4898.85,4898.85 2001-09-14,0.0,4755.75,4755.75,4755.75 2001-09-13,0.0,4943.61,4943.61,4943.61 2001-09-12,0.0,4882.12,4882.12,4882.12 2001-09-11,0.0,4745.98,4745.98,4745.98 2001-09-10,0.0,5033.68,5033.68,5033.68 2001-09-07,0.0,5070.29,5070.29,5070.29 2001-09-06,0.0,5204.33,5204.33,5204.33 2001-09-05,0.0,5316.05,5316.05,5316.05 2001-09-04,0.0,5379.62,5379.62,5379.62 2001-09-03,0.0,5312.12,5312.12,5312.12 2001-08-31,0.0,5344.97,5344.97,5344.97 2001-08-30,0.0,5332.67,5332.67,5332.67 2001-08-29,0.0,5417.64,5417.64,5417.64 2001-08-28,0.0,5434.65,5434.65,5434.65 2001-08-24,0.0,5471.88,5471.88,5471.88 2001-08-23,0.0,5396.53,5396.53,5396.53 2001-08-22,0.0,5408.67,5408.67,5408.67 2001-08-21,0.0,5430.31,5430.31,5430.31 2001-08-20,0.0,5357.45,5357.45,5357.45 2001-08-17,0.0,5342.13,5342.13,5342.13 2001-08-16,0.0,5389.77,5389.77,5389.77 2001-08-15,0.0,5461.58,5461.58,5461.58 2001-08-14,0.0,5507.77,5507.77,5507.77 2001-08-13,0.0,5431.08,5431.08,5431.08 2001-08-10,0.0,5427.2,5427.2,5427.2 2001-08-09,0.0,5402.93,5402.93,5402.93 2001-08-08,0.0,5476.49,5476.49,5476.49 2001-08-07,0.0,5536.8,5536.8,5536.8 2001-08-06,0.0,5526.43,5526.43,5526.43 2001-08-03,0.0,5547.56,5547.56,5547.56 2001-08-02,0.0,5584.54,5584.54,5584.54 2001-08-01,0.0,5546.93,5546.93,5546.93 2001-07-31,0.0,5529.05,5529.05,5529.05 2001-07-30,0.0,5446.66,5446.66,5446.66 2001-07-27,0.0,5403.1,5403.1,5403.1 2001-07-26,0.0,5286.07,5286.07,5286.07 2001-07-25,0.0,5275.73,5275.73,5275.73 2001-07-24,0.0,5320.16,5320.16,5320.16 2001-07-23,0.0,5405.28,5405.28,5405.28 2001-07-20,0.0,5387.05,5387.05,5387.05 2001-07-19,0.0,5437.43,5437.43,5437.43 2001-07-18,0.0,5404.59,5404.59,5404.59 2001-07-17,0.0,5427.76,5427.76,5427.76 2001-07-16,0.0,5517.12,5517.12,5517.12 2001-07-13,0.0,5536.98,5536.98,5536.98 2001-07-12,0.0,5481.58,5481.58,5481.58 2001-07-11,0.0,5391.86,5391.86,5391.86 2001-07-10,0.0,5467.9,5467.9,5467.9 2001-07-09,0.0,5468.86,5468.86,5468.86 2001-07-06,0.0,5479.24,5479.24,5479.24 2001-07-05,0.0,5549.61,5549.61,5549.61 2001-07-04,0.0,5600.49,5600.49,5600.49 2001-07-03,0.0,5639.91,5639.91,5639.91 2001-07-02,0.0,5716.68,5716.68,5716.68 2001-06-29,0.0,5642.5,5642.5,5642.5 2001-06-28,0.0,5638.41,5638.41,5638.41 2001-06-27,0.0,5607.93,5607.93,5607.93 2001-06-26,0.0,5555.68,5555.68,5555.68 2001-06-25,0.0,5661.88,5661.88,5661.88 2001-06-22,0.0,5665.67,5665.67,5665.67 2001-06-21,0.0,5641.38,5641.38,5641.38 2001-06-20,0.0,5699.58,5699.58,5699.58 2001-06-19,0.0,5680.37,5680.37,5680.37 2001-06-18,0.0,5671.62,5671.62,5671.62 2001-06-15,0.0,5722.97,5722.97,5722.97 2001-06-14,0.0,5752.55,5752.55,5752.55 2001-06-13,0.0,5820.21,5820.21,5820.21 2001-06-12,0.0,5804.01,5804.01,5804.01 2001-06-11,0.0,5860.53,5860.53,5860.53 2001-06-08,0.0,5950.58,5950.58,5950.58 2001-06-07,0.0,5948.3,5948.3,5948.3 2001-06-06,0.0,5901.49,5901.49,5901.49 2001-06-05,0.0,5922.55,5922.55,5922.55 2001-06-04,0.0,5856.5,5856.5,5856.5 2001-06-01,0.0,5809.6,5809.6,5809.6 2001-05-31,0.0,5796.15,5796.15,5796.15 2001-05-30,0.0,5796.85,5796.85,5796.85 2001-05-29,0.0,5863.87,5863.87,5863.87 2001-05-25,0.0,5889.8,5889.8,5889.8 2001-05-24,0.0,5915.91,5915.91,5915.91 2001-05-23,0.0,5897.45,5897.45,5897.45 2001-05-22,0.0,5976.62,5976.62,5976.62 2001-05-21,0.0,5941.59,5941.59,5941.59 2001-05-18,0.0,5914.98,5914.98,5914.98 2001-05-17,0.0,5904.55,5904.55,5904.55 2001-05-16,0.0,5884.03,5884.03,5884.03 2001-05-15,0.0,5842.91,5842.91,5842.91 2001-05-14,0.0,5690.47,5690.47,5690.47 2001-05-11,0.0,5896.77,5896.77,5896.77 2001-05-10,0.0,5963.99,5963.99,5963.99 2001-05-09,0.0,5893.67,5893.67,5893.67 2001-05-08,0.0,5886.4,5886.4,5886.4 2001-05-04,0.0,5870.29,5870.29,5870.29 2001-05-03,0.0,5765.81,5765.81,5765.81 2001-05-02,0.0,5904.2,5904.2,5904.2 2001-05-01,0.0,5928.02,5928.02,5928.02 2001-04-30,0.0,5966.95,5966.95,5966.95 2001-04-27,0.0,5951.39,5951.39,5951.39 2001-04-26,0.0,5868.32,5868.32,5868.32 2001-04-25,0.0,5827.47,5827.47,5827.47 2001-04-24,0.0,5840.28,5840.28,5840.28 2001-04-23,0.0,5871.28,5871.28,5871.28 2001-04-20,0.0,5879.83,5879.83,5879.83 2001-04-19,0.0,5871.63,5871.63,5871.63 2001-04-18,0.0,5890.2,5890.2,5890.2 2001-04-17,0.0,5761.08,5761.08,5761.08 2001-04-12,0.0,5766.62,5766.62,5766.62 2001-04-11,0.0,5788.07,5788.07,5788.07 2001-04-10,0.0,5803.0,5803.0,5803.0 2001-04-09,0.0,5663.3,5663.3,5663.3 2001-04-06,0.0,5601.46,5601.46,5601.46 2001-04-05,0.0,5621.77,5621.77,5621.77 2001-04-04,0.0,5535.72,5535.72,5535.72 2001-04-03,0.0,5463.13,5463.13,5463.13 2001-04-02,0.0,5618.47,5618.47,5618.47 2001-03-30,5588.4,5664.8,5574.1,5633.7 2001-03-29,0.0,5588.42,5588.42,5588.42 2001-03-28,0.0,5614.01,5614.01,5614.01 2001-03-27,0.0,5728.13,5728.13,5728.13 2001-03-26,0.0,5576.6,5576.6,5576.6 2001-03-23,0.0,5402.33,5402.33,5402.33 2001-03-22,0.0,5314.75,5314.75,5314.75 2001-03-21,0.0,5540.74,5540.74,5540.74 2001-03-20,0.0,5646.8,5646.8,5646.8 2001-03-19,0.0,5551.55,5551.55,5551.55 2001-03-16,0.0,5562.83,5562.83,5562.83 2001-03-15,0.0,5729.22,5729.22,5729.22 2001-03-14,0.0,5625.95,5625.95,5625.95 2001-03-13,0.0,5720.74,5720.74,5720.74 2001-03-12,0.0,5826.52,5826.52,5826.52 2001-03-09,0.0,5917.27,5917.27,5917.27 2001-03-08,0.0,6003.17,6003.17,6003.17 2001-03-07,0.0,6001.81,6001.81,6001.81 2001-03-06,0.0,6012.02,6012.02,6012.02 2001-03-05,0.0,5931.29,5931.29,5931.29 2001-03-02,0.0,5858.56,5858.56,5858.56 2001-03-01,0.0,5908.59,5908.59,5908.59 2001-02-28,0.0,5917.88,5917.88,5917.88 2001-02-27,0.0,5941.21,5941.21,5941.21 2001-02-26,0.0,5916.75,5916.75,5916.75 2001-02-23,0.0,5943.69,5943.69,5943.69 2001-02-22,0.0,6003.13,6003.13,6003.13 2001-02-21,0.0,5972.35,5972.35,5972.35 2001-02-20,0.0,5980.12,5980.12,5980.12 2001-02-19,0.0,6093.95,6093.95,6093.95 2001-02-16,0.0,6088.28,6088.28,6088.28 2001-02-15,0.0,6197.89,6197.89,6197.89 2001-02-14,0.0,6176.22,6176.22,6176.22 2001-02-13,0.0,6228.49,6228.49,6228.49 2001-02-12,0.0,6241.38,6241.38,6241.38 2001-02-09,0.0,6164.25,6164.25,6164.25 2001-02-08,0.0,6206.1,6206.1,6206.1 2001-02-07,0.0,6225.65,6225.65,6225.65 2001-02-06,0.0,6293.43,6293.43,6293.43 2001-02-05,0.0,6269.21,6269.21,6269.21 2001-02-02,0.0,6256.43,6256.43,6256.43 2001-02-01,0.0,6251.83,6251.83,6251.83 2001-01-31,0.0,6297.53,6297.53,6297.53 2001-01-30,0.0,6334.53,6334.53,6334.53 2001-01-29,0.0,6316.98,6316.98,6316.98 2001-01-26,0.0,6294.34,6294.34,6294.34 2001-01-25,0.0,6255.63,6255.63,6255.63 2001-01-24,0.0,6264.36,6264.36,6264.36 2001-01-23,0.0,6214.66,6214.66,6214.66 2001-01-22,0.0,6231.98,6231.98,6231.98 2001-01-19,0.0,6209.32,6209.32,6209.32 2001-01-18,0.0,6209.87,6209.87,6209.87 2001-01-17,0.0,6197.36,6197.36,6197.36 2001-01-16,0.0,6083.29,6083.29,6083.29 2001-01-15,0.0,6170.3,6170.3,6170.3 2001-01-12,0.0,6165.53,6165.53,6165.53 2001-01-11,0.0,6114.89,6114.89,6114.89 2001-01-10,0.0,6059.86,6059.86,6059.86 2001-01-09,0.0,6088.14,6088.14,6088.14 2001-01-08,0.0,6149.6,6149.6,6149.6 2001-01-05,0.0,6198.09,6198.09,6198.09 2001-01-04,0.0,6185.62,6185.62,6185.62 2001-01-03,0.0,6039.89,6039.89,6039.89 2001-01-02,0.0,6174.74,6174.74,6174.74 2000-12-29,0.0,6222.46,6222.46,6222.46 2000-12-28,0.0,6223.22,6223.22,6223.22 2000-12-27,0.0,6218.17,6218.17,6218.17 2000-12-22,0.0,6097.53,6097.53,6097.53 2000-12-21,0.0,6115.48,6115.48,6115.48 2000-12-20,0.0,6176.71,6176.71,6176.71 2000-12-19,0.0,6294.98,6294.98,6294.98 2000-12-18,0.0,6246.48,6246.48,6246.48 2000-12-15,0.0,6175.81,6175.81,6175.81 2000-12-14,0.0,6263.81,6263.81,6263.81 2000-12-13,0.0,6402.96,6402.96,6402.96 2000-12-12,0.0,6390.41,6390.41,6390.41 2000-12-11,0.0,6370.35,6370.35,6370.35 2000-12-08,0.0,6288.33,6288.33,6288.33 2000-12-07,0.0,6231.37,6231.37,6231.37 2000-12-06,0.0,6273.32,6273.32,6273.32 2000-12-05,0.0,6298.98,6298.98,6298.98 2000-12-04,0.0,6158.67,6158.67,6158.67 2000-12-01,0.0,6170.42,6170.42,6170.42 2000-11-30,0.0,6142.19,6142.19,6142.19 2000-11-29,0.0,6164.88,6164.88,6164.88 2000-11-28,0.0,6249.8,6249.8,6249.8 2000-11-27,0.0,6374.69,6374.69,6374.69 2000-11-24,0.0,6327.55,6327.55,6327.55 2000-11-23,0.0,6287.26,6287.26,6287.26 2000-11-22,0.0,6221.36,6221.36,6221.36 2000-11-21,0.0,6382.15,6382.15,6382.15 2000-11-20,0.0,6344.98,6344.98,6344.98 2000-11-17,0.0,6440.1,6440.1,6440.1 2000-11-16,0.0,6430.44,6430.44,6430.44 2000-11-15,0.0,6432.29,6432.29,6432.29 2000-11-14,0.0,6412.85,6412.85,6412.85 2000-11-13,0.0,6274.82,6274.82,6274.82 2000-11-10,0.0,6400.22,6400.22,6400.22 2000-11-09,0.0,6442.19,6442.19,6442.19 2000-11-08,0.0,6477.37,6477.37,6477.37 2000-11-07,0.0,6466.91,6466.91,6466.91 2000-11-06,0.0,6430.99,6430.99,6430.99 2000-11-03,0.0,6385.44,6385.44,6385.44 2000-11-02,0.0,6392.01,6392.01,6392.01 2000-11-01,0.0,6457.61,6457.61,6457.61 2000-10-31,0.0,6438.42,6438.42,6438.42 2000-10-30,0.0,6388.4,6388.4,6388.4 2000-10-27,0.0,6366.55,6366.55,6366.55 2000-10-26,0.0,6302.32,6302.32,6302.32 2000-10-25,0.0,6367.83,6367.83,6367.83 2000-10-24,0.0,6438.38,6438.38,6438.38 2000-10-23,0.0,6315.9,6315.9,6315.9 2000-10-20,0.0,6276.27,6276.27,6276.27 2000-10-19,0.0,6218.91,6218.91,6218.91 2000-10-18,0.0,6148.24,6148.24,6148.24 2000-10-17,0.0,6203.25,6203.25,6203.25 2000-10-16,0.0,6285.73,6285.73,6285.73 2000-10-13,0.0,6209.58,6209.58,6209.58 2000-10-12,0.0,6131.94,6131.94,6131.94 2000-10-11,0.0,6117.63,6117.63,6117.63 2000-10-10,0.0,6247.68,6247.68,6247.68 2000-10-09,0.0,6264.84,6264.84,6264.84 2000-10-06,0.0,6391.23,6391.23,6391.23 2000-10-05,0.0,6381.98,6381.98,6381.98 2000-10-04,0.0,6334.94,6334.94,6334.94 2000-10-03,0.0,6345.04,6345.04,6345.04 2000-10-02,0.0,6284.46,6284.46,6284.46 2000-09-29,0.0,6294.24,6294.24,6294.24 2000-09-28,0.0,6264.06,6264.06,6264.06 2000-09-27,0.0,6269.34,6269.34,6269.34 2000-09-26,0.0,6213.21,6213.21,6213.21 2000-09-25,0.0,6257.13,6257.13,6257.13 2000-09-22,0.0,6205.92,6205.92,6205.92 2000-09-21,0.0,6199.16,6199.16,6199.16 2000-09-20,0.0,6279.87,6279.87,6279.87 2000-09-19,0.0,6403.5,6403.5,6403.5 2000-09-18,0.0,6410.15,6410.15,6410.15 2000-09-15,0.0,6417.3,6417.3,6417.3 2000-09-14,0.0,6555.5,6555.5,6555.5 2000-09-13,0.0,6478.19,6478.19,6478.19 2000-09-12,0.0,6555.52,6555.52,6555.52 2000-09-11,0.0,6581.96,6581.96,6581.96 2000-09-08,0.0,6600.74,6600.74,6600.74 2000-09-07,0.0,6689.19,6689.19,6689.19 2000-09-06,0.0,6694.73,6694.73,6694.73 2000-09-05,0.0,6752.48,6752.48,6752.48 2000-09-04,0.0,6798.06,6798.06,6798.06 2000-09-01,0.0,6795.01,6795.01,6795.01 2000-08-31,0.0,6672.66,6672.66,6672.66 2000-08-30,0.0,6615.12,6615.12,6615.12 2000-08-29,0.0,6586.27,6586.27,6586.27 2000-08-25,0.0,6563.71,6563.71,6563.71 2000-08-24,0.0,6557.04,6557.04,6557.04 2000-08-23,0.0,6566.24,6566.24,6566.24 2000-08-22,0.0,6584.82,6584.82,6584.82 2000-08-21,0.0,6542.19,6542.19,6542.19 2000-08-18,0.0,6543.66,6543.66,6543.66 2000-08-17,0.0,6518.17,6518.17,6518.17 2000-08-16,0.0,6532.05,6532.05,6532.05 2000-08-15,0.0,6475.52,6475.52,6475.52 2000-08-14,6384.5,6451.2,6365.5,6419.9 2000-08-11,0.0,6384.46,6384.46,6384.46 2000-08-10,0.0,6387.27,6387.27,6387.27 2000-08-09,0.0,6413.97,6413.97,6413.97 2000-08-08,0.0,6358.12,6358.12,6358.12 2000-08-07,0.0,6387.78,6387.78,6387.78 2000-08-04,0.0,6363.51,6363.51,6363.51 2000-08-03,0.0,6317.13,6317.13,6317.13 2000-08-02,0.0,6391.28,6391.28,6391.28 2000-08-01,0.0,6379.35,6379.35,6379.35 2000-07-31,0.0,6365.26,6365.26,6365.26 2000-07-28,0.0,6335.69,6335.69,6335.69 2000-07-27,0.0,6352.13,6352.13,6352.13 2000-07-26,0.0,6387.09,6387.09,6387.09 2000-07-25,0.0,6390.74,6390.74,6390.74 2000-07-24,0.0,6381.31,6381.31,6381.31 2000-07-21,0.0,6378.42,6378.42,6378.42 2000-07-20,0.0,6469.01,6469.01,6469.01 2000-07-19,0.0,6465.45,6465.45,6465.45 2000-07-18,0.0,6450.54,6450.54,6450.54 2000-07-17,0.0,6525.45,6525.45,6525.45 2000-07-14,0.0,6475.36,6475.36,6475.36 2000-07-13,0.0,6475.73,6475.73,6475.73 2000-07-12,0.0,6518.5,6518.5,6518.5 2000-07-11,0.0,6475.84,6475.84,6475.84 2000-07-10,0.0,6466.24,6466.24,6466.24 2000-07-07,0.0,6497.54,6497.54,6497.54 2000-07-06,0.0,6419.59,6419.59,6419.59 2000-07-05,0.0,6382.46,6382.46,6382.46 2000-07-04,0.0,6416.99,6416.99,6416.99 2000-07-03,0.0,6470.43,6470.43,6470.43 2000-06-30,0.0,6312.71,6312.71,6312.71 2000-06-29,0.0,6238.98,6238.98,6238.98 2000-06-28,0.0,6313.53,6313.53,6313.53 2000-06-27,0.0,6375.33,6375.33,6375.33 2000-06-26,0.0,6405.17,6405.17,6405.17 2000-06-23,0.0,6391.49,6391.49,6391.49 2000-06-22,0.0,6413.82,6413.82,6413.82 2000-06-21,0.0,6477.76,6477.76,6477.76 2000-06-20,0.0,6526.93,6526.93,6526.93 2000-06-19,0.0,6490.22,6490.22,6490.22 2000-06-16,0.0,6526.01,6526.01,6526.01 2000-06-15,0.0,6490.81,6490.81,6490.81 2000-06-14,0.0,6536.29,6536.29,6536.29 2000-06-13,0.0,6447.11,6447.11,6447.11 2000-06-12,0.0,6430.88,6430.88,6430.88 2000-06-09,0.0,6443.78,6443.78,6443.78 2000-06-08,0.0,6496.57,6496.57,6496.57 2000-06-07,0.0,6503.82,6503.82,6503.82 2000-06-06,0.0,6546.75,6546.75,6546.75 2000-06-05,0.0,6546.65,6546.65,6546.65 2000-06-02,0.0,6626.38,6626.38,6626.38 2000-06-01,0.0,6470.54,6470.54,6470.54 2000-05-31,0.0,6359.35,6359.35,6359.35 2000-05-30,0.0,6359.57,6359.57,6359.57 2000-05-26,0.0,6216.92,6216.92,6216.92 2000-05-25,0.0,6231.11,6231.11,6231.11 2000-05-24,0.0,6118.62,6118.62,6118.62 2000-05-23,0.0,6086.79,6086.79,6086.79 2000-05-22,6045.4,6130.1,5991.9,6035.5 2000-05-19,0.0,6045.38,6045.38,6045.38 2000-05-18,0.0,6232.95,6232.95,6232.95 2000-05-17,0.0,6196.22,6196.22,6196.22 2000-05-16,0.0,6318.36,6318.36,6318.36 2000-05-15,0.0,6247.7,6247.7,6247.7 2000-05-12,0.0,6283.45,6283.45,6283.45 2000-05-11,0.0,6245.88,6245.88,6245.88 2000-05-10,0.0,6100.65,6100.65,6100.65 2000-05-09,0.0,6123.81,6123.81,6123.81 2000-05-08,0.0,6216.3,6216.3,6216.3 2000-05-05,0.0,6238.84,6238.84,6238.84 2000-05-04,0.0,6199.58,6199.58,6199.58 2000-05-03,0.0,6184.79,6184.79,6184.79 2000-05-02,0.0,6373.39,6373.39,6373.39 2000-04-28,0.0,6327.43,6327.43,6327.43 2000-04-27,0.0,6179.27,6179.27,6179.27 2000-04-26,0.0,6256.53,6256.53,6256.53 2000-04-25,0.0,6282.97,6282.97,6282.97 2000-04-20,0.0,6241.22,6241.22,6241.22 2000-04-19,0.0,6184.91,6184.91,6184.91 2000-04-18,0.0,6074.04,6074.04,6074.04 2000-04-17,0.0,5994.57,5994.57,5994.57 2000-04-14,0.0,6178.12,6178.12,6178.12 2000-04-13,0.0,6357.0,6357.0,6357.0 2000-04-12,0.0,6350.8,6350.8,6350.8 2000-04-11,0.0,6379.22,6379.22,6379.22 2000-04-10,0.0,6533.38,6533.38,6533.38 2000-04-07,0.0,6569.88,6569.88,6569.88 2000-04-06,0.0,6451.14,6451.14,6451.14 2000-04-05,0.0,6379.32,6379.32,6379.32 2000-04-04,0.0,6427.03,6427.03,6427.03 2000-04-03,0.0,6462.12,6462.12,6462.12 2000-03-31,0.0,6540.22,6540.22,6540.22 2000-03-30,0.0,6445.17,6445.17,6445.17 2000-03-29,0.0,6598.83,6598.83,6598.83 2000-03-28,0.0,6650.14,6650.14,6650.14 2000-03-27,0.0,6687.17,6687.17,6687.17 2000-03-24,0.0,6738.5,6738.5,6738.5 2000-03-23,6594.61,6594.61,6594.61,6594.61 2000-03-22,0.0,6609.62,6609.62,6609.62 2000-03-21,0.0,6617.87,6617.87,6617.87 2000-03-20,0.0,6624.51,6624.51,6624.51 2000-03-17,0.0,6557.99,6557.99,6557.99 2000-03-16,0.0,6557.25,6557.25,6557.25 2000-03-15,0.0,6446.99,6446.99,6446.99 2000-03-14,0.0,6487.11,6487.11,6487.11 2000-03-13,0.0,6466.87,6466.87,6466.87 2000-03-10,0.0,6568.73,6568.73,6568.73 2000-03-09,0.0,6532.11,6532.11,6532.11 2000-03-08,0.0,6411.21,6411.21,6411.21 2000-03-07,0.0,6466.54,6466.54,6466.54 2000-03-06,0.0,6567.81,6567.81,6567.81 2000-03-03,0.0,6487.46,6487.46,6487.46 2000-03-02,0.0,6432.1,6432.1,6432.1 2000-03-01,0.0,6364.89,6364.89,6364.89 2000-02-29,0.0,6232.56,6232.56,6232.56 2000-02-28,0.0,6099.64,6099.64,6099.64 2000-02-25,0.0,6197.98,6197.98,6197.98 2000-02-24,0.0,6086.7,6086.7,6086.7 2000-02-23,0.0,6144.1,6144.1,6144.1 2000-02-22,0.0,6014.73,6014.73,6014.73 2000-02-21,0.0,6081.62,6081.62,6081.62 2000-02-18,0.0,6164.96,6164.96,6164.96 2000-02-17,0.0,6209.34,6209.34,6209.34 2000-02-16,6005.2,6147.4,6002.5,6147.4 2000-02-15,0.0,6005.19,6005.19,6005.19 2000-02-14,0.0,6068.62,6068.62,6068.62 2000-02-11,0.0,6193.32,6193.32,6193.32 2000-02-10,0.0,6279.81,6279.81,6279.81 2000-02-09,0.0,6315.41,6315.41,6315.41 2000-02-08,0.0,6285.81,6285.81,6285.81 2000-02-07,0.0,6118.64,6118.64,6118.64 2000-02-04,0.0,6184.98,6184.98,6184.98 2000-02-03,0.0,6324.33,6324.33,6324.33 2000-02-02,0.0,6302.83,6302.83,6302.83 2000-02-01,0.0,6290.93,6290.93,6290.93 2000-01-31,0.0,6268.54,6268.54,6268.54 2000-01-28,0.0,6375.61,6375.61,6375.61 2000-01-27,0.0,6440.97,6440.97,6440.97 2000-01-26,0.0,6375.6,6375.6,6375.6 2000-01-25,0.0,6274.1,6274.1,6274.1 2000-01-24,0.0,6379.83,6379.83,6379.83 2000-01-21,0.0,6346.31,6346.31,6346.31 2000-01-20,0.0,6348.73,6348.73,6348.73 2000-01-19,0.0,6445.45,6445.45,6445.45 2000-01-18,0.0,6504.57,6504.57,6504.57 2000-01-17,0.0,6669.46,6669.46,6669.46 2000-01-14,0.0,6658.18,6658.18,6658.18 2000-01-13,0.0,6531.46,6531.46,6531.46 2000-01-12,0.0,6532.84,6532.84,6532.84 2000-01-11,0.0,6518.94,6518.94,6518.94 2000-01-10,0.0,6607.71,6607.71,6607.71 2000-01-07,0.0,6504.75,6504.75,6504.75 2000-01-06,0.0,6447.24,6447.24,6447.24 2000-01-05,0.0,6535.9,6535.9,6535.9 2000-01-04,6930.2,6930.2,6662.9,6662.9 1999-12-30,0.0,6930.2,6930.2,6930.2 1999-12-29,0.0,6835.91,6835.91,6835.91 1999-12-24,0.0,6806.51,6806.51,6806.51 1999-12-23,0.0,6776.81,6776.81,6776.81 1999-12-22,0.0,6728.65,6728.65,6728.65 1999-12-21,0.0,6707.5,6707.5,6707.5 1999-12-20,0.0,6731.19,6731.19,6731.19 1999-12-17,0.0,6724.58,6724.58,6724.58 1999-12-16,0.0,6671.98,6671.98,6671.98 1999-12-15,0.0,6633.82,6633.82,6633.82 1999-12-14,0.0,6702.08,6702.08,6702.08 1999-12-13,0.0,6710.71,6710.71,6710.71 1999-12-10,0.0,6739.52,6739.52,6739.52 1999-12-09,0.0,6680.84,6680.84,6680.84 1999-12-08,0.0,6619.38,6619.38,6619.38 1999-12-07,0.0,6660.92,6660.92,6660.92 1999-12-06,0.0,6694.01,6694.01,6694.01 1999-12-03,0.0,6742.17,6742.17,6742.17 1999-12-02,0.0,6653.67,6653.67,6653.67 1999-12-01,0.0,6645.97,6645.97,6645.97 1999-11-30,0.0,6597.17,6597.17,6597.17 1999-11-29,6695.4,6759.3,6659.6,6692.3 1999-11-26,6698.6,6743.1,6654.4,6684.8 1999-11-25,6586.5,6686.1,6558.0,6682.8 1999-11-24,6532.6,6569.5,6493.7,6561.8 1999-11-23,0.0,6534.2,6534.2,6534.2 1999-11-22,0.0,6441.99,6441.99,6441.99 1999-11-19,0.0,6482.25,6482.25,6482.25 1999-11-18,0.0,6550.75,6550.75,6550.75 1999-11-17,0.0,6555.69,6555.69,6555.69 1999-11-16,0.0,6582.99,6582.99,6582.99 1999-11-15,0.0,6533.64,6533.64,6533.64 1999-11-12,0.0,6511.58,6511.58,6511.58 1999-11-11,0.0,6551.44,6551.44,6551.44 1999-11-10,0.0,6446.96,6446.96,6446.96 1999-11-09,0.0,6435.45,6435.45,6435.45 1999-11-08,0.0,6374.34,6374.34,6374.34 1999-11-05,0.0,6356.61,6356.61,6356.61 1999-11-04,0.0,6331.33,6331.33,6331.33 1999-11-03,0.0,6280.84,6280.84,6280.84 1999-11-02,0.0,6252.0,6252.0,6252.0 1999-11-01,0.0,6283.97,6283.97,6283.97 1999-10-29,0.0,6255.72,6255.72,6255.72 1999-10-28,0.0,6149.1,6149.1,6149.1 1999-10-27,0.0,6045.7,6045.7,6045.7 1999-10-26,0.0,6092.4,6092.4,6092.4 1999-10-25,6062.5,6109.4,5991.7,6009.4 1999-10-22,0.0,6058.91,6058.91,6058.91 1999-10-21,0.0,5939.34,5939.34,5939.34 1999-10-20,0.0,6006.68,6006.68,6006.68 1999-10-19,0.0,5993.69,5993.69,5993.69 1999-10-18,0.0,5869.18,5869.18,5869.18 1999-10-15,0.0,5907.33,5907.33,5907.33 1999-10-14,0.0,6039.4,6039.4,6039.4 1999-10-13,0.0,6113.36,6113.36,6113.36 1999-10-12,0.0,6174.85,6174.85,6174.85 1999-10-11,0.0,6234.78,6234.78,6234.78 1999-10-08,0.0,6199.39,6199.39,6199.39 1999-10-07,0.0,6200.45,6200.45,6200.45 1999-10-06,0.0,6097.53,6097.53,6097.53 1999-10-05,0.0,6084.51,6084.51,6084.51 1999-10-04,0.0,6052.88,6052.88,6052.88 1999-10-01,0.0,5970.73,5970.73,5970.73 1999-09-30,0.0,6029.84,6029.84,6029.84 1999-09-29,6018.1,6077.2,5941.5,6020.6 1999-09-28,0.0,6078.58,6007.18,6007.18 1999-09-27,5945.0,6087.7,5944.6,6078.6 1999-09-24,0.0,5937.64,5937.64,5937.64 1999-09-23,0.0,5969.71,5969.71,5969.71 1999-09-22,0.0,5913.93,5913.93,5913.93 1999-09-21,0.0,5957.34,5957.34,5957.34 1999-09-20,6050.9,6094.7,6030.3,6056.5 1999-09-17,0.0,6039.8,6039.8,6039.8 1999-09-16,0.0,6014.61,6014.61,6014.61 1999-09-15,0.0,6067.69,6067.69,6067.69 1999-09-14,0.0,6115.96,6115.96,6115.96 1999-09-13,0.0,6168.97,6168.97,6168.97 1999-09-10,0.0,6191.01,6191.01,6191.01 1999-09-09,0.0,6260.58,6260.58,6260.58 1999-09-08,0.0,6253.57,6253.57,6253.57 1999-09-07,0.0,6309.51,6309.51,6309.51 1999-09-06,0.0,6375.7,6375.7,6375.7 1999-09-03,0.0,6332.15,6332.15,6332.15 1999-09-02,0.0,6195.6,6195.6,6195.6 1999-09-01,0.0,6276.18,6276.18,6276.18 1999-08-31,0.0,6246.44,6246.44,6246.44 1999-08-27,0.0,6375.16,6375.16,6375.16 1999-08-26,0.0,6383.93,6383.93,6383.93 1999-08-25,0.0,6369.49,6369.49,6369.49 1999-08-24,0.0,6315.06,6315.06,6315.06 1999-08-23,0.0,6322.11,6322.11,6322.11 1999-08-20,0.0,6180.84,6180.84,6180.84 1999-08-19,0.0,6117.98,6117.98,6117.98 1999-08-18,0.0,6201.78,6201.78,6201.78 1999-08-17,0.0,6166.45,6166.45,6166.45 1999-08-16,0.0,6235.41,6235.41,6235.41 1999-08-13,0.0,6245.13,6245.13,6245.13 1999-08-12,0.0,6153.34,6153.34,6153.34 1999-08-11,0.0,6014.44,6014.44,6014.44 1999-08-10,0.0,5978.35,5978.35,5978.35 1999-08-09,0.0,6126.45,6126.45,6126.45 1999-08-06,0.0,6121.0,6121.0,6121.0 1999-08-05,0.0,6101.61,6101.61,6101.61 1999-08-04,0.0,6235.43,6235.43,6235.43 1999-08-03,0.0,6250.65,6250.65,6250.65 1999-08-02,0.0,6288.29,6288.29,6288.29 1999-07-30,0.0,6231.93,6231.93,6231.93 1999-07-29,0.0,6117.53,6117.53,6117.53 1999-07-28,0.0,6297.22,6297.22,6297.22 1999-07-27,6193.3,6281.7,6193.3,6262.8 1999-07-26,6207.7,6223.9,6092.1,6169.1 1999-07-23,0.0,6207.42,6207.42,6207.42 1999-07-22,0.0,6297.75,6297.75,6297.75 1999-07-21,0.0,6329.83,6329.83,6329.83 1999-07-20,0.0,6391.99,6391.99,6391.99 1999-07-19,0.0,6483.72,6483.72,6483.72 1999-07-16,0.0,6563.25,6563.25,6563.25 1999-07-15,0.0,6574.99,6574.99,6574.99 1999-07-14,0.0,6473.14,6473.14,6473.14 1999-07-13,0.0,6445.62,6445.62,6445.62 1999-07-12,0.0,6545.47,6545.47,6545.47 1999-07-09,0.0,6562.6,6562.6,6562.6 1999-07-08,0.0,6557.34,6557.34,6557.34 1999-07-07,0.0,6597.42,6597.42,6597.42 1999-07-06,0.0,6620.63,6620.63,6620.63 1999-07-05,0.0,6592.0,6592.0,6592.0 1999-07-02,0.0,6491.92,6491.92,6491.92 1999-07-01,0.0,6488.9,6488.9,6488.9 1999-06-30,0.0,6318.53,6318.53,6318.53 1999-06-29,0.0,6307.08,6307.08,6307.08 1999-06-28,0.0,6405.75,6405.75,6405.75 1999-06-25,0.0,6435.43,6435.43,6435.43 1999-06-24,0.0,6416.69,6416.69,6416.69 1999-06-23,6557.6,6557.6,6471.6,6496.5 1999-06-22,0.0,6552.42,6552.42,6552.42 1999-06-21,0.0,6581.25,6581.25,6581.25 1999-06-18,0.0,6527.81,6527.81,6527.81 1999-06-17,0.0,6493.61,6493.61,6493.61 1999-06-16,0.0,6504.88,6504.88,6504.88 1999-06-15,0.0,6451.24,6451.24,6451.24 1999-06-14,0.0,6430.15,6430.15,6430.15 1999-06-11,0.0,6484.79,6484.79,6484.79 1999-06-10,0.0,6403.41,6403.41,6403.41 1999-06-09,0.0,6453.01,6453.01,6453.01 1999-06-08,0.0,6431.54,6431.54,6431.54 1999-06-07,0.0,6412.03,6412.03,6412.03 1999-06-04,0.0,6361.48,6361.48,6361.48 1999-06-03,0.0,6348.58,6348.58,6348.58 1999-06-02,0.0,6302.23,6302.23,6302.23 1999-06-01,0.0,6250.03,6250.03,6250.03 1999-05-28,0.0,6226.22,6226.22,6226.22 1999-05-27,0.0,6199.47,6199.47,6199.47 1999-05-26,0.0,6236.77,6236.77,6236.77 1999-05-25,0.0,6249.32,6249.32,6249.32 1999-05-24,0.0,6322.1,6322.1,6322.1 1999-05-21,0.0,6353.1,6353.1,6353.1 1999-05-20,0.0,6368.18,6368.18,6368.18 1999-05-19,0.0,6266.73,6266.73,6266.73 1999-05-18,0.0,6206.43,6206.43,6206.43 1999-05-17,0.0,6165.79,6165.79,6165.79 1999-05-14,0.0,6300.42,6300.42,6300.42 1999-05-13,0.0,6456.62,6456.62,6456.62 1999-05-12,0.0,6343.12,6343.12,6343.12 1999-05-11,0.0,6378.26,6378.26,6378.26 1999-05-10,0.0,6348.82,6348.82,6348.82 1999-05-07,0.0,6356.03,6356.03,6356.03 1999-05-06,0.0,6406.59,6406.59,6406.59 1999-05-05,0.0,6401.67,6401.67,6401.67 1999-05-04,0.0,6533.14,6533.14,6533.14 1999-04-30,0.0,6552.18,6552.18,6552.18 1999-04-29,0.0,6497.6,6497.6,6497.6 1999-04-28,6595.5,6613.0,6577.8,6598.8 1999-04-27,6527.5,6635.9,6522.8,6593.6 1999-04-26,0.0,6503.59,6503.59,6503.59 1999-04-23,0.0,6427.99,6427.99,6427.99 1999-04-22,0.0,6413.55,6413.55,6413.55 1999-04-21,0.0,6310.95,6310.95,6310.95 1999-04-20,0.0,6319.76,6319.76,6319.76 1999-04-19,0.0,6515.34,6515.34,6515.34 1999-04-16,0.0,6420.61,6420.61,6420.61 1999-04-15,0.0,6466.13,6466.13,6466.13 1999-04-14,0.0,6493.56,6493.56,6493.56 1999-04-13,0.0,6513.08,6513.08,6513.08 1999-04-12,0.0,6441.16,6441.16,6441.16 1999-04-09,0.0,6472.83,6472.83,6472.83 1999-04-08,0.0,6437.87,6437.87,6437.87 1999-04-07,0.0,6473.22,6473.22,6473.22 1999-04-06,0.0,6415.28,6415.28,6415.28 1999-04-01,0.0,6330.02,6330.02,6330.02 1999-03-31,0.0,6295.33,6295.33,6295.33 1999-03-30,0.0,6264.15,6264.15,6264.15 1999-03-29,0.0,6252.92,6252.92,6252.92 1999-03-26,6087.3,6139.3,6061.6,6139.2 1999-03-25,6024.4,6095.9,6024.4,6085.0 1999-03-24,6044.9,6044.9,5968.3,6016.7 1999-03-23,6079.7,6124.7,6048.6,6060.5 1999-03-22,6155.2,6200.1,6128.9,6152.8 1999-03-19,6160.8,6211.2,6135.6,6163.2 1999-03-18,6144.8,6161.4,6074.9,6114.3 1999-03-17,6194.5,6194.5,6109.7,6140.6 1999-03-16,6216.8,6269.6,6181.2,6201.9 1999-03-15,6259.2,6280.8,6159.4,6206.8 1999-03-12,6332.1,6365.4,6272.8,6282.2 1999-03-11,6290.4,6360.3,6241.2,6335.7 1999-03-10,6232.7,6242.1,6168.6,6241.5 1999-03-09,6220.5,6287.3,6196.9,6237.7 1999-03-08,6210.0,6234.5,6174.6,6208.8 1999-03-05,6141.7,6243.3,6122.5,6205.5 1999-03-04,6057.1,6117.9,6021.4,6101.4 1999-03-03,6057.3,6116.0,6039.9,6048.3 1999-03-02,6062.3,6089.6,6033.5,6061.3 1999-03-01,6177.5,6185.2,6032.7,6060.9 1999-02-26,6207.0,6222.7,6156.6,6175.1 1999-02-25,6272.1,6319.8,6193.4,6206.5 1999-02-24,6152.2,6316.6,6146.8,6307.6 1999-02-23,6118.7,6185.2,6111.9,6155.2 1999-02-22,6037.7,6080.9,5994.8,6069.9 1999-02-19,6066.3,6066.4,6009.5,6031.2 1999-02-18,6084.0,6117.8,6007.1,6074.9 1999-02-17,6090.7,6111.9,6040.7,6078.4 1999-02-16,6042.6,6133.2,6042.6,6108.6 1999-02-15,5930.2,6033.2,5924.0,6023.2 1999-02-12,5940.0,6032.5,5880.2,5950.7 1999-02-11,5792.1,5888.7,5792.1,5888.5 1999-02-10,5779.6,5779.6,5697.7,5770.2 1999-02-09,5838.5,5868.1,5756.5,5779.9 1999-02-08,5867.4,5867.4,5789.6,5834.9 1999-02-05,5932.2,5940.8,5848.4,5855.3 1999-02-04,5993.0,6041.5,5924.7,5939.9 1999-02-03,6012.4,6048.2,5922.8,5940.3 1999-02-02,6004.8,6031.8,5915.2,6013.0 1999-02-01,5926.0,6045.0,5925.7,6012.4 1999-01-29,5902.6,5941.7,5832.0,5896.0 1999-01-28,5856.7,5959.8,5841.2,5872.5 1999-01-27,5947.8,5989.3,5859.5,5876.4 1999-01-26,5893.8,5927.8,5822.9,5885.7 1999-01-25,5844.5,5905.8,5749.3,5880.9 1999-01-22,5972.0,5972.0,5835.1,5861.2 1999-01-21,6097.6,6124.6,6021.9,6022.3 1999-01-20,6050.5,6129.1,6048.8,6105.6 1999-01-19,6106.5,6138.7,6016.4,6027.6 1999-01-18,6013.4,6123.9,6013.2,6123.9 1999-01-15,5804.6,5941.0,5736.8,5941.0 1999-01-14,5842.0,5937.8,5798.7,5820.2 1999-01-13,5984.2,5984.2,5746.5,5850.1 1999-01-12,6086.1,6140.3,6024.5,6033.6 1999-01-11,6164.6,6186.5,6063.3,6085.0 1999-01-08,6115.4,6195.6,6114.8,6147.2 1999-01-07,6145.9,6153.7,6042.5,6101.2 1999-01-06,5968.9,6157.4,5968.9,6148.8 1999-01-05,5882.3,5980.5,5875.8,5958.2 1999-01-04,5909.4,5916.9,5811.3,5879.4 1998-12-30,5932.7,5944.9,5809.0,5882.6 1998-12-29,5873.4,5970.1,5873.4,5941.5 1998-12-24,5909.4,5911.5,5867.1,5867.2 1998-12-23,5835.9,5908.8,5835.9,5908.8 1998-12-22,5871.1,5893.3,5825.2,5843.3 1998-12-21,5736.9,5892.3,5736.1,5876.5 1998-12-18,5689.6,5772.1,5674.0,5741.9 1998-12-17,5634.9,5685.5,5591.1,5685.2 1998-12-16,5576.4,5636.8,5568.4,5630.4 1998-12-15,5529.2,5559.8,5511.6,5557.1 1998-12-14,5535.7,5548.0,5468.4,5534.5 1998-12-11,5658.3,5658.3,5515.5,5541.7 1998-12-10,5671.3,5712.7,5614.6,5660.3 1998-12-09,5635.2,5691.7,5572.4,5669.1 1998-12-08,5592.1,5639.8,5582.0,5615.7 1998-12-07,5599.9,5624.8,5573.6,5576.7 1998-12-04,5544.9,5613.7,5489.3,5581.9 1998-12-03,5487.9,5597.2,5377.2,5566.1 1998-12-02,5550.0,5565.3,5489.5,5507.2 1998-12-01,5723.3,5723.3,5519.3,5537.5 1998-11-30,5831.5,5866.3,5743.9,5743.9 1998-11-27,5808.8,5870.8,5768.7,5844.2 1998-11-26,5755.8,5854.5,5744.1,5827.9 1998-11-25,5836.0,5836.0,5732.0,5755.3 1998-11-24,5852.8,5881.7,5773.0,5798.3 1998-11-23,5737.9,5854.4,5737.9,5848.4 1998-11-20,5613.5,5751.9,5609.8,5717.5 1998-11-19,5481.3,5616.7,5468.1,5606.2 1998-11-18,5508.3,5554.2,5467.1,5474.0 1998-11-17,5505.4,5562.4,5491.9,5502.7 1998-11-16,5472.1,5540.7,5472.1,5510.5 1998-11-13,5457.3,5464.9,5370.6,5463.2 1998-11-12,5464.2,5464.2,5402.4,5449.0 1998-11-11,5449.3,5516.3,5449.3,5476.8 1998-11-10,5426.8,5435.7,5359.5,5432.3 1998-11-09,5489.9,5507.1,5399.1,5433.9 1998-11-06,5504.3,5575.3,5458.5,5491.0 1998-11-05,5613.1,5613.1,5467.9,5479.8 1998-11-04,5532.6,5645.1,5503.9,5622.9 1998-11-03,5520.0,5566.5,5480.0,5503.9 1998-11-02,5454.3,5564.4,5453.7,5525.5 1998-10-30,5398.1,5455.2,5398.1,5438.4 1998-10-29,5287.1,5362.7,5276.1,5358.5 1998-10-28,5291.4,5293.9,5238.7,5293.9 1998-10-27,5270.1,5372.1,5231.5,5331.2 1998-10-26,5236.5,5329.0,5215.2,5231.5 1998-10-23,5225.9,5238.3,5159.9,5217.1 1998-10-22,5210.6,5259.4,5210.6,5229.9 1998-10-21,5237.9,5282.4,5203.2,5206.6 1998-10-20,5076.9,5267.9,5076.9,5251.9 1998-10-19,5130.7,5130.7,5055.7,5077.5 1998-10-16,5149.6,5208.1,5099.9,5133.1 1998-10-15,5054.5,5125.6,5011.0,5056.3 1998-10-14,4976.9,5052.4,4935.7,5038.4 1998-10-13,5018.8,5052.8,4956.4,4990.1 1998-10-12,4841.5,5043.4,4841.5,5037.6 1998-10-09,4716.9,4823.4,4716.9,4823.4 1998-10-08,4828.7,4828.7,4599.2,4698.9 1998-10-07,4871.1,4949.5,4777.1,4828.9 1998-10-06,4682.2,4863.7,4682.2,4854.0 1998-10-05,4743.8,4779.8,4643.3,4648.7 1998-10-02,4897.3,4897.3,4724.2,4750.4 1998-10-01,5024.8,5024.8,4881.3,4908.2 1998-09-30,5114.2,5114.2,5003.9,5064.4 1998-09-29,5073.3,5109.4,5042.7,5108.7 1998-09-28,5069.8,5097.3,5022.0,5093.5 1998-09-25,5136.9,5136.9,5016.0,5016.0 1998-09-24,5256.5,5322.3,5158.6,5167.6 1998-09-23,5122.0,5219.5,5122.0,5214.7 1998-09-22,5013.2,5124.1,5013.2,5103.3 1998-09-21,5047.2,5047.2,4899.6,4990.3 1998-09-18,5111.4,5152.2,5034.7,5055.6 1998-09-17,5273.9,5273.9,5101.5,5132.9 1998-09-16,5290.2,5360.6,5276.8,5291.7 1998-09-15,5256.1,5283.0,5192.5,5281.7 1998-09-14,5123.0,5268.6,5122.0,5268.6 1998-09-11,5115.6,5137.7,4988.8,5118.6 1998-09-10,5299.4,5299.4,5121.8,5136.6 1998-09-09,5336.7,5365.2,5256.4,5311.3 1998-09-08,5354.3,5399.8,5313.9,5344.2 1998-09-07,5204.5,5352.6,5204.5,5347.0 1998-09-04,5114.7,5194.9,5113.5,5167.0 1998-09-03,5215.1,5215.1,5089.3,5118.7 1998-09-02,5219.7,5341.6,5219.3,5235.8 1998-09-01,5139.5,5219.0,5075.7,5169.1 1998-08-28,5305.2,5371.0,5108.7,5249.4 1998-08-27,5525.5,5554.7,5353.5,5368.5 1998-08-26,5654.4,5654.4,5501.7,5545.4 1998-08-25,5561.0,5655.6,5561.0,5654.4 1998-08-24,5503.3,5553.7,5444.5,5553.7 1998-08-21,5654.9,5654.9,5455.1,5477.0 1998-08-20,5700.4,5706.8,5631.8,5667.4 1998-08-19,5652.2,5712.8,5652.2,5694.3 1998-08-18,5501.7,5648.2,5501.7,5648.2 1998-08-17,5450.7,5485.9,5398.0,5467.2 1998-08-14,5434.9,5517.6,5434.9,5455.0 1998-08-13,5443.4,5443.4,5350.3,5399.5 1998-08-12,5470.9,5494.3,5403.6,5462.2 1998-08-11,5557.1,5557.1,5403.3,5432.8 1998-08-10,5674.4,5674.4,5555.9,5587.6 1998-08-07,5588.9,5682.4,5584.4,5680.4 1998-08-06,5638.4,5641.7,5546.9,5594.1 1998-08-05,5688.4,5688.4,5571.4,5632.5 1998-08-04,5821.0,5828.8,5724.6,5736.1 1998-08-03,5832.2,5832.2,5752.0,5809.7 1998-07-31,5909.9,5930.1,5834.7,5837.0 1998-07-30,5853.7,5932.5,5842.3,5910.7 1998-07-29,5831.1,5858.5,5782.2,5844.1 1998-07-28,5853.3,5894.0,5809.8,5835.8 1998-07-27,5905.8,5927.7,5821.7,5836.1 1998-07-24,5965.1,5965.1,5871.7,5892.3 1998-07-23,5982.2,6004.8,5925.3,5976.2 1998-07-22,6115.6,6115.6,5989.6,5989.6 1998-07-21,6168.0,6168.0,6115.4,6132.7 1998-07-20,6168.7,6183.7,6157.3,6179.0 1998-07-17,6114.6,6177.3,6113.4,6174.0 1998-07-16,6148.0,6180.4,6086.5,6166.8 1998-07-15,6107.6,6179.8,6107.6,6151.5 1998-07-14,5957.7,6111.2,5956.7,6100.2 1998-07-13,5929.3,5972.6,5926.4,5958.2 1998-07-10,5953.8,5969.7,5915.5,5929.7 1998-07-09,6008.5,6043.8,5948.1,5969.7 1998-07-08,6008.4,6027.1,5977.4,6009.6 1998-07-07,6005.9,6036.6,5985.0,6003.4 1998-07-06,5989.4,5991.4,5931.1,5990.3 1998-07-03,5959.9,6022.1,5959.9,5988.4 1998-07-02,5932.2,5996.7,5932.2,5960.2 1998-07-01,5840.6,5947.0,5840.6,5919.9 1998-06-30,5883.4,5885.6,5825.0,5832.5 1998-06-29,5883.7,5923.9,5869.1,5884.5 1998-06-26,5847.3,5879.0,5819.9,5877.4 1998-06-25,5809.6,5885.9,5809.6,5858.9 1998-06-24,5771.0,5805.0,5728.5,5804.9 1998-06-23,5709.0,5774.8,5701.6,5772.0 1998-06-22,5747.4,5750.1,5676.5,5712.4 1998-06-19,5810.3,5831.3,5748.1,5748.1 1998-06-18,5847.1,5871.4,5769.0,5812.1 1998-06-17,5741.6,5838.6,5741.6,5832.7 1998-06-16,5699.2,5754.0,5687.7,5729.7 1998-06-15,5781.4,5783.8,5646.1,5715.7 1998-06-12,5852.7,5900.6,5750.3,5769.8 1998-06-11,5977.3,5977.3,5852.5,5852.5 1998-06-10,6003.7,6005.9,5944.8,5987.4 1998-06-09,6035.4,6038.3,6003.8,6019.8 1998-06-08,5952.3,6049.6,5952.3,6037.8 1998-06-05,5874.7,5947.3,5873.4,5947.3 1998-06-04,5895.0,5895.0,5820.8,5860.8 1998-06-03,5840.0,5913.6,5840.0,5898.4 1998-06-02,5839.9,5847.7,5809.9,5837.9 1998-06-01,5870.7,5870.7,5777.7,5837.9 1998-05-29,5867.6,5915.1,5865.4,5870.7 1998-05-28,5880.0,5905.6,5816.5,5862.3 1998-05-27,5951.9,5951.9,5836.9,5870.2 1998-05-26,5972.6,6023.9,5964.7,5970.7 1998-05-22,5931.8,5957.7,5908.8,5955.6 1998-05-21,5904.6,5991.1,5904.3,5935.6 1998-05-20,5880.7,5941.2,5880.7,5907.4 1998-05-19,5827.3,5895.6,5827.3,5877.8 1998-05-18,5916.7,5917.8,5794.5,5826.2 1998-05-15,5950.4,5953.2,5866.5,5917.8 1998-05-14,5972.5,5981.3,5898.6,5948.5 1998-05-13,5961.0,6000.2,5949.5,5972.9 1998-05-12,6017.7,6017.8,5955.3,5956.7 1998-05-11,5968.5,6030.9,5957.4,6028.3 1998-05-08,5941.4,5977.7,5898.5,5969.8 1998-05-07,5990.5,5990.5,5899.4,5938.0 1998-05-06,5986.9,6000.0,5947.4,5992.4 1998-05-05,6017.6,6064.6,5972.6,5986.5 1998-05-01,5932.7,6025.1,5932.7,6010.3 1998-04-30,5833.9,5954.9,5818.6,5928.3 1998-04-29,5807.3,5838.7,5774.4,5833.1 1998-04-28,5726.3,5823.4,5726.3,5806.6 1998-04-27,5861.8,5863.9,5699.9,5722.4 1998-04-24,5893.1,5893.1,5785.7,5863.9 1998-04-23,5935.6,5970.2,5851.4,5898.1 1998-04-22,5960.6,5995.8,5918.5,5931.1 1998-04-21,5951.5,5976.0,5884.8,5955.0 1998-04-20,5939.9,5993.3,5922.2,5954.1 1998-04-17,6004.9,6005.1,5916.9,5922.2 1998-04-16,6069.7,6074.1,5964.4,6002.0 1998-04-15,6104.9,6139.1,6073.3,6074.1 1998-04-14,6111.8,6150.5,6083.2,6104.1 1998-04-09,6050.7,6105.5,6038.6,6105.5 1998-04-08,6089.3,6095.5,6033.9,6055.2 1998-04-07,6109.3,6134.9,6063.1,6094.0 1998-04-06,6062.5,6115.8,6040.7,6105.8 1998-04-03,6050.4,6105.3,6024.5,6064.2 1998-04-02,6016.2,6052.8,6003.9,6052.8 1998-04-01,5930.9,6030.7,5907.1,6017.6 1998-03-31,5907.4,5932.5,5875.4,5932.2 1998-03-30,5939.2,5950.4,5874.8,5911.9 1998-03-27,5905.1,5977.0,5898.0,5939.3 1998-03-26,5958.6,5967.8,5850.7,5905.6 1998-03-25,5983.1,6007.6,5958.5,5967.8 1998-03-24,5942.8,5983.7,5941.1,5983.7 1998-03-23,5993.8,6023.1,5946.8,5947.0 1998-03-20,6015.1,6105.8,5880.9,5956.3 1998-03-19,5909.9,5997.9,5901.2,5997.9 1998-03-18,5833.7,5903.6,5831.3,5903.6 1998-03-17,5785.1,5853.7,5779.9,5834.9 1998-03-16,5782.9,5813.4,5773.5,5785.1 1998-03-13,5797.5,5841.2,5758.1,5782.3 1998-03-12,5830.5,5831.3,5776.2,5794.8 1998-03-11,5828.4,5861.9,5811.4,5829.8 1998-03-10,5817.2,5858.1,5794.0,5828.5 1998-03-09,5782.6,5826.6,5764.6,5818.9 1998-03-06,5700.5,5791.8,5688.4,5782.9 1998-03-05,5715.9,5733.1,5629.1,5695.6 1998-03-04,5807.2,5812.7,5704.5,5733.1 1998-03-03,5814.1,5850.0,5789.5,5807.7 1998-03-02,5767.3,5846.9,5747.1,5820.6 1998-02-27,5767.5,5821.8,5741.8,5767.3 1998-02-26,5757.5,5784.5,5706.3,5764.8 1998-02-25,5666.7,5745.1,5651.0,5745.1 1998-02-24,5592.3,5653.7,5584.9,5651.0 1998-02-23,5749.4,5793.2,5696.3,5702.8 1998-02-20,5707.1,5744.7,5691.5,5718.5 1998-02-19,5707.1,5744.7,5691.5,5718.5 1998-02-18,5712.3,5741.3,5688.0,5723.4 1998-02-17,5612.2,5709.5,5612.2,5709.5 1998-02-16,5580.5,5634.3,5578.5,5619.9 1998-02-13,5549.1,5582.3,5530.8,5582.3 1998-02-12,5611.4,5616.6,5538.6,5552.5 1998-02-11,5622.5,5646.7,5591.3,5607.9 1998-02-10,5595.3,5630.3,5586.8,5613.3 1998-02-09,5630.5,5650.2,5590.3,5600.9 1998-02-06,5601.9,5629.7,5556.2,5629.7 1998-02-05,5595.2,5675.1,5577.8,5606.4 1998-02-04,5605.6,5612.8,5570.6,5595.8 1998-02-03,5599.0,5612.8,5574.1,5612.8 1998-02-02,5589.9,5616.1,5569.6,5599.0 1998-01-30,5423.6,5458.5,5389.5,5458.5 1998-01-29,5375.0,5434.1,5364.3,5422.4 1998-01-28,5328.1,5415.3,5328.1,5372.6 1998-01-27,5241.4,5338.9,5241.4,5326.3 1998-01-26,5184.4,5244.4,5179.5,5237.2 1998-01-23,5254.6,5254.6,5172.8,5181.4 1998-01-22,5261.3,5262.9,5215.9,5253.1 1998-01-21,5278.2,5297.3,5230.6,5272.3 1998-01-20,5270.0,5298.6,5250.6,5278.2 1998-01-19,5273.7,5313.6,5265.7,5273.6 1998-01-16,5168.7,5277.2,5168.7,5263.1 1998-01-15,5104.7,5167.9,5099.6,5165.8 1998-01-14,5094.9,5135.8,5094.9,5106.9 1998-01-13,5078.0,5110.2,5074.3,5083.9 1998-01-12,5093.4,5093.4,4988.3,5068.8 1998-01-09,5230.1,5230.1,5125.4,5138.3 1998-01-08,5232.1,5296.4,5220.0,5237.1 1998-01-07,5246.2,5265.6,5218.2,5224.1 1998-01-06,5258.5,5271.4,5220.8,5264.4 1998-01-05,5191.5,5262.5,5182.8,5262.5 1998-01-02,5136.0,5203.8,5136.0,5193.5 1997-12-31,5133.1,5182.3,5133.1,5135.5 1997-12-30,5114.2,5144.8,5114.2,5132.3 1997-12-29,5011.1,5112.5,5008.7,5112.4 1997-12-24,5048.5,5048.5,5004.6,5013.9 1997-12-23,5019.6,5055.0,5018.9,5049.8 1997-12-22,5013.3,5048.1,5004.5,5018.2 1997-12-19,5163.6,5163.6,4985.7,5020.2 1997-12-18,5192.8,5219.3,5148.5,5168.3 1997-12-17,5203.4,5247.6,5183.1,5190.8 1997-12-16,5124.1,5210.6,5124.1,5203.4 1997-12-15,5048.2,5121.9,5048.2,5121.8 1997-12-12,5037.4,5069.6,5036.5,5045.2 1997-12-11,5118.5,5130.7,4999.6,5035.9 1997-12-10,5163.1,5177.1,5098.5,5130.7 1997-12-09,5184.3,5200.4,5155.3,5177.1 1997-12-08,5143.2,5223.5,5143.2,5187.4 1997-12-05,5081.0,5178.5,5047.9,5142.9 1997-12-04,4978.3,5082.3,4970.7,5082.3 1997-12-03,4974.9,4988.1,4951.1,4970.7 1997-12-02,4935.3,4980.1,4935.3,4977.6 1997-12-01,4871.7,4932.0,4859.8,4921.8 1997-11-28,4889.6,4889.8,4831.8,4831.8 1997-11-27,4891.3,4913.6,4880.7,4889.0 1997-11-26,4863.5,4907.3,4863.5,4891.2 1997-11-25,4898.6,4917.2,4854.8,4863.5 1997-11-24,4977.7,4985.8,4883.6,4898.6 1997-11-21,4915.9,4985.8,4915.9,4985.8 1997-11-20,4832.2,4921.4,4826.0,4908.4 1997-11-19,4821.8,4850.3,4786.1,4830.1 1997-11-18,4858.9,4858.9,4827.3,4845.4 1997-11-17,4762.4,4891.8,4741.8,4867.0 1997-11-14,4713.3,4801.3,4713.3,4741.8 1997-11-13,4726.4,4740.3,4697.5,4711.0 1997-11-12,4777.1,4793.7,4680.4,4720.4 1997-11-11,4824.4,4824.7,4755.0,4793.7 1997-11-10,4770.2,4828.3,4764.3,4806.8 1997-11-07,4850.8,4850.8,4699.6,4764.3 1997-11-06,4909.2,4910.0,4841.2,4863.8 1997-11-05,4902.6,4947.6,4863.3,4908.3 1997-11-04,4928.0,4930.2,4879.1,4897.4 1997-11-03,4877.0,4944.6,4842.3,4906.4 1997-10-31,4813.1,4860.6,4763.4,4842.3 1997-10-30,4845.7,4845.7,4707.3,4801.9 1997-10-29,4755.4,4917.4,4755.4,4871.8 1997-10-28,4840.7,4840.7,4382.8,4755.4 1997-10-27,4970.2,4970.2,4840.7,4840.7 1997-10-24,4991.5,5103.2,4960.2,4970.2 1997-10-23,5148.8,5148.8,4926.7,4991.5 1997-10-22,5225.9,5257.6,5125.5,5148.8 1997-10-21,5211.0,5257.5,5211.0,5225.9 1997-10-20,5271.1,5271.1,5152.3,5211.0 1997-10-17,5255.6,5277.5,5248.2,5271.1 1997-10-16,5288.9,5292.7,5270.5,5287.9 1997-10-15,5276.2,5276.2,5222.4,5263.7 1997-10-14,5295.7,5302.9,5272.0,5298.9 1997-10-13,5252.3,5301.0,5252.3,5300.1 1997-10-10,5224.7,5227.3,5186.7,5227.3 1997-10-09,5246.9,5255.9,5166.1,5217.8 1997-10-08,5325.4,5366.5,5235.1,5262.1 1997-10-07,5307.1,5340.5,5285.1,5305.6 1997-10-06,5309.3,5309.3,5268.0,5300.0 1997-10-03,5293.9,5333.9,5274.2,5330.8 1997-10-02,5356.5,5367.3,5283.0,5296.1 1997-10-01,5241.4,5320.1,5240.8,5317.1 1997-09-30,5226.0,5269.2,5209.0,5244.2 1997-09-29,5221.3,5244.3,5202.6,5220.3 1997-09-26,5101.5,5244.3,5101.5,5226.3 1997-09-25,5069.0,5072.1,5058.0,5065.5 1997-09-24,5026.9,5077.2,5026.6,5077.2 1997-09-23,5079.8,5095.1,5025.6,5027.5 1997-09-22,5019.0,5077.8,5014.8,5075.7 1997-09-19,5061.6,5064.3,5023.8,5023.8 1997-09-18,4994.5,5057.8,4993.6,5046.2 1997-09-17,5025.4,5035.3,5002.3,5013.1 1997-09-16,4892.8,4977.3,4876.8,4976.4 1997-09-15,4876.3,4902.9,4864.6,4902.9 1997-09-12,4851.2,4878.0,4833.9,4848.2 1997-09-11,4876.3,4879.6,4854.8,4854.8 1997-09-10,4952.3,4964.5,4905.2,4905.2 1997-09-09,4981.2,4981.9,4931.6,4950.5 1997-09-08,4985.9,4999.8,4973.1,4985.2 1997-09-05,4984.7,5028.3,4984.3,4994.2 1997-09-04,4967.8,4991.3,4948.7,4991.3 1997-09-03,5007.3,5027.3,4974.5,4976.9 1997-09-02,4872.2,4954.2,4872.2,4952.2 1997-09-01,4816.6,4872.7,4795.3,4870.2 1997-08-29,4827.4,4832.3,4785.2,4817.5 1997-08-28,4921.2,4922.4,4835.2,4845.4 1997-08-27,4869.5,4920.3,4869.5,4906.9 1997-08-26,4910.6,4924.8,4851.9,4886.3 1997-08-22,4969.7,4969.7,4867.1,4901.1 1997-08-21,4989.1,4994.1,4962.5,4978.0 1997-08-20,4954.7,4961.5,4936.1,4958.4 1997-08-19,4875.3,4918.0,4875.3,4914.2 1997-08-18,4794.0,4852.6,4779.3,4835.0 1997-08-15,4988.5,4990.8,4865.8,4865.8 1997-08-14,5012.3,5031.8,4990.6,4991.3 1997-08-13,5054.0,5054.0,4994.8,5003.6 1997-08-12,5057.7,5078.2,5041.9,5075.8 1997-08-11,4974.8,5051.1,4966.4,5031.9 1997-08-08,5072.6,5088.4,5009.4,5031.3 1997-08-07,5036.6,5095.3,5009.3,5086.8 1997-08-06,4965.6,5027.7,4965.6,5026.2 1997-08-05,4921.7,4960.6,4921.7,4960.6 1997-08-04,4896.7,4907.2,4874.0,4895.7 1997-08-01,4914.6,4936.0,4886.0,4899.3 1997-07-31,4930.8,4941.7,4907.4,4907.5 1997-07-30,4888.4,4927.3,4888.4,4927.3 1997-07-29,4858.7,4895.9,4856.7,4876.6 1997-07-28,4857.4,4868.3,4835.3,4862.6 1997-07-25,4880.4,4881.2,4834.8,4851.5 1997-07-24,4875.6,4897.7,4855.4,4862.9 1997-07-23,4902.1,4931.5,4866.9,4874.5 1997-07-22,4818.1,4848.0,4818.1,4846.7 1997-07-21,4858.8,4858.8,4794.9,4805.7 1997-07-18,4956.8,4998.1,4848.3,4877.2 1997-07-17,4973.9,4993.0,4935.5,4949.0 1997-07-16,4909.6,4991.8,4909.6,4964.2 1997-07-15,4859.7,4903.2,4859.7,4899.3 1997-07-14,4813.2,4857.4,4796.0,4857.4 1997-07-11,4765.5,4800.1,4765.5,4799.5 1997-07-10,4747.1,4767.8,4732.7,4767.8 1997-07-09,4766.5,4778.1,4729.8,4762.4 1997-07-08,4798.9,4799.9,4751.9,4758.5 1997-07-07,4819.0,4820.0,4776.4,4810.7 1997-07-04,4820.3,4879.0,4801.2,4812.8 1997-07-03,4692.9,4863.6,4688.8,4831.7 1997-07-02,4737.5,4791.1,4715.9,4751.4 1997-07-01,4606.0,4728.3,4597.1,4728.3 1997-06-30,4645.1,4662.4,4603.2,4604.6 1997-06-27,4651.3,4652.0,4623.1,4640.3 1997-06-26,4639.2,4660.4,4628.4,4657.9 1997-06-25,4623.3,4640.5,4622.4,4640.0 1997-06-24,4538.3,4598.6,4538.3,4596.3 1997-06-23,4597.0,4597.0,4547.0,4575.8 1997-06-20,4672.0,4672.1,4593.9,4593.9 1997-06-19,4667.0,4668.9,4629.1,4653.7 1997-06-18,4687.0,4688.1,4627.3,4657.0 1997-06-17,4746.3,4758.1,4669.1,4682.2 1997-06-16,4777.2,4777.2,4735.5,4745.1 1997-06-13,4776.2,4796.0,4771.9,4783.1 1997-06-12,4715.5,4759.2,4711.3,4757.4 1997-06-11,4751.5,4759.3,4720.9,4724.8 1997-06-10,4683.6,4739.6,4678.3,4739.6 1997-06-09,4653.3,4686.7,4653.3,4686.7 1997-06-06,4588.0,4645.0,4577.5,4645.0 1997-06-05,4551.3,4576.3,4534.9,4576.2 1997-06-04,4563.8,4585.9,4553.3,4557.1 1997-06-03,4564.0,4565.6,4524.2,4557.8 1997-06-02,4644.7,4645.7,4549.5,4562.8 1997-05-30,4677.0,4684.2,4595.9,4621.3 1997-05-29,4657.8,4688.3,4656.3,4672.3 1997-05-28,4681.6,4705.2,4670.7,4677.5 1997-05-27,4661.2,4692.4,4661.2,4681.6 1997-05-23,4653.7,4672.7,4652.1,4661.8 1997-05-22,4635.7,4661.7,4626.9,4651.8 1997-05-21,4616.8,4653.8,4616.7,4642.0 1997-05-20,4646.0,4646.2,4600.4,4607.5 1997-05-19,4669.4,4687.7,4640.7,4645.2 1997-05-16,4688.9,4723.7,4686.7,4693.9 1997-05-15,4664.7,4681.2,4654.4,4681.2 1997-05-14,4684.0,4715.2,4660.4,4686.9 1997-05-13,4685.5,4720.3,4676.8,4691.0 1997-05-12,4641.8,4669.6,4622.9,4669.6 1997-05-09,4597.2,4646.0,4595.2,4630.9 1997-05-08,4521.8,4580.4,4517.6,4580.4 1997-05-07,4524.4,4562.0,4522.5,4537.5 1997-05-06,4501.1,4525.6,4472.9,4519.3 1997-05-02,4430.0,4468.4,4423.6,4455.6 1997-05-01,4435.9,4454.4,4435.9,4445.0 1997-04-30,4465.9,4466.5,4414.3,4436.0 1997-04-29,4402.3,4433.7,4395.4,4433.2 1997-04-28,4361.6,4389.7,4361.2,4389.7 1997-04-25,4381.3,4385.7,4363.3,4369.7 1997-04-24,4380.8,4400.4,4378.2,4388.5 1997-04-23,4391.5,4396.1,4375.9,4387.7 1997-04-22,4319.4,4346.7,4319.2,4346.1 1997-04-21,4320.6,4328.7,4299.2,4328.7 1997-04-18,4293.6,4310.5,4293.0,4310.5 1997-04-17,4312.3,4312.3,4291.5,4298.9 1997-04-16,4301.8,4307.4,4280.2,4294.6 1997-04-15,4275.6,4289.1,4260.1,4286.8 1997-04-14,4232.9,4255.8,4232.9,4251.7 1997-04-11,4318.3,4335.1,4269.6,4270.7 1997-04-10,4287.9,4313.2,4278.7,4313.2 1997-04-09,4288.3,4301.5,4287.8,4292.3 1997-04-08,4279.9,4279.9,4259.6,4269.3 1997-04-07,4255.3,4273.1,4254.8,4271.7 1997-04-04,4222.6,4247.6,4222.0,4236.6 1997-04-03,4213.3,4233.2,4207.5,4214.6 1997-04-02,4263.2,4266.2,4219.0,4236.6 1997-04-01,4205.1,4248.1,4200.5,4248.1 1997-03-27,4303.9,4331.4,4303.9,4312.9 1997-03-26,4261.1,4320.2,4261.1,4301.5 1997-03-25,4247.4,4272.1,4240.6,4270.7 1997-03-24,4260.4,4265.6,4214.3,4214.8 1997-03-21,4260.6,4273.9,4242.4,4254.8 1997-03-20,4323.1,4323.1,4251.5,4258.1 1997-03-19,4348.7,4371.4,4331.4,4332.2 1997-03-18,4378.3,4378.3,4340.1,4356.8 1997-03-17,4406.5,4408.1,4372.0,4373.3 1997-03-14,4351.2,4424.3,4351.0,4424.3 1997-03-13,4409.4,4412.3,4394.0,4397.7 1997-03-12,4432.4,4442.3,4419.2,4422.5 1997-03-11,4465.2,4466.3,4443.0,4444.3 1997-03-10,4421.6,4440.8,4421.6,4437.4 1997-03-07,4402.7,4420.7,4391.4,4420.3 1997-03-06,4385.8,4402.7,4382.0,4399.3 1997-03-05,4345.5,4367.3,4338.8,4360.1 1997-03-04,4322.1,4359.1,4321.8,4357.7 1997-03-03,4293.4,4307.1,4287.3,4307.1 1997-02-28,4340.4,4340.4,4299.9,4308.3 1997-02-27,4326.4,4339.2,4326.2,4339.2 1997-02-26,4351.4,4355.1,4316.8,4329.3 1997-02-25,4346.3,4357.9,4344.5,4344.7 1997-02-24,4327.5,4333.1,4315.8,4331.1 1997-02-21,4335.3,4349.0,4312.4,4336.8 1997-02-20,4349.8,4362.4,4341.8,4356.1 1997-02-19,4346.1,4357.4,4339.9,4357.4 1997-02-18,4331.2,4350.9,4331.2,4332.3 1997-02-17,4336.3,4338.4,4319.1,4337.8 1997-02-14,4328.8,4353.4,4327.9,4341.0 1997-02-13,4315.2,4329.9,4315.2,4327.1 1997-02-12,4316.4,4324.3,4293.6,4304.3 1997-02-11,4293.4,4310.7,4288.9,4304.3 1997-02-10,4304.4,4330.0,4302.6,4307.7 1997-02-07,4269.1,4310.1,4268.6,4307.8 1997-02-06,4260.8,4275.2,4260.8,4265.9 1997-02-05,4263.7,4286.9,4262.9,4281.5 1997-02-04,4255.6,4276.3,4255.6,4260.9 1997-02-03,4272.3,4272.5,4252.8,4257.8 1997-01-31,4252.6,4275.8,4242.9,4275.8 1997-01-30,4222.6,4229.7,4219.7,4228.4 1997-01-29,4228.5,4230.2,4197.2,4207.5 1997-01-28,4206.4,4238.3,4191.3,4237.4 1997-01-27,4207.0,4223.9,4206.0,4212.0 1997-01-24,4230.0,4251.3,4215.7,4218.8 1997-01-23,4214.5,4227.5,4203.5,4219.1 1997-01-22,4214.5,4227.5,4203.5,4219.1 1997-01-21,4186.6,4195.5,4167.6,4195.5 1997-01-20,4216.8,4217.5,4184.7,4194.0 1997-01-17,4194.3,4218.4,4193.4,4207.7 1997-01-16,4157.3,4198.9,4153.2,4197.5 1997-01-15,4190.9,4191.5,4147.6,4158.9 1997-01-14,4110.9,4168.2,4108.8,4168.2 1997-01-13,4087.9,4107.3,4078.6,4107.3 1997-01-10,4096.4,4096.4,4036.9,4056.6 1997-01-09,4060.4,4087.0,4050.5,4087.0 1997-01-08,4089.8,4098.4,4082.6,4087.5 1997-01-07,4103.5,4105.9,4076.8,4078.8 1997-01-06,4105.2,4108.0,4096.2,4106.5 1997-01-03,4072.7,4089.5,4068.2,4089.5 1997-01-02,4079.9,4095.3,4057.1,4057.4 1996-12-31,4111.6,4123.2,4109.1,4118.5 1996-12-30,4095.3,4115.7,4095.3,4115.7 1996-12-27,4096.5,4102.9,4088.6,4091.0 1996-12-24,4086.3,4093.1,4086.3,4092.5 1996-12-23,4076.3,4087.2,4066.7,4087.2 1996-12-20,4096.4,4100.0,4069.0,4077.6 1996-12-19,4021.3,4051.3,4018.2,4051.3 1996-12-18,3988.4,4018.3,3988.4,4018.2 1996-12-17,3978.4,3990.4,3970.8,3979.6 1996-12-16,3981.1,3993.8,3976.6,3993.8 1996-12-13,3968.9,3972.4,3933.9,3972.4 1996-12-12,3987.7,4009.9,3983.0,3990.7 1996-12-11,4008.8,4008.8,3963.8,3982.5 1996-12-10,4033.4,4043.2,4025.0,4035.7 1996-12-09,3988.1,4011.6,3987.4,4011.6 1996-12-06,3993.5,3994.4,3882.7,3963.0 1996-12-05,4044.1,4076.0,4043.8,4051.2 1996-12-04,4055.7,4055.8,4038.2,4045.2 1996-12-03,4043.4,4066.7,4043.4,4061.5 1996-12-02,4055.9,4055.9,4033.2,4038.5 1996-11-29,4051.8,4067.8,4051.5,4058.0 1996-11-28,4040.2,4050.2,4038.0,4050.2 1996-11-27,4066.2,4085.0,4040.0,4049.2 1996-11-26,4092.8,4094.4,4068.2,4068.4 1996-11-25,4030.7,4055.3,4029.5,4054.6 1996-11-22,3959.0,4018.7,3959.0,4018.7 1996-11-21,3961.4,3966.0,3947.3,3953.8 1996-11-20,3989.0,3989.0,3961.3,3962.8 1996-11-19,3966.6,3978.4,3954.1,3978.1 1996-11-18,3960.1,3966.4,3952.2,3962.1 1996-11-15,3938.1,3958.4,3929.6,3958.2 1996-11-14,3935.1,3940.3,3904.4,3926.1 1996-11-13,3934.5,3939.5,3922.9,3926.9 1996-11-12,3921.8,3934.3,3921.0,3934.3 1996-11-11,3907.5,3914.7,3896.5,3914.4 1996-11-08,3907.3,3923.4,3906.4,3910.8 1996-11-07,3952.9,3953.0,3898.2,3900.4 1996-11-06,3946.2,3946.5,3911.7,3935.7 1996-11-05,3921.0,3930.4,3911.0,3921.1 1996-11-04,3955.8,3956.2,3924.7,3928.1 1996-11-01,3982.7,3988.0,3941.9,3948.5 1996-10-31,3952.6,3979.1,3951.9,3979.1 1996-10-30,4006.8,4010.8,3957.7,3963.9 1996-10-29,4005.0,4009.4,3988.9,3993.5 1996-10-28,4020.2,4037.6,4020.2,4025.3 1996-10-25,3988.0,4023.3,3981.8,4022.4 1996-10-24,4027.3,4035.7,3999.4,3999.4 1996-10-23,4059.0,4060.2,4019.7,4028.4 1996-10-22,4066.3,4069.5,4055.9,4057.2 1996-10-21,4059.4,4073.2,4056.4,4073.1 1996-10-18,4054.5,4061.4,4048.0,4053.1 1996-10-17,4032.9,4044.3,4031.1,4042.1 1996-10-16,4039.3,4040.3,4021.7,4024.4 1996-10-15,4050.1,4063.2,4043.4,4050.8 1996-10-14,4020.6,4040.0,4017.0,4038.7 1996-10-11,3995.0,4028.1,3994.9,4028.1 1996-10-10,3999.4,4009.9,3981.2,3994.7 1996-10-09,4025.5,4037.9,4007.2,4009.3 1996-10-08,4023.3,4037.9,3995.3,4035.6 1996-10-07,4042.9,4046.8,4030.3,4031.5 1996-10-04,3994.6,4025.1,3982.2,4024.8 1996-10-03,4015.4,4024.3,3994.6,4000.0 1996-10-02,4004.2,4016.4,4001.5,4015.1 1996-10-01,3954.7,3992.2,3954.7,3992.2 1996-09-30,3947.6,3954.0,3934.4,3953.7 1996-09-27,3936.5,3954.6,3936.5,3946.4 1996-09-26,3936.4,3941.8,3926.2,3933.2 1996-09-25,3917.7,3938.8,3917.7,3935.7 1996-09-24,3926.2,3933.4,3904.3,3910.5 1996-09-23,3952.0,3952.3,3914.9,3919.7 1996-09-20,3976.4,3994.1,3963.3,3964.1 1996-09-19,3950.9,3987.7,3950.7,3974.3 1996-09-18,3965.4,3971.3,3952.0,3955.7 1996-09-17,3985.8,3986.7,3965.5,3972.3 1996-09-16,3976.7,3980.8,3972.2,3977.2 1996-09-13,3936.9,3970.5,3929.0,3967.9 1996-09-12,3915.1,3932.8,3913.0,3932.6 1996-09-11,3914.1,3914.1,3899.5,3905.6 1996-09-10,3929.4,3933.6,3914.1,3916.1 1996-09-09,3903.6,3916.4,3901.0,3910.8 1996-09-06,3872.2,3893.0,3856.8,3893.0 1996-09-05,3873.1,3887.6,3870.2,3887.2 1996-09-04,3874.3,3884.1,3872.1,3872.7 1996-09-03,3877.1,3877.1,3835.8,3855.9 1996-09-02,3873.7,3885.3,3873.7,3884.4 1996-08-30,3866.7,3881.7,3865.9,3867.6 1996-08-29,3915.9,3921.1,3883.8,3885.0 1996-08-28,3908.6,3922.1,3908.6,3918.7 1996-08-27,3889.7,3908.8,3885.9,3905.7 1996-08-23,3907.6,3911.6,3896.4,3907.5 1996-08-22,3871.0,3891.9,3867.0,3891.1 1996-08-21,3894.2,3894.4,3870.6,3872.1 1996-08-20,3867.2,3884.8,3866.7,3883.2 1996-08-19,3877.1,3877.9,3861.2,3863.7 1996-08-16,3842.9,3873.1,3842.8,3872.9 1996-08-15,3837.3,3843.3,3831.8,3837.4 1996-08-14,3814.4,3831.7,3813.1,3830.3 1996-08-13,3811.9,3826.4,3811.8,3823.4 1996-08-12,3796.4,3811.5,3792.4,3803.3 1996-08-09,3812.6,3812.7,3793.9,3810.7 1996-08-08,3815.0,3816.5,3802.6,3811.4 1996-08-07,3794.7,3815.8,3794.7,3811.1 1996-08-06,3783.1,3791.4,3775.4,3788.4 1996-08-05,3777.8,3790.6,3773.8,3788.3 1996-08-02,3750.3,3770.7,3734.1,3770.6 1996-08-01,3709.3,3735.1,3697.7,3734.4 1996-07-31,3680.8,3704.3,3677.0,3703.2 1996-07-30,3666.0,3677.8,3661.2,3668.5 1996-07-29,3675.5,3684.4,3675.0,3678.8 1996-07-26,3685.1,3690.5,3668.9,3673.3 1996-07-25,3672.6,3686.9,3670.3,3684.7 1996-07-24,3677.6,3679.1,3643.7,3668.8 1996-07-23,3681.8,3708.5,3681.8,3708.4 1996-07-22,3706.9,3707.3,3672.2,3681.3 1996-07-19,3711.5,3726.9,3706.7,3710.5 1996-07-18,3662.6,3693.4,3662.6,3693.4 1996-07-17,3648.3,3668.8,3645.4,3658.2 1996-07-16,3648.2,3653.0,3612.6,3632.3 1996-07-15,3721.1,3724.6,3695.5,3698.3 1996-07-12,3737.6,3745.8,3715.3,3728.3 1996-07-11,3768.9,3777.2,3748.9,3749.0 1996-07-10,3757.5,3773.2,3757.5,3765.8 1996-07-09,3744.3,3757.6,3744.2,3752.3 1996-07-08,3723.6,3752.1,3723.3,3741.5 1996-07-05,3769.4,3790.0,3729.6,3743.2 1996-07-04,3719.8,3760.7,3717.5,3760.6 1996-07-03,3729.3,3729.4,3713.7,3714.1 1996-07-02,3744.1,3744.3,3725.6,3725.7 1996-07-01,3710.4,3725.6,3708.2,3725.6 1996-06-28,3692.8,3712.6,3691.3,3711.0 1996-06-27,3687.1,3691.5,3671.6,3678.8 1996-06-26,3687.8,3696.3,3685.2,3695.5 1996-06-25,3710.2,3710.3,3679.1,3679.5 1996-06-24,3729.7,3729.7,3710.8,3710.8 1996-06-21,3726.5,3738.3,3722.3,3722.3 1996-06-20,3756.1,3756.5,3726.9,3727.5 1996-06-19,3748.7,3756.7,3747.7,3753.2 1996-06-18,3763.5,3764.2,3752.8,3756.4 1996-06-17,3755.9,3767.7,3752.1,3761.5 1996-06-14,3760.7,3770.7,3744.7,3753.6 1996-06-13,3763.2,3766.2,3753.7,3761.7 1996-06-12,3752.9,3769.2,3746.0,3769.2 1996-06-11,3729.9,3755.7,3720.3,3755.7 1996-06-10,3726.8,3737.3,3719.5,3728.8 1996-06-07,3755.3,3755.5,3694.8,3706.8 1996-06-06,3757.0,3774.7,3756.5,3760.3 1996-06-05,3759.2,3760.0,3745.4,3753.4 1996-06-04,3743.9,3755.2,3735.2,3755.2 1996-06-03,3737.0,3747.8,3730.1,3739.2 1996-05-31,3753.9,3766.5,3745.0,3747.8 1996-05-30,3767.0,3770.7,3741.0,3746.7 1996-05-29,3752.3,3775.8,3751.7,3775.7 1996-05-28,3755.0,3770.6,3755.0,3760.2 1996-05-24,3746.8,3752.2,3733.0,3752.1 1996-05-23,3776.9,3780.1,3741.0,3747.0 1996-05-22,3783.6,3783.6,3763.1,3764.2 1996-05-21,3795.6,3795.7,3782.0,3789.4 1996-05-20,3795.2,3799.3,3775.8,3778.2 1996-05-17,3760.2,3791.4,3751.0,3789.6 1996-05-16,3767.8,3770.9,3740.2,3753.6 1996-05-15,3770.7,3776.4,3765.7,3776.2 1996-05-14,3750.9,3761.9,3746.6,3759.7 1996-05-13,3751.8,3760.9,3738.0,3739.2 1996-05-10,3727.2,3757.2,3727.1,3754.4 1996-05-09,3723.5,3732.6,3721.2,3728.3 1996-05-08,3718.6,3733.7,3707.3,3707.3 1996-05-07,3744.3,3755.4,3721.2,3723.0 1996-05-03,3753.1,3758.2,3734.6,3751.6 1996-05-02,3810.8,3829.4,3773.4,3776.4 1996-05-01,3816.9,3817.2,3803.4,3806.0 1996-04-30,3816.9,3820.1,3810.0,3817.9 1996-04-29,3834.5,3834.5,3802.8,3809.2 1996-04-26,3826.1,3837.2,3826.0,3832.8 1996-04-25,3804.2,3820.8,3802.9,3819.3 1996-04-24,3840.7,3843.8,3817.6,3817.6 1996-04-23,3839.8,3844.8,3827.6,3833.0 1996-04-22,3854.2,3858.9,3847.3,3852.7 1996-04-19,3824.8,3857.1,3824.8,3857.1 1996-04-18,3791.4,3828.3,3791.4,3820.7 1996-04-17,3839.7,3839.7,3804.4,3805.6 1996-04-16,3799.0,3825.3,3798.8,3825.3 1996-04-15,3775.0,3790.6,3774.9,3790.5 1996-04-12,3757.6,3767.1,3750.1,3766.8 1996-04-11,3748.9,3761.5,3742.1,3744.2 1996-04-10,3761.8,3775.1,3757.6,3767.4 1996-04-09,3726.5,3758.6,3726.2,3758.6 1996-04-04,3734.6,3759.9,3734.6,3755.6 1996-04-03,3734.2,3736.3,3719.8,3725.1 1996-04-02,3730.3,3733.0,3716.3,3728.5 1996-04-01,3692.1,3720.0,3692.1,3718.4 1996-03-29,3692.2,3699.7,3679.3,3699.7 1996-03-28,3658.1,3672.6,3650.0,3672.6 1996-03-27,3668.9,3676.6,3665.9,3672.4 1996-03-26,3680.1,3680.2,3651.1,3660.9 1996-03-25,3705.1,3705.3,3681.4,3681.9 1996-03-22,3699.2,3707.7,3682.1,3707.0 1996-03-21,3689.8,3702.3,3689.8,3698.3 1996-03-20,3685.9,3694.2,3674.0,3685.4 1996-03-19,3697.3,3706.4,3685.1,3693.0 1996-03-18,3647.7,3670.2,3647.4,3669.6 1996-03-15,3679.1,3683.4,3639.1,3644.8 1996-03-14,3653.7,3681.8,3647.8,3681.8 1996-03-13,3646.6,3661.2,3636.6,3640.3 1996-03-12,3707.8,3707.8,3637.9,3639.5 1996-03-11,3649.0,3674.5,3629.1,3674.5 1996-03-08,3761.0,3770.4,3686.2,3710.3 1996-03-07,3761.4,3768.9,3755.2,3758.2 1996-03-06,3778.6,3780.7,3757.1,3758.9 1996-03-05,3786.4,3792.5,3771.9,3777.1 1996-03-04,3758.7,3769.9,3757.7,3768.6 1996-03-01,3729.5,3763.7,3729.5,3752.7 1996-02-29,3734.8,3737.7,3708.6,3727.6 1996-02-28,3719.4,3738.2,3719.4,3738.2 1996-02-27,3702.7,3723.2,3697.8,3715.9 1996-02-26,3732.0,3732.6,3699.8,3704.2 1996-02-23,3753.9,3755.1,3738.6,3740.3 1996-02-22,3731.1,3741.4,3723.5,3740.0 1996-02-21,3688.7,3725.6,3688.7,3725.6 1996-02-20,3753.0,3753.5,3702.7,3714.6 1996-02-19,3755.9,3755.9,3740.7,3744.3 1996-02-16,3774.3,3791.6,3763.8,3770.9 1996-02-15,3744.6,3779.8,3744.2,3779.8 1996-02-14,3753.6,3753.6,3744.7,3745.0 1996-02-13,3742.7,3750.4,3734.1,3747.6 1996-02-12,3709.3,3729.0,3697.4,3726.6 1996-02-09,3718.9,3720.5,3692.4,3716.3 1996-02-08,3731.1,3735.4,3705.5,3708.4 1996-02-07,3757.1,3758.0,3726.0,3726.1 1996-02-06,3751.3,3753.6,3741.6,3747.5 1996-02-05,3763.3,3764.7,3743.1,3746.6 1996-02-02,3757.1,3782.6,3748.4,3781.3 1996-02-01,3753.3,3754.7,3744.5,3752.8 1996-01-31,3756.6,3759.3,3739.2,3759.3 1996-01-30,3736.6,3743.1,3713.9,3735.3 1996-01-29,3737.8,3741.7,3727.5,3734.6 1996-01-26,3726.1,3738.4,3714.5,3734.7 1996-01-25,3761.8,3761.8,3734.0,3734.2 1996-01-24,3731.7,3758.2,3730.5,3758.2 1996-01-23,3751.8,3751.8,3734.7,3735.0 1996-01-22,3763.5,3763.9,3752.8,3754.2 1996-01-19,3767.1,3767.4,3740.3,3748.4 1996-01-18,3711.9,3749.7,3707.8,3748.7 1996-01-17,3719.9,3722.6,3695.7,3704.2 1996-01-16,3665.1,3710.6,3665.1,3710.6 1996-01-15,3658.5,3668.8,3658.5,3662.7 1996-01-12,3666.7,3669.9,3657.0,3657.3 1996-01-11,3648.7,3660.6,3645.3,3654.9 1996-01-10,3675.2,3690.1,3661.5,3671.5 1996-01-09,3708.8,3722.8,3708.6,3720.6 1996-01-08,3708.8,3722.8,3708.6,3720.6 1996-01-05,3689.2,3713.3,3689.1,3704.5 1996-01-04,3718.1,3723.0,3709.0,3714.1 1996-01-03,3709.2,3719.8,3708.2,3715.6 1996-01-02,3696.0,3696.5,3666.9,3687.9 1995-12-29,3675.6,3690.6,3671.1,3689.3 1995-12-28,3671.2,3687.9,3671.2,3676.7 1995-12-27,3657.4,3677.7,3657.4,3676.4 1995-12-22,3638.5,3658.4,3638.2,3658.3 1995-12-21,3602.7,3633.7,3597.3,3633.3 1995-12-20,3606.9,3614.6,3598.8,3613.7 1995-12-19,3570.3,3584.9,3558.5,3576.9 1995-12-18,3642.3,3642.6,3591.7,3596.1 1995-12-15,3660.2,3688.0,3642.0,3642.6 1995-12-14,3673.5,3686.5,3670.4,3671.6 1995-12-13,3657.8,3673.2,3655.0,3662.4 1995-12-12,3663.9,3668.3,3653.9,3654.9 1995-12-11,3633.3,3654.2,3633.1,3652.1 1995-12-08,3633.1,3645.9,3618.2,3630.0 1995-12-07,3663.8,3663.8,3639.5,3639.5 1995-12-06,3669.7,3672.8,3647.0,3662.8 1995-12-05,3683.0,3683.6,3651.4,3664.2 1995-12-04,3675.2,3675.2,3659.2,3669.7 1995-12-01,3667.5,3667.6,3652.8,3664.3 1995-11-30,3667.5,3667.6,3652.8,3664.3 1995-11-29,3660.2,3671.0,3651.3,3655.5 1995-11-28,3651.7,3655.1,3636.1,3648.8 1995-11-27,3629.1,3650.2,3625.9,3649.0 1995-11-24,3608.9,3627.9,3608.9,3624.0 1995-11-23,3633.9,3634.3,3600.1,3602.5 1995-11-22,3628.8,3632.8,3614.4,3632.4 1995-11-21,3612.4,3615.7,3602.1,3604.1 1995-11-20,3620.6,3639.5,3620.6,3628.8 1995-11-17,3618.8,3626.7,3601.4,3609.2 1995-11-16,3593.0,3610.8,3592.9,3610.8 1995-11-15,3545.0,3571.6,3541.1,3571.4 1995-11-14,3542.4,3549.2,3534.8,3547.9 1995-11-13,3518.2,3536.8,3518.2,3536.8 1995-11-10,3532.6,3532.6,3512.9,3523.4 1995-11-09,3550.5,3553.1,3531.6,3541.6 1995-11-08,3519.4,3537.1,3518.1,3537.1 1995-11-07,3517.9,3528.5,3506.9,3522.4 1995-11-06,3500.9,3514.8,3493.0,3514.8 1995-11-03,3537.9,3539.6,3499.1,3500.4 1995-11-02,3519.4,3535.8,3513.1,3523.0 1995-11-01,3517.5,3518.9,3502.5,3518.7 1995-10-31,3516.5,3532.4,3516.5,3529.1 1995-10-30,3511.6,3519.7,3509.5,3510.0 1995-10-27,3490.9,3501.2,3484.7,3497.9 1995-10-26,3529.0,3532.5,3513.4,3519.6 1995-10-25,3544.7,3551.4,3533.4,3537.8 1995-10-24,3527.0,3540.4,3526.8,3535.3 1995-10-23,3539.5,3539.5,3510.9,3531.5 1995-10-20,3585.7,3594.3,3541.9,3551.4 1995-10-19,3588.3,3596.2,3571.4,3578.6 1995-10-18,3568.7,3598.0,3560.2,3593.0 1995-10-17,3562.7,3580.0,3560.0,3562.2 1995-10-16,3562.5,3567.0,3551.8,3557.3 1995-10-13,3534.4,3584.7,3534.4,3568.0 1995-10-12,3484.4,3525.5,3476.8,3523.8 1995-10-11,3475.4,3480.9,3457.3,3474.3 1995-10-10,3503.1,3509.6,3442.5,3460.1 1995-10-09,3536.6,3536.6,3504.6,3510.3 1995-10-06,3544.3,3546.9,3515.4,3526.5 1995-10-05,3547.0,3555.3,3540.7,3544.4 1995-10-04,3526.4,3544.6,3525.9,3544.1 1995-10-03,3514.9,3531.6,3514.9,3524.2 1995-10-02,3510.6,3520.3,3502.7,3520.2 1995-09-29,3490.0,3510.2,3489.3,3508.2 1995-09-28,3497.1,3497.1,3474.6,3479.0 1995-09-27,3519.9,3520.2,3476.9,3485.0 1995-09-26,3515.7,3523.3,3513.0,3523.3 1995-09-25,3514.1,3520.4,3506.1,3507.0 1995-09-22,3543.7,3543.7,3503.6,3514.8 1995-09-21,3564.5,3569.9,3555.6,3557.9 1995-09-20,3546.9,3561.6,3546.9,3561.5 1995-09-19,3535.4,3553.3,3535.4,3541.4 1995-09-18,3551.3,3552.2,3532.8,3533.3 1995-09-15,3575.9,3587.0,3564.5,3564.6 1995-09-14,3574.5,3575.1,3562.5,3565.4 1995-09-13,3551.0,3570.8,3544.5,3570.8 1995-09-12,3539.7,3542.5,3533.6,3535.9 1995-09-11,3555.2,3565.3,3546.7,3549.3 1995-09-08,3548.5,3563.7,3548.3,3554.5 1995-09-07,3555.6,3557.9,3543.5,3545.6 1995-09-06,3541.5,3561.5,3540.6,3557.7 1995-09-05,3522.5,3537.8,3518.5,3532.4 1995-09-04,3511.9,3523.6,3505.2,3522.7 1995-09-01,3484.7,3510.0,3479.3,3509.4 1995-08-31,3498.5,3498.5,3470.0,3477.8 1995-08-30,3502.4,3509.2,3498.6,3504.0 1995-08-29,3522.3,3522.9,3499.9,3502.6 1995-08-25,3520.5,3526.5,3515.4,3524.9 1995-08-24,3503.3,3523.5,3502.9,3520.0 1995-08-23,3536.7,3540.6,3514.8,3515.9 1995-08-22,3530.2,3540.7,3523.0,3530.2 1995-08-21,3510.3,3535.7,3510.0,3535.7 1995-08-18,3475.4,3509.8,3475.4,3509.8 1995-08-17,3468.7,3471.8,3465.8,3470.6 1995-08-16,3451.1,3466.9,3451.1,3465.1 1995-08-15,3453.4,3456.9,3442.8,3444.4 1995-08-14,3457.5,3457.9,3433.4,3441.4 1995-08-11,3471.1,3478.8,3467.5,3467.5 1995-08-10,3462.2,3474.7,3461.8,3474.7 1995-08-09,3464.9,3480.5,3463.1,3468.3 1995-08-08,3485.3,3485.6,3467.8,3468.8 1995-08-07,3474.1,3483.5,3468.2,3483.5 1995-08-04,3481.9,3492.0,3479.7,3482.4 1995-08-03,3493.5,3494.1,3467.6,3475.6 1995-08-02,3456.6,3505.0,3456.6,3499.9 1995-08-01,3458.7,3465.6,3448.8,3449.9 1995-07-31,3475.6,3475.7,3456.1,3463.3 1995-07-28,3461.1,3480.5,3460.5,3468.9 1995-07-27,3453.3,3458.3,3446.6,3458.3 1995-07-26,3445.5,3457.5,3443.1,3454.3 1995-07-25,3443.4,3443.5,3428.1,3432.9 1995-07-24,3413.8,3432.2,3413.8,3431.6 1995-07-21,3413.5,3426.2,3408.9,3413.1 1995-07-20,3382.3,3407.7,3382.1,3400.4 1995-07-19,3408.8,3414.3,3393.2,3405.3 1995-07-18,3437.0,3448.5,3420.7,3420.7 1995-07-17,3430.5,3448.7,3430.5,3442.6 1995-07-14,3444.8,3445.1,3419.6,3429.2 1995-07-13,3465.3,3472.3,3447.1,3447.2 1995-07-12,3452.4,3458.6,3447.1,3450.6 1995-07-11,3447.1,3480.5,3446.4,3464.0 1995-07-10,3472.6,3487.8,3454.1,3455.0 1995-07-07,3420.3,3462.9,3420.3,3462.9 1995-07-06,3394.0,3418.7,3385.0,3388.3 1995-07-05,3373.0,3400.2,3353.6,3394.9 1995-07-04,3334.4,3349.6,3334.4,3349.2 1995-07-03,3310.2,3324.8,3300.4,3323.7 1995-06-30,3292.4,3314.6,3288.0,3314.6 1995-06-29,3294.2,3308.7,3284.4,3294.0 1995-06-28,3305.5,3306.1,3265.5,3282.7 1995-06-27,3298.1,3313.5,3293.3,3313.2 1995-06-26,3364.8,3364.8,3307.8,3309.2 1995-06-23,3403.1,3403.3,3372.1,3379.4 1995-06-22,3372.2,3404.2,3372.2,3403.8 1995-06-21,3369.7,3392.2,3369.6,3378.3 1995-06-20,3393.2,3397.7,3375.3,3377.2 1995-06-19,3363.9,3384.6,3358.8,3381.3 1995-06-16,3374.0,3383.3,3348.2,3366.1 1995-06-15,3343.6,3372.0,3336.0,3370.4 1995-06-14,3361.7,3362.0,3337.5,3339.8 1995-06-13,3352.2,3352.2,3339.3,3348.0 1995-06-12,3328.1,3347.3,3328.0,3344.6 1995-06-09,3368.9,3370.5,3335.6,3337.7 1995-06-08,3361.3,3395.0,3361.3,3380.8 1995-06-07,3372.0,3380.6,3361.2,3370.8 1995-06-06,3384.5,3384.6,3368.8,3380.0 1995-06-05,3338.6,3376.6,3338.4,3376.6 1995-06-02,3339.0,3349.3,3328.6,3345.0 1995-06-01,3352.3,3353.2,3340.2,3340.6 1995-05-31,3317.6,3319.4,3301.4,3319.4 1995-05-30,3307.1,3320.0,3307.0,3309.9 1995-05-26,3325.8,3332.1,3305.1,3311.1 1995-05-25,3330.4,3360.8,3328.2,3328.2 1995-05-24,3306.3,3334.3,3306.3,3327.3 1995-05-23,3296.3,3296.3,3276.7,3291.8 1995-05-22,3265.1,3284.5,3264.7,3284.5 1995-05-19,3258.7,3273.7,3253.9,3261.0 1995-05-18,3290.7,3315.4,3284.0,3285.8 1995-05-17,3301.4,3318.2,3297.2,3297.4 1995-05-16,3308.0,3309.2,3295.3,3300.8 1995-05-15,3310.5,3324.8,3307.0,3310.7 1995-05-12,3325.1,3326.2,3304.2,3310.3 1995-05-11,3293.1,3320.6,3290.2,3317.9 1995-05-10,3267.3,3294.5,3267.3,3290.1 1995-05-09,3259.1,3267.1,3248.9,3261.2 1995-05-05,3254.0,3265.5,3250.0,3251.7 1995-05-04,3283.5,3288.2,3260.6,3264.3 1995-05-03,3259.6,3267.3,3254.1,3262.6 1995-05-02,3221.3,3251.6,3221.0,3248.2 1995-05-01,3212.8,3228.3,3211.2,3220.4 1995-04-28,3220.3,3232.3,3209.3,3216.7 1995-04-27,3241.5,3241.5,3216.2,3217.6 1995-04-26,3204.6,3231.3,3204.4,3226.2 1995-04-25,3224.8,3234.1,3211.9,3214.9 1995-04-24,3199.8,3209.3,3176.3,3209.3 1995-04-21,3185.8,3205.6,3185.6,3199.9 1995-04-20,3175.0,3177.5,3162.2,3174.7 1995-04-19,3188.9,3188.9,3167.7,3170.1 1995-04-18,3201.5,3201.5,3194.5,3194.5 1995-04-13,3214.9,3215.9,3204.6,3208.8 1995-04-12,3189.0,3211.2,3187.2,3209.8 1995-04-11,3210.0,3216.2,3190.8,3190.9 1995-04-10,3210.8,3213.0,3189.7,3204.2 1995-04-07,3199.6,3221.8,3199.4,3210.9 1995-04-06,3181.9,3212.2,3177.7,3200.9 1995-04-05,3201.3,3206.6,3184.3,3190.2 1995-04-04,3154.0,3188.7,3154.0,3188.1 1995-04-03,3134.2,3148.9,3129.5,3143.1 1995-03-31,3173.3,3173.3,3133.1,3137.9 1995-03-30,3140.8,3185.6,3131.7,3176.2 1995-03-29,3125.3,3142.3,3111.3,3142.3 1995-03-28,3156.2,3156.3,3128.2,3128.3 1995-03-27,3159.0,3170.2,3147.4,3149.8 1995-03-24,3141.0,3153.4,3129.6,3153.4 1995-03-23,3149.4,3169.2,3133.0,3136.4 1995-03-22,3127.7,3145.9,3124.1,3139.7 1995-03-21,3126.9,3148.8,3123.4,3135.0 1995-03-20,3080.5,3124.2,3080.5,3124.2 1995-03-17,3099.9,3105.4,3086.3,3089.3 1995-03-16,3046.5,3094.1,3046.5,3094.1 1995-03-15,3061.6,3069.0,3046.8,3047.0 1995-03-14,3008.7,3050.6,3008.6,3050.6 1995-03-13,3029.6,3031.9,3009.0,3011.8 1995-03-10,2991.5,3021.2,2991.4,3021.1 1995-03-09,3013.2,3013.2,2985.1,2986.9 1995-03-08,2958.6,2994.9,2958.6,2992.1 1995-03-07,3005.7,3005.7,2976.5,2977.0 1995-03-06,3018.7,3020.3,2993.0,3001.9 1995-03-03,3031.9,3037.0,3020.0,3025.1 1995-03-02,3038.5,3047.4,3038.1,3038.2 1995-03-01,3020.0,3041.9,3020.0,3041.2 1995-02-28,3022.0,3031.0,3005.0,3009.3 1995-02-27,2998.2,3029.0,2998.2,3025.3 1995-02-24,3048.9,3049.2,3033.2,3037.7 1995-02-23,3021.4,3049.3,3021.4,3049.3 1995-02-22,3015.0,3027.4,3006.8,3019.5 1995-02-21,3023.6,3026.9,3012.6,3023.4 1995-02-20,3030.4,3030.4,3013.0,3018.6 1995-02-17,3053.5,3054.9,3041.0,3044.2 1995-02-16,3083.1,3083.9,3046.9,3051.1 1995-02-15,3071.5,3074.9,3060.5,3074.9 1995-02-14,3079.0,3087.3,3071.2,3071.3 1995-02-13,3105.1,3108.3,3080.0,3081.1 1995-02-10,3099.0,3114.6,3099.0,3109.9 1995-02-09,3072.7,3102.7,3066.9,3099.0 1995-02-08,3066.2,3072.5,3060.7,3072.5 1995-02-07,3064.7,3086.4,3064.7,3072.7 1995-02-06,3075.0,3075.0,3061.6,3062.0 1995-02-03,3045.4,3059.7,3033.8,3059.7 1995-02-02,3018.2,3039.3,3013.5,3034.7 1995-02-01,3001.8,3024.0,3001.8,3017.3 1995-01-31,2984.2,2992.7,2983.4,2991.6 1995-01-30,3021.3,3021.3,2995.1,2995.9 1995-01-27,3006.8,3022.7,3006.4,3022.2 1995-01-26,2989.2,3010.2,2989.2,3007.3 1995-01-25,2971.0,2986.5,2964.4,2982.2 1995-01-24,2971.1,2973.4,2964.6,2969.0 1995-01-23,2968.8,2992.0,2949.4,2954.2 1995-01-20,3003.3,3013.8,2989.0,2995.9 1995-01-19,3051.4,3051.4,3027.2,3028.6 1995-01-18,3052.5,3061.0,3044.2,3054.9 1995-01-17,3081.5,3084.4,3054.0,3054.0 1995-01-16,3068.5,3076.7,3060.9,3076.7 1995-01-13,3023.0,3048.5,3016.1,3048.3 1995-01-12,3051.4,3060.0,3032.4,3033.2 1995-01-11,3050.6,3075.0,3042.4,3049.4 1995-01-10,3048.9,3060.5,3038.4,3060.4 1995-01-09,3064.9,3069.6,3054.0,3055.8 1995-01-06,3027.0,3067.9,3019.9,3065.0 1995-01-05,3049.5,3049.5,3028.2,3032.3 1995-01-04,3063.9,3072.1,3051.5,3051.6 1995-01-03,3062.6,3066.5,3050.6,3065.7 1994-12-30,3064.3,3073.1,3062.9,3065.5 1994-12-29,3081.4,3082.4,3064.6,3065.6 1994-12-28,3089.5,3109.7,3089.5,3095.8 1994-12-23,3087.3,3087.8,3083.1,3083.4 1994-12-22,3077.8,3095.6,3072.8,3091.7 1994-12-21,3049.9,3070.4,3049.6,3070.4 1994-12-20,3030.5,3061.3,3030.5,3058.1 1994-12-19,3026.8,3048.0,3026.5,3034.4 1994-12-16,2967.9,3013.6,2953.2,3013.6 1994-12-15,2993.7,2998.1,2973.2,2973.4 1994-12-14,2950.0,2982.5,2949.0,2980.6 1994-12-13,2962.7,2962.8,2938.8,2946.4 1994-12-12,2978.1,2987.8,2941.9,2943.4 1994-12-09,2997.4,3001.0,2976.7,2977.3 1994-12-08,3008.5,3022.1,3002.4,3013.8 1994-12-07,3003.1,3034.7,3003.1,3012.5 1994-12-06,3022.5,3022.5,2992.4,3016.1 1994-12-05,3028.2,3037.4,3014.6,3033.5 1994-12-02,3021.2,3030.0,3011.6,3017.3 1994-12-01,3079.6,3079.6,3037.2,3039.6 1994-11-30,3058.7,3081.4,3058.1,3081.4 1994-11-29,3053.7,3070.1,3053.5,3061.1 1994-11-28,3039.9,3049.9,3039.9,3047.1 1994-11-25,3029.2,3033.5,3014.3,3033.5 1994-11-24,3037.8,3044.7,3034.7,3036.6 1994-11-23,3034.0,3042.0,3010.1,3027.5 1994-11-22,3091.7,3099.4,3078.6,3078.7 1994-11-21,3126.1,3128.4,3116.7,3121.0 1994-11-18,3122.5,3134.1,3121.2,3131.0 1994-11-17,3145.8,3151.1,3125.6,3127.5 1994-11-16,3133.5,3168.1,3125.9,3146.5 1994-11-15,3105.2,3137.4,3104.9,3135.4 1994-11-14,3076.9,3095.3,3069.5,3095.3 1994-11-11,3094.0,3094.0,3072.0,3075.9 1994-11-10,3093.1,3105.9,3081.8,3103.5 1994-11-09,3076.1,3109.1,3076.1,3099.6 1994-11-08,3069.7,3069.7,3048.4,3063.8 1994-11-07,3077.0,3081.1,3065.3,3065.8 1994-11-04,3105.5,3108.2,3093.1,3097.6 1994-11-03,3082.7,3106.6,3071.3,3104.4 1994-11-02,3089.7,3100.3,3069.5,3081.3 1994-11-01,3081.5,3096.4,3078.2,3096.3 1994-10-31,3097.5,3111.5,3079.1,3097.4 1994-10-28,3041.3,3083.9,3024.7,3083.8 1994-10-27,2994.8,3029.6,2993.8,3029.6 1994-10-26,3011.2,3029.7,2999.7,2999.9 1994-10-25,2999.8,3005.4,2985.6,3000.9 1994-10-24,3039.6,3052.9,3029.1,3029.1 1994-10-21,3049.4,3049.4,3016.4,3032.8 1994-10-20,3070.5,3083.2,3060.7,3063.2 1994-10-19,3078.4,3092.9,3057.3,3060.8 1994-10-18,3117.9,3117.9,3081.0,3085.3 1994-10-17,3100.6,3132.7,3099.8,3120.2 1994-10-14,3128.5,3134.8,3104.2,3106.7 1994-10-13,3094.7,3151.2,3094.7,3141.9 1994-10-12,3082.7,3100.7,3078.8,3100.5 1994-10-11,3038.5,3074.0,3026.7,3073.0 1994-10-10,3009.7,3033.6,3009.7,3032.3 1994-10-07,2972.2,2998.8,2966.8,2998.7 1994-10-06,2970.3,2987.0,2969.5,2984.4 1994-10-05,2974.0,2980.8,2950.2,2956.3 1994-10-04,2989.6,3003.4,2989.6,3001.8 1994-10-03,3024.3,3025.2,2982.4,2983.5 1994-09-30,2988.6,3026.3,2986.0,3026.3 1994-09-29,3040.0,3040.0,2991.6,2992.5 1994-09-28,3012.1,3040.9,3010.7,3038.7 1994-09-27,3001.5,3011.3,3000.0,3008.5 1994-09-26,3017.1,3017.3,2987.8,2999.8 1994-09-23,3017.0,3035.8,2999.2,3028.2 1994-09-22,3023.9,3027.5,3008.6,3021.2 1994-09-21,3033.4,3047.6,3014.8,3014.8 1994-09-20,3078.7,3078.7,3031.7,3037.3 1994-09-19,3059.9,3085.3,3048.3,3079.1 1994-09-16,3133.2,3133.3,3064.6,3065.1 1994-09-15,3090.4,3115.2,3085.2,3112.7 1994-09-14,3128.7,3128.7,3075.3,3079.8 1994-09-13,3121.4,3121.6,3086.1,3121.4 1994-09-12,3138.6,3141.2,3114.0,3128.8 1994-09-09,3183.3,3193.6,3134.0,3139.3 1994-09-08,3196.1,3196.1,3166.2,3180.0 1994-09-07,3211.8,3219.1,3203.9,3203.9 1994-09-06,3252.3,3253.4,3203.4,3205.4 1994-09-05,3214.1,3241.5,3206.4,3241.5 1994-09-02,3216.7,3242.2,3216.7,3222.7 1994-09-01,3243.6,3250.4,3215.4,3216.5 1994-08-31,3250.2,3264.9,3247.6,3251.3 1994-08-30,3279.9,3280.0,3249.5,3249.6 1994-08-26,3221.5,3265.3,3218.3,3265.1 1994-08-25,3238.2,3244.7,3228.6,3234.2 1994-08-24,3182.8,3205.3,3181.1,3205.2 1994-08-23,3166.3,3175.1,3161.1,3175.1 1994-08-22,3198.3,3201.0,3164.7,3171.3 1994-08-19,3171.3,3191.8,3170.0,3191.4 1994-08-18,3187.4,3201.5,3180.2,3182.6 1994-08-17,3170.9,3195.0,3165.7,3190.3 1994-08-16,3139.1,3151.6,3138.7,3147.3 1994-08-15,3147.6,3156.5,3141.6,3142.2 1994-08-12,3115.3,3142.5,3110.7,3142.3 1994-08-11,3177.3,3177.3,3132.8,3138.2 1994-08-10,3168.2,3168.2,3152.2,3167.0 1994-08-09,3184.1,3184.6,3154.7,3168.6 1994-08-08,3161.7,3171.9,3161.6,3171.9 1994-08-05,3141.0,3172.8,3140.3,3167.5 1994-08-04,3157.5,3166.3,3150.1,3150.5 1994-08-03,3159.5,3166.2,3148.7,3160.4 1994-08-02,3117.5,3158.3,3113.6,3157.5 1994-08-01,3077.8,3097.5,3075.8,3097.4 1994-07-29,3105.2,3107.2,3069.7,3082.6 1994-07-28,3085.3,3097.4,3075.1,3095.9 1994-07-27,3116.4,3119.1,3082.3,3082.3 1994-07-26,3111.6,3132.8,3111.4,3117.2 1994-07-25,3110.7,3111.2,3099.0,3106.1 1994-07-22,3115.9,3123.2,3105.3,3114.7 1994-07-21,3063.5,3097.5,3061.1,3095.1 1994-07-20,3099.6,3099.6,3077.2,3077.2 1994-07-19,3086.2,3096.2,3072.6,3091.3 1994-07-18,3072.6,3085.4,3060.5,3082.0 1994-07-15,3071.4,3078.4,3057.0,3074.8 1994-07-14,3013.6,3050.4,3010.2,3050.4 1994-07-13,2975.0,3006.9,2975.0,3005.3 1994-07-12,2984.2,2996.6,2957.4,2963.9 1994-07-11,2957.9,2992.6,2957.8,2983.8 1994-07-08,2967.9,2972.8,2952.4,2962.4 1994-07-07,2948.7,2968.0,2940.2,2964.4 1994-07-06,2956.7,2966.8,2942.9,2946.7 1994-07-05,2972.7,2978.2,2945.3,2965.0 1994-07-04,2938.3,2974.9,2938.3,2970.4 1994-07-01,2914.1,2939.1,2906.2,2936.4 1994-06-30,2956.2,2961.9,2910.6,2919.2 1994-06-29,2899.0,2948.1,2899.0,2946.3 1994-06-28,2926.6,2926.9,2906.4,2909.0 1994-06-27,2844.7,2902.2,2844.7,2899.9 1994-06-24,2919.4,2919.5,2874.7,2876.6 1994-06-23,2978.4,2979.4,2936.5,2942.4 1994-06-22,2934.1,2960.4,2934.1,2960.4 1994-06-21,2972.2,2977.2,2936.7,2940.2 1994-06-20,2989.9,2989.9,2937.6,2971.1 1994-06-17,3039.3,3049.7,3017.0,3022.9 1994-06-16,3032.1,3035.0,3025.4,3030.1 1994-06-15,3044.9,3050.4,3035.4,3045.8 1994-06-14,3012.1,3039.8,3004.4,3039.6 1994-06-13,3059.2,3059.2,3010.3,3016.3 1994-06-10,3021.6,3055.9,3021.3,3055.9 1994-06-09,3039.3,3044.3,3025.6,3028.9 1994-06-08,3004.4,3043.2,3003.6,3038.2 1994-06-07,3006.2,3014.8,2993.9,3004.8 1994-06-06,2994.7,3016.1,2994.7,3009.4 1994-06-03,2985.4,3004.4,2968.4,2997.8 1994-06-02,2943.0,2980.8,2942.2,2980.8 1994-06-01,2984.2,2985.9,2931.5,2931.9 1994-05-31,2976.4,2976.4,2925.0,2970.5 1994-05-27,3029.5,3033.7,2959.5,2966.4 1994-05-26,3031.2,3031.2,3004.7,3019.7 1994-05-25,3091.3,3091.9,3011.3,3020.7 1994-05-24,3103.9,3105.7,3086.1,3089.1 1994-05-23,3129.5,3129.9,3106.4,3108.4 1994-05-20,3139.5,3139.7,3125.0,3127.3 1994-05-19,3120.8,3131.1,3118.2,3122.8 1994-05-18,3155.0,3157.5,3115.8,3116.5 1994-05-17,3109.3,3125.2,3106.8,3123.5 1994-05-16,3112.9,3133.6,3112.5,3115.6 1994-05-13,3141.5,3141.9,3116.2,3119.2 1994-05-12,3107.0,3138.8,3105.3,3137.8 1994-05-11,3147.7,3147.7,3122.1,3130.5 1994-05-10,3097.4,3138.7,3097.4,3136.3 1994-05-09,3097.1,3099.7,3080.7,3097.8 1994-05-06,3110.9,3121.6,3092.3,3106.0 1994-05-05,3067.9,3106.3,3056.2,3106.0 1994-05-04,3094.4,3094.4,3067.6,3070.5 1994-05-03,3131.9,3133.0,3095.8,3100.0 1994-04-29,3118.1,3130.0,3105.6,3125.3 1994-04-28,3154.9,3167.3,3129.2,3129.9 1994-04-27,3125.2,3150.0,3125.2,3150.0 1994-04-26,3125.2,3137.7,3118.9,3125.3 1994-04-25,3134.4,3134.4,3106.1,3106.1 1994-04-22,3129.8,3136.5,3115.9,3133.7 1994-04-21,3090.6,3102.4,3090.1,3101.2 1994-04-20,3129.4,3138.5,3096.9,3098.3 1994-04-19,3132.4,3145.5,3113.7,3128.0 1994-04-18,3185.4,3191.4,3137.7,3138.2 1994-04-15,3139.2,3168.6,3134.3,3168.3 1994-04-14,3133.8,3141.5,3113.2,3131.7 1994-04-13,3160.0,3165.2,3144.8,3145.8 1994-04-12,3170.9,3180.7,3159.0,3159.1 1994-04-11,3114.6,3149.5,3113.7,3149.4 1994-04-08,3137.8,3138.0,3118.8,3120.8 1994-04-07,3133.4,3143.5,3117.0,3129.0 1994-04-06,3142.8,3145.4,3129.6,3131.5 1994-04-05,3060.9,3116.2,3047.0,3116.2 1994-03-31,3071.5,3093.4,3061.9,3086.4 1994-03-30,3086.8,3117.7,3076.9,3092.4 1994-03-29,3136.3,3144.9,3121.3,3123.4 1994-03-28,3110.7,3150.2,3110.7,3129.5 1994-03-25,3118.1,3133.5,3088.5,3129.0 1994-03-24,3145.6,3155.3,3111.8,3121.7 1994-03-23,3213.7,3224.6,3153.5,3155.3 1994-03-22,3206.9,3220.1,3186.9,3201.5 1994-03-21,3212.7,3213.9,3197.0,3198.0 1994-03-18,3245.8,3246.5,3197.7,3218.1 1994-03-17,3248.7,3262.9,3248.4,3255.7 1994-03-16,3262.3,3265.7,3242.3,3242.9 1994-03-15,3231.0,3269.5,3230.6,3267.4 1994-03-14,3203.0,3236.1,3203.0,3233.4 1994-03-11,3213.0,3227.4,3190.1,3191.9 1994-03-10,3254.1,3264.0,3233.9,3233.9 1994-03-09,3264.2,3270.5,3246.7,3246.7 1994-03-08,3314.0,3316.1,3264.3,3264.4 1994-03-07,3287.0,3310.7,3287.0,3305.9 1994-03-04,3254.9,3278.4,3249.3,3278.0 1994-03-03,3278.6,3278.6,3230.9,3246.5 1994-03-02,3255.3,3255.3,3195.7,3248.1 1994-03-01,3322.9,3328.8,3270.6,3270.6 1994-02-28,3287.4,3328.1,3287.4,3328.1 1994-02-25,3250.9,3283.3,3243.4,3281.2 1994-02-24,3324.0,3324.0,3265.8,3267.5 1994-02-23,3339.8,3355.0,3335.9,3341.9 1994-02-22,3353.7,3357.4,3320.3,3333.7 1994-02-21,3353.5,3371.9,3347.9,3350.3 1994-02-18,3405.6,3414.3,3382.2,3382.6 1994-02-17,3423.6,3437.6,3404.5,3425.3 1994-02-16,3399.8,3423.2,3394.0,3417.7 1994-02-15,3367.0,3393.2,3367.0,3393.2 1994-02-14,3373.2,3379.8,3350.2,3363.5 1994-02-11,3382.6,3388.3,3349.3,3378.9 1994-02-10,3445.0,3446.1,3400.3,3407.0 1994-02-09,3423.4,3435.1,3403.7,3429.1 1994-02-08,3446.4,3471.7,3424.2,3440.2 1994-02-07,3405.7,3419.1,3382.0,3419.1 1994-02-04,3499.6,3499.9,3471.6,3475.4 1994-02-03,3537.2,3539.2,3490.8,3491.5 1994-02-02,3471.2,3520.4,3457.8,3520.3 1994-02-01,3511.4,3514.3,3471.0,3481.5 1994-01-31,3458.1,3491.8,3458.1,3491.8 1994-01-28,3412.5,3448.4,3403.3,3447.4 1994-01-27,3442.3,3444.4,3425.4,3427.3 1994-01-26,3436.2,3450.3,3432.8,3436.1 1994-01-25,3484.9,3486.3,3444.0,3444.0 1994-01-24,3486.7,3487.4,3462.3,3481.4 1994-01-21,3477.5,3496.1,3463.3,3484.2 1994-01-20,3463.2,3476.0,3458.9,3470.0 1994-01-19,3451.2,3484.5,3451.2,3475.1 1994-01-18,3416.5,3439.6,3410.0,3437.0 1994-01-17,3405.4,3421.1,3397.4,3407.8 1994-01-14,3370.9,3405.6,3369.4,3400.6 1994-01-13,3380.7,3383.3,3356.9,3360.0 1994-01-12,3394.8,3402.4,3372.0,3372.0 1994-01-11,3442.5,3442.5,3413.5,3413.8 1994-01-10,3465.7,3468.1,3430.0,3440.6 1994-01-07,3401.4,3446.8,3398.7,3446.0 1994-01-06,3355.3,3407.7,3355.3,3403.0 1994-01-05,3417.5,3419.4,3379.1,3379.2 1994-01-04,3427.2,3427.9,3380.4,3408.5 1993-12-31,3427.8,3445.3,3416.6,3418.4 1993-12-30,3474.8,3480.8,3428.6,3428.8 1993-12-29,3427.9,3474.2,3427.9,3462.0 1993-12-24,3396.5,3412.4,3396.5,3412.3 1993-12-23,3373.8,3400.3,3373.8,3396.5 1993-12-22,3335.0,3359.1,3333.1,3355.7 1993-12-21,3366.5,3378.6,3339.9,3342.4 1993-12-20,3340.3,3369.0,3339.0,3364.9 1993-12-17,3329.7,3350.8,3329.7,3337.1 1993-12-16,3294.0,3313.6,3292.7,3311.2 1993-12-15,3247.7,3282.5,3247.7,3278.8 1993-12-14,3261.7,3277.6,3243.3,3248.4 1993-12-13,3258.4,3269.1,3248.6,3254.6 1993-12-10,3266.0,3282.4,3254.9,3261.3 1993-12-09,3284.1,3300.1,3263.6,3271.6 1993-12-08,3234.1,3279.5,3233.9,3277.4 1993-12-07,3236.6,3241.6,3218.4,3237.3 1993-12-06,3229.9,3243.6,3224.3,3237.3 1993-12-03,3214.4,3240.8,3212.2,3234.2 1993-12-02,3235.4,3258.3,3223.9,3223.9 1993-12-01,3197.0,3250.1,3190.3,3233.2 1993-11-30,3139.1,3168.7,3139.1,3166.9 1993-11-29,3106.1,3144.1,3106.0,3135.8 1993-11-26,3098.9,3123.4,3094.7,3111.4 1993-11-25,3063.5,3093.1,3063.0,3093.1 1993-11-24,3068.7,3076.3,3061.4,3067.2 1993-11-23,3060.1,3090.1,3050.6,3069.3 1993-11-22,3100.6,3100.7,3069.2,3070.6 1993-11-19,3120.8,3120.9,3104.2,3108.0 1993-11-18,3130.5,3138.3,3119.5,3125.5 1993-11-17,3106.2,3126.1,3099.0,3120.0 1993-11-16,3084.0,3108.1,3082.9,3097.5 1993-11-15,3095.2,3109.4,3092.1,3093.3 1993-11-12,3086.8,3099.3,3074.9,3099.1 1993-11-11,3108.7,3111.5,3099.7,3099.7 1993-11-10,3087.6,3115.0,3080.7,3098.5 1993-11-09,3081.7,3096.0,3072.2,3096.0 1993-11-08,3090.6,3096.5,3065.1,3077.6 1993-11-05,3127.8,3127.8,3083.3,3085.6 1993-11-04,3142.7,3157.6,3133.9,3149.0 1993-11-03,3159.5,3164.6,3155.5,3162.3 1993-11-02,3174.9,3176.2,3160.8,3164.1 1993-11-01,3170.7,3170.7,3147.9,3164.4 1993-10-29,3165.5,3172.3,3162.0,3171.0 1993-10-28,3152.5,3166.9,3146.5,3163.0 1993-10-27,3162.9,3171.1,3152.2,3154.3 1993-10-26,3191.3,3193.6,3164.8,3165.3 1993-10-25,3195.2,3195.2,3176.2,3184.8 1993-10-22,3194.1,3199.2,3185.7,3199.0 1993-10-21,3161.8,3188.3,3149.3,3188.3 1993-10-20,3126.1,3156.9,3123.9,3156.3 1993-10-19,3140.9,3140.9,3123.8,3129.6 1993-10-18,3126.5,3142.8,3126.4,3137.6 1993-10-15,3104.9,3126.7,3100.9,3120.8 1993-10-14,3084.2,3086.3,3067.5,3086.3 1993-10-13,3091.7,3095.8,3071.2,3080.9 1993-10-12,3103.6,3115.2,3093.0,3094.7 1993-10-11,3107.5,3117.1,3098.0,3102.2 1993-10-08,3089.4,3108.6,3084.1,3108.6 1993-10-07,3101.2,3110.6,3088.7,3092.4 1993-10-06,3090.3,3116.3,3090.3,3100.8 1993-10-05,3069.8,3096.4,3069.8,3085.2 1993-10-04,3033.0,3069.0,3033.0,3067.7 1993-10-01,3039.0,3040.3,3026.8,3039.3 1993-09-30,3037.2,3043.5,3034.7,3037.5 1993-09-29,3032.2,3038.7,3022.6,3030.1 1993-09-28,3026.3,3045.4,3023.2,3036.9 1993-09-27,3001.2,3029.9,3001.1,3026.3 1993-09-24,3004.8,3009.7,3002.2,3005.2 1993-09-23,3016.4,3018.4,2998.5,3001.3 1993-09-22,2991.7,3007.5,2975.0,3007.5 1993-09-21,2995.6,3004.7,2990.0,3001.6 1993-09-20,3001.4,3005.6,2987.5,3004.5 1993-09-17,3003.2,3020.4,2991.4,3005.5 1993-09-16,2993.6,3004.0,2985.1,3003.9 1993-09-15,3031.5,3032.6,2986.0,2989.4 1993-09-14,3021.6,3035.3,3014.3,3028.0 1993-09-13,3039.9,3041.6,3017.7,3024.8 1993-09-10,3033.6,3041.1,3031.4,3037.0 1993-09-09,3030.7,3045.1,3024.6,3031.2 1993-09-08,3022.2,3037.6,3022.1,3035.4 1993-09-07,3060.6,3063.4,3036.0,3038.6 1993-09-06,3052.8,3059.7,3049.7,3055.4 1993-09-03,3064.5,3075.8,3057.2,3057.3 1993-09-02,3084.2,3094.0,3072.2,3072.6 1993-09-01,3099.5,3099.5,3070.3,3085.1 1993-08-31,3105.8,3115.1,3096.6,3100.0 1993-08-27,3085.6,3103.7,3085.6,3100.6 1993-08-26,3084.3,3085.0,3058.6,3079.2 1993-08-25,3058.6,3081.8,3058.5,3079.2 1993-08-24,3046.9,3058.4,3046.9,3049.3 1993-08-23,3050.2,3056.4,3035.6,3042.0 1993-08-20,3065.7,3077.7,3056.5,3057.6 1993-08-19,3076.5,3089.2,3054.8,3065.5 1993-08-18,3034.6,3076.2,3034.6,3073.6 1993-08-17,3013.5,3025.0,3001.8,3025.0 1993-08-16,3002.0,3016.6,3002.0,3008.3 1993-08-13,3001.9,3010.2,2992.5,3010.1 1993-08-12,3005.6,3022.4,3004.3,3009.1 1993-08-11,2969.9,3010.1,2964.5,3006.1 1993-08-10,2990.0,2991.6,2971.6,2971.6 1993-08-09,2973.4,2986.8,2973.4,2986.4 1993-08-06,2948.8,2974.4,2948.8,2969.8 1993-08-05,2932.2,2943.4,2925.7,2943.4 1993-08-04,2946.3,2946.3,2930.8,2941.3 1993-08-03,2942.0,2947.3,2936.7,2945.0 1993-08-02,2920.0,2954.5,2919.5,2941.7 1993-07-30,2917.9,2939.5,2912.1,2926.5 1993-07-29,2884.0,2917.6,2884.0,2917.6 1993-07-28,2881.8,2895.7,2880.8,2884.2 1993-07-27,2852.3,2880.1,2852.3,2879.4 1993-07-26,2831.2,2846.0,2831.2,2844.2 1993-07-23,2801.2,2832.0,2801.2,2827.7 1993-07-22,2818.2,2820.9,2811.9,2820.1 1993-07-21,2827.2,2827.2,2801.8,2814.1 1993-07-20,2846.2,2849.0,2818.6,2823.9 1993-07-19,2826.4,2846.7,2826.4,2842.9 1993-07-16,2831.1,2833.0,2822.4,2833.0 1993-07-15,2834.4,2837.9,2830.1,2831.7 1993-07-14,2832.8,2835.0,2826.7,2832.3 1993-07-13,2832.8,2837.4,2827.5,2837.1 1993-07-12,2842.7,2851.4,2827.1,2830.9 1993-07-09,2853.4,2858.2,2843.1,2843.2 1993-07-08,2851.3,2859.4,2842.2,2845.9 1993-07-07,2841.6,2848.3,2829.2,2848.3 1993-07-06,2843.1,2851.4,2842.8,2848.1 1993-07-05,2853.2,2853.2,2835.8,2838.5 1993-07-02,2880.2,2880.2,2857.0,2857.7 1993-07-01,2901.5,2906.7,2888.7,2888.8 1993-06-30,2884.0,2900.0,2884.0,2900.0 1993-06-29,2904.3,2905.0,2883.1,2886.0 1993-06-28,2892.0,2903.8,2891.8,2897.0 1993-06-25,2893.7,2894.3,2883.2,2887.5 1993-06-24,2888.6,2897.7,2887.9,2894.7 1993-06-23,2906.2,2917.0,2899.2,2900.7 1993-06-22,2912.9,2917.2,2905.3,2907.6 1993-06-21,2868.3,2903.4,2868.3,2903.4 1993-06-18,2878.5,2887.6,2877.8,2879.4 1993-06-17,2885.6,2889.2,2874.6,2875.7 1993-06-16,2868.2,2888.3,2868.1,2883.0 1993-06-15,2884.3,2886.0,2869.7,2870.0 1993-06-14,2863.1,2891.6,2863.0,2885.5 1993-06-11,2850.0,2864.8,2849.2,2861.8 1993-06-10,2870.8,2870.9,2854.2,2860.0 1993-06-09,2838.2,2868.2,2838.1,2866.9 1993-06-08,2844.8,2854.9,2842.4,2844.4 1993-06-07,2830.4,2849.8,2830.1,2844.8 1993-06-04,2851.6,2854.6,2829.8,2829.9 1993-06-03,2857.3,2857.8,2844.9,2852.8 1993-06-02,2858.4,2868.7,2858.4,2863.0 1993-06-01,2836.1,2849.2,2836.1,2849.2 1993-05-28,2854.6,2855.5,2838.9,2840.7 1993-05-27,2850.3,2860.5,2844.1,2855.3 1993-05-26,2838.9,2846.9,2832.5,2846.9 1993-05-25,2828.2,2837.7,2828.2,2837.7 1993-05-24,2812.4,2825.6,2804.3,2825.6 1993-05-21,2822.8,2823.5,2801.1,2812.2 1993-05-20,2831.7,2832.8,2814.6,2816.8 1993-05-19,2846.0,2848.0,2817.7,2819.7 1993-05-18,2863.7,2869.2,2845.9,2847.3 1993-05-17,2847.0,2858.7,2840.5,2858.1 1993-05-14,2841.9,2848.9,2838.1,2847.0 1993-05-13,2863.9,2867.4,2849.3,2849.3 1993-05-12,2844.4,2861.8,2844.4,2860.8 1993-05-11,2827.5,2836.1,2823.6,2836.1 1993-05-10,2793.5,2829.7,2793.5,2829.7 1993-05-07,2780.7,2793.7,2772.2,2793.7 1993-05-06,2801.2,2806.0,2783.9,2786.3 1993-05-05,2808.9,2809.7,2786.4,2796.5 1993-05-04,2820.3,2822.9,2812.0,2812.6 1993-04-30,2793.8,2813.6,2793.6,2813.1 1993-04-29,2794.3,2794.3,2773.7,2786.8 1993-04-28,2843.4,2844.2,2787.1,2797.3 1993-04-27,2813.5,2832.7,2811.8,2832.7 1993-04-26,2841.8,2844.3,2822.0,2822.3 1993-04-23,2871.9,2871.9,2843.4,2843.8 1993-04-22,2872.8,2881.2,2868.5,2881.1 1993-04-21,2863.0,2875.2,2862.9,2869.6 1993-04-20,2830.0,2856.2,2830.0,2856.1 1993-04-19,2822.8,2844.2,2822.8,2830.0 1993-04-16,2838.0,2839.5,2817.1,2824.4 1993-04-15,2847.1,2854.1,2839.0,2839.7 1993-04-14,2853.4,2855.9,2838.3,2842.1 1993-04-13,2824.3,2848.0,2824.3,2846.8 1993-04-08,2827.2,2827.2,2816.1,2821.8 1993-04-07,2831.5,2837.0,2800.6,2822.1 1993-04-06,2848.3,2850.1,2828.6,2832.2 1993-04-05,2846.7,2855.1,2835.1,2838.8 1993-04-02,2870.8,2897.5,2864.5,2869.9 1993-04-01,2871.3,2887.9,2871.3,2878.4 1993-03-31,2868.3,2886.3,2867.9,2878.7 1993-03-30,2859.7,2864.3,2850.0,2861.0 1993-03-29,2836.8,2848.4,2833.0,2846.5 1993-03-26,2865.0,2873.7,2852.7,2852.9 1993-03-25,2860.5,2861.7,2833.4,2852.8 1993-03-24,2857.5,2860.8,2843.7,2860.6 1993-03-23,2868.9,2873.4,2851.0,2861.1 1993-03-22,2898.6,2898.6,2858.7,2863.9 1993-03-19,2876.9,2903.6,2868.2,2900.1 1993-03-18,2889.9,2890.2,2881.2,2883.3 1993-03-17,2902.5,2902.5,2883.1,2889.9 1993-03-16,2924.5,2930.4,2908.3,2919.3 1993-03-15,2909.0,2928.2,2908.7,2922.4 1993-03-12,2933.7,2937.7,2904.8,2915.9 1993-03-11,2958.4,2958.4,2942.7,2953.4 1993-03-10,2950.4,2961.8,2944.4,2956.7 1993-03-09,2980.9,2980.9,2946.1,2949.9 1993-03-08,2923.9,2958.3,2923.8,2957.3 1993-03-05,2911.8,2925.0,2907.7,2916.6 1993-03-04,2909.7,2922.5,2902.5,2904.8 1993-03-03,2904.9,2922.0,2897.6,2918.6 1993-03-02,2880.8,2883.0,2871.7,2882.3 1993-03-01,2861.9,2884.9,2858.3,2882.6 1993-02-26,2836.9,2873.3,2834.6,2868.0 1993-02-25,2828.3,2829.3,2809.4,2828.7 1993-02-24,2818.9,2821.7,2810.1,2817.0 1993-02-23,2842.0,2852.5,2813.4,2818.0 1993-02-22,2832.2,2842.3,2832.2,2838.3 1993-02-19,2831.6,2845.6,2831.6,2840.0 1993-02-18,2823.8,2852.1,2823.8,2837.7 1993-02-17,2794.2,2820.8,2794.2,2814.0 1993-02-16,2847.0,2852.0,2808.0,2812.2 1993-02-15,2839.2,2854.7,2837.0,2845.9 1993-02-12,2835.6,2854.8,2814.1,2843.0 1993-02-11,2830.0,2840.7,2820.0,2834.3 1993-02-10,2824.9,2832.4,2810.2,2816.4 1993-02-09,2871.5,2871.7,2823.0,2831.3 1993-02-08,2864.8,2881.1,2863.7,2870.0 1993-02-05,2867.3,2883.5,2853.6,2862.9 1993-02-04,2898.1,2900.1,2865.4,2865.9 1993-02-03,2833.4,2873.8,2832.5,2873.8 1993-02-02,2849.4,2859.7,2829.7,2834.4 1993-02-01,2821.9,2854.5,2821.9,2851.6 1993-01-29,2820.9,2821.1,2798.2,2807.2 1993-01-28,2820.9,2836.0,2815.7,2816.9 1993-01-27,2842.9,2853.9,2829.6,2832.5 1993-01-26,2776.7,2836.2,2772.9,2835.7 1993-01-25,2780.3,2783.1,2763.9,2771.9 1993-01-22,2776.1,2794.6,2773.4,2781.2 1993-01-21,2751.7,2773.7,2745.5,2773.3 1993-01-20,2730.7,2748.7,2727.6,2748.7 1993-01-19,2756.0,2759.3,2735.9,2737.6 1993-01-18,2766.6,2775.6,2757.4,2763.1 1993-01-15,2756.2,2768.4,2749.4,2765.1 1993-01-14,2751.8,2771.3,2751.8,2759.2 1993-01-13,2759.7,2768.3,2740.7,2745.3 1993-01-12,2774.1,2778.4,2757.4,2757.9 1993-01-11,2800.7,2801.4,2761.5,2773.4 1993-01-08,2801.9,2813.1,2797.9,2799.2 1993-01-07,2823.6,2825.5,2805.5,2816.5 1993-01-06,2829.0,2839.2,2823.6,2826.0 1993-01-05,2860.0,2870.2,2830.1,2833.6 1993-01-04,2841.8,2867.9,2830.3,2861.5 1992-12-31,2839.3,2846.7,2839.0,2846.5 1992-12-30,2836.2,2844.3,2829.3,2832.5 1992-12-29,2828.3,2848.9,2825.5,2847.8 1992-12-24,2831.2,2840.6,2824.6,2827.5 1992-12-23,2841.3,2841.3,2818.9,2827.4 1992-12-22,2807.4,2845.6,2805.4,2842.0 1992-12-21,2793.9,2807.7,2788.2,2807.7 1992-12-18,2743.3,2789.7,2743.0,2789.7 1992-12-17,2725.4,2748.0,2725.4,2740.3 1992-12-16,2715.4,2732.9,2713.1,2732.8 1992-12-15,2717.7,2723.3,2710.4,2717.9 1992-12-14,2709.8,2726.1,2709.8,2721.8 1992-12-11,2716.1,2720.5,2704.2,2716.2 1992-12-10,2740.6,2749.2,2725.9,2726.5 1992-12-09,2773.8,2775.1,2749.4,2750.7 1992-12-08,2750.2,2769.9,2745.7,2769.8 1992-12-07,2759.1,2776.0,2751.8,2754.5 1992-12-04,2775.5,2775.5,2753.7,2759.4 1992-12-03,2758.4,2777.7,2758.0,2771.0 1992-12-02,2775.0,2784.3,2762.1,2764.1 1992-12-01,2772.0,2794.7,2768.2,2792.0 1992-11-30,2760.8,2784.1,2759.4,2778.8 1992-11-27,2747.1,2761.9,2738.0,2760.1 1992-11-26,2710.7,2741.8,2710.4,2741.8 1992-11-25,2727.3,2728.0,2708.6,2709.6 1992-11-24,2720.5,2729.0,2704.6,2727.1 1992-11-23,2730.3,2745.2,2719.7,2722.9 1992-11-20,2705.1,2732.9,2701.9,2732.4 1992-11-19,2710.6,2712.6,2701.9,2706.2 1992-11-18,2679.6,2706.4,2670.7,2704.0 1992-11-17,2668.7,2686.7,2667.5,2679.2 1992-11-16,2688.7,2694.9,2678.3,2679.6 1992-11-13,2717.8,2718.3,2696.3,2697.5 1992-11-12,2705.7,2733.8,2705.7,2726.4 1992-11-11,2719.0,2720.7,2695.5,2696.8 1992-11-10,2696.1,2718.1,2689.6,2714.6 1992-11-09,2702.7,2705.8,2694.2,2695.4 1992-11-06,2714.9,2715.1,2701.0,2702.7 1992-11-05,2682.7,2713.3,2681.4,2711.1 1992-11-04,2704.4,2710.2,2691.6,2691.7 1992-11-03,2712.7,2713.4,2697.7,2705.6 1992-11-02,2657.1,2687.8,2649.1,2687.8 1992-10-30,2649.6,2660.6,2648.0,2658.3 1992-10-29,2650.0,2660.5,2628.2,2642.3 1992-10-28,2666.3,2666.3,2643.5,2650.4 1992-10-27,2672.6,2678.0,2640.9,2669.8 1992-10-26,2670.4,2675.0,2656.5,2661.6 1992-10-23,2643.2,2677.0,2639.9,2669.7 1992-10-22,2642.8,2681.9,2642.3,2658.1 1992-10-21,2636.8,2660.8,2636.8,2645.7 1992-10-20,2574.3,2617.5,2574.3,2617.0 1992-10-19,2555.3,2563.2,2542.8,2562.2 1992-10-16,2544.4,2588.0,2536.1,2563.9 1992-10-15,2552.3,2558.0,2536.6,2546.6 1992-10-14,2583.6,2586.8,2562.9,2574.7 1992-10-13,2567.2,2587.7,2549.5,2584.7 1992-10-12,2535.6,2558.9,2530.5,2557.2 1992-10-09,2549.9,2566.8,2541.0,2541.2 1992-10-08,2522.9,2547.3,2521.9,2538.8 1992-10-07,2512.5,2526.9,2500.4,2517.1 1992-10-06,2484.7,2488.4,2467.6,2488.4 1992-10-05,2524.4,2524.4,2446.1,2446.3 1992-10-02,2569.2,2585.0,2544.9,2549.7 1992-10-01,2558.4,2587.3,2552.7,2572.3 1992-09-30,2557.1,2562.2,2543.4,2553.0 1992-09-29,2557.7,2568.6,2531.5,2565.5 1992-09-28,2573.5,2582.9,2559.9,2560.0 1992-09-25,2656.8,2657.3,2601.0,2601.0 1992-09-24,2584.4,2621.2,2584.4,2621.2 1992-09-23,2579.3,2603.9,2567.8,2580.5 1992-09-22,2545.7,2598.4,2545.2,2586.0 1992-09-21,2551.9,2611.2,2551.9,2560.1 1992-09-18,2483.4,2577.7,2483.2,2567.0 1992-09-17,2485.1,2487.7,2404.1,2483.9 1992-09-16,2341.8,2378.3,2291.3,2378.3 1992-09-15,2416.0,2416.1,2367.1,2370.0 1992-09-14,2470.4,2470.4,2407.0,2422.1 1992-09-11,2357.5,2373.4,2346.5,2370.9 1992-09-10,2333.9,2343.5,2331.2,2340.6 1992-09-09,2322.8,2335.4,2321.6,2327.5 1992-09-08,2378.4,2389.1,2336.8,2337.7 1992-09-07,2358.3,2385.7,2358.3,2372.2 1992-09-04,2380.5,2396.4,2352.1,2362.2 1992-09-03,2334.1,2384.3,2332.3,2381.9 1992-09-02,2291.2,2314.1,2282.4,2313.0 1992-09-01,2313.0,2313.3,2296.5,2298.4 1992-08-28,2313.6,2314.6,2298.4,2312.6 1992-08-27,2303.4,2317.5,2300.5,2311.6 1992-08-26,2290.5,2292.8,2273.9,2285.0 1992-08-25,2302.3,2304.2,2260.6,2281.0 1992-08-24,2320.7,2334.2,2306.0,2311.1 1992-08-21,2362.8,2376.3,2362.8,2365.7 1992-08-20,2357.5,2376.5,2357.1,2359.4 1992-08-19,2352.4,2367.1,2344.9,2363.5 1992-08-18,2371.7,2371.7,2351.9,2354.7 1992-08-17,2362.1,2376.1,2356.8,2376.1 1992-08-14,2314.5,2358.2,2311.8,2356.8 1992-08-13,2302.8,2323.7,2293.2,2318.0 1992-08-12,2316.0,2326.7,2299.3,2303.1 1992-08-11,2330.9,2330.9,2294.7,2309.6 1992-08-10,2331.0,2334.0,2318.0,2325.7 1992-08-07,2368.3,2368.3,2344.9,2350.1 1992-08-06,2388.6,2391.6,2360.7,2377.6 1992-08-05,2401.1,2401.5,2392.7,2392.8 1992-08-04,2427.9,2434.8,2407.5,2407.5 1992-08-03,2390.8,2420.6,2389.0,2420.2 1992-07-31,2411.6,2411.8,2396.8,2399.6 1992-07-30,2438.2,2439.7,2410.3,2411.6 1992-07-29,2397.3,2424.3,2386.5,2423.2 1992-07-28,2352.0,2373.4,2352.0,2373.4 1992-07-27,2375.4,2376.3,2347.4,2348.0 1992-07-24,2398.8,2399.0,2361.7,2377.2 1992-07-23,2389.0,2399.6,2374.1,2399.5 1992-07-22,2407.5,2407.5,2376.8,2387.9 1992-07-21,2426.2,2426.6,2404.2,2415.6 1992-07-20,2409.1,2417.6,2367.1,2403.7 1992-07-17,2483.4,2483.4,2430.9,2431.9 1992-07-16,2483.8,2507.1,2478.4,2483.4 1992-07-15,2499.3,2501.1,2484.4,2486.4 1992-07-14,2472.2,2484.0,2461.6,2484.0 1992-07-13,2483.3,2492.5,2473.7,2478.3 1992-07-10,2504.1,2507.0,2489.4,2490.8 1992-07-09,2479.2,2499.2,2465.7,2497.9 1992-07-08,2476.9,2481.6,2454.6,2472.6 1992-07-07,2478.5,2494.3,2467.6,2493.7 1992-07-06,2494.9,2495.3,2463.0,2469.0 1992-07-03,2467.5,2500.1,2467.5,2497.1 1992-07-02,2504.0,2505.9,2471.2,2476.1 1992-07-01,2525.6,2529.4,2488.1,2493.9 1992-06-30,2515.8,2521.2,2502.2,2521.2 1992-06-29,2532.0,2548.2,2515.6,2515.8 1992-06-26,2526.1,2547.1,2525.1,2534.1 1992-06-25,2545.8,2558.2,2545.6,2557.3 1992-06-24,2558.8,2559.1,2527.6,2532.6 1992-06-23,2562.0,2564.0,2539.6,2560.6 1992-06-22,2573.0,2573.0,2550.1,2550.3 1992-06-19,2574.8,2590.9,2573.8,2584.8 1992-06-18,2570.5,2578.4,2558.6,2562.7 1992-06-17,2603.5,2606.0,2595.0,2598.4 1992-06-16,2600.3,2616.3,2600.3,2616.3 1992-06-15,2588.9,2601.1,2577.8,2593.6 1992-06-12,2621.6,2621.7,2601.4,2603.7 1992-06-11,2627.1,2631.3,2610.5,2614.1 1992-06-10,2627.1,2647.0,2627.1,2636.1 1992-06-09,2649.8,2653.1,2635.3,2635.4 1992-06-08,2661.2,2661.3,2645.6,2645.8 1992-06-05,2679.6,2682.0,2664.7,2668.5 1992-06-04,2683.6,2683.6,2663.6,2681.9 1992-06-03,2695.0,2708.4,2675.3,2680.9 1992-06-02,2710.5,2717.4,2705.5,2705.9 1992-06-01,2697.7,2703.6,2692.7,2697.6 1992-05-29,2703.8,2707.7,2695.3,2707.6 1992-05-28,2697.5,2707.0,2689.4,2694.2 1992-05-27,2696.6,2698.6,2688.4,2698.6 1992-05-26,2722.0,2727.1,2704.6,2704.6 1992-05-22,2704.2,2715.5,2697.5,2715.0 1992-05-21,2708.8,2710.1,2697.8,2702.0 1992-05-20,2713.3,2725.0,2707.4,2711.9 1992-05-19,2707.2,2707.5,2693.7,2700.6 1992-05-18,2679.8,2704.5,2678.6,2703.6 1992-05-15,2674.1,2684.6,2673.9,2682.6 1992-05-14,2721.3,2734.9,2692.5,2694.7 1992-05-13,2717.5,2728.1,2717.5,2720.5 1992-05-12,2741.5,2741.5,2718.9,2722.4 1992-05-11,2731.3,2744.5,2730.2,2737.8 1992-05-08,2695.8,2734.8,2695.3,2725.7 1992-05-07,2703.3,2714.1,2697.8,2701.9 1992-05-06,2657.1,2698.7,2652.7,2698.7 1992-05-05,2679.8,2683.0,2658.4,2662.2 1992-05-01,2660.1,2672.7,2650.5,2659.8 1992-04-30,2668.5,2668.5,2641.0,2654.1 1992-04-29,2654.4,2673.5,2650.4,2664.9 1992-04-28,2659.5,2659.5,2635.6,2651.0 1992-04-27,2640.9,2659.8,2640.9,2658.2 1992-04-24,2610.9,2643.0,2598.9,2643.0 1992-04-23,2610.6,2630.1,2605.7,2609.8 1992-04-22,2631.9,2641.2,2607.8,2607.8 1992-04-21,2617.6,2627.7,2615.6,2625.8 1992-04-16,2667.7,2673.4,2635.3,2638.6 1992-04-15,2621.6,2640.2,2620.2,2640.2 1992-04-14,2585.2,2603.5,2585.2,2600.5 1992-04-13,2570.9,2606.5,2570.9,2591.0 1992-04-10,2568.6,2587.0,2549.6,2572.6 1992-04-09,2401.7,2436.5,2401.7,2436.4 1992-04-08,2374.1,2403.5,2374.1,2393.2 1992-04-07,2413.2,2417.7,2402.2,2404.2 1992-04-06,2377.6,2404.4,2377.4,2400.9 1992-04-03,2397.9,2397.9,2379.5,2382.7 1992-04-02,2423.2,2424.1,2394.1,2405.4 1992-04-01,2384.1,2413.4,2384.1,2408.6 1992-03-31,2459.4,2465.6,2439.8,2440.1 1992-03-30,2436.9,2453.5,2436.8,2452.9 1992-03-27,2466.7,2466.7,2441.8,2447.9 1992-03-26,2466.4,2479.0,2463.4,2472.2 1992-03-25,2453.4,2466.7,2448.0,2464.9 1992-03-24,2455.8,2462.3,2445.3,2458.7 1992-03-23,2448.5,2453.1,2427.9,2441.0 1992-03-20,2471.7,2475.7,2446.9,2456.6 1992-03-19,2468.5,2470.1,2454.9,2467.6 1992-03-18,2478.1,2485.0,2464.1,2464.7 1992-03-17,2477.3,2494.4,2477.3,2491.2 1992-03-16,2483.9,2484.9,2457.7,2470.7 1992-03-13,2499.0,2499.0,2474.2,2476.0 1992-03-12,2516.9,2517.0,2491.1,2493.3 1992-03-11,2556.6,2560.6,2522.4,2522.4 1992-03-10,2554.9,2574.8,2554.5,2574.8 1992-03-09,2523.5,2552.3,2522.7,2550.7 1992-03-06,2531.0,2542.7,2528.6,2533.1 1992-03-05,2555.4,2555.4,2534.9,2538.3 1992-03-04,2569.9,2569.9,2558.4,2558.4 1992-03-03,2556.1,2569.7,2550.3,2565.4 1992-03-02,2552.2,2554.3,2533.5,2554.3 1992-02-28,2564.0,2565.1,2551.6,2562.1 1992-02-27,2565.1,2572.0,2555.1,2562.0 1992-02-26,2548.3,2571.1,2548.2,2565.0 1992-02-25,2563.6,2572.8,2544.1,2546.8 1992-02-24,2533.5,2563.1,2533.5,2559.7 1992-02-21,2555.1,2555.1,2541.9,2542.3 1992-02-20,2545.9,2555.2,2531.2,2543.4 1992-02-19,2545.0,2554.1,2530.6,2536.7 1992-02-18,2547.8,2557.1,2546.8,2555.9 1992-02-17,2513.3,2541.0,2512.6,2541.0 1992-02-14,2510.7,2518.1,2500.6,2513.9 1992-02-13,2526.1,2532.2,2513.8,2522.6 1992-02-12,2532.8,2537.2,2523.7,2523.7 1992-02-11,2548.9,2549.9,2536.7,2537.1 1992-02-10,2507.4,2540.3,2506.0,2538.4 1992-02-07,2530.2,2533.5,2517.0,2517.2 1992-02-06,2535.5,2549.6,2529.7,2534.3 1992-02-05,2569.1,2569.1,2544.0,2547.1 1992-02-04,2562.4,2562.5,2548.6,2556.8 1992-02-03,2563.7,2568.4,2552.5,2560.2 1992-01-31,2568.4,2580.2,2565.6,2571.2 1992-01-30,2533.9,2556.0,2533.9,2550.8 1992-01-29,2552.6,2552.6,2535.1,2546.5 1992-01-28,2540.4,2553.3,2540.4,2552.0 1992-01-27,2528.7,2547.6,2528.7,2539.9 1992-01-24,2502.6,2515.7,2493.2,2510.4 1992-01-23,2531.4,2537.2,2522.6,2525.3 1992-01-22,2526.9,2539.2,2517.0,2522.0 1992-01-21,2549.0,2561.6,2540.0,2543.4 1992-01-20,2528.8,2544.9,2520.3,2544.9 1992-01-17,2543.9,2560.8,2536.5,2536.7 1992-01-16,2525.8,2549.4,2523.3,2541.6 1992-01-15,2551.2,2556.9,2536.4,2537.1 1992-01-14,2491.5,2516.3,2490.3,2516.3 1992-01-13,2465.1,2491.6,2456.9,2490.1 1992-01-10,2503.6,2518.3,2476.4,2477.9 1992-01-09,2467.0,2500.0,2467.0,2497.9 1992-01-08,2475.9,2475.9,2441.3,2467.1 1992-01-07,2477.1,2483.5,2465.3,2482.9 1992-01-06,2523.7,2540.1,2492.2,2493.2 1992-01-03,2499.4,2515.7,2493.1,2504.1 1992-01-02,2483.1,2530.8,2482.5,2492.8 1991-12-31,2449.9,2494.0,2449.9,2493.1 1991-12-30,2426.6,2426.6,2404.0,2420.0 1991-12-27,2399.3,2427.0,2399.3,2418.7 1991-12-24,2373.5,2385.4,2369.3,2384.4 1991-12-23,2353.0,2353.0,2327.0,2345.4 1991-12-20,2381.1,2381.1,2356.1,2358.1 1991-12-19,2409.3,2409.3,2373.8,2391.6 1991-12-18,2425.7,2428.6,2409.4,2413.6 1991-12-17,2436.4,2436.4,2426.3,2432.9 1991-12-16,2446.0,2447.7,2440.0,2440.8 1991-12-13,2448.7,2459.3,2443.1,2451.6 1991-12-12,2384.0,2424.0,2378.1,2423.3 1991-12-11,2392.6,2402.6,2378.2,2380.2 1991-12-10,2408.3,2414.3,2390.5,2392.0 1991-12-09,2381.1,2409.6,2377.0,2409.6 1991-12-06,2402.6,2413.6,2375.3,2388.7 1991-12-05,2418.4,2418.4,2386.9,2407.0 1991-12-04,2419.7,2441.6,2418.7,2423.8 1991-12-03,2436.9,2436.9,2396.9,2420.2 1991-12-02,2412.4,2414.9,2387.7,2414.9 1991-11-29,2428.9,2439.2,2405.6,2420.2 1991-11-28,2451.0,2454.9,2424.5,2428.6 1991-11-27,2472.3,2472.3,2444.9,2447.5 1991-11-26,2466.4,2483.6,2462.9,2471.5 1991-11-25,2432.7,2456.2,2431.2,2456.2 1991-11-22,2468.3,2472.4,2445.2,2446.3 1991-11-21,2471.1,2471.1,2453.4,2463.5 1991-11-20,2474.3,2485.6,2469.7,2472.6 1991-11-19,2516.6,2517.3,2450.4,2463.1 1991-11-18,2483.6,2506.8,2483.6,2502.9 1991-11-15,2560.7,2560.7,2544.8,2546.6 1991-11-14,2558.6,2569.2,2553.5,2561.6 1991-11-13,2574.1,2574.2,2545.6,2546.5 1991-11-12,2559.1,2580.3,2559.0,2575.5 1991-11-11,2556.8,2572.4,2553.7,2554.9 1991-11-08,2537.5,2564.8,2537.3,2559.0 1991-11-07,2533.3,2548.0,2531.1,2538.0 1991-11-06,2533.5,2539.8,2523.9,2534.2 1991-11-05,2532.3,2546.5,2530.5,2540.9 1991-11-04,2548.9,2552.6,2527.0,2527.8 1991-11-01,2559.0,2559.0,2544.0,2549.5 1991-10-31,2583.2,2590.1,2565.0,2566.0 1991-10-30,2561.4,2580.1,2555.5,2577.1 1991-10-29,2577.1,2577.9,2548.7,2553.3 1991-10-28,2520.4,2558.5,2520.4,2558.5 1991-10-25,2528.8,2532.1,2511.9,2514.7 1991-10-24,2560.5,2569.7,2524.1,2528.3 1991-10-23,2557.5,2566.5,2557.4,2561.1 1991-10-22,2568.9,2571.9,2559.5,2559.5 1991-10-21,2596.8,2601.8,2575.6,2575.7 1991-10-18,2585.5,2601.1,2575.9,2601.1 1991-10-17,2591.5,2598.4,2583.4,2588.7 1991-10-16,2579.7,2583.3,2571.3,2579.0 1991-10-15,2587.0,2588.0,2572.8,2576.7 1991-10-14,2548.0,2574.5,2538.1,2574.5 1991-10-11,2569.4,2578.0,2555.0,2555.0 1991-10-10,2576.3,2579.0,2567.2,2570.8 1991-10-09,2606.7,2607.3,2574.7,2584.1 1991-10-08,2590.2,2606.1,2590.2,2599.5 1991-10-07,2614.6,2614.6,2594.2,2596.2 1991-10-04,2619.3,2624.9,2614.8,2624.6 1991-10-03,2642.9,2642.9,2622.1,2625.6 1991-10-02,2646.1,2649.9,2638.8,2644.2 1991-10-01,2643.4,2645.6,2637.6,2645.6 1991-09-30,2596.0,2621.7,2592.6,2621.7 1991-09-27,2593.0,2605.9,2588.8,2599.0 1991-09-26,2597.0,2608.9,2595.6,2595.6 1991-09-25,2584.4,2598.0,2581.5,2597.8 1991-09-24,2573.7,2586.2,2572.6,2576.6 1991-09-23,2596.9,2596.9,2579.1,2579.5 1991-09-20,2598.2,2602.5,2580.4,2600.3 1991-09-19,2588.1,2591.4,2564.5,2588.7 1991-09-18,2593.3,2604.4,2583.6,2583.6 1991-09-17,2611.2,2612.7,2587.1,2594.4 1991-09-16,2617.0,2617.0,2603.7,2606.0 1991-09-13,2652.7,2658.0,2624.9,2625.8 1991-09-12,2635.1,2648.2,2635.1,2641.9 1991-09-11,2629.3,2637.9,2621.6,2626.6 1991-09-10,2646.1,2646.1,2630.1,2630.8 1991-09-09,2665.4,2670.1,2648.6,2653.2 1991-09-06,2667.5,2677.7,2665.5,2667.4 1991-09-05,2662.2,2667.8,2659.3,2663.3 1991-09-04,2658.6,2679.9,2657.7,2664.6 1991-09-03,2678.0,2683.7,2667.1,2669.0 1991-09-02,2653.9,2680.4,2653.9,2679.6 1991-08-30,2637.3,2645.7,2632.7,2645.7 1991-08-29,2636.9,2642.8,2631.0,2638.2 1991-08-28,2617.3,2630.6,2617.3,2624.2 1991-08-27,2642.6,2648.2,2619.8,2619.8 1991-08-23,2618.7,2641.7,2618.7,2640.7 1991-08-22,2612.6,2640.5,2607.5,2623.0 1991-08-21,2559.1,2608.7,2559.1,2601.9 1991-08-20,2571.6,2572.1,2554.5,2554.5 1991-08-19,2528.4,2547.9,2495.7,2540.5 1991-08-16,2612.0,2630.0,2611.7,2621.0 1991-08-15,2610.4,2621.5,2610.4,2617.2 1991-08-14,2589.9,2611.6,2589.9,2608.8 1991-08-13,2574.2,2584.9,2573.0,2584.9 1991-08-12,2557.1,2569.4,2556.7,2569.4 1991-08-09,2592.5,2592.5,2569.7,2570.6 1991-08-08,2597.4,2600.6,2588.4,2600.6 1991-08-07,2584.9,2598.0,2584.8,2597.4 1991-08-06,2576.7,2580.4,2572.8,2573.3 1991-08-05,2599.1,2606.0,2585.4,2585.4 1991-08-02,2590.7,2609.1,2589.5,2601.7 1991-08-01,2586.2,2593.4,2583.8,2591.7 1991-07-31,2597.7,2603.6,2588.3,2588.8 1991-07-30,2595.3,2604.0,2590.3,2595.6 1991-07-29,2587.7,2612.4,2587.7,2595.0 1991-07-26,2584.0,2598.1,2584.0,2589.3 1991-07-25,2575.6,2579.6,2566.8,2579.6 1991-07-24,2581.8,2588.4,2578.6,2580.5 1991-07-23,2561.3,2594.7,2561.3,2587.9 1991-07-22,2539.6,2564.6,2536.2,2558.5 1991-07-19,2556.9,2557.5,2541.3,2541.5 1991-07-18,2557.1,2558.1,2546.6,2547.3 1991-07-17,2550.3,2561.6,2545.2,2561.0 1991-07-16,2543.3,2561.2,2543.3,2556.8 1991-07-15,2500.0,2532.9,2500.0,2532.5 1991-07-12,2510.7,2512.5,2497.0,2497.4 1991-07-11,2506.7,2526.1,2506.7,2510.5 1991-07-10,2485.9,2511.6,2485.9,2508.4 1991-07-09,2481.0,2490.5,2480.9,2487.9 1991-07-08,2480.2,2480.2,2462.5,2466.8 1991-07-05,2472.3,2485.1,2472.3,2484.7 1991-07-04,2452.5,2470.8,2452.5,2470.4 1991-07-03,2456.0,2458.3,2444.2,2448.2 1991-07-02,2455.2,2460.4,2444.4,2460.2 1991-07-01,2416.7,2444.7,2416.7,2443.6 1991-06-28,2451.6,2451.6,2414.7,2414.8 1991-06-27,2442.7,2454.4,2441.1,2452.5 1991-06-26,2459.3,2459.3,2431.7,2437.3 1991-06-25,2449.7,2469.0,2449.7,2461.2 1991-06-24,2485.5,2485.5,2457.8,2458.3 1991-06-21,2485.6,2491.9,2485.5,2487.5 1991-06-20,2487.0,2490.5,2471.6,2479.9 1991-06-19,2503.7,2504.2,2484.7,2484.7 1991-06-18,2516.9,2520.5,2509.1,2516.0 1991-06-17,2521.9,2524.1,2518.7,2524.0 1991-06-14,2520.8,2523.9,2516.0,2522.3 1991-06-13,2515.2,2522.9,2510.4,2514.6 1991-06-12,2538.2,2538.2,2520.0,2520.2 1991-06-11,2517.8,2543.0,2517.8,2542.6 1991-06-10,2510.6,2516.0,2504.7,2511.9 1991-06-07,2521.9,2524.9,2505.4,2506.3 1991-06-06,2518.2,2527.7,2518.2,2525.3 1991-06-05,2514.3,2524.4,2507.9,2521.5 1991-06-04,2514.8,2521.0,2502.9,2506.0 1991-06-03,2497.7,2523.0,2497.7,2515.8 1991-05-31,2495.4,2507.7,2494.9,2499.5 1991-05-30,2494.7,2495.2,2484.1,2491.2 1991-05-29,2489.8,2493.5,2483.0,2492.9 1991-05-28,2476.9,2482.5,2475.6,2479.7 1991-05-24,2482.0,2482.0,2460.1,2471.1 1991-05-23,2468.6,2484.6,2468.6,2482.8 1991-05-22,2488.1,2492.9,2464.6,2465.9 1991-05-21,2471.5,2482.7,2471.5,2482.7 1991-05-20,2453.0,2467.1,2452.9,2466.6 1991-05-17,2473.5,2473.5,2444.6,2453.9 1991-05-16,2464.1,2481.1,2454.6,2471.9 1991-05-15,2456.3,2466.2,2449.7,2459.4 1991-05-14,2490.7,2492.1,2462.2,2463.7 1991-05-13,2500.8,2501.6,2486.4,2486.6 1991-05-10,2552.8,2554.9,2522.4,2524.3 1991-05-09,2530.4,2541.9,2530.2,2541.8 1991-05-08,2536.5,2540.4,2521.8,2523.4 1991-05-07,2521.8,2540.5,2521.5,2540.5 1991-05-03,2523.9,2530.4,2520.8,2522.7 1991-05-02,2522.3,2539.3,2517.0,2530.7 1991-05-01,2487.4,2508.5,2480.0,2508.4 1991-04-30,2487.4,2492.3,2475.6,2486.2 1991-04-29,2468.7,2499.9,2468.7,2498.2 1991-04-26,2480.6,2487.5,2470.9,2471.3 1991-04-25,2492.8,2494.9,2480.1,2482.1 1991-04-24,2504.0,2509.4,2483.5,2488.6 1991-04-23,2489.3,2509.3,2489.3,2503.8 1991-04-22,2507.5,2509.3,2490.8,2490.8 1991-04-19,2536.3,2536.9,2517.4,2520.1 1991-04-18,2551.5,2553.5,2535.0,2538.4 1991-04-17,2535.9,2545.0,2524.5,2545.0 1991-04-16,2546.3,2555.3,2518.6,2519.5 1991-04-15,2525.7,2551.5,2525.7,2542.8 1991-04-12,2536.2,2541.7,2521.2,2526.1 1991-04-11,2518.3,2532.1,2518.1,2531.6 1991-04-10,2506.0,2518.9,2506.0,2518.8 1991-04-09,2536.9,2539.0,2525.9,2527.2 1991-04-08,2541.0,2548.1,2520.0,2529.9 1991-04-05,2532.8,2552.1,2529.8,2545.3 1991-04-04,2515.1,2544.7,2515.1,2524.5 1991-04-03,2524.1,2526.9,2515.2,2519.1 1991-04-02,2440.2,2488.6,2438.6,2488.3 1991-03-28,2460.3,2474.3,2449.4,2456.5 1991-03-27,2457.0,2471.5,2445.6,2464.6 1991-03-26,2424.0,2437.6,2413.7,2437.6 1991-03-25,2432.2,2432.3,2417.7,2431.9 1991-03-22,2467.1,2476.1,2440.1,2440.5 1991-03-21,2455.5,2478.2,2455.5,2474.8 1991-03-20,2444.0,2460.1,2429.9,2441.2 1991-03-19,2490.3,2494.8,2446.7,2459.0 1991-03-18,2486.6,2491.1,2477.7,2490.6 1991-03-15,2500.5,2527.1,2490.3,2494.2 1991-03-14,2467.1,2500.6,2466.9,2500.6 1991-03-13,2457.3,2465.3,2445.3,2448.2 1991-03-12,2447.5,2463.4,2445.1,2454.8 1991-03-11,2447.8,2479.8,2447.8,2459.1 1991-03-08,2433.4,2473.8,2433.4,2455.0 1991-03-07,2448.7,2457.8,2437.2,2437.7 1991-03-06,2457.7,2480.6,2448.5,2459.9 1991-03-05,2379.1,2420.1,2372.1,2420.1 1991-03-04,2395.9,2396.7,2378.7,2382.9 1991-03-01,2374.9,2388.5,2368.4,2386.9 1991-02-28,2367.1,2388.4,2365.9,2380.9 1991-02-27,2318.5,2348.2,2306.8,2348.0 1991-02-26,2329.0,2333.9,2319.7,2322.2 1991-02-25,2318.4,2354.5,2317.9,2335.5 1991-02-22,2312.3,2323.5,2307.4,2314.3 1991-02-21,2291.6,2322.1,2291.6,2312.4 1991-02-20,2306.2,2312.0,2296.3,2296.8 1991-02-19,2318.1,2332.1,2306.5,2312.4 1991-02-18,2307.0,2326.4,2299.6,2318.3 1991-02-15,2282.6,2315.8,2282.6,2296.9 1991-02-14,2278.8,2306.0,2276.2,2294.4 1991-02-13,2255.5,2284.0,2254.5,2267.8 1991-02-12,2308.9,2308.9,2260.2,2264.5 1991-02-11,2252.5,2280.9,2252.5,2279.0 1991-02-08,2232.8,2248.2,2232.4,2245.2 1991-02-07,2210.2,2244.7,2210.1,2243.7 1991-02-06,2200.5,2204.9,2184.9,2194.8 1991-02-05,2198.4,2202.7,2191.2,2202.0 1991-02-04,2170.8,2182.3,2169.2,2172.4 1991-02-01,2168.5,2168.6,2155.6,2165.7 1991-01-31,2168.3,2182.1,2158.5,2170.3 1991-01-30,2119.3,2152.7,2119.3,2152.6 1991-01-29,2110.6,2116.0,2105.2,2113.8 1991-01-28,2100.6,2118.0,2100.6,2118.0 1991-01-25,2103.8,2107.7,2098.3,2103.0 1991-01-24,2091.3,2100.9,2086.1,2099.3 1991-01-23,2078.0,2093.1,2078.0,2080.5 1991-01-22,2079.7,2084.1,2071.8,2081.6 1991-01-21,2099.2,2103.9,2080.5,2084.0 1991-01-18,2099.9,2103.7,2087.0,2102.7 1991-01-17,2083.4,2120.3,2082.1,2104.6 1991-01-16,2056.6,2060.8,2052.3,2054.8 1991-01-15,2081.7,2081.7,2069.7,2070.9 1991-01-14,2101.4,2102.4,2071.8,2080.8 1991-01-11,2119.6,2124.5,2105.8,2106.1 1991-01-10,2109.3,2114.3,2103.6,2108.7 1991-01-09,2099.8,2130.9,2099.8,2128.9 1991-01-08,2099.8,2103.5,2095.5,2099.9 1991-01-07,2126.3,2130.0,2109.9,2113.3 1991-01-04,2109.2,2131.0,2109.2,2126.1 1991-01-03,2121.1,2124.4,2106.3,2117.8 1991-01-02,2142.9,2143.0,2122.9,2128.3 1990-12-31,2152.5,2152.5,2140.6,2143.5 1990-12-28,2163.8,2170.4,2160.0,2160.4 1990-12-27,2159.4,2167.8,2155.7,2167.8 1990-12-24,2159.5,2159.5,2152.6,2156.3 1990-12-21,2163.4,2164.6,2152.6,2164.4 1990-12-20,2172.3,2172.5,2149.1,2158.8 1990-12-19,2171.9,2179.1,2165.4,2178.7 1990-12-18,2159.6,2165.7,2153.2,2161.8 1990-12-17,2163.9,2173.6,2156.9,2157.9 1990-12-14,2173.5,2184.6,2166.6,2168.4 1990-12-13,2161.4,2172.2,2148.1,2172.2 1990-12-12,2160.2,2169.1,2153.8,2156.9 1990-12-11,2185.4,2185.8,2163.2,2165.8 1990-12-10,2180.0,2192.9,2178.5,2182.5 1990-12-07,2171.3,2188.3,2171.2,2183.4 1990-12-06,2164.2,2190.2,2162.5,2177.5 1990-12-05,2147.0,2152.8,2138.0,2152.6 1990-12-04,2156.6,2162.9,2142.0,2146.3 1990-12-03,2159.7,2169.6,2157.8,2162.7 1990-11-30,2130.1,2149.8,2130.1,2149.4 1990-11-29,2135.9,2145.9,2129.8,2135.6 1990-11-28,2159.4,2159.4,2137.7,2144.3 1990-11-27,2156.8,2166.1,2149.5,2159.5 1990-11-26,2184.9,2191.7,2148.9,2151.9 1990-11-23,2126.1,2172.9,2125.9,2170.5 1990-11-22,2131.3,2160.7,2123.0,2127.9 1990-11-21,2102.7,2141.6,2102.7,2126.3 1990-11-20,2095.1,2123.5,2095.1,2115.2 1990-11-19,2068.3,2105.7,2068.3,2095.9 1990-11-16,2055.7,2072.7,2054.4,2068.0 1990-11-15,2049.7,2062.8,2046.7,2060.0 1990-11-14,2047.1,2047.1,2038.5,2046.0 1990-11-13,2071.1,2071.2,2053.9,2056.0 1990-11-12,2045.5,2051.9,2043.1,2051.9 1990-11-09,2035.2,2050.8,2033.5,2040.6 1990-11-08,2051.0,2053.9,2031.5,2036.2 1990-11-07,2064.6,2070.5,2056.0,2059.2 1990-11-06,2055.0,2071.0,2052.2,2069.8 1990-11-05,2038.0,2050.2,2038.0,2050.1 1990-11-02,2011.2,2032.7,2011.2,2030.7 1990-11-01,2039.9,2049.3,2025.7,2028.0 1990-10-31,2039.6,2061.9,2036.1,2050.3 1990-10-30,2054.3,2054.3,2033.9,2033.9 1990-10-29,2056.5,2063.4,2052.6,2062.1 1990-10-26,2079.8,2079.8,2057.0,2063.1 1990-10-25,2109.6,2109.7,2085.5,2088.7 1990-10-24,2114.6,2123.4,2108.3,2110.5 1990-10-23,2121.6,2134.3,2120.7,2127.0 1990-10-22,2093.1,2103.4,2083.9,2102.0 1990-10-19,2079.7,2100.1,2071.2,2089.0 1990-10-18,2069.8,2088.9,2065.8,2082.6 1990-10-17,2072.8,2076.6,2061.0,2068.0 1990-10-16,2112.1,2120.1,2081.1,2083.6 1990-10-15,2105.1,2125.6,2100.6,2101.9 1990-10-12,2091.0,2106.9,2089.3,2100.4 1990-10-11,2113.9,2123.0,2100.4,2102.2 1990-10-10,2110.6,2136.9,2104.0,2121.8 1990-10-09,2171.7,2179.0,2133.0,2134.1 1990-10-08,2278.6,2283.7,2199.0,2201.6 1990-10-05,2053.6,2144.2,2033.5,2143.9 1990-10-04,2085.2,2090.6,2069.1,2070.4 1990-10-03,2050.4,2087.2,2050.2,2087.0 1990-10-02,2075.3,2075.3,2052.8,2058.5 1990-10-01,2006.3,2033.4,2006.3,2030.9 1990-09-28,1999.8,1999.9,1974.1,1990.2 1990-09-27,1998.6,2030.7,1998.6,2009.1 1990-09-26,2004.9,2015.8,1998.5,2000.0 1990-09-25,1991.9,2005.3,1986.5,1999.2 1990-09-24,2011.3,2018.4,1986.5,1990.3 1990-09-21,2023.5,2025.5,1975.9,2025.5 1990-09-20,2069.2,2069.2,2015.3,2016.9 1990-09-19,2075.7,2075.9,2061.6,2065.8 1990-09-18,2100.5,2100.5,2061.1,2064.0 1990-09-17,2080.3,2095.9,2072.5,2094.3 1990-09-14,2108.8,2122.1,2093.4,2093.8 1990-09-13,2145.8,2145.8,2126.1,2127.1 1990-09-12,2147.4,2167.8,2142.2,2142.3 1990-09-11,2140.1,2151.6,2137.5,2144.3 1990-09-10,2133.2,2153.7,2133.2,2147.0 1990-09-07,2115.1,2123.0,2105.5,2122.9 1990-09-06,2158.7,2158.7,2120.9,2120.9 1990-09-05,2146.6,2165.4,2146.6,2152.2 1990-09-04,2160.4,2160.4,2139.5,2148.0 1990-09-03,2166.2,2176.7,2163.5,2166.6 1990-08-31,2143.7,2162.8,2143.7,2162.8 1990-08-30,2139.6,2164.1,2139.6,2153.6 1990-08-29,2123.7,2128.1,2110.1,2125.7 1990-08-28,2127.5,2133.2,2113.6,2126.1 1990-08-24,2079.2,2103.5,2078.0,2086.4 1990-08-23,2077.4,2080.3,2051.2,2075.0 1990-08-22,2117.7,2127.0,2104.5,2104.8 1990-08-21,2161.8,2161.9,2098.5,2108.1 1990-08-20,2172.3,2176.5,2149.2,2156.6 1990-08-17,2199.4,2201.3,2171.0,2176.9 1990-08-16,2237.3,2237.4,2220.8,2222.1 1990-08-15,2238.6,2244.6,2231.2,2239.3 1990-08-14,2224.0,2242.1,2224.0,2234.0 1990-08-13,2220.5,2220.5,2206.6,2219.5 1990-08-10,2249.2,2249.2,2233.8,2233.8 1990-08-09,2239.7,2254.1,2239.7,2244.9 1990-08-08,2234.2,2253.2,2217.9,2237.5 1990-08-07,2225.6,2260.9,2224.2,2235.8 1990-08-06,2252.4,2253.1,2202.5,2220.2 1990-08-03,2301.5,2311.1,2274.0,2284.6 1990-08-02,2347.9,2347.9,2304.5,2304.5 1990-08-01,2329.3,2346.7,2329.3,2339.0 1990-07-31,2332.8,2342.2,2325.2,2326.2 1990-07-30,2322.3,2322.4,2311.5,2316.5 1990-07-27,2336.6,2339.9,2327.9,2330.1 1990-07-26,2363.6,2369.7,2337.9,2344.1 1990-07-25,2369.5,2382.5,2363.1,2364.7 1990-07-24,2366.8,2378.1,2351.8,2360.9 1990-07-23,2384.5,2406.3,2352.5,2359.7 1990-07-20,2391.0,2400.4,2386.8,2400.1 1990-07-19,2399.3,2407.0,2387.3,2387.3 1990-07-18,2409.0,2424.8,2401.7,2402.0 1990-07-17,2407.6,2430.6,2407.6,2415.0 1990-07-16,2388.4,2410.0,2388.4,2406.5 1990-07-13,2377.2,2382.3,2365.0,2382.2 1990-07-12,2378.1,2386.3,2370.2,2370.5 1990-07-11,2324.6,2360.5,2324.6,2360.5 1990-07-10,2333.2,2333.2,2323.1,2327.5 1990-07-09,2337.0,2345.5,2337.0,2337.5 1990-07-06,2325.1,2340.0,2323.2,2340.0 1990-07-05,2352.2,2352.2,2327.8,2331.4 1990-07-04,2366.8,2366.8,2352.7,2355.5 1990-07-03,2374.0,2381.0,2366.1,2371.7 1990-07-02,2373.6,2384.1,2368.2,2372.0 1990-06-29,2354.0,2384.8,2348.9,2374.6 1990-06-28,2376.6,2376.6,2355.7,2355.7 1990-06-27,2392.4,2394.1,2369.1,2373.5 1990-06-26,2402.5,2420.1,2399.5,2399.8 1990-06-25,2361.2,2398.5,2361.2,2398.5 1990-06-22,2374.1,2381.1,2368.2,2378.5 1990-06-21,2368.2,2377.1,2360.9,2370.3 1990-06-20,2375.0,2384.5,2369.6,2371.2 1990-06-19,2349.1,2372.9,2348.9,2369.7 1990-06-18,2389.9,2394.5,2367.4,2370.5 1990-06-15,2407.5,2414.4,2387.4,2392.3 1990-06-14,2404.9,2430.5,2401.9,2403.0 1990-06-13,2390.9,2410.3,2390.1,2405.4 1990-06-12,2367.3,2379.2,2367.3,2370.7 1990-06-11,2351.3,2356.4,2338.5,2348.8 1990-06-08,2373.8,2383.0,2363.9,2366.6 1990-06-07,2352.0,2390.3,2349.9,2378.4 1990-06-06,2365.8,2367.4,2354.5,2358.5 1990-06-05,2390.7,2398.9,2362.5,2380.1 1990-06-04,2383.9,2387.8,2376.4,2379.0 1990-06-01,2345.3,2371.4,2332.7,2371.4 1990-05-31,2347.1,2357.2,2333.7,2345.1 1990-05-30,2327.8,2347.2,2327.4,2346.2 1990-05-29,2259.1,2295.6,2258.7,2295.6 1990-05-25,2275.9,2276.3,2258.4,2265.6 1990-05-24,2287.9,2295.4,2269.3,2277.1 1990-05-23,2303.9,2335.1,2287.3,2287.4 1990-05-22,2303.5,2332.7,2293.3,2311.3 1990-05-21,2263.6,2282.1,2261.3,2282.1 1990-05-18,2290.2,2321.4,2268.5,2269.1 1990-05-17,2227.7,2284.4,2227.7,2284.4 1990-05-16,2213.2,2237.1,2213.2,2221.1 1990-05-15,2213.9,2216.1,2204.1,2212.2 1990-05-14,2203.9,2214.5,2202.0,2214.5 1990-05-11,2155.6,2182.3,2155.6,2175.9 1990-05-10,2162.9,2169.2,2157.0,2157.0 1990-05-09,2179.4,2179.7,2160.6,2162.7 1990-05-08,2173.3,2192.3,2173.3,2182.0 1990-05-04,2146.4,2168.0,2146.4,2162.2 1990-05-03,2141.6,2145.2,2130.2,2134.9 1990-05-02,2121.7,2145.1,2121.7,2137.6 1990-05-01,2111.8,2126.0,2111.4,2117.9 1990-04-30,2109.8,2109.8,2084.4,2103.4 1990-04-27,2137.3,2140.2,2105.0,2106.6 1990-04-26,2143.5,2145.8,2132.5,2133.6 1990-04-25,2157.4,2167.6,2142.9,2143.1 1990-04-24,2156.7,2168.7,2150.4,2159.9 1990-04-23,2184.6,2185.1,2159.1,2159.2 1990-04-20,2185.7,2191.1,2184.8,2187.1 1990-04-19,2192.8,2194.9,2180.5,2184.7 1990-04-18,2216.1,2223.9,2205.7,2205.9 1990-04-17,2225.4,2225.7,2213.8,2214.5 1990-04-12,2215.3,2222.2,2209.5,2222.1 1990-04-11,2217.9,2219.9,2211.9,2215.5 1990-04-10,2221.0,2221.0,2207.3,2217.5 1990-04-09,2222.1,2227.9,2218.8,2227.7 1990-04-06,2243.0,2243.2,2221.0,2221.1 1990-04-05,2227.2,2239.5,2222.0,2239.5 1990-04-04,2246.8,2247.5,2229.2,2231.6 1990-04-03,2232.4,2241.7,2218.0,2240.7 1990-04-02,2224.3,2224.5,2211.6,2221.6 1990-03-30,2253.5,2271.0,2245.5,2247.9 1990-03-29,2273.1,2276.3,2259.9,2263.0 1990-03-28,2271.6,2280.4,2270.8,2275.0 1990-03-27,2294.1,2295.6,2265.8,2266.2 1990-03-26,2286.4,2306.9,2286.3,2298.2 1990-03-23,2264.1,2283.9,2264.1,2283.9 1990-03-22,2241.0,2267.8,2240.7,2258.9 1990-03-21,2239.4,2250.3,2230.1,2250.3 1990-03-20,2244.8,2259.7,2244.8,2259.7 1990-03-19,2260.8,2261.1,2235.9,2238.0 1990-03-16,2239.6,2264.2,2238.8,2263.9 1990-03-15,2228.0,2242.3,2227.9,2234.9 1990-03-14,2224.4,2238.3,2223.2,2226.1 1990-03-13,2224.1,2224.8,2213.4,2224.5 1990-03-12,2216.7,2229.1,2216.7,2222.8 1990-03-09,2263.3,2263.3,2230.9,2234.3 1990-03-08,2240.9,2254.7,2240.8,2250.0 1990-03-07,2222.5,2234.9,2219.1,2230.3 1990-03-06,2236.4,2238.2,2211.8,2216.0 1990-03-05,2238.0,2238.8,2230.2,2230.5 1990-03-02,2240.6,2255.9,2240.6,2254.8 1990-03-01,2246.2,2246.2,2236.0,2238.4 1990-02-28,2255.5,2265.6,2253.7,2255.4 1990-02-27,2254.5,2257.5,2249.2,2254.8 1990-02-26,2208.5,2249.4,2208.4,2249.3 1990-02-23,2248.2,2248.4,2228.3,2236.7 1990-02-22,2261.7,2269.2,2251.5,2269.2 1990-02-21,2251.8,2261.7,2246.0,2259.7 1990-02-20,2288.2,2290.8,2276.4,2277.0 1990-02-19,2317.9,2318.1,2294.9,2297.1 1990-02-16,2322.1,2334.4,2319.6,2325.9 1990-02-15,2293.3,2314.4,2289.3,2313.8 1990-02-14,2303.7,2310.6,2297.6,2298.3 1990-02-13,2292.9,2299.4,2285.8,2293.2 1990-02-12,2313.0,2313.3,2282.4,2286.9 1990-02-09,2323.6,2323.9,2308.5,2313.6 1990-02-08,2321.2,2331.2,2321.0,2331.0 1990-02-07,2314.7,2320.6,2299.1,2307.4 1990-02-06,2345.4,2345.4,2320.0,2321.1 1990-02-05,2350.0,2353.7,2344.8,2348.4 1990-02-02,2346.1,2356.2,2342.3,2355.1 1990-02-01,2346.5,2355.4,2343.6,2345.8 1990-01-31,2314.9,2337.4,2314.9,2337.3 1990-01-30,2325.5,2334.0,2321.3,2322.0 1990-01-29,2317.5,2333.3,2317.5,2328.8 1990-01-26,2297.6,2325.5,2297.5,2314.5 1990-01-25,2292.0,2308.1,2288.7,2289.9 1990-01-24,2267.6,2278.8,2250.5,2278.6 1990-01-23,2285.0,2305.9,2272.6,2291.1 1990-01-22,2346.3,2346.4,2297.1,2297.1 1990-01-19,2346.2,2349.3,2319.7,2335.0 1990-01-18,2358.0,2358.0,2326.2,2336.9 1990-01-17,2355.6,2373.9,2355.5,2373.9 1990-01-16,2369.4,2369.7,2329.5,2349.1 1990-01-15,2354.4,2366.4,2352.8,2366.2 1990-01-12,2402.9,2402.9,2370.3,2380.1 1990-01-11,2396.7,2421.0,2396.5,2417.9 1990-01-10,2424.5,2425.2,2411.9,2412.6 1990-01-09,2429.1,2437.8,2420.5,2436.3 1990-01-08,2445.1,2445.6,2423.8,2431.3 1990-01-05,2442.0,2448.7,2436.6,2444.5 1990-01-04,2469.6,2479.4,2451.6,2451.6 1990-01-03,2451.3,2466.2,2445.8,2463.7 1990-01-02,2442.4,2443.3,2425.5,2434.1 1989-12-29,2399.1,2422.8,2399.1,2422.7 1989-12-28,2404.9,2411.8,2396.2,2398.8 1989-12-27,2368.7,2396.2,2368.7,2395.8 1989-12-22,2354.1,2362.0,2354.1,2362.0 1989-12-21,2361.1,2361.1,2351.1,2353.0 1989-12-20,2348.5,2367.1,2348.5,2360.7 1989-12-19,2352.0,2357.2,2338.7,2342.1 1989-12-18,2343.1,2362.9,2343.1,2358.5 1989-12-15,2357.6,2358.5,2341.5,2344.7 1989-12-14,2382.6,2389.2,2367.0,2367.0 1989-12-13,2379.2,2386.7,2370.3,2386.2 1989-12-12,2355.0,2369.7,2355.0,2363.5 1989-12-11,2352.1,2359.3,2348.4,2351.4 1989-12-08,2342.7,2364.1,2337.6,2363.5 1989-12-07,2354.1,2366.1,2341.1,2346.7 1989-12-06,2324.9,2355.6,2316.4,2353.7 1989-12-05,2301.2,2327.5,2301.2,2327.5 1989-12-04,2329.0,2329.0,2297.5,2303.4 1989-12-01,2297.3,2313.8,2296.2,2311.1 1989-11-30,2252.9,2276.8,2251.6,2276.8 1989-11-29,2245.0,2262.6,2245.0,2255.6 1989-11-28,2229.7,2246.8,2229.7,2242.0 1989-11-27,2217.8,2226.2,2212.9,2224.3 1989-11-24,2224.1,2224.6,2215.0,2222.4 1989-11-23,2195.2,2220.6,2194.6,2220.5 1989-11-22,2196.6,2197.4,2186.8,2192.3 1989-11-21,2172.5,2185.1,2171.0,2185.1 1989-11-20,2220.3,2220.3,2183.1,2183.1 1989-11-17,2212.5,2223.5,2212.5,2221.4 1989-11-16,2213.8,2224.2,2200.9,2209.8 1989-11-15,2206.9,2208.5,2200.1,2203.4 1989-11-14,2206.9,2223.3,2206.6,2214.7 1989-11-13,2216.1,2233.8,2211.5,2213.2 1989-11-10,2198.3,2222.9,2198.3,2216.7 1989-11-09,2205.7,2213.3,2193.3,2201.7 1989-11-08,2196.4,2203.9,2193.8,2203.8 1989-11-07,2162.6,2178.2,2161.7,2178.2 1989-11-06,2182.8,2193.7,2169.3,2169.6 1989-11-03,2152.9,2175.1,2152.9,2173.1 1989-11-02,2157.5,2160.3,2146.3,2154.1 1989-11-01,2146.0,2163.2,2141.7,2160.1 1989-10-31,2124.6,2142.6,2120.5,2142.6 1989-10-30,2102.2,2117.1,2101.2,2112.2 1989-10-27,2089.6,2099.3,2080.8,2082.1 1989-10-26,2157.4,2160.8,2129.4,2129.4 1989-10-25,2153.5,2162.7,2148.7,2161.9 1989-10-24,2187.9,2197.0,2147.0,2149.3 1989-10-23,2179.5,2195.9,2179.5,2189.7 1989-10-20,2188.9,2189.0,2176.9,2179.1 1989-10-19,2161.3,2195.4,2161.3,2189.3 1989-10-18,2149.5,2170.1,2134.2,2170.1 1989-10-17,2175.9,2182.3,2120.8,2135.5 1989-10-16,2076.8,2146.5,2029.7,2146.5 1989-10-13,2232.6,2247.8,2232.1,2233.9 1989-10-12,2232.2,2238.7,2224.0,2237.9 1989-10-11,2223.5,2236.4,2213.3,2218.8 1989-10-10,2250.2,2264.2,2218.6,2218.8 1989-10-09,2262.8,2265.2,2242.6,2247.0 1989-10-06,2259.7,2278.0,2249.9,2277.5 1989-10-05,2311.7,2314.1,2270.1,2281.6 1989-10-04,2327.1,2331.1,2312.1,2312.1 1989-10-03,2300.0,2318.6,2298.2,2318.6 1989-10-02,2287.6,2289.3,2271.9,2289.2 1989-09-29,2279.5,2299.4,2278.3,2299.4 1989-09-28,2318.0,2323.1,2291.7,2291.7 1989-09-27,2329.8,2335.2,2321.7,2331.2 1989-09-26,2361.9,2368.4,2332.4,2336.1 1989-09-25,2359.1,2365.6,2358.4,2359.6 1989-09-22,2379.3,2382.1,2369.7,2370.2 1989-09-21,2375.3,2380.9,2365.4,2380.9 1989-09-20,2366.3,2379.8,2366.3,2369.8 1989-09-19,2379.4,2379.4,2351.4,2361.5 1989-09-18,2358.3,2373.8,2358.3,2373.8 1989-09-15,2388.1,2388.1,2352.7,2366.5 1989-09-14,2397.0,2399.8,2380.4,2382.0 1989-09-13,2393.9,2404.5,2387.2,2401.5 1989-09-12,2387.8,2399.0,2386.6,2397.6 1989-09-11,2425.3,2425.3,2400.4,2400.6 1989-09-08,2433.3,2435.7,2423.0,2423.9 1989-09-07,2397.8,2416.1,2397.7,2415.9 1989-09-06,2427.0,2427.4,2390.8,2390.8 1989-09-05,2420.0,2426.0,2410.4,2426.0 1989-09-04,2410.0,2424.5,2410.0,2419.2 1989-09-01,2392.1,2407.5,2392.1,2407.5 1989-08-31,2385.5,2394.3,2384.6,2387.9 1989-08-30,2378.4,2383.7,2373.3,2381.3 1989-08-29,2394.2,2394.4,2378.5,2380.8 1989-08-25,2403.2,2404.5,2391.9,2397.4 1989-08-24,2400.4,2404.5,2387.5,2393.1 1989-08-23,2371.1,2388.4,2363.9,2382.4 1989-08-22,2361.5,2385.2,2361.5,2370.8 1989-08-21,2382.3,2383.8,2368.1,2374.7 1989-08-18,2368.4,2375.1,2363.3,2375.1 1989-08-17,2361.4,2374.8,2356.8,2360.0 1989-08-16,2329.6,2345.8,2329.6,2345.8 1989-08-15,2332.4,2332.4,2323.9,2326.2 1989-08-14,2314.4,2327.5,2314.4,2325.9 1989-08-11,2352.2,2354.9,2339.3,2354.2 1989-08-10,2355.4,2364.7,2346.4,2347.3 1989-08-09,2346.6,2363.6,2345.8,2360.4 1989-08-08,2355.1,2357.9,2347.7,2348.1 1989-08-07,2328.6,2341.5,2328.1,2341.5 1989-08-04,2315.9,2329.1,2315.9,2327.5 1989-08-03,2306.3,2310.3,2298.0,2306.3 1989-08-02,2285.8,2307.8,2285.8,2307.8 1989-08-01,2292.4,2297.5,2284.5,2292.3 1989-07-31,2303.4,2319.9,2297.0,2297.0 1989-07-28,2286.3,2306.0,2286.2,2306.0 1989-07-27,2276.5,2287.4,2274.2,2283.7 1989-07-26,2262.3,2265.5,2258.3,2264.5 1989-07-25,2257.0,2269.7,2250.0,2269.4 1989-07-24,2279.0,2279.1,2258.3,2259.1 1989-07-21,2280.3,2283.2,2275.5,2283.0 1989-07-20,2290.3,2292.5,2279.6,2292.3 1989-07-19,2268.9,2298.3,2268.9,2292.5 1989-07-18,2273.9,2284.5,2268.4,2273.1 1989-07-17,2280.0,2293.4,2274.6,2274.9 1989-07-14,2275.1,2289.5,2270.0,2273.7 1989-07-13,2243.5,2259.0,2242.9,2258.0 1989-07-12,2263.3,2272.7,2251.6,2256.7 1989-07-11,2194.9,2260.8,2187.7,2250.9 1989-07-10,2192.5,2197.5,2189.4,2195.2 1989-07-07,2161.8,2189.1,2161.8,2189.1 1989-07-06,2169.0,2171.5,2160.3,2161.2 1989-07-05,2171.5,2175.9,2162.9,2162.9 1989-07-04,2176.7,2176.8,2172.3,2174.4 1989-07-03,2159.3,2167.0,2154.9,2165.6 1989-06-30,2165.9,2170.3,2148.2,2151.0 1989-06-29,2194.1,2201.5,2179.7,2182.0 1989-06-28,2224.5,2225.6,2206.2,2209.4 1989-06-27,2174.9,2207.5,2173.8,2206.4 1989-06-26,2175.5,2183.2,2167.6,2179.6 1989-06-23,2166.9,2182.8,2158.6,2167.5 1989-06-22,2176.0,2184.0,2170.6,2180.0 1989-06-21,2175.4,2178.9,2168.8,2172.2 1989-06-20,2169.6,2173.7,2164.6,2164.8 1989-06-19,2146.2,2158.2,2140.0,2154.7 1989-06-16,2131.7,2143.9,2124.1,2143.9 1989-06-15,2137.7,2143.2,2129.6,2129.6 1989-06-14,2113.0,2133.6,2111.5,2133.6 1989-06-13,2126.3,2139.3,2116.2,2123.0 1989-06-12,2137.8,2149.9,2131.4,2138.3 1989-06-09,2146.5,2154.3,2133.2,2142.1 1989-06-08,2141.3,2154.5,2130.3,2143.2 1989-06-07,2110.9,2118.1,2103.9,2117.9 1989-06-06,2080.3,2107.4,2077.6,2107.4 1989-06-05,2081.0,2089.1,2076.5,2088.5 1989-06-02,2082.9,2102.7,2080.5,2102.6 1989-06-01,2118.6,2123.1,2094.8,2103.4 1989-05-31,2110.9,2114.8,2107.7,2114.4 1989-05-30,2137.9,2139.7,2127.3,2130.0 1989-05-26,2138.3,2145.7,2137.6,2140.3 1989-05-25,2128.6,2142.0,2126.7,2136.6 1989-05-24,2118.3,2133.7,2118.3,2132.7 1989-05-23,2157.4,2162.5,2151.0,2151.6 1989-05-22,2187.7,2209.7,2163.6,2169.0 1989-05-19,2189.8,2204.7,2180.5,2204.7 1989-05-18,2159.3,2179.5,2158.6,2177.3 1989-05-17,2144.9,2166.3,2142.2,2155.8 1989-05-16,2143.1,2147.7,2136.0,2136.7 1989-05-15,2149.9,2153.6,2145.2,2149.9 1989-05-12,2120.6,2136.9,2114.0,2135.7 1989-05-11,2109.2,2118.3,2107.1,2110.6 1989-05-10,2121.0,2123.1,2112.1,2117.0 1989-05-09,2128.4,2134.4,2124.3,2125.4 1989-05-08,2130.4,2132.5,2119.6,2119.6 1989-05-05,2117.7,2132.8,2117.3,2132.8 1989-05-04,2118.1,2126.3,2116.3,2119.0 1989-05-03,2099.0,2105.7,2093.5,2105.7 1989-05-02,2109.5,2110.1,2103.1,2103.1 1989-04-28,2129.4,2134.9,2116.2,2118.0 1989-04-27,2098.3,2119.8,2094.0,2115.7 1989-04-26,2080.0,2101.9,2072.2,2093.4 1989-04-25,2065.2,2076.3,2062.6,2071.2 1989-04-24,2071.1,2071.5,2061.8,2062.0 1989-04-21,2060.5,2061.0,2050.7,2061.0 1989-04-20,2093.1,2093.1,2053.5,2064.4 1989-04-19,2092.5,2096.8,2081.4,2087.0 1989-04-18,2057.0,2078.0,2055.4,2074.4 1989-04-17,2059.5,2065.3,2051.4,2054.7 1989-04-14,2028.5,2054.2,2028.5,2053.6 1989-04-13,2022.6,2028.7,2022.6,2028.7 1989-04-12,2042.8,2042.8,2033.0,2033.0 1989-04-11,2005.2,2031.3,2005.2,2031.3 1989-04-10,2043.2,2043.2,2017.3,2025.0 1989-04-07,2029.0,2045.7,2029.0,2045.7 1989-04-06,2069.0,2069.0,2052.5,2052.5 1989-04-05,2075.0,2078.2,2075.0,2078.2 1989-04-04,2092.5,2092.5,2082.8,2082.8 1989-04-03,2074.1,2079.6,2074.1,2079.6 1989-03-31,2061.8,2075.1,2055.4,2075.0 1989-03-30,2069.4,2070.6,2047.8,2049.4 1989-03-29,2066.7,2073.8,2056.6,2071.7 1989-03-28,2072.8,2075.5,2069.2,2070.5 1989-03-23,2039.7,2057.3,2032.0,2057.0 1989-03-22,2066.2,2073.1,2048.2,2048.6 1989-03-21,2058.9,2074.6,2053.4,2072.2 1989-03-20,2061.6,2075.0,2051.2,2053.6 1989-03-17,2093.0,2105.3,2063.6,2073.1 1989-03-16,2125.0,2132.5,2110.3,2112.6 1989-03-15,2111.9,2124.6,2109.0,2121.2 1989-03-14,2120.9,2132.3,2107.9,2125.7 1989-03-13,2083.0,2103.0,2083.0,2103.0 1989-03-10,2087.7,2090.4,2079.3,2085.2 1989-03-09,2074.2,2077.7,2069.2,2075.9 1989-03-08,2091.5,2092.1,2081.4,2083.3 1989-03-07,2091.3,2099.8,2082.2,2083.5 1989-03-06,2076.7,2077.0,2065.6,2072.8 1989-03-03,2057.7,2065.6,2051.8,2059.2 1989-03-02,2024.9,2039.8,2017.6,2039.7 1989-03-01,2017.9,2028.0,2014.3,2021.3 1989-02-28,2001.8,2002.4,1997.3,2002.4 1989-02-27,1984.8,1997.0,1983.3,1996.7 1989-02-24,2028.9,2031.5,2019.2,2019.5 1989-02-23,2021.5,2028.8,2016.6,2016.6 1989-02-22,2049.0,2056.6,2033.7,2033.7 1989-02-21,2075.3,2076.3,2058.9,2061.0 1989-02-20,2051.1,2068.8,2045.4,2065.8 1989-02-17,2025.9,2042.9,2019.3,2042.9 1989-02-16,2040.5,2040.5,2030.5,2033.8 1989-02-15,2050.5,2055.5,2040.4,2047.5 1989-02-14,2032.4,2053.8,2032.4,2049.1 1989-02-13,2032.9,2032.9,2023.5,2032.7 1989-02-10,2055.8,2058.7,2045.9,2056.1 1989-02-09,2084.4,2097.0,2076.5,2079.1 1989-02-08,2097.1,2106.1,2088.9,2096.2 1989-02-07,2041.1,2072.8,2040.5,2072.8 1989-02-06,2067.2,2067.2,2044.3,2044.3 1989-02-03,2061.8,2076.9,2061.8,2069.9 1989-02-02,2041.0,2046.1,2038.2,2043.5 1989-02-01,2042.5,2042.5,2037.9,2039.7 1989-01-31,2057.9,2059.4,2052.1,2052.1 1989-01-30,2028.7,2072.7,2015.3,2042.9 1989-01-27,1973.0,2017.4,1965.3,2005.9 1989-01-26,1946.1,1961.0,1938.8,1959.8 1989-01-25,1962.1,1967.1,1937.0,1939.0 1989-01-24,1930.1,1941.1,1929.1,1941.1 1989-01-23,1923.2,1938.6,1917.5,1924.7 1989-01-20,1904.4,1917.9,1903.9,1917.5 1989-01-19,1906.5,1920.2,1904.5,1910.8 1989-01-18,1878.1,1892.1,1871.7,1892.1 1989-01-17,1869.7,1871.2,1866.9,1867.7 1989-01-16,1874.5,1877.1,1866.6,1871.8 1989-01-13,1862.0,1863.2,1853.5,1862.1 1989-01-12,1839.7,1850.9,1834.6,1850.9 1989-01-11,1832.6,1835.2,1830.4,1834.1 1989-01-10,1833.2,1837.6,1828.6,1836.0 1989-01-09,1834.7,1836.0,1826.5,1831.5 1989-01-06,1799.8,1811.4,1797.6,1811.3 1989-01-05,1798.3,1803.2,1797.6,1799.5 1989-01-04,1786.7,1793.2,1785.3,1793.0 1989-01-03,1783.9,1790.7,1782.4,1782.8 1988-12-30,1798.2,1798.2,1788.3,1793.1 1988-12-29,1793.5,1804.9,1793.0,1803.4 1988-12-28,1779.2,1787.7,1774.3,1787.7 1988-12-23,1768.7,1774.0,1767.9,1774.0 1988-12-22,1773.6,1774.3,1768.7,1768.7 1988-12-21,1776.8,1776.9,1771.8,1772.6 1988-12-20,1772.1,1781.5,1772.1,1777.4 1988-12-19,1778.0,1779.0,1770.5,1770.5 1988-12-16,1771.5,1775.0,1769.9,1773.9 1988-12-15,1756.4,1764.4,1749.5,1763.2 1988-12-14,1749.8,1756.4,1741.7,1756.1 1988-12-13,1759.6,1759.6,1748.1,1752.6 1988-12-12,1742.7,1748.2,1738.1,1747.9 1988-12-09,1757.4,1761.5,1737.9,1750.7 1988-12-08,1762.7,1762.7,1753.5,1757.9 1988-12-07,1773.4,1773.4,1769.2,1771.7 1988-12-06,1762.0,1770.2,1762.0,1767.4 1988-12-05,1762.0,1762.0,1749.4,1761.6 1988-12-02,1771.6,1776.5,1756.4,1765.0 1988-12-01,1785.7,1785.7,1772.0,1778.7 1988-11-30,1795.6,1801.3,1792.4,1792.4 1988-11-29,1792.2,1793.5,1785.0,1786.9 1988-11-28,1791.9,1792.1,1775.0,1781.5 1988-11-25,1830.7,1836.4,1782.5,1794.7 1988-11-24,1837.0,1837.7,1827.8,1833.0 1988-11-23,1831.6,1838.5,1830.3,1837.1 1988-11-22,1816.7,1821.3,1813.3,1821.3 1988-11-21,1821.3,1824.3,1811.1,1811.1 1988-11-18,1827.8,1828.1,1819.3,1823.4 1988-11-17,1808.6,1824.1,1802.2,1823.6 1988-11-16,1810.9,1824.4,1806.0,1807.3 1988-11-15,1798.7,1805.1,1798.5,1802.3 1988-11-14,1787.4,1800.9,1776.5,1794.3 1988-11-11,1823.4,1828.3,1802.4,1802.7 1988-11-10,1823.8,1827.8,1822.3,1826.2 1988-11-09,1827.7,1832.0,1820.1,1825.7 1988-11-08,1834.0,1841.3,1827.2,1840.6 1988-11-07,1824.1,1827.3,1818.3,1819.7 1988-11-04,1842.1,1842.2,1829.2,1834.3 1988-11-03,1832.4,1838.7,1829.7,1837.6 1988-11-02,1851.1,1851.5,1836.1,1843.2 1988-11-01,1856.1,1860.0,1853.1,1857.8 1988-10-31,1860.6,1860.8,1846.6,1852.4 1988-10-28,1856.1,1859.6,1852.1,1858.4 1988-10-27,1846.3,1864.7,1845.1,1852.1 1988-10-26,1857.9,1858.3,1849.8,1850.7 1988-10-25,1843.1,1849.6,1840.0,1847.8 1988-10-24,1849.7,1856.5,1848.2,1848.4 1988-10-21,1866.2,1870.8,1858.8,1859.3 1988-10-20,1860.8,1864.3,1853.1,1864.3 1988-10-19,1861.0,1867.8,1859.4,1862.5 1988-10-18,1862.1,1862.1,1857.0,1857.0 1988-10-17,1859.6,1866.6,1856.7,1860.0 1988-10-14,1835.3,1841.2,1827.1,1840.6 1988-10-13,1822.3,1831.1,1817.2,1830.7 1988-10-12,1829.1,1829.1,1814.3,1814.3 1988-10-11,1841.1,1841.1,1838.3,1838.3 1988-10-10,1847.7,1847.7,1844.1,1844.1 1988-10-07,1837.5,1845.7,1832.8,1844.7 1988-10-06,1829.1,1838.9,1829.1,1838.9 1988-10-05,1820.0,1826.3,1820.0,1826.3 1988-10-04,1788.4,1807.3,1788.4,1807.3 1988-10-03,1817.4,1817.4,1802.6,1802.6 1988-09-30,1825.2,1830.6,1824.9,1826.5 1988-09-29,1820.6,1829.0,1820.6,1829.0 1988-09-28,1813.4,1816.7,1812.5,1812.5 1988-09-27,1783.0,1810.0,1783.0,1808.0 1988-09-26,1789.7,1793.7,1789.7,1792.7 1988-09-23,1787.3,1792.5,1782.7,1792.4 1988-09-22,1793.3,1793.7,1784.8,1788.7 1988-09-21,1790.1,1797.9,1787.7,1796.8 1988-09-20,1760.5,1772.8,1760.2,1772.1 1988-09-19,1765.5,1769.7,1759.5,1759.9 1988-09-16,1755.6,1769.7,1755.1,1766.7 1988-09-15,1775.7,1775.8,1767.5,1769.3 1988-09-14,1751.4,1770.0,1750.1,1765.1 1988-09-13,1760.7,1761.8,1753.3,1756.3 1988-09-12,1747.4,1747.7,1742.2,1744.6 1988-09-09,1728.1,1742.7,1717.7,1738.4 1988-09-08,1749.6,1751.8,1728.6,1739.8 1988-09-07,1760.0,1767.0,1750.3,1756.1 1988-09-06,1774.7,1775.6,1768.0,1768.0 1988-09-05,1764.6,1767.3,1757.1,1764.5 1988-09-02,1737.5,1746.9,1733.4,1746.9 1988-09-01,1739.5,1743.9,1729.0,1730.5 1988-08-31,1761.4,1761.7,1753.6,1753.6 1988-08-30,1758.2,1758.2,1746.8,1754.8 1988-08-26,1774.4,1783.4,1759.7,1770.7 1988-08-25,1815.4,1820.6,1767.8,1780.2 1988-08-24,1811.9,1820.1,1810.9,1819.2 1988-08-23,1820.5,1821.3,1813.2,1817.9 1988-08-22,1836.5,1840.6,1830.4,1832.3 1988-08-19,1841.7,1846.0,1838.2,1844.3 1988-08-18,1828.6,1833.9,1826.7,1833.9 1988-08-17,1823.2,1832.5,1821.8,1830.9 1988-08-16,1816.8,1825.4,1811.8,1825.3 1988-08-15,1836.8,1837.1,1816.6,1816.8 1988-08-12,1842.4,1846.1,1839.6,1843.4 1988-08-11,1846.2,1846.2,1828.3,1835.2 1988-08-10,1858.1,1859.1,1839.5,1839.9 1988-08-09,1873.2,1873.4,1859.9,1862.6 1988-08-08,1883.3,1885.2,1875.0,1876.0 1988-08-05,1879.7,1881.5,1874.1,1875.9 1988-08-04,1864.9,1870.5,1863.6,1869.7 1988-08-03,1861.0,1866.4,1855.3,1865.1 1988-08-02,1856.6,1858.1,1851.8,1855.5 1988-08-01,1861.7,1866.9,1860.5,1862.2 1988-07-29,1844.8,1853.7,1840.7,1853.6 1988-07-28,1846.1,1846.2,1841.3,1841.3 1988-07-27,1835.2,1841.9,1828.5,1840.8 1988-07-26,1849.2,1849.8,1836.8,1837.7 1988-07-25,1828.8,1838.9,1826.7,1838.5 1988-07-22,1856.1,1857.0,1844.8,1844.8 1988-07-21,1870.6,1873.2,1862.9,1864.4 1988-07-20,1853.9,1867.2,1850.6,1867.2 1988-07-19,1845.0,1850.0,1842.0,1844.8 1988-07-18,1850.6,1852.1,1841.5,1849.3 1988-07-15,1849.6,1862.2,1849.6,1861.5 1988-07-14,1869.8,1875.6,1863.3,1863.3 1988-07-13,1862.6,1871.5,1858.5,1871.3 1988-07-12,1871.2,1874.5,1858.5,1858.5 1988-07-11,1878.0,1883.5,1873.2,1876.8 1988-07-08,1869.7,1878.1,1862.9,1877.2 1988-07-07,1863.1,1867.3,1854.3,1855.5 1988-07-06,1865.5,1870.2,1863.2,1870.0 1988-07-05,1854.5,1855.5,1850.8,1854.8 1988-07-04,1852.1,1852.6,1842.3,1848.0 1988-07-01,1862.1,1862.4,1857.0,1858.2 1988-06-30,1860.2,1864.0,1856.9,1857.6 1988-06-29,1858.0,1863.6,1855.1,1855.1 1988-06-28,1833.8,1856.9,1828.1,1856.9 1988-06-27,1864.3,1864.7,1834.9,1841.5 1988-06-24,1865.3,1875.4,1863.9,1871.3 1988-06-23,1888.2,1892.2,1878.4,1878.9 1988-06-22,1865.0,1879.8,1862.8,1879.3 1988-06-21,1847.5,1860.2,1841.3,1860.1 1988-06-20,1847.8,1850.3,1843.2,1844.0 1988-06-17,1845.4,1854.2,1838.8,1850.1 1988-06-16,1879.3,1879.3,1856.5,1861.9 1988-06-15,1876.9,1884.5,1869.3,1869.3 1988-06-14,1835.4,1866.5,1831.5,1866.2 1988-06-13,1848.1,1848.9,1833.3,1838.8 1988-06-10,1839.7,1849.8,1838.8,1849.8 1988-06-09,1835.5,1841.5,1833.5,1841.5 1988-06-08,1813.3,1828.2,1813.3,1828.2 1988-06-07,1835.0,1839.9,1818.4,1820.2 1988-06-06,1821.4,1832.7,1816.5,1832.7 1988-06-03,1818.6,1822.0,1814.1,1819.2 1988-06-02,1803.1,1813.6,1802.6,1810.3 1988-06-01,1802.5,1806.9,1798.9,1805.7 1988-05-31,1785.3,1785.6,1777.8,1784.4 1988-05-27,1781.3,1786.0,1779.2,1783.7 1988-05-26,1783.0,1788.1,1782.5,1785.3 1988-05-25,1791.4,1796.7,1785.0,1787.9 1988-05-24,1767.5,1783.6,1764.4,1782.9 1988-05-23,1768.7,1771.2,1761.1,1761.3 1988-05-20,1774.4,1774.7,1769.9,1770.2 1988-05-19,1753.7,1764.4,1753.3,1760.6 1988-05-18,1772.5,1781.0,1772.2,1777.6 1988-05-17,1786.0,1800.5,1782.3,1789.2 1988-05-16,1785.8,1789.0,1776.6,1776.6 1988-05-13,1774.7,1782.8,1774.7,1781.8 1988-05-12,1766.2,1772.4,1759.8,1772.3 1988-05-11,1769.5,1786.8,1749.3,1756.8 1988-05-10,1787.2,1792.6,1782.4,1792.6 1988-05-09,1802.7,1804.2,1793.3,1794.9 1988-05-06,1801.7,1801.7,1793.7,1801.1 1988-05-05,1797.1,1797.2,1788.7,1789.5 1988-05-04,1801.5,1809.2,1794.7,1794.7 1988-05-03,1806.2,1809.7,1801.0,1807.2 1988-04-29,1807.7,1810.7,1796.0,1802.2 1988-04-28,1803.4,1809.5,1795.8,1804.4 1988-04-27,1810.4,1813.9,1806.0,1806.7 1988-04-26,1791.5,1801.3,1786.0,1800.8 1988-04-25,1771.2,1777.9,1769.1,1777.6 1988-04-22,1786.1,1786.1,1771.6,1771.6 1988-04-21,1786.8,1792.1,1778.3,1791.9 1988-04-20,1794.2,1794.2,1786.8,1786.8 1988-04-19,1786.6,1798.9,1784.8,1798.9 1988-04-18,1795.9,1802.4,1786.9,1787.8 1988-04-15,1771.0,1782.6,1763.1,1778.6 1988-04-14,1825.8,1826.8,1779.9,1787.2 1988-04-13,1810.5,1816.6,1808.4,1810.4 1988-04-12,1818.7,1820.1,1801.4,1805.3 1988-04-11,1797.2,1810.5,1797.0,1810.5 1988-04-08,1765.3,1781.2,1758.1,1779.7 1988-04-07,1766.0,1767.4,1758.4,1761.0 1988-04-06,1754.3,1759.1,1744.9,1745.0 1988-04-05,1737.0,1737.8,1725.4,1737.6 1988-03-31,1745.7,1747.1,1738.9,1742.5 1988-03-30,1775.2,1775.8,1756.5,1756.9 1988-03-29,1756.3,1767.0,1753.6,1765.1 1988-03-28,1752.0,1756.7,1738.3,1746.5 1988-03-25,1773.4,1780.2,1759.4,1767.9 1988-03-24,1811.2,1827.9,1782.0,1782.7 1988-03-23,1833.6,1834.1,1828.1,1832.2 1988-03-22,1839.5,1843.1,1835.4,1835.4 1988-03-21,1848.9,1853.0,1841.0,1841.1 1988-03-18,1847.9,1855.7,1842.9,1855.5 1988-03-17,1822.0,1828.1,1811.3,1828.1 1988-03-16,1830.7,1841.3,1821.6,1825.7 1988-03-15,1832.1,1847.6,1828.4,1839.9 1988-03-14,1811.6,1820.6,1810.7,1819.5 1988-03-11,1806.0,1834.0,1806.0,1811.6 1988-03-10,1813.6,1834.9,1807.8,1834.6 1988-03-09,1825.9,1826.0,1815.1,1815.3 1988-03-08,1813.8,1821.5,1808.8,1815.0 1988-03-07,1826.4,1833.6,1809.4,1818.2 1988-03-04,1823.8,1846.6,1813.4,1834.5 1988-03-03,1825.3,1826.4,1812.1,1813.3 1988-03-02,1790.7,1808.7,1783.1,1808.7 1988-03-01,1782.1,1784.0,1780.2,1781.9 1988-02-29,1765.1,1770.7,1758.8,1768.8 1988-02-26,1772.1,1781.6,1764.6,1766.5 1988-02-25,1769.3,1782.4,1764.3,1782.4 1988-02-24,1756.4,1761.9,1755.2,1760.1 1988-02-23,1770.2,1772.2,1756.7,1757.9 1988-02-22,1741.2,1749.2,1732.3,1747.2 1988-02-19,1732.4,1733.3,1722.6,1729.8 1988-02-18,1748.8,1749.7,1735.9,1736.1 1988-02-17,1743.0,1750.5,1737.7,1748.1 1988-02-16,1742.5,1743.5,1734.3,1734.6 1988-02-15,1742.6,1742.6,1738.7,1739.2 1988-02-12,1727.8,1734.9,1727.5,1734.0 1988-02-11,1732.5,1737.9,1727.4,1729.8 1988-02-10,1714.3,1718.7,1704.3,1718.5 1988-02-09,1708.8,1711.8,1699.6,1707.2 1988-02-08,1702.6,1709.8,1687.5,1694.5 1988-02-05,1766.1,1766.3,1731.5,1737.8 1988-02-04,1766.9,1769.5,1758.0,1766.9 1988-02-03,1773.6,1775.8,1756.9,1766.3 1988-02-02,1782.2,1784.5,1772.8,1774.4 1988-02-01,1797.4,1807.3,1773.2,1776.9 1988-01-29,1791.1,1793.3,1787.8,1790.8 1988-01-28,1769.9,1783.9,1763.3,1783.9 1988-01-27,1762.9,1766.4,1758.1,1765.2 1988-01-26,1766.5,1773.3,1763.6,1767.3 1988-01-25,1765.2,1767.4,1757.3,1762.2 1988-01-22,1770.7,1777.6,1760.1,1770.9 1988-01-21,1745.6,1754.5,1733.1,1747.2 1988-01-20,1761.0,1767.8,1748.8,1752.8 1988-01-19,1770.2,1779.4,1757.6,1768.0 1988-01-18,1795.4,1806.3,1789.9,1790.0 1988-01-15,1736.0,1793.6,1733.6,1786.7 1988-01-14,1752.4,1752.4,1741.1,1743.4 1988-01-13,1733.9,1737.9,1719.5,1733.4 1988-01-12,1755.9,1769.4,1739.2,1739.2 1988-01-11,1738.6,1763.6,1725.7,1760.2 1988-01-08,1791.4,1798.7,1773.3,1773.4 1988-01-07,1800.0,1802.6,1784.8,1787.2 1988-01-06,1792.8,1810.3,1786.6,1787.1 1988-01-05,1784.8,1798.3,1778.4,1789.6 1988-01-04,1729.8,1747.8,1724.7,1747.5 1987-12-31,1738.7,1750.9,1712.0,1712.7 1987-12-30,1753.0,1760.2,1741.1,1759.8 1987-12-29,1714.8,1730.8,1711.8,1730.3 1987-12-24,1784.7,1792.3,1780.2,1791.1 1987-12-23,1755.9,1771.4,1750.1,1771.4 1987-12-22,1748.9,1757.9,1746.1,1747.4 1987-12-21,1743.6,1755.4,1730.8,1750.2 1987-12-18,1699.7,1717.0,1681.5,1717.0 1987-12-17,1704.8,1715.5,1700.8,1706.2 1987-12-16,1682.7,1698.1,1669.2,1689.8 1987-12-15,1671.8,1681.2,1661.0,1670.0 1987-12-14,1643.9,1652.7,1641.2,1652.6 1987-12-11,1643.0,1653.3,1623.7,1651.6 1987-12-10,1640.1,1657.6,1585.3,1619.6 1987-12-09,1627.0,1639.3,1623.6,1639.3 1987-12-08,1632.1,1640.1,1620.4,1624.4 1987-12-07,1596.3,1602.6,1587.1,1598.4 1987-12-04,1573.8,1611.5,1573.8,1582.8 1987-12-03,1601.2,1611.5,1586.0,1588.4 1987-12-02,1603.4,1607.8,1588.0,1590.3 1987-12-01,1591.5,1592.7,1577.4,1578.5 1987-11-30,1592.4,1606.4,1570.0,1579.9 1987-11-27,1656.1,1656.9,1648.6,1651.6 1987-11-26,1667.6,1668.1,1659.9,1660.7 1987-11-25,1667.4,1676.6,1659.9,1664.1 1987-11-24,1672.1,1694.4,1659.0,1689.1 1987-11-23,1640.2,1663.9,1626.5,1657.7 1987-11-20,1613.8,1633.4,1605.9,1633.4 1987-11-19,1639.1,1650.8,1637.5,1639.1 1987-11-18,1688.7,1692.7,1661.8,1663.7 1987-11-17,1680.6,1690.8,1660.1,1660.1 1987-11-16,1716.6,1734.8,1684.7,1684.7 1987-11-13,1688.8,1702.4,1660.3,1678.3 1987-11-12,1677.1,1723.6,1648.5,1702.5 1987-11-11,1634.9,1640.3,1597.5,1639.3 1987-11-10,1518.6,1573.5,1515.0,1573.5 1987-11-09,1589.4,1590.0,1561.7,1565.2 1987-11-06,1628.0,1647.1,1607.6,1620.8 1987-11-05,1607.7,1642.5,1577.9,1638.8 1987-11-04,1607.5,1620.4,1565.4,1608.1 1987-11-03,1728.4,1737.0,1650.3,1653.9 1987-11-02,1720.6,1737.1,1712.0,1723.7 1987-10-30,1766.4,1773.8,1734.9,1749.8 1987-10-29,1681.6,1693.6,1661.1,1682.0 1987-10-28,1664.5,1682.1,1598.0,1658.4 1987-10-27,1731.3,1735.0,1677.1,1703.3 1987-10-26,1685.2,1693.4,1638.1,1684.1 1987-10-23,1784.3,1821.4,1746.3,1795.2 1987-10-22,1938.2,1959.9,1749.1,1833.2 1987-10-21,1939.1,1983.1,1897.5,1943.8 1987-10-20,1783.2,1985.1,1748.2,1801.6 1987-10-19,2164.1,2165.4,1999.8,2052.3 1987-10-16,2177.1,2177.1,2177.1,2177.1 1987-10-15,2303.1,2308.6,2287.0,2301.9 1987-10-14,2350.5,2352.6,2322.7,2322.9 1987-10-13,2347.2,2353.4,2344.0,2350.2 1987-10-12,2356.0,2363.8,2337.9,2338.5 1987-10-09,2369.8,2371.1,2352.5,2366.5 1987-10-08,2381.4,2387.9,2375.0,2375.5 1987-10-07,2347.1,2359.8,2346.7,2359.8 1987-10-06,2381.2,2389.4,2367.8,2367.8 1987-10-05,2391.4,2399.9,2386.0,2386.0 1987-10-02,2381.9,2383.7,2377.1,2382.2 1987-10-01,2372.1,2385.1,2372.1,2373.8 1987-09-30,2366.7,2369.3,2361.6,2366.0 1987-09-29,2373.3,2376.0,2367.3,2368.3 1987-09-28,2351.8,2369.6,2348.4,2368.0 1987-09-25,2321.1,2342.6,2319.2,2342.6 1987-09-24,2344.7,2347.4,2303.2,2313.4 1987-09-23,2356.2,2356.9,2347.4,2352.1 1987-09-22,2328.6,2336.3,2320.9,2336.3 1987-09-21,2333.4,2334.6,2328.2,2334.0 1987-09-18,2317.4,2333.8,2317.4,2328.3 1987-09-17,2293.3,2304.5,2293.3,2304.5 1987-09-16,2261.8,2279.8,2261.8,2279.8 1987-09-15,2267.9,2270.2,2263.0,2267.4 1987-09-14,2264.4,2278.6,2264.1,2271.8 1987-09-11,2255.3,2261.2,2242.2,2261.2 1987-09-10,2253.7,2259.7,2251.1,2253.2 1987-09-09,2275.0,2275.0,2247.4,2249.1 1987-09-08,2288.5,2295.2,2275.0,2275.0 1987-09-07,2272.6,2283.5,2267.5,2283.5 1987-09-04,2276.8,2285.4,2273.4,2274.9 1987-09-03,2260.0,2275.2,2260.0,2268.1 1987-09-02,2274.4,2276.4,2249.1,2249.5 1987-09-01,2261.6,2272.8,2238.6,2272.8 1987-08-28,2251.2,2259.7,2249.7,2249.7 1987-08-27,2244.5,2255.5,2236.8,2245.8 1987-08-26,2258.0,2259.0,2240.3,2249.6 1987-08-25,2220.9,2251.8,2220.8,2248.2 1987-08-24,2220.7,2236.5,2219.8,2225.1 1987-08-21,2196.1,2206.7,2186.1,2205.8 1987-08-20,2216.3,2231.4,2157.2,2185.2 1987-08-19,2202.7,2209.7,2175.4,2197.6 1987-08-18,2248.6,2250.0,2224.3,2224.8 1987-08-17,2290.8,2291.6,2259.3,2259.6 1987-08-14,2302.6,2307.3,2289.0,2295.4 1987-08-13,2284.4,2290.3,2268.1,2290.1 1987-08-12,2275.9,2301.0,2275.9,2286.1 1987-08-11,2262.4,2276.1,2256.4,2275.4 1987-08-10,2203.5,2242.2,2203.5,2242.2 1987-08-07,2232.3,2233.2,2196.4,2226.2 1987-08-06,2328.8,2333.6,2246.8,2261.5 1987-08-05,2317.4,2317.4,2317.4,2317.4 1987-08-04,2305.8,2320.2,2294.0,2307.8 1987-08-03,2356.1,2356.2,2323.9,2334.3 1987-07-31,2357.6,2360.9,2343.8,2360.9 1987-07-30,2393.4,2398.6,2368.3,2370.5 1987-07-29,2364.3,2384.4,2364.3,2383.1 1987-07-28,2346.7,2363.2,2346.4,2359.9 1987-07-27,2321.8,2333.9,2315.7,2333.9 1987-07-24,2350.3,2353.3,2344.2,2346.9 1987-07-23,2346.8,2346.8,2317.7,2340.2 1987-07-22,2393.8,2400.4,2344.5,2344.5 1987-07-21,2378.6,2392.1,2366.7,2390.5 1987-07-20,2410.3,2410.4,2390.8,2400.7 1987-07-17,2440.3,2440.9,2419.4,2428.7 1987-07-16,2427.5,2455.2,2427.5,2443.4 1987-07-15,2417.6,2424.5,2407.0,2418.7 1987-07-14,2375.0,2403.0,2369.8,2403.0 1987-07-13,2387.6,2402.8,2386.6,2386.6 1987-07-10,2369.4,2383.6,2369.3,2381.9 1987-07-09,2364.5,2374.6,2358.4,2371.0 1987-07-08,2370.5,2375.9,2352.5,2356.9 1987-07-07,2346.5,2374.6,2346.5,2365.4 1987-07-06,2338.6,2360.5,2338.6,2352.0 1987-07-03,2312.7,2330.7,2312.7,2328.1 1987-07-02,2279.2,2300.3,2276.0,2297.4 1987-07-01,2272.6,2273.4,2265.5,2269.8 1987-06-30,2290.6,2294.3,2279.5,2284.1 1987-06-29,2292.7,2295.3,2283.5,2289.3 1987-06-26,2286.1,2295.9,2278.8,2291.3 1987-06-25,2281.8,2282.9,2264.8,2277.2 1987-06-24,2276.8,2292.4,2276.7,2284.1 1987-06-23,2235.5,2266.8,2234.6,2265.4 1987-06-22,2261.6,2272.6,2244.7,2244.7 1987-06-19,2276.8,2284.0,2254.4,2266.1 1987-06-18,2318.0,2319.0,2275.2,2293.2 1987-06-17,2317.5,2327.6,2316.3,2320.4 1987-06-16,2291.3,2309.3,2282.3,2309.0 1987-06-15,2301.2,2310.6,2293.5,2307.6 1987-06-12,2293.7,2296.4,2257.2,2289.5 1987-06-11,2267.6,2280.8,2249.3,2249.3 1987-06-10,2266.6,2266.8,2248.9,2256.1 1987-06-09,2244.4,2269.9,2243.9,2265.2 1987-06-08,2230.4,2230.4,2214.4,2228.4 1987-06-05,2233.6,2234.0,2221.6,2228.7 1987-06-04,2233.3,2239.3,2202.2,2214.2 1987-06-03,2204.7,2236.2,2200.9,2235.4 1987-06-02,2230.9,2248.8,2214.5,2219.6 1987-06-01,2210.0,2238.2,2209.7,2228.2 1987-05-29,2177.5,2206.3,2177.5,2203.0 1987-05-28,2150.4,2164.4,2146.1,2157.4 1987-05-27,2155.3,2158.1,2140.2,2145.7 1987-05-26,2169.3,2169.3,2143.4,2153.4 1987-05-22,2166.7,2175.6,2163.9,2167.2 1987-05-21,2180.5,2180.6,2153.2,2153.7 1987-05-20,2190.8,2191.4,2170.0,2174.0 1987-05-19,2197.5,2216.6,2197.5,2214.3 1987-05-18,2179.4,2195.9,2173.4,2192.1 1987-05-15,2187.6,2202.4,2182.9,2189.7 1987-05-14,2166.4,2185.4,2163.2,2180.0 1987-05-13,2164.3,2168.9,2161.5,2163.4 1987-05-12,2142.7,2145.6,2132.4,2143.3 1987-05-11,2156.4,2183.9,2156.2,2163.3 1987-05-08,2098.5,2136.3,2098.5,2126.5 1987-05-07,2082.8,2103.0,2077.5,2077.9 1987-05-06,2076.3,2096.6,2075.5,2086.5 1987-05-05,2073.8,2073.9,2058.8,2065.1 1987-05-01,2064.4,2074.9,2061.7,2068.5 1987-04-30,2036.0,2050.9,2035.5,2050.5 1987-04-29,2028.4,2040.4,2028.4,2038.6 1987-04-28,1997.3,2025.7,1997.3,2022.1 1987-04-27,1994.9,2002.3,1979.8,1986.6 1987-04-24,1982.3,2005.1,1982.3,2001.4 1987-04-23,1948.6,1968.6,1948.1,1968.3 1987-04-22,1956.7,1961.9,1950.4,1955.7 1987-04-21,1950.8,1951.7,1931.7,1940.2 1987-04-16,1932.1,1949.4,1932.1,1949.3 1987-04-15,1926.0,1940.7,1922.2,1922.2 1987-04-14,1907.4,1927.6,1903.3,1908.9 1987-04-13,1925.2,1925.2,1914.5,1917.1 1987-04-10,1958.7,1960.5,1921.0,1936.7 1987-04-09,1977.0,1994.0,1963.2,1963.2 1987-04-08,1969.4,1980.7,1961.2,1976.7 1987-04-07,1987.4,1987.9,1977.2,1987.2 1987-04-06,1983.1,1994.4,1982.9,1989.6 1987-04-03,1975.9,1982.6,1951.2,1964.6 1987-04-02,1986.8,1992.6,1983.5,1988.0 1987-04-01,1997.1,1999.7,1961.7,1973.5 1987-03-31,1994.6,2005.3,1981.5,1997.5 1987-03-30,2042.7,2046.1,1993.7,2002.5 1987-03-27,2040.4,2060.3,2040.4,2048.7 1987-03-26,2021.2,2045.7,2021.2,2037.8 1987-03-25,2051.7,2058.2,2034.6,2042.7 1987-03-24,2049.5,2064.5,2049.5,2056.2 1987-03-23,2011.6,2033.2,2008.6,2033.0 1987-03-20,2002.1,2017.8,2002.0,2017.6 1987-03-19,1989.1,2000.6,1985.8,1991.0 1987-03-18,2017.0,2019.0,2004.1,2006.6 1987-03-17,1991.5,2021.0,1991.5,2006.3 1987-03-16,1998.9,1999.4,1989.8,1991.4 1987-03-13,1997.4,2004.3,1995.7,2000.0 1987-03-12,1973.7,1989.6,1973.7,1989.4 1987-03-11,1995.3,1995.3,1977.6,1979.5 1987-03-10,1968.5,1987.9,1965.7,1987.9 1987-03-09,1989.2,1991.0,1968.4,1973.7 1987-03-06,1993.8,1998.7,1987.9,1998.4 1987-03-05,2013.2,2013.5,1998.5,2002.7 1987-03-04,2015.9,2021.5,2001.8,2002.7 1987-03-03,1973.9,1998.3,1967.7,1998.3 1987-03-02,1986.6,1998.1,1981.3,1983.4 1987-02-27,1976.7,1985.8,1967.0,1979.2 1987-02-26,1982.9,1995.3,1963.4,1980.0 1987-02-25,1958.7,1973.1,1954.4,1972.8 1987-02-24,1928.7,1946.9,1924.5,1946.8 1987-02-23,1958.1,1958.5,1932.9,1939.6 1987-02-20,1944.7,1963.2,1940.8,1960.4 1987-02-19,1951.2,1956.1,1917.1,1930.0 1987-02-18,1965.7,1977.4,1952.0,1952.0 1987-02-17,1936.0,1943.6,1927.2,1941.9 1987-02-16,1910.5,1927.3,1909.6,1925.7 1987-02-13,1871.6,1898.4,1871.6,1898.2 1987-02-12,1907.6,1907.6,1876.4,1879.2 1987-02-11,1881.5,1904.1,1879.8,1896.1 1987-02-10,1894.3,1902.1,1874.3,1875.0 1987-02-09,1909.1,1925.2,1903.9,1910.6 1987-02-06,1874.5,1898.4,1874.5,1898.2 1987-02-05,1857.5,1866.1,1852.1,1866.1 1987-02-04,1822.6,1846.5,1822.6,1846.5 1987-02-03,1822.8,1834.2,1822.5,1828.6 1987-02-02,1821.6,1835.0,1821.6,1832.8 1987-01-30,1797.7,1814.0,1797.4,1808.2 1987-01-29,1813.1,1817.0,1795.4,1798.0 1987-01-28,1811.3,1815.8,1806.4,1812.0 1987-01-27,1791.4,1814.2,1791.4,1814.2 1987-01-26,1783.1,1786.1,1775.1,1781.3 1987-01-23,1783.4,1794.8,1780.3,1794.8 1987-01-22,1756.7,1781.7,1756.6,1776.5 1987-01-21,1762.4,1768.9,1753.0,1761.7 1987-01-20,1787.3,1789.2,1777.5,1778.8 1987-01-19,1787.4,1788.4,1775.5,1778.3 1987-01-16,1796.5,1806.9,1782.1,1789.1 1987-01-15,1774.0,1789.6,1769.5,1789.5 1987-01-14,1749.1,1765.2,1746.3,1765.2 1987-01-13,1762.2,1774.4,1762.2,1763.3 1987-01-12,1760.8,1760.8,1750.5,1755.2 1987-01-09,1740.1,1752.2,1737.3,1752.0 1987-01-08,1733.8,1745.8,1732.3,1733.2 1987-01-07,1692.8,1722.0,1692.8,1722.0 1987-01-06,1685.9,1690.8,1676.5,1690.7 1987-01-05,1683.2,1683.2,1676.0,1679.9 1987-01-02,1677.6,1681.2,1674.5,1681.1 1986-12-31,1671.9,1679.2,1671.6,1679.0 1986-12-30,1668.0,1676.9,1668.0,1673.1 1986-12-29,1672.9,1673.1,1663.7,1671.6 1986-12-24,1661.0,1665.4,1661.0,1665.1 1986-12-23,1651.2,1661.1,1651.2,1660.9 1986-12-22,1640.3,1652.2,1640.0,1652.2 1986-12-19,1627.0,1632.0,1624.3,1632.0 1986-12-18,1631.6,1635.6,1623.6,1630.4 1986-12-17,1639.4,1639.5,1634.3,1635.9 1986-12-16,1635.1,1638.5,1630.8,1637.9 1986-12-15,1634.1,1641.3,1634.1,1636.7 1986-12-12,1637.7,1637.8,1628.4,1629.4 1986-12-11,1639.0,1641.0,1633.0,1633.8 1986-12-10,1633.1,1634.5,1630.4,1634.5 1986-12-09,1629.1,1636.5,1629.1,1635.9 1986-12-08,1613.7,1626.7,1613.7,1623.3 1986-12-05,1609.3,1613.8,1608.5,1613.5 1986-12-04,1609.9,1614.2,1607.8,1610.4 1986-12-03,1627.2,1627.2,1608.9,1615.0 1986-12-02,1620.8,1634.0,1620.7,1625.7 1986-12-01,1637.8,1637.9,1615.4,1617.1 1986-11-28,1632.6,1636.7,1629.5,1636.6 1986-11-27,1637.5,1637.8,1629.7,1632.5 1986-11-26,1619.7,1633.5,1618.8,1632.1 1986-11-25,1629.7,1629.7,1619.0,1619.4 1986-11-24,1635.3,1636.6,1627.5,1636.4 1986-11-21,1615.2,1627.3,1609.4,1624.9 1986-11-20,1614.3,1615.8,1604.5,1610.2 1986-11-19,1604.8,1610.4,1596.2,1604.3 1986-11-18,1628.8,1629.3,1617.4,1617.4 1986-11-17,1632.9,1632.9,1615.9,1628.3 1986-11-14,1637.6,1644.3,1637.6,1643.9 1986-11-13,1642.6,1644.7,1634.7,1644.3 1986-11-12,1663.8,1667.2,1654.2,1654.3 1986-11-11,1655.5,1660.5,1652.7,1660.5 1986-11-10,1664.4,1664.4,1649.0,1656.2 1986-11-07,1656.0,1663.2,1655.2,1662.7 1986-11-06,1655.5,1656.3,1646.6,1648.3 1986-11-05,1628.9,1644.5,1628.9,1644.2 1986-11-04,1635.9,1646.1,1628.9,1637.4 1986-11-03,1639.2,1639.2,1639.2,1639.2 1986-10-31,1629.6,1632.2,1623.0,1632.2 1986-10-30,1596.9,1617.2,1596.9,1615.6 1986-10-29,1589.1,1598.6,1589.1,1596.9 1986-10-28,1586.3,1588.2,1578.7,1583.6 1986-10-27,1583.3,1595.1,1568.5,1586.2 1986-10-24,1574.6,1579.6,1574.6,1577.1 1986-10-23,1586.7,1586.7,1572.5,1572.5 1986-10-22,1593.6,1599.2,1589.6,1589.6 1986-10-21,1586.6,1593.3,1585.3,1591.2 1986-10-20,1613.9,1615.2,1589.7,1590.2 1986-10-17,1604.4,1611.6,1601.9,1610.0 1986-10-16,1611.9,1615.1,1602.9,1605.0 1986-10-15,1589.2,1607.5,1588.6,1607.5 1986-10-14,1613.4,1614.8,1592.0,1592.5 1986-10-13,1597.6,1612.3,1597.4,1612.3 1986-10-10,1605.3,1605.3,1595.5,1599.4 1986-10-09,1591.3,1612.2,1591.0,1608.6 1986-10-08,1589.5,1589.6,1581.6,1587.8 1986-10-07,1579.6,1596.9,1579.1,1592.3 1986-10-06,1563.2,1578.9,1563.2,1578.9 1986-10-03,1566.9,1566.9,1559.0,1560.8 1986-10-02,1578.9,1579.2,1568.5,1573.1 1986-10-01,1561.0,1578.3,1560.9,1578.3 1986-09-30,1542.3,1561.9,1541.8,1555.8 1986-09-29,1562.4,1562.4,1539.2,1539.2 1986-09-26,1564.7,1568.6,1552.7,1568.6 1986-09-25,1601.5,1601.7,1575.9,1575.9 1986-09-24,1607.6,1608.5,1603.4,1603.4 1986-09-23,1626.2,1626.2,1610.0,1610.0 1986-09-22,1602.3,1617.1,1602.2,1617.1 1986-09-19,1599.6,1602.3,1595.7,1600.4 1986-09-18,1611.8,1624.9,1611.8,1614.2 1986-09-17,1609.0,1612.1,1597.9,1610.4 1986-09-16,1625.5,1625.5,1591.4,1596.7 1986-09-15,1611.6,1630.4,1611.6,1628.3 1986-09-12,1613.2,1624.3,1592.5,1608.6 1986-09-11,1656.4,1662.4,1636.5,1636.5 1986-09-10,1675.1,1680.2,1662.8,1663.5 1986-09-09,1661.1,1676.2,1660.8,1673.4 1986-09-08,1680.7,1680.9,1666.3,1666.6 1986-09-05,1693.4,1694.3,1683.4,1684.8 1986-09-04,1675.6,1682.2,1675.6,1680.3 1986-09-03,1661.2,1671.3,1661.1,1670.7 1986-09-02,1674.9,1677.9,1663.6,1667.8 1986-09-01,1655.3,1675.1,1654.6,1672.8 1986-08-29,1638.5,1662.0,1637.3,1661.2 1986-08-28,1631.8,1637.6,1631.8,1636.8 1986-08-27,1628.3,1629.8,1621.9,1629.8 1986-08-26,1606.4,1616.2,1606.4,1616.2 1986-08-22,1603.1,1607.1,1598.4,1607.1 1986-08-21,1615.5,1619.0,1606.8,1606.8 1986-08-20,1597.5,1604.6,1595.0,1604.6 1986-08-19,1609.9,1610.2,1603.2,1604.4 1986-08-18,1609.0,1609.0,1609.0,1609.0 1986-08-15,1588.4,1602.4,1588.4,1601.9 1986-08-14,1581.9,1588.3,1574.1,1588.2 1986-08-13,1566.7,1581.0,1566.7,1581.0 1986-08-12,1554.3,1559.4,1554.2,1558.2 1986-08-11,1520.8,1542.8,1519.8,1542.8 1986-08-08,1534.2,1534.5,1519.7,1526.7 1986-08-07,1537.4,1537.4,1519.2,1529.9 1986-08-06,1557.4,1557.4,1539.2,1540.4 1986-08-05,1555.6,1564.5,1555.6,1561.6 1986-08-04,1563.9,1563.9,1545.4,1545.4 1986-08-01,1555.0,1561.8,1554.9,1561.8 1986-07-31,1566.9,1567.2,1548.3,1558.1 1986-07-30,1558.7,1570.8,1558.7,1566.3 1986-07-29,1539.2,1556.4,1536.8,1556.4 1986-07-28,1544.4,1549.4,1543.5,1549.4 1986-07-25,1545.7,1547.8,1539.8,1545.8 1986-07-24,1568.3,1568.6,1547.7,1547.7 1986-07-23,1566.1,1574.0,1566.1,1572.3 1986-07-22,1563.7,1566.3,1556.7,1559.2 1986-07-21,1576.9,1576.9,1559.0,1560.2 1986-07-18,1607.3,1608.0,1584.4,1584.4 1986-07-17,1600.0,1609.4,1600.0,1609.3 1986-07-16,1588.6,1597.5,1588.5,1597.3 1986-07-15,1585.8,1595.4,1585.4,1593.0 1986-07-14,1621.7,1621.9,1597.3,1597.3 1986-07-11,1625.7,1628.2,1623.9,1626.4 1986-07-10,1621.4,1632.0,1621.4,1626.7 1986-07-09,1600.9,1614.9,1600.8,1614.6 1986-07-08,1611.9,1615.2,1597.5,1599.0 1986-07-07,1645.6,1645.7,1631.0,1631.0 1986-07-04,1653.9,1653.9,1647.8,1649.4 1986-07-03,1658.3,1660.3,1653.7,1656.2 1986-07-02,1659.4,1661.9,1656.2,1656.7 1986-07-01,1652.5,1663.6,1652.5,1660.8 1986-06-30,1637.3,1649.8,1637.2,1649.8 1986-06-27,1635.3,1639.1,1633.5,1639.1 1986-06-26,1630.2,1637.9,1630.2,1637.5 1986-06-25,1630.0,1633.4,1629.0,1629.4 1986-06-24,1620.3,1625.1,1620.1,1624.9 1986-06-23,1639.2,1640.3,1622.6,1622.8 1986-06-20,1629.6,1637.3,1629.5,1637.2 1986-06-19,1626.7,1631.3,1626.7,1629.6 1986-06-18,1606.8,1619.3,1606.3,1619.0 1986-06-17,1596.1,1605.7,1595.0,1605.3 1986-06-16,1590.2,1595.4,1586.9,1593.6 1986-06-13,1572.6,1582.4,1572.6,1582.4 1986-06-12,1578.1,1581.7,1571.6,1571.8 1986-06-11,1585.7,1585.7,1563.2,1571.4 1986-06-10,1584.5,1595.8,1582.5,1586.4 1986-06-09,1614.0,1614.0,1604.6,1604.6 1986-06-06,1617.3,1617.3,1605.6,1611.9 1986-06-05,1599.8,1612.6,1599.8,1612.6 1986-06-04,1599.0,1602.2,1597.9,1601.4 1986-06-03,1599.2,1607.3,1599.2,1602.2 1986-06-02,1604.4,1604.4,1594.0,1596.5 1986-05-30,1608.6,1611.0,1598.2,1602.8 1986-05-29,1622.1,1622.8,1606.7,1609.0 1986-05-28,1616.8,1626.4,1616.8,1624.8 1986-05-27,1615.5,1616.3,1607.1,1612.1 1986-05-23,1612.1,1617.4,1606.8,1617.4 1986-05-22,1589.5,1601.4,1589.0,1598.8 1986-05-21,1594.2,1594.8,1585.9,1591.9 1986-05-20,1579.8,1585.7,1579.8,1585.7 1986-05-19,1568.7,1573.1,1566.3,1573.1 1986-05-16,1558.2,1565.7,1554.0,1564.9 1986-05-15,1598.6,1600.2,1575.1,1575.7 1986-05-14,1605.2,1606.9,1592.7,1594.3 1986-05-13,1612.5,1626.2,1612.5,1623.3 1986-05-12,1603.0,1605.8,1602.3,1603.8 1986-05-09,1604.0,1605.9,1593.0,1601.6 1986-05-08,1609.7,1613.0,1588.8,1602.6 1986-05-07,1634.8,1634.8,1610.1,1610.1 1986-05-06,1657.1,1657.7,1636.1,1636.2 1986-05-02,1645.7,1652.5,1645.7,1652.5 1986-05-01,1631.6,1645.4,1628.1,1640.1 1986-04-30,1652.5,1664.4,1652.2,1660.5 1986-04-29,1635.2,1656.3,1635.0,1656.3 1986-04-28,1620.2,1629.5,1619.7,1628.8 1986-04-25,1629.7,1631.7,1611.8,1622.6 1986-04-24,1633.1,1635.1,1603.7,1615.5 1986-04-23,1647.8,1649.7,1632.7,1632.7 1986-04-22,1673.9,1674.1,1659.6,1665.2 1986-04-21,1680.7,1681.1,1667.6,1668.0 1986-04-18,1677.9,1681.0,1674.6,1680.2 1986-04-17,1679.0,1683.5,1675.1,1680.9 1986-04-16,1668.1,1670.1,1648.0,1662.0 1986-04-15,1655.5,1663.4,1651.7,1654.8 1986-04-14,1688.4,1690.6,1678.6,1683.1 1986-04-11,1698.7,1699.5,1685.5,1694.1 1986-04-10,1668.5,1690.9,1668.0,1690.3 1986-04-09,1682.8,1683.5,1657.1,1659.0 1986-04-08,1699.3,1701.8,1671.5,1675.7 1986-04-07,1702.9,1703.5,1685.0,1688.5 1986-04-04,1702.7,1713.2,1701.4,1709.7 1986-04-03,1716.7,1721.7,1713.5,1717.6 1986-04-02,1675.3,1704.7,1674.1,1702.9 1986-04-01,1671.3,1684.2,1671.1,1684.0 1986-03-27,1666.8,1669.0,1659.0,1668.8 1986-03-26,1652.3,1655.2,1647.6,1653.9 1986-03-25,1654.6,1654.6,1632.4,1633.8 1986-03-24,1680.9,1680.9,1662.0,1663.9 1986-03-21,1689.8,1690.1,1683.1,1688.3 1986-03-20,1675.8,1690.1,1670.3,1690.1 1986-03-19,1660.3,1661.4,1653.9,1659.8 1986-03-18,1617.2,1644.4,1616.2,1644.4 1986-03-17,1634.8,1635.2,1622.6,1622.6 1986-03-14,1617.9,1624.5,1617.6,1624.4 1986-03-13,1620.0,1623.9,1610.9,1616.7 1986-03-12,1628.1,1630.7,1616.5,1624.5 1986-03-11,1577.1,1597.2,1577.0,1597.1 1986-03-10,1574.9,1577.0,1568.1,1572.2 1986-03-07,1569.3,1574.0,1564.0,1573.8 1986-03-06,1574.1,1575.6,1566.0,1566.1 1986-03-05,1559.2,1571.3,1559.2,1569.1 1986-03-04,1530.0,1548.9,1529.8,1548.9 1986-03-03,1545.2,1545.2,1534.4,1534.9 1986-02-28,1553.5,1553.5,1537.8,1543.9 1986-02-27,1545.4,1555.2,1545.3,1549.5 1986-02-26,1519.3,1534.6,1518.8,1534.6 1986-02-25,1526.8,1540.2,1526.8,1527.7 1986-02-24,1524.6,1534.6,1524.0,1533.0 1986-02-21,1497.4,1518.0,1497.3,1518.0 1986-02-20,1487.5,1492.6,1487.0,1492.1 1986-02-19,1499.8,1501.1,1488.8,1491.4 1986-02-18,1480.7,1492.0,1480.4,1491.9 1986-02-17,1481.6,1482.4,1467.1,1475.3 1986-02-14,1477.7,1478.4,1473.8,1477.9 1986-02-13,1466.2,1473.7,1466.2,1473.5 1986-02-12,1452.3,1470.9,1452.3,1470.0 1986-02-11,1462.3,1462.5,1449.3,1453.9 1986-02-10,1453.4,1461.5,1452.5,1461.5 1986-02-07,1432.1,1446.0,1431.8,1445.0 1986-02-06,1424.4,1426.9,1422.0,1426.9 1986-02-05,1431.3,1432.0,1423.8,1424.1 1986-02-04,1423.7,1432.0,1421.5,1431.6 1986-02-03,1431.5,1433.4,1424.4,1425.1 1986-01-31,1427.7,1435.5,1427.4,1435.0 1986-01-30,1420.6,1429.1,1420.1,1429.1 1986-01-29,1427.8,1428.1,1418.2,1421.0 1986-01-28,1414.1,1426.3,1414.1,1426.3 1986-01-27,1396.0,1405.0,1396.0,1405.0 1986-01-24,1388.5,1392.0,1383.8,1392.0 1986-01-23,1387.2,1388.9,1369.0,1382.8 1986-01-22,1373.9,1391.4,1373.9,1390.9 1986-01-21,1368.4,1378.3,1366.1,1378.1 1986-01-20,1390.7,1391.1,1378.2,1378.3 1986-01-17,1394.3,1398.3,1394.2,1396.0 1986-01-16,1396.7,1397.7,1392.6,1394.5 1986-01-15,1371.4,1390.5,1371.4,1390.5 1986-01-14,1371.9,1380.0,1365.7,1370.1 1986-01-13,1397.3,1397.5,1382.8,1384.6 1986-01-10,1382.9,1394.5,1382.9,1394.5 1986-01-09,1379.9,1393.5,1377.0,1379.6 1986-01-08,1418.8,1419.3,1400.3,1404.2 1986-01-07,1419.8,1419.8,1411.6,1415.2 1986-01-06,1435.9,1436.3,1424.1,1424.1 1986-01-03,1420.3,1430.0,1419.6,1429.8 1986-01-02,1412.2,1420.8,1412.0,1420.5 1985-12-31,1413.8,1414.3,1411.6,1412.6 1985-12-30,1402.7,1413.6,1402.7,1413.6 1985-12-27,1392.8,1398.9,1392.8,1398.9 1985-12-24,1389.1,1391.7,1389.1,1391.5 1985-12-23,1383.9,1388.6,1383.8,1388.6 1985-12-20,1389.3,1389.3,1381.6,1386.5 1985-12-19,1384.4,1391.8,1383.4,1390.7 1985-12-18,1365.4,1378.8,1364.8,1378.8 1985-12-17,1377.3,1377.5,1361.0,1365.4 1985-12-16,1385.8,1386.4,1376.5,1376.5 1985-12-13,1375.4,1381.7,1375.4,1381.4 1985-12-12,1385.4,1387.2,1378.3,1378.5 1985-12-11,1380.6,1380.6,1374.6,1377.4 1985-12-10,1393.9,1395.5,1388.6,1389.5 1985-12-09,1399.1,1399.8,1390.1,1392.0 1985-12-06,1394.0,1401.9,1392.1,1401.9 1985-12-05,1401.8,1401.8,1382.0,1395.3 1985-12-04,1416.4,1418.2,1399.1,1399.6 1985-12-03,1411.8,1419.8,1402.7,1415.6 1985-12-02,1439.6,1439.6,1418.5,1418.5 1985-11-29,1427.9,1439.4,1427.5,1439.1 1985-11-28,1447.3,1447.5,1429.2,1429.3 1985-11-27,1432.3,1438.8,1431.3,1438.0 1985-11-26,1449.1,1449.1,1431.9,1431.9 1985-11-25,1458.0,1460.7,1452.3,1455.5 1985-11-22,1453.8,1454.4,1445.2,1451.0 1985-11-21,1426.7,1443.3,1426.7,1443.1 1985-11-20,1420.3,1424.3,1419.7,1424.3 1985-11-19,1405.4,1412.1,1403.3,1412.1 1985-11-18,1409.8,1410.4,1401.5,1405.1 1985-11-15,1391.1,1403.9,1390.4,1403.9 1985-11-14,1395.0,1397.1,1391.7,1391.7 1985-11-13,1386.1,1400.5,1386.1,1396.9 1985-11-12,1384.6,1387.1,1378.4,1381.6 1985-11-11,1390.2,1390.4,1375.5,1375.5 1985-11-08,1378.0,1390.1,1377.5,1390.1 1985-11-07,1396.6,1396.6,1384.6,1384.8 1985-11-06,1383.9,1395.0,1383.9,1395.0 1985-11-05,1387.6,1395.9,1383.7,1383.7 1985-11-04,1381.4,1383.1,1375.2,1380.9 1985-11-01,1372.1,1383.1,1371.5,1379.0 1985-10-31,1372.4,1379.1,1370.3,1377.2 1985-10-30,1370.8,1373.8,1369.7,1373.8 1985-10-29,1346.9,1364.4,1345.9,1364.4 1985-10-28,1351.2,1351.2,1347.2,1347.8 1985-10-25,1349.5,1349.7,1344.5,1347.6 1985-10-24,1347.2,1350.3,1347.0,1349.6 1985-10-23,1336.3,1346.4,1336.3,1346.4 1985-10-22,1338.8,1338.8,1328.7,1331.5 1985-10-21,1340.8,1341.4,1339.0,1340.3 1985-10-18,1330.2,1341.4,1328.6,1341.2 1985-10-17,1334.4,1335.9,1330.9,1335.7 1985-10-16,1317.2,1326.2,1317.2,1326.2 1985-10-15,1323.1,1323.1,1318.8,1320.9 1985-10-14,1327.2,1328.5,1320.6,1321.2 1985-10-11,1316.6,1322.3,1316.6,1322.3 1985-10-10,1312.3,1314.1,1311.8,1314.1 1985-10-09,1301.7,1308.7,1301.7,1308.1 1985-10-08,1303.4,1307.5,1302.3,1303.3 1985-10-07,1315.0,1315.0,1306.9,1306.9 1985-10-04,1306.6,1313.9,1306.6,1313.0 1985-10-03,1303.1,1305.6,1302.1,1305.3 1985-10-02,1297.5,1306.5,1297.5,1305.4 1985-10-01,1292.8,1296.0,1292.8,1296.0 1985-09-30,1283.0,1290.4,1283.0,1290.0 1985-09-27,1276.8,1281.1,1276.6,1280.7 1985-09-26,1272.5,1272.5,1269.5,1270.8 1985-09-25,1279.0,1279.4,1271.0,1275.2 1985-09-24,1292.7,1292.9,1279.2,1280.1 1985-09-23,1287.2,1292.5,1286.1,1292.1 1985-09-20,1304.2,1305.3,1297.9,1298.7 1985-09-19,1299.2,1306.9,1299.1,1306.8 1985-09-18,1291.3,1295.6,1289.0,1294.8 1985-09-17,1301.1,1301.1,1294.5,1296.0 1985-09-16,1299.8,1300.2,1295.7,1300.2 1985-09-13,1313.2,1313.6,1305.4,1308.8 1985-09-12,1302.8,1313.5,1302.8,1313.3 1985-09-11,1306.8,1306.9,1295.3,1302.2 1985-09-10,1317.0,1317.0,1311.4,1311.4 1985-09-09,1333.1,1333.2,1329.2,1329.3 1985-09-06,1322.2,1333.5,1322.2,1332.2 1985-09-05,1323.6,1323.7,1321.7,1322.0 1985-09-04,1335.2,1336.7,1332.4,1332.4 1985-09-03,1341.8,1344.7,1335.2,1335.5 1985-09-02,1335.1,1340.3,1335.1,1340.3 1985-08-30,1331.0,1341.1,1330.1,1341.1 1985-08-29,1314.1,1323.9,1311.2,1323.9 1985-08-28,1308.1,1308.2,1302.5,1308.2 1985-08-27,1311.0,1311.1,1309.6,1310.8 1985-08-23,1308.3,1313.8,1307.7,1313.5 1985-08-22,1312.3,1312.9,1309.7,1309.7 1985-08-21,1307.7,1314.2,1307.7,1313.9 1985-08-20,1299.5,1307.9,1299.5,1307.1 1985-08-19,1298.3,1298.9,1294.4,1294.9 1985-08-16,1299.2,1301.8,1298.2,1299.1 1985-08-15,1293.6,1302.2,1293.2,1302.2 1985-08-14,1285.3,1293.1,1285.1,1293.1 1985-08-13,1288.3,1290.8,1284.5,1285.1 1985-08-12,1281.1,1288.1,1281.0,1288.1 1985-08-09,1283.7,1286.6,1281.1,1286.3 1985-08-08,1289.5,1291.0,1286.0,1286.0 1985-08-07,1279.3,1286.6,1278.7,1286.6 1985-08-06,1271.1,1287.5,1271.0,1287.5 1985-08-05,1278.5,1278.5,1271.3,1271.8 1985-08-02,1282.6,1284.6,1280.4,1280.4 1985-08-01,1271.7,1288.4,1271.7,1287.2 1985-07-31,1251.0,1261.7,1246.8,1261.7 1985-07-30,1247.9,1253.9,1247.3,1252.3 1985-07-29,1243.3,1249.6,1243.3,1248.9 1985-07-26,1217.4,1239.7,1215.4,1239.7 1985-07-25,1234.9,1234.9,1221.7,1221.7 1985-07-24,1236.5,1237.2,1233.2,1236.2 1985-07-23,1237.6,1237.6,1229.1,1233.1 1985-07-22,1253.5,1253.7,1239.9,1241.1 1985-07-19,1247.8,1252.5,1246.2,1252.5 1985-07-18,1250.4,1250.4,1245.0,1248.6 1985-07-17,1248.2,1248.2,1242.9,1247.3 1985-07-16,1247.6,1250.8,1239.0,1239.5 1985-07-15,1231.7,1243.6,1231.5,1243.6 1985-07-12,1239.7,1239.9,1223.8,1230.8 1985-07-11,1235.6,1240.7,1234.8,1238.4 1985-07-10,1233.5,1233.5,1220.8,1230.4 1985-07-09,1256.5,1256.7,1239.5,1239.6 1985-07-08,1256.7,1258.4,1254.7,1258.2 1985-07-05,1260.4,1266.8,1258.5,1260.0 1985-07-04,1235.6,1249.1,1235.6,1249.1 1985-07-03,1249.0,1249.0,1236.8,1239.3 1985-07-02,1251.6,1256.9,1250.0,1250.8 1985-07-01,1229.9,1246.9,1228.7,1246.8 1985-06-28,1240.9,1241.9,1228.0,1234.9 1985-06-27,1235.9,1237.2,1221.5,1234.3 1985-06-26,1243.8,1244.2,1234.3,1236.5 1985-06-25,1260.9,1260.9,1236.9,1248.3 1985-06-24,1266.6,1270.7,1266.6,1266.6 1985-06-21,1274.3,1274.3,1261.6,1262.0 1985-06-20,1281.7,1281.7,1269.8,1276.3 1985-06-19,1284.2,1287.7,1282.5,1284.1 1985-06-18,1284.6,1295.5,1283.2,1283.2 1985-06-17,1278.5,1285.3,1278.5,1284.4 1985-06-14,1268.7,1275.5,1266.2,1275.5 1985-06-13,1284.7,1284.7,1278.9,1278.9 1985-06-12,1307.6,1307.6,1291.1,1291.4 1985-06-11,1301.8,1308.9,1301.4,1308.1 1985-06-10,1310.1,1311.1,1298.0,1299.6 1985-06-07,1322.2,1323.1,1305.0,1310.6 1985-06-06,1331.8,1333.6,1322.0,1322.0 1985-06-05,1335.8,1336.2,1331.3,1335.9 1985-06-04,1324.5,1336.7,1324.5,1336.6 1985-06-03,1315.8,1325.0,1315.5,1324.6 1985-05-31,1315.7,1315.8,1309.6,1313.0 1985-05-30,1311.8,1315.8,1311.1,1314.7 1985-05-29,1317.4,1317.4,1305.9,1312.0 1985-05-28,1318.7,1318.8,1313.9,1317.4 1985-05-24,1323.5,1323.5,1308.3,1313.8 1985-05-23,1331.3,1332.1,1325.3,1325.3 1985-05-22,1332.7,1337.3,1332.7,1333.8 1985-05-21,1337.4,1337.8,1330.7,1334.1 1985-05-20,1322.0,1330.8,1321.1,1330.8 1985-05-17,1335.9,1335.9,1327.1,1327.4 1985-05-16,1343.1,1344.2,1334.8,1336.1 1985-05-15,1327.4,1342.4,1327.4,1342.4 1985-05-14,1334.0,1335.7,1322.7,1326.5 1985-05-13,1317.2,1333.0,1317.1,1333.0 1985-05-10,1308.4,1315.8,1308.1,1315.8 1985-05-09,1304.1,1308.9,1304.1,1306.3 1985-05-08,1304.7,1312.0,1304.7,1307.9 1985-05-07,1314.1,1315.3,1305.5,1305.5 1985-05-03,1309.8,1311.6,1309.1,1310.9 1985-05-02,1300.3,1310.0,1300.1,1309.1 1985-05-01,1293.7,1301.5,1293.7,1301.5 1985-04-30,1284.7,1292.2,1284.1,1291.0 1985-04-29,1292.8,1293.4,1290.1,1292.9 1985-04-26,1294.5,1296.6,1292.9,1295.3 1985-04-25,1286.9,1289.8,1286.0,1289.5 1985-04-24,1284.5,1285.8,1282.8,1285.7 1985-04-23,1287.2,1287.2,1282.7,1284.9 1985-04-22,1299.5,1299.8,1294.9,1294.9 1985-04-19,1302.9,1302.9,1299.5,1299.7 1985-04-18,1306.9,1313.0,1305.4,1305.5 1985-04-17,1290.9,1304.1,1290.9,1304.0 1985-04-16,1292.3,1293.0,1288.4,1290.8 1985-04-15,1282.3,1288.9,1282.1,1288.5 1985-04-12,1266.5,1275.8,1266.5,1275.8 1985-04-11,1273.5,1276.3,1267.8,1269.3 1985-04-10,1270.9,1275.1,1270.9,1273.1 1985-04-09,1276.0,1276.3,1268.8,1270.2 1985-04-04,1276.7,1278.5,1276.5,1278.5 1985-04-03,1283.5,1283.5,1274.0,1274.8 1985-04-02,1280.6,1286.9,1280.6,1286.8 1985-04-01,1276.7,1279.3,1275.8,1278.3 1985-03-29,1284.2,1284.8,1276.1,1277.0 1985-03-28,1286.8,1287.3,1285.3,1287.1 1985-03-27,1290.5,1290.9,1288.0,1288.0 1985-03-26,1294.9,1294.9,1290.1,1290.4 1985-03-25,1296.4,1298.0,1296.1,1297.8 1985-03-22,1297.1,1302.9,1295.0,1302.9 1985-03-21,1306.0,1309.2,1283.5,1284.0 1985-03-20,1302.6,1307.3,1301.5,1307.2 1985-03-19,1298.7,1304.7,1298.4,1304.5 1985-03-18,1308.2,1308.2,1300.1,1300.3 1985-03-15,1301.4,1309.9,1301.4,1309.9 1985-03-14,1294.5,1299.7,1293.3,1299.7 1985-03-13,1298.5,1300.9,1295.2,1295.2 1985-03-12,1298.9,1303.9,1298.6,1300.0 1985-03-11,1287.2,1290.8,1287.2,1290.8 1985-03-08,1285.7,1288.6,1283.3,1288.6 1985-03-07,1285.1,1288.1,1284.4,1285.8 1985-03-06,1277.3,1287.1,1277.2,1285.4 1985-03-05,1262.2,1275.7,1261.9,1274.9 1985-03-04,1263.2,1265.7,1261.5,1265.7 1985-03-01,1256.7,1257.6,1247.7,1250.8 1985-02-28,1258.2,1261.9,1257.7,1260.8 1985-02-27,1261.4,1261.8,1256.3,1256.9 1985-02-26,1260.2,1266.2,1260.0,1260.0 1985-02-25,1266.3,1266.5,1258.2,1261.0 1985-02-22,1274.6,1274.6,1262.6,1265.2 1985-02-21,1274.1,1277.9,1269.3,1277.8 1985-02-20,1277.1,1281.9,1276.5,1276.7 1985-02-19,1267.7,1274.5,1266.9,1274.4 1985-02-18,1278.7,1278.7,1268.3,1268.7 1985-02-15,1283.8,1286.7,1280.4,1281.3 1985-02-14,1293.2,1294.7,1288.4,1291.1 1985-02-13,1272.0,1281.6,1271.7,1280.8 1985-02-12,1283.4,1290.0,1273.5,1273.5 1985-02-11,1291.5,1299.5,1288.7,1298.9 1985-02-08,1298.3,1300.3,1288.5,1291.7 1985-02-07,1285.0,1295.7,1285.0,1295.5 1985-02-06,1281.9,1290.4,1280.5,1290.4 1985-02-05,1276.3,1289.2,1276.3,1288.9 1985-02-04,1258.9,1267.8,1257.1,1265.1 1985-02-01,1275.2,1277.3,1273.3,1273.9 1985-01-31,1280.4,1280.6,1272.2,1280.2 1985-01-30,1267.8,1277.3,1265.8,1277.3 1985-01-29,1257.0,1257.0,1240.5,1248.6 1985-01-28,1273.5,1273.5,1241.7,1261.6 1985-01-25,1274.0,1284.0,1274.0,1284.0 1985-01-24,1284.1,1284.8,1262.5,1272.4 1985-01-23,1283.1,1286.3,1280.3,1283.0 1985-01-22,1296.9,1305.6,1292.1,1305.6 1985-01-21,1279.7,1280.9,1276.1,1277.1 1985-01-18,1263.4,1273.2,1261.6,1272.6 1985-01-17,1256.7,1262.7,1256.7,1261.5 1985-01-16,1237.8,1251.7,1237.8,1251.7 1985-01-15,1223.5,1231.4,1223.5,1231.3 1985-01-14,1240.1,1240.1,1221.4,1222.2 1985-01-11,1265.3,1265.3,1240.9,1246.9 1985-01-10,1261.1,1263.9,1252.9,1262.7 1985-01-09,1248.6,1257.1,1247.1,1257.1 1985-01-08,1243.0,1243.1,1240.0,1242.2 1985-01-07,1213.2,1225.4,1212.6,1225.4 1985-01-04,1204.7,1215.7,1204.7,1213.6 1985-01-03,1208.2,1208.2,1199.6,1205.5 1985-01-02,1230.3,1230.4,1223.9,1223.9 1984-12-31,1229.2,1231.3,1228.5,1231.2 1984-12-28,1210.8,1224.8,1210.8,1224.8 1984-12-27,1206.7,1209.4,1206.6,1209.2 1984-12-24,1205.3,1205.6,1205.2,1205.2 1984-12-21,1204.9,1204.9,1201.8,1202.1 1984-12-20,1214.0,1214.0,1208.4,1208.4 1984-12-19,1222.5,1223.6,1219.1,1221.4 1984-12-18,1213.8,1215.3,1212.6,1215.3 1984-12-17,1215.9,1217.6,1212.5,1213.8 1984-12-14,1202.3,1207.9,1202.3,1204.6 1984-12-13,1188.9,1196.5,1188.9,1196.3 1984-12-12,1195.8,1197.8,1192.5,1192.8 1984-12-11,1199.5,1202.9,1199.5,1200.0 1984-12-10,1191.5,1199.6,1190.5,1199.5 1984-12-07,1179.1,1185.0,1179.1,1185.0 1984-12-06,1175.1,1175.4,1169.9,1175.4 1984-12-05,1179.4,1183.4,1176.0,1183.2 1984-12-04,1193.2,1194.7,1185.4,1185.6 1984-12-03,1187.9,1191.7,1187.9,1191.3 1984-11-30,1186.5,1186.5,1178.7,1181.1 1984-11-29,1184.4,1186.4,1181.2,1186.4 1984-11-28,1182.8,1187.3,1182.8,1186.6 1984-11-27,1167.3,1179.1,1167.3,1178.9 1984-11-26,1164.1,1171.5,1163.8,1171.1 1984-11-23,1153.5,1155.2,1153.1,1154.4 1984-11-22,1169.3,1170.0,1160.4,1160.4 1984-11-21,1163.1,1167.9,1162.8,1167.7 1984-11-20,1164.1,1164.4,1157.7,1158.7 1984-11-19,1166.3,1167.1,1162.9,1166.7 1984-11-16,1164.4,1174.6,1164.4,1174.2 1984-11-15,1179.4,1179.5,1167.1,1167.1 1984-11-14,1176.8,1182.4,1175.6,1181.6 1984-11-13,1175.2,1186.1,1175.2,1184.7 1984-11-12,1165.2,1176.2,1165.2,1176.1 1984-11-09,1155.1,1158.9,1155.1,1158.6 1984-11-08,1151.1,1159.4,1149.1,1158.5 1984-11-07,1161.8,1161.8,1154.2,1158.1 1984-11-06,1167.4,1167.7,1156.8,1160.6 1984-11-05,1167.6,1167.9,1162.8,1162.9 1984-11-02,1169.5,1171.5,1165.2,1169.2 1984-11-01,1148.4,1155.5,1147.7,1155.5 1984-10-31,1153.5,1155.3,1151.8,1152.1 1984-10-30,1137.7,1143.9,1137.5,1143.8 1984-10-29,1127.7,1135.8,1126.8,1135.7 1984-10-26,1129.6,1129.6,1127.2,1127.4 1984-10-25,1128.0,1131.3,1127.0,1129.9 1984-10-24,1133.1,1133.6,1125.0,1125.1 1984-10-23,1117.5,1124.4,1116.4,1124.4 1984-10-22,1111.2,1115.7,1110.8,1114.9 1984-10-19,1106.4,1112.5,1098.6,1112.5 1984-10-18,1089.5,1093.4,1079.0,1090.0 1984-10-17,1116.6,1118.4,1102.6,1102.6 1984-10-16,1128.0,1128.9,1124.1,1124.5 1984-10-15,1143.9,1147.3,1143.3,1145.7 1984-10-12,1140.4,1141.6,1137.7,1140.4 1984-10-11,1136.2,1141.7,1136.2,1141.7 1984-10-10,1134.4,1138.9,1133.6,1137.0 1984-10-09,1141.1,1142.4,1137.4,1138.0 1984-10-08,1137.1,1141.3,1137.1,1138.7 1984-10-05,1134.6,1137.4,1134.1,1135.8 1984-10-04,1118.8,1124.5,1118.8,1124.5 1984-10-03,1121.4,1127.6,1121.4,1124.1 1984-10-02,1114.1,1116.9,1111.8,1116.9 1984-10-01,1137.5,1137.5,1130.4,1130.4 1984-09-28,1145.9,1146.0,1139.3,1139.3 1984-09-27,1136.6,1143.6,1136.6,1143.5 1984-09-26,1127.3,1135.0,1127.1,1134.7 1984-09-25,1117.1,1120.7,1116.9,1120.7 1984-09-24,1129.1,1129.1,1121.6,1121.6 1984-09-21,1126.5,1129.7,1125.8,1126.1 1984-09-20,1125.6,1136.6,1125.4,1133.1 1984-09-19,1109.9,1122.9,1109.8,1122.5 1984-09-18,1110.0,1112.6,1109.3,1111.1 1984-09-17,1104.8,1111.5,1104.1,1110.5 1984-09-14,1110.8,1111.8,1107.9,1111.4 1984-09-13,1106.4,1107.2,1104.8,1107.2 1984-09-12,1101.6,1102.8,1101.3,1102.2 1984-09-11,1092.0,1101.3,1091.8,1101.3 1984-09-10,1096.5,1096.5,1091.6,1092.4 1984-09-07,1101.4,1101.7,1097.9,1099.5 1984-09-06,1085.0,1093.9,1085.0,1093.9 1984-09-05,1077.7,1082.9,1076.9,1082.4 1984-09-04,1100.0,1100.0,1085.5,1085.5 1984-09-03,1105.6,1106.4,1105.2,1105.2 1984-08-31,1100.4,1104.6,1100.2,1103.3 1984-08-30,1094.0,1101.9,1093.1,1100.9 1984-08-29,1084.5,1094.5,1084.5,1094.5 1984-08-28,1085.1,1087.5,1079.4,1087.2 1984-08-24,1081.3,1087.7,1081.3,1087.6 1984-08-23,1080.5,1081.9,1079.7,1080.7 1984-08-22,1091.7,1093.9,1089.4,1090.5 1984-08-21,1077.2,1082.5,1077.2,1082.5 1984-08-20,1076.0,1076.0,1071.3,1073.9 1984-08-17,1076.3,1077.0,1074.9,1077.0 1984-08-16,1071.6,1072.8,1069.1,1072.8 1984-08-15,1091.9,1092.7,1082.9,1082.9 1984-08-14,1087.5,1092.1,1084.3,1092.1 1984-08-13,1088.4,1089.5,1085.1,1085.9 1984-08-10,1080.6,1094.1,1080.6,1094.1 1984-08-09,1076.4,1077.2,1067.8,1069.9 1984-08-08,1073.8,1078.5,1073.7,1078.5 1984-08-07,1054.2,1070.2,1054.0,1069.3 1984-08-06,1071.1,1071.1,1057.2,1058.0 1984-08-03,1059.8,1064.0,1054.1,1063.9 1984-08-02,1032.1,1038.2,1029.4,1038.2 1984-08-01,1009.5,1012.5,1006.2,1012.5 1984-07-31,995.2,1009.5,995.2,1009.4 1984-07-30,997.0,997.3,993.0,994.4 1984-07-27,999.5,999.5,988.1,999.5 1984-07-26,1006.2,1007.0,999.9,999.9 1984-07-25,983.8,994.3,983.8,994.3 1984-07-24,989.0,991.1,983.4,988.7 1984-07-23,1008.3,1008.3,986.9,986.9 1984-07-20,1010.9,1012.4,1008.1,1009.0 1984-07-19,999.6,999.9,996.9,999.9 1984-07-18,1007.0,1010.2,1006.8,1009.6 1984-07-17,1006.2,1006.9,1003.8,1006.9 1984-07-16,992.7,1003.6,992.2,1001.6 1984-07-13,996.4,998.6,987.8,992.6 1984-07-12,998.8,999.2,978.7,989.7 1984-07-11,1000.1,1001.3,995.6,999.2 1984-07-10,1029.7,1030.4,1016.9,1016.9 1984-07-09,1040.9,1040.9,1027.8,1033.4 1984-07-06,1060.7,1060.7,1045.1,1045.4 1984-07-05,1062.9,1063.4,1060.0,1061.0 1984-07-04,1053.2,1065.1,1053.2,1063.9 1984-07-03,1048.0,1049.5,1045.1,1048.6 1984-07-02,1041.3,1046.5,1041.3,1046.5 1984-06-29,1029.1,1040.3,1029.0,1039.2 1984-06-28,1038.9,1038.9,1031.6,1031.6 1984-06-27,1024.5,1037.0,1024.3,1037.0 1984-06-26,1029.5,1029.5,1023.4,1023.5 1984-06-25,1034.4,1035.2,1032.7,1033.1 1984-06-22,1040.2,1040.2,1029.8,1031.9 1984-06-21,1046.2,1047.1,1041.0,1041.0 1984-06-20,1055.4,1055.4,1033.8,1033.8 1984-06-19,1058.5,1059.3,1054.1,1054.9 1984-06-18,1035.1,1043.2,1035.0,1042.1 1984-06-15,1028.0,1039.6,1027.6,1039.6 1984-06-14,1055.6,1055.6,1045.4,1045.4 1984-06-13,1065.0,1065.1,1060.8,1063.7 1984-06-12,1065.6,1066.5,1062.3,1066.3 1984-06-11,1072.7,1076.5,1072.7,1076.2 1984-06-08,1072.8,1072.8,1062.3,1068.0 1984-06-07,1090.4,1090.5,1075.4,1075.4 1984-06-06,1080.1,1088.2,1080.0,1087.9 1984-06-05,1079.4,1079.9,1069.5,1078.8 1984-06-04,1067.4,1076.8,1067.4,1076.8 1984-06-01,1026.8,1043.8,1026.8,1043.8 1984-05-31,1034.2,1037.8,1008.2,1016.6 1984-05-30,1051.9,1052.3,1027.7,1027.7 1984-05-25,1044.7,1057.1,1042.9,1053.3 1984-05-24,1074.3,1074.6,1057.7,1057.7 1984-05-23,1087.6,1089.3,1072.0,1074.1 1984-05-22,1105.7,1105.7,1085.3,1087.9 1984-05-21,1106.0,1107.3,1105.9,1107.2 1984-05-18,1108.8,1108.8,1105.1,1105.2 1984-05-17,1116.4,1120.3,1115.3,1116.9 1984-05-16,1101.9,1104.2,1101.8,1104.1 1984-05-15,1083.6,1093.5,1083.6,1093.5 1984-05-14,1073.3,1083.0,1073.3,1082.5 1984-05-11,1088.7,1089.0,1075.8,1076.1 1984-05-10,1101.3,1101.3,1093.5,1094.6 1984-05-09,1119.7,1120.5,1111.0,1111.3 1984-05-08,1126.9,1126.9,1115.9,1117.8 1984-05-04,1135.4,1135.8,1133.5,1134.7 1984-05-03,1137.7,1142.8,1137.4,1142.2 1984-05-01,1136.8,1136.8,1136.8,1136.8 1984-04-30,1138.3,1138.3,1138.3,1138.3 1984-04-26,1130.9,1130.9,1130.9,1130.9 1984-04-25,1119.8,1119.8,1119.8,1119.8 1984-04-24,1105.4,1105.4,1105.4,1105.4 1984-04-23,1108.4,1108.4,1108.4,1108.4 1984-04-20,1116.2,1116.2,1116.2,1116.2 1984-04-19,1116.2,1116.2,1116.2,1116.2 1984-04-18,1116.2,1116.2,1116.2,1116.2 1984-04-17,1110.2,1110.2,1110.2,1110.2 1984-04-16,1105.6,1105.6,1105.6,1105.6 1984-04-13,1129.1,1129.1,1129.1,1129.1 1984-04-12,1129.1,1129.1,1129.1,1129.1 1984-04-11,1110.6,1110.6,1110.6,1110.6 1984-04-10,1105.4,1105.4,1105.4,1105.4 1984-04-09,1096.7,1096.7,1096.7,1096.7 1984-04-06,1096.3,1096.3,1096.3,1096.3 1984-04-05,1102.2,1102.2,1102.2,1102.2 1984-04-04,1095.4,1095.4,1095.4,1095.4 1984-04-03,1095.4,1095.4,1095.4,1095.4 1984-04-02,1108.1,1108.1,1108.1,1108.1 ================================================ FILE: p5-capstone/ftse100-list.csv ================================================ ticker,name,premium_code,free_code ADN,Aberdeen Asset Management,,GOOG/LON_ADN ADM,Admiral Group,EOD/ADM,GOOG/LON_ADM AGK,Aggreko,,GOOG/LON_AGK AMEC,AMEC,,GOOG/LON_AMEC AAL,Anglo American plc,EOD/AAL,GOOG/LON_AAL ANTO,Antofagasta,,GOOG/LON_ANTO ARM,ARM Holdings,,GOOG/LON_ARM ABF,Associated British Foods,,GOOG/LON_ABF AZN,AstraZeneca,EOD/AZN,GOOG/LON_AZN AV,Aviva,EOD/AV, BAB,Babcock International,EOD/BAB,GOOG/LON_BAB BA,BAE Systems,EOD/BA, BARC,Barclays,,GOOG/LON_BARC BG,BG Group,EOD/BG, BLT,BHP Billiton,EOD/BLT,GOOG/LON_BLT BP,BP,EOD/BP, BTI,British American Tobacco,EOD/BTI, BLND,British Land Co,,GOOG/LON_BLND BSY,BSkyB,,GOOG/LON_BSY BT_A,BT Group,,GOOG/LON_BT_A BNZL,Bunzl,,GOOG/LON_BNZL BRBY,Burberry Group,,GOOG/LON_BRBY CPI,Capita,EOD/CPI,GOOG/LON_CPI CUK,Carnival plc,EOD/CUK,GOOG/LON_CUK CNA,Centrica,EOD/CNA,GOOG/LON_CNA CCH,Coca-Cola HBC AG,, CPG,Compass Group,EOD/CPG,GOOG/LON_CPG CRH,CRH plc,EOD/CRH,GOOG/LON_CRH CRDA,Croda International,,GOOG/LON_CRDA DGE,Diageo,,GOOG/LON_DGE ENRC,Eurasian Natural Resources,,GOOG/LON_ENRC EVR,Evraz,EOD/EVR,GOOG/LON_EVR EXPN,Experian,,GOOG/LON_EXPN FRES,Fresnillo plc,,GOOG/LON_FRES GFS,G4S,,GOOG/LON_GFS GKN,GKN,,GOOG/LON_GKN GSK,GlaxoSmithKline,EOD/GSK,GOOG/LON_GSK GLEN,Glencore International,,GOOG/LON_GLEN HMSO,Hammerson,,GOOG/LON_HMSO HL,Hargreaves Lansdown,EOD/HL, HSBA,HSBC,,GOOG/LON_HSBA IMI,IMI plc,EOD/IMI,GOOG/LON_IMI IMT,Imperial Tobacco Group,,GOOG/LON_IMT IHG,InterContinental Hotels Group,EOD/IHG,GOOG/LON_IHG IAG,International Consolidated Airlines Group SA,EOD/IAG,GOOG/LON_IAG ITRK,Intertek Group,,GOOG/LON_ITRK ITV,ITV plc,,GOOG/LON_ITV SBRY,J Sainsbury plc,,GOOG/LON_SBRY JMAT,Johnson Matthey,,GOOG/LON_JMAT KGF,Kingfisher plc,,GOOG/LON_KGF LAND,Land Securities Group,EOD/LAND,GOOG/LON_LAND LGEN,Legal & General,,GOOG/LON_LGEN LLOY,Lloyds Banking Group,,GOOG/LON_LLOY MKS,Marks & Spencer Group,,GOOG/LON_MKS MGGT,Meggitt,,GOOG/LON_MGGT MRO,Melrose plc,EOD/MRO,GOOG/LON_MRO MRW,Morrison Supermarkets,,GOOG/LON_MRW NG,National Grid plc,EOD/NG, NXT,Next plc,,GOOG/LON_NXT OML,Old Mutual,,GOOG/LON_OML PSO,Pearson plc,EOD/PSO, PFC,Petrofac,,GOOG/LON_PFC PRU,Prudential plc,EOD/PRU,GOOG/LON_PRU RRS,Randgold Resources,,GOOG/LON_RRS RB,Reckitt Benckiser,, REL,Reed Elsevier,,GOOG/LON_REL FLG,Friends Life Group,, REX,Rexam,EOD/REX,GOOG/LON_REX RIO,Rio Tinto Group,EOD/RIO,GOOG/LON_RIO RR,Rolls-Royce Group,, RBS,Royal Bank of Scotland Group,EOD/RBS,GOOG/LON_RBS RDSA,Royal Dutch Shell,,GOOG/LON_RDSA RSA,RSA Insurance Group,,GOOG/LON_RSA SAB,SABMiller,,GOOG/LON_SAB SGE,Sage Group,,GOOG/LON_SGE SDR,Schroders,EOD/SDR,GOOG/LON_SDR SRP,Serco,,GOOG/LON_SRP SVT,Severn Trent,EOD/SVT,GOOG/LON_SVT SHPG,Shire plc,EOD/SHPG, SNN,Smith & Nephew,EOD/SNN, SMIN,Smiths Group,,GOOG/LON_SMIN SSE,SSE plc,EOD/SSE,GOOG/LON_SSE STAN,Standard Chartered,,GOOG/LON_STAN SL,Standard Life,, TATE,Tate & Lyle,,GOOG/LON_TATE TSCO,Tesco,EOD/TSCO,GOOG/LON_TSCO TT,TUI Travel,, TLW,Tullow Oil,,GOOG/LON_TLW ULVR,Unilever,,GOOG/LON_ULVR UU,United Utilities,, VED,Vedanta Resources,,GOOG/LON_VED VOD,Vodafone Group,EOD/VOD,GOOG/LON_VOD WEIR,Weir Group,,GOOG/LON_WEIR WTB,Whitbread,,GOOG/LON_WTB WOS,Wolseley plc,,GOOG/LON_WOS WG_,Wood Group,,GOOG/LON_WG_ WPP,WPP plc,EOD/WPP,GOOG/LON_WPP XTA,Xstrata,,GOOG/LON_XTA ================================================ FILE: p5-capstone/google-finance-py2.py ================================================ """ Scrape FTSE100 Historical Prices from Google Finance Author: Jessica Yung September 2016 """ from bs4 import BeautifulSoup import urllib.request # from sys import argv import re import math import datetime # script, theurl = argv def append_page_figures(url): html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, "lxml") # Select element with class `historical_price` historical_prices = soup.select(".historical_price") # For each tr, create new row then # append values of each td to that row except the td with class rm. # rows = all tr # Rows is type # historical_prices is a list of length 1 since 1 el selected rows = historical_prices[0].find_all('tr') # Remove header row rows = rows[1:] for row in rows: cells = row.find_all('td') row_data = [] for cell in cells: value = cell.contents # Remove it from the len 1 array, # take away the newline character value = value[0][:-1] if value[0].isdigit(): value = float(value.replace(',','')) elif value[0].isalpha(): value = convert_date(value) row_data.append(value) # Take away the dash for volume row_data = row_data[:-1] stock_data.append(row_data) def convert_date(date): """Converts e.g. 'Sep 1, 2016' to '2016-09-01'. """ return datetime.datetime.strptime(date, '%b %d, %Y').strftime('%Y-%m-%d') def number_of_pages(): """Returns tho number of pages you need to scrape to get all the data for this security in your date range.""" # Max rows_per_page = 200 total_pages = math.ceil(total_rows/rows_per_page) return total_pages def assemble_stock_query(start): """Returns the URL for a page for your security (and parameters such and start and end dates) with the first row in the table being row `start` (int).""" query = gfinance_url for key, value in q.items(): to_append = str(key) + "=" + str(value) + "&" query += to_append # TODO: Check syntax of code in the line below query += "start=%s" % str(start) return query def write_to_file(data, filename, header=None): """Writes data and header to file.""" with open(filename, "a") as f: if header != None: f.write(",".join(str(v) for v in header)) f.write("\n") for row in stock_data: f.write(",".join(str(v) for v in row)) f.write("\n") # Initialise Variables gfinance_url = "https://www.google.co.uk/finance/historical?" total_rows = 8188 rows_per_page = 200 q = { "cid": "12590587", "startdate": "Jan+1%2C+1977", "enddate": "Sep+9%2C+2016", "num": rows_per_page, "ei": "iIXuV9HQFJfEU42QtNgD" } stock_data = [] header = ["Date", "Open", "High", "Low", "Close"] filename = "ftse100.csv" # Get URL for each page, scrape data from each page and # append scraped data to `stock_data`. for page_index in range(number_of_pages()): start = page_index * rows_per_page new_url = assemble_stock_query(start) append_page_figures(new_url) # Print head and tail of `stock_data` to check it is correct print "stock_data[:20]" print "stock_data[-20:]" # Write data to file write_to_file(stock_data, filename, header=header) # Sample URLs: # https://www.google.co.uk/finance/historical?cid=12590587&startdate=Jan+1%2C+1977&enddate=Sep+9%2C+2016&num=200&ei=iIXuV9HQFJfEU42QtNgD&start=200 # https://www.google.co.uk/finance/historical?cid=12590587&startdate=Jan%201%2C%201977&enddate=Sep%209%2C%202016&num=200&ei=9IfuV4jzOtfJUaSJjrgG&start=200 ================================================ FILE: p5-capstone/google-finance-scraper.py ================================================ """ Scrape FTSE100 Historical Prices from Google Finance Author: Jessica Yung September 2016 """ from bs4 import BeautifulSoup import urllib.request # from sys import argv import re import math import datetime # script, theurl = argv def append_page_figures(url): html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, "lxml") # Select element with class `historical_price` historical_prices = soup.select(".historical_price") # For each tr, create new row then # append values of each td to that row except the td with class rm. # rows = all tr # Rows is type # historical_prices is a list of length 1 since 1 el selected rows = historical_prices[0].find_all('tr') # Remove header row rows = rows[1:] for row in rows: cells = row.find_all('td') row_data = [] for cell in cells: value = cell.contents # Remove it from the len 1 array, # take away the newline character value = value[0][:-1] if value[0].isdigit(): value = float(value.replace(',','')) elif value[0].isalpha(): value = convert_date(value) row_data.append(value) # Take away the dash for volume row_data = row_data[:-1] # print(row_data) stock_data.append(row_data) def convert_date(date): """Converts e.g. 'Sep 1, 2016' to '2016-09-01'. """ return datetime.datetime.strptime(date, '%b %d, %Y').strftime('%Y-%m-%d') def number_of_pages(): """Returns tho number of pages you need to scrape to get all the data for this security in your date range.""" # Max rows_per_page = 200 total_pages = math.ceil(total_rows/rows_per_page) return total_pages def assemble_stock_query(start): """Returns the URL for a page for your security (and parameters such and start and end dates) with the first row in the table being row `start` (int).""" query = gfinance_url for key, value in q.items(): to_append = str(key) + "=" + str(value) + "&" query += to_append # TODO: Check syntax of code in the line below query += "start=%s" % str(start) return query def write_to_file(data, filename, header=None): """Writes data and header to file.""" with open(filename, "a") as f: if header != None: f.write(",".join(str(v) for v in header)) f.write("\n") for row in stock_data: f.write(",".join(str(v) for v in row)) f.write("\n") # Initialise Variables gfinance_url = "https://www.google.co.uk/finance/historical?" total_rows = 8188 rows_per_page = 200 q = { "cid": "12590587", "startdate": "Jan+1%2C+1977", "enddate": "Sep+9%2C+2016", "num": rows_per_page, "ei": "iIXuV9HQFJfEU42QtNgD" } stock_data = [] header = ["Date", "Open", "High", "Low", "Close"] filename = "ftse100.csv" # Get URL for each page, scrape data from each page and # append scraped data to `stock_data`. for page_index in range(number_of_pages()): start = page_index * rows_per_page new_url = assemble_stock_query(start) append_page_figures(new_url) # Print head and tail of `stock_data` to check it is correct print(stock_data[:20]) print(stock_data[-20:]) # Write data to file write_to_file(stock_data, filename, header=header) # Sample URLs: # https://www.google.co.uk/finance/historical?cid=12590587&startdate=Jan+1%2C+1977&enddate=Sep+9%2C+2016&num=200&ei=iIXuV9HQFJfEU42QtNgD&start=200 # https://www.google.co.uk/finance/historical?cid=12590587&startdate=Jan%201%2C%201977&enddate=Sep%209%2C%202016&num=200&ei=9IfuV4jzOtfJUaSJjrgG&start=200 ================================================ FILE: p5-capstone/list-of-all-securities-ex-debt.csv ================================================ Security Start Date,Company Name,Country of Incorporation,LSE Market,FCA Listing Category,ISIN,Security Name,TIDM,Mkt Cap £m,Shares in Issue,Industry,Supersector,Sector,Subsector,Group,MarketSegmentCode,MarketSectorCode,Trading Currency,,,,,,,,,,,,,,,,,, 2-Aug-06,1PM PLC ,GB,AIM,,GB00BCDBXK43,ORD GBP0.1 ,OPM ,33.884728635,"52,534,463.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Feb-09,1SPATIAL PLC ,GB,AIM,,GB00B09LQS34,ORD GBP0.01 ,SPA ,32.2934306625,"738,135,558.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Apr-05,21ST CENTURY TECHNOLOGY PLC ,GB,AIM,,GB0008866310,ORD GBP0.065 ,C21 ,1.74824540625,"93,239,755.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Sep-05,32RED ,GI,AIM,,GI000A0F56M0,ORD GBP0.002 ,TTR ,108.90199636875,"83,690,295.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 21-Aug-15,365 AGILE GROUP PLC ,GB,AIM,,GB00BYY8NN14,ORD GBP0.30 ,365 ,5.012229345,"18,914,073.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Jul-94,3I GROUP ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1YW4409,ORD GBP0.738636 ,III ,5957.506076665,"969,488,377.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 13-Mar-07,3I INFRASTRUCTURE PLC ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00BYR8GK67,ORD NPV ,3IN ,1916.568375782,"1,026,549,746.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Feb-14,4D PHARMA PLC ,GB,AIM,,GB00BJL5BR07,ORD GBP0.0025 ,DDDD ,449.14268875,"64,858,150.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 5-Nov-53,4IMPRINT GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006640972,ORD GBP0.38461538 ,FOUR,422.4332,"26,402,075.00",Consumer Services,Media,Media,Media Agencies,5555,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 14-Jul-11,600 GROUP ,GB,AIM,,GB0008121641,ORD GBP0.01 ,SIXH ,9.914005915,"104,357,957.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Jun-14,7DIGITAL GROUP PLC ,GB,AIM,,GB00BMH46555,ORD GBP0.1 ,7DIG ,7.2344698125,"115,751,517.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Feb-12,88 ENERGY LTD ,AU,AIM,,AU00000088E2,NPV(DI) ,88E ,126.4199014975,"3,889,843,123.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Oct-05,888 HLDGS ,GI,International Main Market,Premium Equity Commercial Companies,GI000A0F6407,ORD GBP0.005 ,888 ,761.32786806,"349,232,967.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,SET3,ON5 ,GBX,,,,,,,,,,,,,,,,,, 26-Jun-14,AA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMSKPJ95,ORD GBP0.001 ,AA. ,1637.243130404,"605,937,502.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 22-May-13,AB DYNAMICS PLC ,GB,AIM,,GB00B9GQVG73,ORD GBP0.01 ,ABDP ,81.7170588,"17,764,578.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Nov-04,ABBEY PLC ,IE,AIM,,IE0000020408,ORD EUR0.32 ,ABBY ,226.55325625,"21,525,250.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Dec-78,ABBOTT LABORATORIES ,US,International Main Market,Standard Shares,US0028241000,NPV ,ABT ,68787.9351139773,"2,120,657,659.00",Health Care,Health Care,Health Care Equipment & Services,Medical Supplies,4537,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 3-Nov-05,ABCAM ,GB,AIM,,GB00B6774699,ORD GBP0.002 ,ABC ,1444.519899295,"199,106,809.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 20-Dec-05,ABERDEEN ASIAN INCOME FUND ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0P6J834,ORD NPV ,AAIF,353.82063405,"181,446,479.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 19-Oct-95,ABERDEEN ASIAN SMALLER CO INV TST ,GB,UK Main Market,Standard Debt,GB00B7ZMLM88,3.5% CNV UNSEC LN STK 31/5/19 GBP ,AASC,311.9527713375,"35,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 19-Oct-95,ABERDEEN ASIAN SMALLER CO INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000100767,GBP0.25 ,AAS ,311.9527713375,"32,673,765.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Mar-91,ABERDEEN ASSET MANAGEMENT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000031285,ORD GBP0.10 ,ADN ,4082.009177652,"1,273,240,542.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 10-Nov-09,ABERDEEN EMERGING MKTS INV CO LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B45L2K95,ORD GBP0.01 ,AEMC,358.0061985,"75,369,726.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 15-Jun-07,ABERDEEN FRONTIER MKTS INV CO LTD ,GG,AIM,,GG00B1W59J17,ORD NPV ,AFMC ,103.79425,"169,460,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Oct-98,ABERDEEN JAPAN INVESTMENT TRUST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003920757,ORD GBP0.10 ,AJIT,69.85798992,"14,374,072.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Aug-10,ABERDEEN LATIN AMERICAN INCOME FD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B44ZTP62,ORD NPV ,ALAI,42.77180024,"64,197,824.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 3-Sep-13,ABERDEEN NEW DAWN INVESTMENT TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BBM56V29,GBP0.05 ,ABD ,241.61961225,"132,032,575.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Dec-89,ABERDEEN NEW THAI INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000059971,GBP0.25 ,ANW ,83.0510328375,"17,383,785.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 9-Jul-07,ABERDEEN PRIVATE EQUITY FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1XCHB94,PARTICIPATING SHS NPV GBP ,APEF,109.54044099625,"109,131,199.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 28-Aug-92,ABERDEEN SMALLER COS INC TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008063728,ORD GBP0.50 ,ASCI,43.4715,"21,900,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 6-Aug-90,ABERDEEN UK TRACKER TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005596985,GBP0.10 ,AUKT,312.7602255975,"99,525,927.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Apr-10,ABERFORTH GEARED INCOME TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4TR3444,ORD GBP0.01 ,AGIT,257.064375,"109,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Apr-10,ABERFORTH GEARED INCOME TRUST PLC ,GB,UK Main Market,Standard Shares,GB00B4WLXD25,ZERO DIV PREF SHS GBP0.01 ,AGIZ,257.064375,"30,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 10-Dec-90,ABERFORTH SMALLER COMPANIES TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000066554,ORD GBP0.01 ,ASL ,975.48881552,"94,615,792.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Jul-14,ABZENA LTD ,GB,AIM,,GB00BN65QN46,ORD GBP0.002 ,ABZA ,57.87014965,"136,165,058.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Mar-10,ACACIA MINING PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B61D2N63,ORD GBP0.10 ,ACA ,1889.263893893,"410,085,499.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 28-Mar-94,ACAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000055888,ORD GBP0.05 ,ACL ,165.8406724,"63,784,874.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 28-Jun-05,ACCESS INTELLIGENCE ,GB,AIM,,GB0033835264,ORD GBP0.005 ,ACC ,14.49796556625,"282,887,133.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Apr-02,ACCESSO TECHNOLOGY GRP PLC ,GB,AIM,,GB0001771426,ORD GBP0.01 ,ACSO ,331.958601,"21,347,820.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Jun-16,ACCROL GROUP HLDGS PLC ,GB,AIM,,GB00BZ6VT592,ORD GBP0.001 ,ACRL ,117.66018253,"93,012,002.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Nondurable Household Products,3724,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Oct-05,ACCSYS TECHNOLOGIES ,GB,AIM,,GB00BQQFX454,EUR0.05 ,AXS ,63.892234515,"90,627,283.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMU,AIMM,GBX,,,,,,,,,,,,,,,,,, 9-Jul-07,ACENCIA DEBT STRATEGIES LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0MSB420,ORD NPV ,ACD ,120.37773155305,"111,768,949.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,USD,,,,,,,,,,,,,,,,,, 2-Nov-95,ACER INC ,TW,PSM,Standard GDRs,US0044342055,GDR EACH REPR 5 ORD TWD10 REG'S'(CIT) ,ACID,0,"10,800,000.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 2-Nov-95,ACER INC ,TW,PSM,Standard GDRs,US0044341065,GDR EACH REPR 5 ORD TWD10'144A'(CIT) ,ACIA,0,0.00,Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 11-Feb-99,ACORN INCOME FUND ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004829437,ORD GBP0.01 ,AIF ,66.771881085,"18,848,802.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Oct-12,ACORN MINERALS PLC ,GB,UK Main Market,Standard Shares,GB00B6QZLQ32,ORD GBP0.02 ,ACO ,1.91102066875,"14,288,005.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 23-Dec-13,ACTION HOTELS PLC ,JE,AIM,,JE00BFZD1492,ORD GBP0.1 ,AHCG ,83.415015175,"147,637,195.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Mar-98,ACTIVE ENERGY GROUP PLC ,GB,AIM,,GB00B1YMN108,ORD GBP0.01 ,AEG ,19.1239561065,"721,658,721.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Feb-14,ACTUAL EXPERIENCE PLC ,GB,AIM,,GB00BJ05QC14,ORD GBP0.002 ,ACT ,99.41359195,"37,514,563.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Feb-14,ADAMAS FINANCE ASIA LTD ,VG,AIM,,VGG008271162,NPV(DI) ,ADAM ,65.8099637697958,"191,967,084.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 26-Jul-05,ADAMS PLC ,IM,AIM,,IM00B986V543,ORD EUR0.01 ,ADA ,2.97542595105832,"41,276,616.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,EUR,,,,,,,,,,,,,,,,,, 15-Feb-06,ADEPT TELECOM ,GB,AIM,,GB00B0WY3Y47,ORD GBP0.10 ,ADT ,55.986670575,"22,620,877.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Feb-06,ADEPT4 PLC ,GB,AIM,,GB00B8GRBX01,ORD GBP0.01 ,PINN ,17.881376625,"227,065,100.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Jun-15,ADGORITHMS LTD ,IL,AIM,,IL0011354904,ORD ILS0.01 (DI) ,ADGO ,11.10579354,"61,698,853.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Sep-04,ADMIRAL GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B02J6398,ORD GBP0.001 ,ADM ,5562.0361585,"271,318,837.00",Financials,Insurance,Nonlife Insurance,Insurance Brokers,8534,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 30-Apr-02,ADVANCED MEDICAL SOLUTIONS GROUP ,GB,AIM,,GB0004536594,ORD GBP0.05 ,AMS ,453.76473438,"204,398,529.00",Health Care,Health Care,Health Care Equipment & Services,Medical Supplies,4537,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 4-Aug-06,ADVANCED ONCOTHERAPY PLC ,GB,AIM,,GB00BD6SX109,ORD GBP0.25 ,AVO ,71.71204042,"58,780,361.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Mar-00,ADVFN ,GB,AIM,,GB00BPT24C10,ORD GBP0.002 ,AFN ,7.43091534,"25,623,846.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Dec-04,AEC EDUCATION ,GB,AIM,,GB00B04XB679,ORD GBP0.05 ,AEC ,1.041690819,"80,130,063.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Jul-38,AECI ,ZA,International Main Market,Standard Shares,ZAE000000238,5.5% CUM PRF ZAR2 ,87FZ,0,"3,000,000.00",,,,,7,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 1-May-02,AEOREMA COMMUNICATIONS PLC ,GB,AIM,,GB00B4QHH456,ORD GBP0.125 ,AEO ,2.941256175,"9,050,019.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 12-May-15,AEW UK REIT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BWD24154,ORD GBP0.01 ,AEWU,209.8346240375,"218,009,999.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 26-Jul-10,AFARAK GROUP PLC ,FI,International Main Market,Standard Shares,FI0009800098,NPV (DI) ,AFRK,85.488225875,"263,040,695.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 24-Apr-07,AFC ENERGY PLC ,GB,AIM,,GB00B18S7B29,ORD GBP0.001 ,AFC ,68.20306746,"310,013,943.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 30-Jun-14,AFH FINANCIAL GROUP PLC ,GB,AIM,,GB00B4W5WQ08,ORD GBP0.10 ,AFHP ,39.170872,"24,105,152.00",Financials,Financial Services,Financial Services,Asset Managers,8771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-May-07,AFI DEVELOPMENT PLC ,CY,International Main Market,Standard GDRs,US00106J2006,GDR EACH REPR 1 ORD 'REGS' ,AFID,69.3389034610979,"110,000,000.00",,,,,8733,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 11-May-07,AFI DEVELOPMENT PLC ,CY,International Main Market,Standard GDRs,US00106J1016,GDR EACH REPR 1 ORD '144A' ,53GI,69.3389034610979,0.00,,,,,8733,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 11-May-07,AFI DEVELOPMENT PLC ,CY,International Main Market,Premium Equity Commercial Companies,CY0101380612,ORD USD0.001 B ,AFRB,69.3389034610979,"523,847,027.00",,,,,8733,SET3,ON10,USD,,,,,,,,,,,,,,,,,, 17-Apr-14,AFRICA OPPORTUNITY FUND LTD ,KY,International Main Market,,KYG012921121,ORD USD0.1 C ,AOFC,67.0936836791137,"100,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM3,SFNC,USD,,,,,,,,,,,,,,,,,, 17-Apr-14,AFRICA OPPORTUNITY FUND LTD ,KY,International Main Market,,KYG012921048,ORD USD0.01 ,AOF ,67.0936836791137,"42,630,327.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM3,SFNC,USD,,,,,,,,,,,,,,,,,, 22-Feb-13,AFRICAN POTASH LIMITED ,GG,AIM,,GG00B4QYTJ50,ORD NPV ,AFPO ,2.8891309135,"888,963,358.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Jul-14,AGGREGATED MICRO POWER HLDGS PLC ,GB,AIM,,GB00BC4F3V69,ORD GBP0.005 ,AMPH ,21.21108632,"31,192,774.00",Utilities,Utilities,Electricity,Alternative Electricity,7537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-May-14,AGGREKO ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BK1PTB77,ORD GBP0.048329113924 ,AGK ,2609.94636819,"256,128,201.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 5-Feb-09,AGRITERRA LTD ,GG,AIM,,GB00B05MGT12,ORD GBP0.001 ,AGTA ,2.6014552711,"1,061,818,478.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 15-Dec-04,AIR CHINA ,CN,International Main Market,Standard Shares,CNE1000001S0,'H'CNY1 ,AIRC,1611.28752033957,"3,383,532,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 23-Nov-95,AIR PARTNER PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000115302,GBP0.05 ,AIR ,43.39578093875,"10,189,793.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 21-Dec-05,AIREA PLC ,GB,AIM,,GB0008123027,ORD GBP0.25 ,AIEA ,9.1328848625,"46,242,455.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-May-02,AKERS BIOSCIENCES INC ,US,AIM,,US00973E1029,NPV ,AKR ,6.284763375,"2,591,655.00",Health Care,Health Care,Health Care Equipment & Services,Medical Supplies,4537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Apr-05,ALBA MINERAL RESOURCES ,GB,AIM,,GB00B06KBB18,ORD GBP0.001 ,ALBA ,3.2721217694,"1,487,328,077.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Jan-99,ALBION DEVELOPMENT VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004832472,ORD GBP0.01 ,AADV,44.1018337875,"65,578,935.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-07,ALBION ENTERPRISE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1G3LR35,ORD GBP0.01 ,AAEV,42.367434195,"47,872,807.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Jan-01,ALBION TECHNOLOGY & GENERAL VCT PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005581672,ORD GBP0.01 ,AATG,60.24786023,"91,981,466.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Apr-96,ALBION VENTURE CAPITAL TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002039625,ORD GBP0.01 ,AAVC,43.279195505,"65,081,497.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 6-Mar-12,ALCENTRA EUROPEAN FLTG RTE INC FD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B6116N85,RED ORD NPV GBP ,AEFS,192.931495575,"197,878,457.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 13-Mar-15,ALDERMORE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BQQMCJ47,ORD GBP0.10 ,ALD ,563.64921984,"344,739,584.00",Financials,Banks,Banks,Banks,8355,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 3-Aug-06,ALECTO MINERALS PLC ,GB,AIM,,GB00B5SCHP68,ORD GBP0.0001 ,ALO ,4.6959305925,"4,472,314,850.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Apr-05,ALEXANDER MINING ,GB,AIM,,GB00B06K1665,ORD GBP0.001 ,AXM ,2.434599693,"901,703,590.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-May-13,ALL ASIA ASSET CAP LTD ,VG,AIM,,VGG017801082,ORD NPV (DI) ,AAA ,26.603259,"212,826,072.00",Financials,Financial Services,Financial Services,Investment Services,8777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Oct-04,ALLERGY THERAPEUTICS ,GB,AIM,,GB00B02LCQ05,ORD GBP0.001 ,AGY ,111.63425224625,"591,439,747.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Dec-15,ALLIANCE PHARMA ,GB,AIM,,GB0031030819,ORD GBP0.01 ,APH ,231.3106404375,"469,666,275.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 17-Jul-47,ALLIANCE TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B11V7W98,ORD GBP0.025 ,ATST,2932.734450995,"514,966,541.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Dec-95,ALLIANZ TECHNOLOGY TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003390720,ORD GBP0.25 ,ATT ,189.063373525,"25,292,759.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Jun-14,ALLIED MINDS LTD ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLRLH124,ORD GBP0.01 ,ALM ,692.794330256,"213,298,747.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 9-Jun-99,ALPHA BANK AE ,GR,International Main Market,Standard GDRs,US02071M6066,GDR EACH REP 0.25 SHS 144A ,01NX,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 9-Jun-99,ALPHA BANK AE ,GR,International Main Market,Standard GDRs,US02071M7056,GDR EACH REP 0.25 SHS REG S ,ACBD,0,160.00,Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 9-Jun-99,ALPHA BANK AE ,GR,International Main Market,Standard GDRs,US02071M4087,GDR EACH REP 0.25 OF 1 ORD REG'S(EUR) ,ACBE,0,0.00,Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 29-Nov-05,ALPHA PYRENEES TRUST ,GG,UK Main Market,Standard Shares,GB00B0P6FY18,ORD NPV ,ALPH,0.1156,"115,600,000.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 23-Mar-12,ALPHA REAL TRUST LTD ,GG,UK Main Market,,GB00B13VDP26,ORD NPV ,ARTL,42.64491055,"45,609,530.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 17-Dec-04,ALPHA RETURNS GRP PLC ,GB,AIM,,GB00B7FD9168,ORD GBP0.0001 ,ARGP ,2.60151520875,"693,737,389.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Mar-04,ALTERNATIVE ASSET OPPORTUNITIES ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0034353424,RED PTG PRF US TRADED LIFE INTERESTS ,TLI ,30.06,"72,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Sep-15,ALTERNATIVE LIQUIDITY FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYRGPD65,ORD USD0.01 ,ALF ,15.5988585758064,"144,961,273.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,USD,,,,,,,,,,,,,,,,,, 18-Feb-05,ALTERNATIVE NETWORKS ,GB,AIM,,GB00B05KXX82,ORD GBP0.00125 ,AN. ,145.91504178,"48,316,239.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 31-Dec-01,ALTIN AG ,CH,International Main Market,Standard Shares,CH0014424524,CHF17(REGD) ,AIA ,189.747513383309,"3,922,383.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSX3,SQSL,USD,,,,,,,,,,,,,,,,,, 7-Nov-05,ALTITUDE GROUP PLC ,GB,AIM,,GB00B0LSFV82,ORD GBP0.004 ,ALT ,9.4049703,"42,749,865.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Mar-05,ALTONA ENERGY PLC ,GB,AIM,,GB00B06GJT32,ORD GBP0.001 ,ANR ,3.40704162525,"801,656,853.00",Basic Materials,Basic Resources,Mining,Coal,1771,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-May-86,ALUMASC GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000280353,GBP0.125 ,ALU ,58.76834384,"35,834,356.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-Nov-10,ALUMINIUM BAHRAIN BSC ,BH,International Main Market,Standard GDRs,US0222082010,GDR EACH REPR 5 SHS REG'S ,ALBH,127.98576,"60,000,000.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Aluminum,1753,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 3-Aug-04,AMATI VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B641BB82,ORD GBP0.05 ,AT2 ,39.6815237,"34,884,856.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Mar-05,AMATI VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B05N8X20,ORD GBP0.10 ,ATI ,43.9890983375,"66,398,639.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 27-Mar-15,AMBRIAN PLC ,GB,AIM,,GB0003763140,ORD GBP0.01 ,AMBR ,9.297894125,"286,089,050.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Dec-82,AMEC FOSTER WHEELER PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000282623,ORD GBP0.50 ,AMFW,2111.6658781,"390,326,410.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-May-15,AMEDEO AIR FOUR PLUS LTD ,GG,UK Main Market,,GG00BWC53H48,ORD RED NPV ,AA4 ,563.29875,"544,250,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 25-Nov-04,AMEDEO RESOURCES PLC ,GB,AIM,,GB00BZ0XVY42,GBP0.1 ,AMED ,3.91846116,"32,653,843.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-Dec-11,AMERICAN MEDICAL INTERNATIONAL INC ,US,International Main Market,,,,,0,,,,,,6,,,,,,,,,,,,,,,,,,,,, 16-Nov-04,AMERISUR RESOURCES PLC ,GB,AIM,,GB0032087826,ORD GBP0.001 ,AMER ,329.26867558,"1,266,417,983.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 5-Dec-05,AMIAD WATER SYSTEMS LTD ,IL,AIM,,IL0010943905,ORD ILS0.50 ,AFS ,33.287859,"22,568,040.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Jul-95,AMINEX ,IE,International Main Market,Premium Equity Commercial Companies,IE0003073255,ORD EUR0.001 ,AEX ,61.870967134,"3,475,897,030.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-Jun-04,AMINO TECHNOLOGIES ,GB,AIM,,GB00B013SN63,ORD GBP0.01 ,AMO ,106.3576008,"72,106,848.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Aug-05,AMPHION INNOVATIONS PLC ,IM,AIM,,GB00B0DJNP99,ORD GBP0.01 ,AMP ,6.6490520625,"197,008,950.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-Apr-16,AMRYT PHARMA PLC ,GB,AIM,,GB00BDD1LS57,ORD GBP0.01 ,AMYT ,39.58452989,"208,339,631.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Nov-04,AMTEK AUTO ,IN,International Main Market,Standard GDRs,US03233Q1058,GDR EACH REPR 2 ORD INR2 'REGS ,AMKD,0,"9,415,000.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 15-Mar-06,AMUR MINERALS CORP ,VG,AIM,,VGG042401007,ORD NPV ,AMC ,23.002748483,"643,433,524.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 10-Oct-91,ANA HLDGS INC ,JP,International Main Market,Standard Shares,JP3429800000,NPV ,ANA ,6521.07302246397,"3,144,209,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SSX4,SXSN,JPY,,,,,,,,,,,,,,,,,, 16-May-16,ANDALAS ENERGY & POWER PLC ,IM,AIM,,IM00B1FPZP63,ORD NPV ,ADL ,4.674689953125,"2,493,167,975.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Oct-07,ANDES ENERGIA PLC ,GB,AIM,,GB00B7LHJ340,ORD GBP0.10 ,AEN ,90.8257203,"605,504,802.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 24-Dec-01,ANDREWS SYKES GROUP ,GB,AIM,,GB0002684552,ORD GBP0.01 ,ASY ,142.63452675,"42,262,082.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Mar-04,ANGLE PLC ,GB,AIM,,GB0034330679,ORD GBP0.10 ,AGL ,42.51200327,"70,267,774.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Jun-88,ANGLESEY MINING ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000320472,ORD GBP0.01 ,AYM ,2.569728816,"160,608,051.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-Jul-15,ANGLO AFRICAN AGRICULTURE PLC ,GB,UK Main Market,Standard Shares,GB00B7V2GY97,ORD GBP0.001 ,AAAP,0.6168248125,"94,896,125.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 24-May-99,ANGLO AMERICAN ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1XZS820,ORD USD0.54945 ,AAL ,10959.818658936,"1,405,465,332.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET0,FS00,GBX,,,,,,,,,,,,,,,,,, 29-Jul-05,ANGLO ASIAN MINING PLC ,GB,AIM,,GB00B0C18177,ORD GBP0.01 ,AAZ ,17.88493756,"112,661,024.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Dec-96,ANGLO PACIFIC GROUP ,GB,UK Main Market,Standard Shares,GB0006449366,ORD GBP0.02 ,APF ,157.4758344,"165,328,960.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 24-Apr-85,ANGLO-EASTERN PLANTATIONS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000365774,GBP0.25 ,AEP ,185.48990208,"39,976,272.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 15-Jan-08,ANIMALCARE GROUP PLC ,GB,AIM,,GB0032350695,ORD GBP0.20 ,ANCR ,54.0854016,"21,127,110.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Nov-06,ANPARIO PLC ,GB,AIM,,GB00B3NWT178,ORD GBP0.23 ,ANP ,54.86294625,"20,900,170.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Jul-82,ANTOFAGASTA ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000456144,ORD GBP0.05 ,ANTO,4878.333070165,"985,856,695.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 5-Jul-82,ANTOFAGASTA ,GB,UK Main Market,Standard Shares,GB0000455849,5% CUM PRF GBP1 ,70GD,4878.333070165,"2,000,000.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 30-Jul-03,ANTRIM ENERGY INC ,CA,AIM,,CA0372431027,COM NPV ,AEY ,4.618275,"184,731,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Mar-14,AO WORLD PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJTNFH41,ORD GBP0.0025 ,AO. ,736.84210425,"421,052,631.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Dec-02,AORTECH INTERNATIONAL ,GB,AIM,,GB0033360586,ORD GBP0.05 ,AOR ,1.5561546,"5,557,695.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Jun-15,APAX GLOBAL ALPHA LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BWWYMV85,ORD NPV ,APAX,611.42045616,"491,100,768.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 12-Nov-02,APC TECHNOLOGY GROUP PLC ,GB,AIM,,GB0000373984,ORD GBP0.02 ,APC ,11.1774495,"127,742,280.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-Jun-15,APPLEGREEN PLC ,IE,AIM,,IE00BXC8D038,EUR0.01(GBP) ,APGN ,311.986869845,"80,721,053.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Nov-13,APPLIED GRAPHENE MATERIALS PLC ,GB,AIM,,GB00BFSSB742,ORD GBP0.02 ,AGM ,33.609101375,"22,038,755.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Aug-16,APQ GLOBAL LTD ,GG,AIM,,GG00BZ6VP173,ORD NPV ,APQ ,81.567475,"78,055,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Mar-06,AQUA BOUNTY TECHNOLOGIES INC ,US,AIM,,US03842K1016,USD0.001 (DI) ,ABTU ,48.80184579,"157,425,309.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Feb-15,AQUATIC FOODS GROUP PLC ,JE,AIM,,JE00BQQG1J93,ORD NPV ,AFG ,16.98391215,"113,226,081.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Aug-15,AQUILA SERVICES GROUP PLC ,GB,UK Main Market,Standard Shares,GB00BPYP3Q26,ORD GBP0.05 ,AQSG,14.51086616,"32,608,688.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 15-Dec-97,ARAB POTASH CO ,JO,International Main Market,Standard GDRs,US0384601011,ADR EACH REPR 1 ORD JOD1 144A(BNY) ,88KZ,0,0.00,Basic Materials,Chemicals,Chemicals,Commodity Chemicals,1353,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 15-Dec-97,ARAB POTASH CO ,JO,International Main Market,Standard GDRs,US0384602001,ADR EACH REPR 1 ORD JOD1 REG'S' ,APOD,0,"7,000,000.00",Basic Materials,Chemicals,Chemicals,Commodity Chemicals,1353,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 27-Jun-05,ARBUTHNOT BANKING GROUP PLC ,GB,AIM,,GB0007922338,ORD GBP0.01 ,ARBB ,238.3574232,"15,279,322.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 4-Dec-00,ARCONTECH GROUP PLC ,GB,AIM,,GB0003353371,ORD GBP0.001 ,ARC ,6.7770202632,"1,540,231,878.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-Jul-06,ARDEN PARTNERS PLC ,GB,AIM,,GB00B15CTY44,ORD GBP0.10 ,ARDN ,6.12733056,"23,566,656.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Nov-08,ARGO GROUP LTD ,IM,AIM,,IM00B2RDSS92,ORD USD0.01 ,ARGO ,6.8271350175,"67,428,494.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Jul-10,ARGOS RESOURCES LTD ,FK,AIM,,FK0114538241,ORD GBP0.02 (DI) ,ARG ,9.88692705,"219,709,490.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-May-06,ARIAN SILVER CORP ,VG,AIM,,VGG0472G1147,ORD NPV(DI) ,AGQ ,1.6024564325,"183,137,878.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 28-Jul-05,ARIANA RESOURCES ,GB,AIM,,GB00B085SD50,ORD GBP0.001 ,AAU ,15.147752202,"841,541,789.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Apr-98,ARM HLDGS ,GB,UK Main Market,,,,,23017.97,,Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,,,,,,,,,,,,,,,,,,,,, 13-Feb-06,ARMADALE CAPITAL PLC ,GB,AIM,,GB00BYMSY631,ORD GBP0.001 ,ACP ,3.4312942575,"152,501,967.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Dec-13,ARRIA NLG PLC ,GB,AIM,,GB00BGDFLX36,WTS (TO SUB FOR ORD) ,NLGW ,18.221687195,"9,804,283.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Dec-13,ARRIA NLG PLC ,GB,AIM,,GB00BGDFBC25,ORD GBP0.001 ,NLG ,18.221687195,"123,399,360.00",Technology,Technology,Software & Computer Services,Software,9537,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 12-Sep-13,ARRICANO REAL ESTATE PLC ,CY,AIM,,CY0102941610,ORD EUR0.0005 (DI) ,ARO ,33.4362955887194,"103,270,637.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 11-Oct-13,ARROW GLOBAL GRP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BDGTXM47,ORD GBP0.01 ,ARW ,450.05268708,"174,439,026.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 16-Oct-98,ARTEMIS ALPHA TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004355946,ORD GBP0.01 ,ATS ,101.402001965,"42,589,063.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 16-Oct-98,ARTEMIS ALPHA TRUST ,GB,UK Main Market,Standard Shares,GB00B5SLGR82,SUBSCRIPTION SHS GBP0.01 ,ATSS,101.402001965,"6,894,338.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 14-Dec-04,ARTEMIS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B02WQ947,ORD GBP0.1 ,AAM ,32.32536899,"54,788,761.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Jan-07,ARTILIUM PLC ,GB,AIM,,GB00B1L7NQ30,ORD GBP0.05 ,ARTA ,16.58278058,"288,396,184.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Oct-05,ASA RESOURCE GROUP PLC ,GB,AIM,,GB00B0GN3470,ORD GBP0.01 ,ASA ,21.0435345125,"1,683,482,761.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Nov-04,ASCENT RESOURCES ,GB,AIM,,GB00BZ16J374,ORD GBP0.002 ,AST ,8.087096928,"634,282,112.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Feb-16,ASCENTIAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYM8GJ06,ORD GBP0.01 ,ASCL,1061.437625,"400,542,500.00",Consumer Services,Media,Media,Media Agencies,5555,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 5-Apr-07,ASEANA PROPERTIES LTD ,JE,UK Main Market,Standard Shares,JE00B1RZDJ41,ORD USD0.05 ,ASPL,71.8785740474998,"212,025,000.00",,,,,8733,SSX3,SQSL,USD,,,,,,,,,,,,,,,,,, 15-Jan-07,ASHLEY HOUSE PLC ,GB,AIM,,GB00B1KKCZ55,ORD GBP0.01 ,ASH ,4.2746837375,"58,961,155.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-Dec-85,ASHLEY(LAURA)HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000533728,ORD GBP0.05 ,ALY ,162.23818188,"729,160,368.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 27-Apr-16,ASHMORE GLOBAL OPPORTUNITIES LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYV0R619,ORD NPV GBP ,AGOL,31.9123240457087,"2,968,044.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBP,,,,,,,,,,,,,,,,,, 27-Apr-16,ASHMORE GLOBAL OPPORTUNITIES LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYV0RC73,ORD NPV USD ,AGOU,31.9123240457087,"7,467,648.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,USD,,,,,,,,,,,,,,,,,, 17-Oct-06,ASHMORE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B132NW22,ORD GBP0.0001 ,ASHM,2488.536360014,"707,372,473.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 22-Mar-95,ASHOK LEYLAND ,IN,PSM,Standard GDRs,USY0266N1192,GDR-EACH REPR 3 INR1(REG S) ,AKLD,0,"10,771,908.00",Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 22-Mar-95,ASHOK LEYLAND ,IN,PSM,Standard GDRs,US0448231029,GDR-EACH REPR 3 INR1(144A) ,AKLS,0,0.00,Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 6-Dec-85,ASHPOL ,GB,UK Main Market,Standard Shares,GB0000201946,10% CUM PRF GBP1 ,BC24,0,"1,061,750.00",,,,,7,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 8-Oct-90,ASHTEAD GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000536739,ORD GBP0.10 ,AHT ,6347.22882035,"501,757,219.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 16-Sep-96,ASIA CEMENT CORP ,TW,PSM,Standard GDRs,US04515P1049,GDR EACH REPR 10 SHS '144A' ,ASCD,59.1233929907038,"6,521,688.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 13-Dec-06,ASIAMET RESOURCES LTD ,BM,AIM,,BM04521V1038,USD0.01(DI) ,ARS ,14.01714378,"622,984,168.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Aug-05,ASIAN CITRUS HLDGS ,BM,AIM,,BMG0620W2019,ORD HKD0.01 ,ACHL ,67.4293703775,"1,254,499,914.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Oct-06,ASIAN GROWTH PROPERTIES ,VG,AIM,,VGG054341083,ORD USD0.05 (DI) ,AGP ,367.83434198,"886,347,812.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Nov-87,ASIAN TOTAL RETURN INVEST CO PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008710799,ORD GBP0.05 ,ATR ,369.1359312,"146,192,448.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 3-Oct-01,ASOS ,GB,AIM,,GB0030927254,ORD GBP0.035 ,ASC ,3779.3732922,"83,429,874.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 30-Mar-07,ASSETCO PLC ,GB,AIM,,GB00B42VYZ16,ORD GBP0.10 ,ASTO ,47.6282157,"12,212,363.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Nov-37,ASSOCIATED BRITISH ENGINEERING ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007395642,ORD GBP0.025 ,ASBE,1.024495,"2,048,990.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Aug-94,ASSOCIATED BRITISH FOODS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006731235,ORD GBP0.05681 ,ABF ,24084.72,"792,000,000.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 28-Jan-15,ASSURA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVGBWW93,ORD GBP0.10 ,AGR ,960.44649831,"1,641,788,886.00",Financials,Real Estate,Real Estate Investment Trusts,Specialty REITs,8675,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 1-Jun-93,ASTRAZENECA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009895292,ORD USD0.25 ,AZN ,60270.45588705,"1,227,754,245.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 9-May-05,ATALAYA MINING PLC ,CY,AIM,,CY0106002112,ORD GBP0.075 ,ATYM ,90.426655125,"116,679,555.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Sep-08,ATHELNEY TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000609296,ORD GBP0.25 ,ATY ,4.42365605,"2,157,881.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 25-Jul-96,ATKINS(WS) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000608009,ORD GBP0.005 ,ATK ,1497.5234404,"100,168,792.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 10-May-96,ATLANTIS JAPAN GROWTH FUND ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B61ND550,ORD NPV ,AJG ,126.30585744,"85,922,352.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 20-Feb-14,ATLANTIS RESOURCES LTD ,SG,AIM,,SG9999011118,ORD NPV (DI) ,ARL ,83.03919807,"116,956,617.00",Oil & Gas,Oil & Gas,Alternative Energy,Renewable Energy Equipment,583,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Oct-14,ATLAS AFRICAN INDUSTRIES LTD ,GG,AIM,,GG00B9B3DY50,ORD NPV ,ADSS ,2.94593036355,"2,561,678,577.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Dec-13,ATLAS MARA LTD ,VG,International Main Market,Standard Shares,VGG0697K1066,ORD NPV (DI) ,ATMA,240.496780362044,"103,683,948.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMU,SMEV,USD,,,,,,,,,,,,,,,,,, 20-Dec-13,ATLAS MARA LTD ,VG,International Main Market,Standard Misc Securities,VGG0697K1140,WTS (TO SUB FOR ORD) (DI) ,ATMW,240.496780362044,"32,529,500.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSX3,SQSL,USD,,,,,,,,,,,,,,,,,, 19-Aug-14,ATTRAQT GROUP PLC ,GB,AIM,,GB00BMJJFZ18,ORD GBP0.01 ,ATQT ,10.9116477,"26,942,340.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Aug-14,AUCTUS GROWTH PLC ,GB,UK Main Market,Standard Shares,GB00BNGMVP25,ORD GBP0.1 ,AUCT,1.912734585,"4,608,999.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQCL,GBX,,,,,,,,,,,,,,,,,, 20-May-14,AUDIOBOOM GRP PLC ,JE,AIM,,JE00B5NFKB77,ORD NPV(POST REORG) ,BOOM ,17.5131532125,"636,841,935.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Dec-04,AUGEAN ,GB,AIM,,GB00B02H2F76,ORD GBP0.10 ,AUG ,49.4517531,"102,490,680.00",Industrials,Industrial Goods & Services,Support Services,Waste & Disposal Services,2799,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Apr-06,AUKETT SWANKE GROUP PLC ,GB,AIM,,GB0000617950,ORD GBP0.01 ,AUK ,6.443332428,"165,213,652.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Apr-11,AUREUS MINING INC ,CA,AIM,,CA0515471070,ORD NPV (DI) ,AUE ,35.29836059,"1,227,769,064.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 14-Mar-97,AURORA INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000633262,ORD GBP0.25 ,ARR ,26.996095,"16,411,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Feb-05,AURUM MINING ,GB,AIM,,GB00B00T3528,ORD GBP0.01 ,AUR ,1.74306286,"174,306,286.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-Aug-16,AUTINS GROUP PLC ,GB,AIM,,GB00BD37ZH08,ORD GBP0.02 ,AUTG ,45.8595418,"22,100,984.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Mar-15,AUTO TRADER GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVYVFW23,ORD GBP0.01 ,AUTO,3705.218286315,"993,089,865.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Aug-06,AVACTA GROUP PLC ,GB,AIM,,GB00BYYW9G87,ORD GBP0.1 ,AVCT ,67.70043918,"68,384,282.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-May-10,AVANGARDCO INVESTMENTS PUBLIC LTD ,CY,International Main Market,Standard GDRs,US05349V2097,GDR EACH REPR 0.10 SHARE ,AVGR,5.71364999999998,"15,000,000.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 6-Oct-97,AVANTI CAPITAL ,GB,AIM,,GB0033869347,ORD GBP0.01 ,AVA ,0.64206016,"8,025,752.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 16-Apr-07,AVANTI COMMUNICATIONS GROUP PLC ,GB,AIM,,GB00B1VCNQ84,ORD GBP0.01 ,AVN ,53.062686,"147,396,350.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 24-May-06,AVARAE GLOBAL COINS PLC ,IM,AIM,,GB00B137SQ61,ORD GBP0.01 ,AVR ,10.10726075,"80,858,086.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Oct-10,AVATION PLC ,GB,UK Main Market,Standard Shares,GB00B196F554,ORD GBP0.01 ,AVAP,74.22378392,"51,904,744.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 17-May-07,AVESCO GROUP PLC ,GB,AIM,,GB0000653229,ORD GBP0.10 ,AVS ,47.88160375,"20,954,750.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Dec-96,AVEVA GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BBG9VN75,ORD GBP0.03555 ,AVV ,1218.754533,"63,943,050.00",Technology,Technology,Software & Computer Services,Software,9537,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 14-Oct-04,AVINGTRANS PLC ,GB,AIM,,GB0009188797,ORD GBP0.05 ,AVG ,54.301749605,"27,775,831.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Jun-90,AVIVA ,GB,UK Main Market,Standard Shares,GB0002124963,8.75% CUM IRRD PRF GBP1 ,AV.A,17459.9242274,"100,000,000.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Jun-90,AVIVA ,GB,UK Main Market,Standard Shares,GB0002114154,8.375% CUM IRRD PRF GBP1 ,AV.B,17459.9242274,"100,000,000.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Jun-90,AVIVA ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002162385,ORD GBP0.25 ,AV. ,17459.9242274,"4,004,242,350.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 8-Dec-11,AVOCET MINING ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BZBVR613,ORD GBP0.01 ,AVM ,20.1640583375,"20,949,671.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 12-Jul-49,AVON RUBBER ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000667013,ORD GBP1 ,AVON,255.942159,"31,023,292.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-May-05,AXA PROPERTY TRUST ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BD5J7902,ORD NPV ,APT ,32.53127055,"57,577,470.00",,,,,8737,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 5-Nov-15,AXIOM EUROPEAN FINCL DEBT FUND LTD ,GG,UK Main Market,,GG00BTC2K735,ORD NPV ,AXI ,51.67564479,"54,683,222.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 22-Mar-05,AXIS BANK LTD ,IN,PSM,Standard GDRs,US05462W1099,GDR EACH REPR 5 SHS REG S ,AXB ,0,"414,263,038.00",Financials,Banks,Banks,Banks,8355,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 22-Mar-05,AXIS BANK LTD ,IN,PSM,Standard GDRs,US05462W3079,GDR EACH REPR 5 SHS 144A ,AXBA,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 17-Jun-14,B & M EUROPEAN VALUE RETAIL SA ,LU,International Main Market,Premium Equity Commercial Companies,LU1072616219,ORD GBP0.1 (DI) ,BME ,2754,"1,000,000,000.00",Consumer Services,Retail,General Retailers,Broadline Retailers,5373,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 2-Feb-06,B.P.MARSH & PARTNERS ,GB,AIM,,GB00B0XLRJ79,ORD GBP0.10 ,BPM ,56.85235,"29,230,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Jun-98,B.S.D CROWN LTD ,IL,International Main Market,,IL0010830219,ORD NIS0.01 (DI) ,BSD ,0,"109,990,252.00",Technology,Technology,Software & Computer Services,Internet,9535,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 5-Mar-98,BAA LYNTON LTD ,GB,UK Main Market,Standard Debt,GB0005397640,10.25% 1ST MTG DEB STK 2017 GBP ,40HK,0,"30,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 14-Aug-89,BABCOCK INTL GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009697037,ORD GBP0.60 ,BAB ,5287.28244318,"505,476,333.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 25-Jul-14,BACANORA MINERALS LTD ,CA,AIM,,CA05634Q1054,ORD NPV (DI) ,BCN ,96.00817417,"107,874,353.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Oct-12,BACIT LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B8P59C08,ORD NPV ,BACT,757.933273575,"590,981,110.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Feb-81,BAE SYSTEMS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002634946,ORD GBP0.025 ,BA. ,16899.629124765,"3,138,278,389.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 15-Apr-14,BAGIR GRP LTD ,IL,AIM,,IL0011317216,ORD ILS0.04 (DI) ,BAGR ,3.15179125,"50,428,660.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Jun-10,BAHAMAS PETROLEUM COMPANY PLC ,IM,AIM,,IM00B3NTV894,ORD GBP0.00002 ,BPC ,18.2110906208,"1,230,479,096.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 9-Aug-04,BAILEY(C.H.) ,GB,AIM,,GB00B6SCF932,ORD GBP0.10 ,BLEY ,8.3700045,"7,609,095.00",Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Dec-81,BAILLIE GIFFORD JAPAN TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000485838,ORD GBP0.05 ,BGFD,352.3062375,"68,078,500.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 1-Jul-85,BAILLIE GIFFORD SHIN NIPPON ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000706274,GBP0.10 ,BGS ,165.16312974,"30,900,492.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 4-Nov-94,BAJAJ HLDGS & INVESTMENT LTD ,IN,PSM,Standard GDRs,US0571001090,GDR EACH REPR 1 SHS INR10'144A' ,BAUA,2204.46136410083,0.00,Financials,Financial Services,Financial Services,Specialty Finance,8775,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 4-Nov-94,BAJAJ HLDGS & INVESTMENT LTD ,IN,PSM,Standard GDRs,US0571002080,GDR EACH REPR 1 SHS INR10 REG'S' ,BAUD,2204.46136410083,"111,295,287.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 28-Apr-10,BAKER STEEL RESOURCES TRUST LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B6686L20,ORD NPV ,BSRT,35.05803082,"113,090,422.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Jun-45,BALFOUR BEATTY ,GB,UK Main Market,Standard Shares,GB0000978204,10.75P GROSS(NET PD)CUM CNV RED PRF 1P ,BBYB,2117.551734313,"145,879,202.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSX3,SQCL,GBX,,,,,,,,,,,,,,,,,, 28-Jun-45,BALFOUR BEATTY ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000961622,ORD GBP0.50 ,BBY ,2117.551734313,"687,450,656.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Mar-00,BANCA LOMBARDA PREFERRED SECURITIES,US,International Main Market,Standard Debt,XS0108805564,STEP UP NON VTG NON CUM PFD SEC EUR1000 ,82OU,0,"155,000.00",,,,,7,MISL,FSLL,EUR,,,,,,,,,,,,,,,,,, 3-Oct-88,BANCO BILBAO VIZCAYA ARGENTARIA SA ,ES,International Main Market,Standard Shares,ES0113211835,EUR0.49 ,BVA ,30769.6229540816,"6,519,748,906.00",Financials,Banks,Banks,Banks,8355,SSMU,SMEV,EUR,,,,,,,,,,,,,,,,,, 1-Jul-05,BANCO SANTANDER SA ,ES,International Main Market,Standard Shares,ES0113900J37,ORD EUR0.50(CDI) ,BNC ,49750.14414933,"14,483,302,518.00",Financials,Banks,Banks,Banks,8355,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 30-Jun-05,BANGO ,GB,AIM,,GB00B0BRN552,ORD GBP0.20 ,BGO ,53.3705392,"60,648,340.00",Technology,Technology,Software & Computer Services,Internet,9535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Oct-97,BANK AUDI S.A.L. ,LB,International Main Market,,US0605721127,GDR EACH REPR 1 SH REG S ,BQAD,154.142849699999,"32,900,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 24-Oct-97,BANK AUDI S.A.L. ,LB,International Main Market,,US0605721044,GDR EACH REPR 1 SH 144A ,43KV,154.142849699999,"1,837,257.00",Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 5-Oct-05,BANK MUSCAT ,OM,International Main Market,Standard GDRs,US0637462005,GDR EACH REPR 4 ORD REG'S' ,BKM ,19.9134468587399,"6,878,765.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 5-Oct-05,BANK MUSCAT ,OM,International Main Market,Standard GDRs,US0637461015,GDR EACH REPR 4 ORD '144A' ,BKMA,19.9134468587399,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 4-Apr-96,BANK OF AMERICA CORP ,US,International Main Market,Standard Shares,US0605051046,USD0.01 ,BAC ,111789.084565956,"10,481,392,733.00",Financials,Banks,Banks,Banks,8355,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 18-May-98,BANK OF GREECE ,GR,International Main Market,,,,,0,,,,,,6,,,,,,,,,,,,,,,,,,,,, 14-Jan-59,BANK OF IRELAND(GOVERNOR & CO OF) ,IE,International Main Market,Standard Debt,IE0000730808,NON-CUM PRF'A'GBP1&GBP9 LIQUIDATION ,BKIC,5557.80984316269,"5,000,000.00",Financials,Banks,Banks,Banks,8355,SSX4,SXSN,GBP,,,,,,,,,,,,,,,,,, 14-Jan-59,BANK OF IRELAND(GOVERNOR & CO OF) ,IE,International Main Market,Standard Debt,IE0000730790,UTS NON-CUM EURO PRF STK EUR1.27'A' ,BKIE,5557.80984316269,"10,500,000.00",Financials,Banks,Banks,Banks,8355,SSX4,SXSN,EUR,,,,,,,,,,,,,,,,,, 14-Jan-59,BANK OF IRELAND(GOVERNOR & CO OF) ,IE,International Main Market,Premium Equity Commercial Companies,IE0030606259,ORD EUR0.05 ,BKIR,5557.80984316269,"32,363,279,231.00",Financials,Banks,Banks,Banks,8355,SET3,OL10,EUR,,,,,,,,,,,,,,,,,, 3-Nov-00,BANK PEKAO SA ,PL,International Main Market,Standard GDRs,US0644511075,GDS EACH REPR 1 PLN1 144A ,85PL,99.4822646999997,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 3-Nov-00,BANK PEKAO SA ,PL,International Main Market,Standard GDRs,US0644512065,GDS EACH REPR 1 PLN1 REG'S ,BPKD,99.4822646999997,"4,100,000.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 2-Apr-57,BANKERS INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0000769595,10.5% DEB STK 2016 ,98GF,817.17847836,"10,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 2-Apr-57,BANKERS INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000767003,GBP0.25 ,BNKR,817.17847836,"124,002,804.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 2-Apr-57,BANKERS INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0000871771,8% DEB STK 2023 ,BA88,817.17847836,"15,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 7-Jul-05,BANKERS PETROLEUM LTD ,CA,AIM,,CA0662863038,COM NPV(CDI) ,BNK ,287.058525,"252,915,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Feb-98,BANQUE INTL ARABE DE TUNISIE ,TN,International Main Market,Standard GDRs,US06675A1088,GDR EACH REPR 1/2 ORD TND10 (144A)(BNY) ,96LE,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 18-Feb-98,BANQUE INTL ARABE DE TUNISIE ,TN,International Main Market,Standard GDRs,US06675A2078,GDR EACH REPR 1/2 ORD TND10(REG'S')(BNY),BIND,0,"3,838,986.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 10-Apr-96,BANQUE MAROCAINE DU COMM EXTERIEUR ,MA,International Main Market,Standard GDRs,US06674P2056,GDR EACH REPR 1/3 ORD MAD10(REG S) ,BMED,231.378753912767,"47,625,417.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 10-Apr-96,BANQUE MAROCAINE DU COMM EXTERIEUR ,MA,International Main Market,Standard GDRs,US06674P1066,GDR EACH REPR 1/3 ORD MAD10(144A) ,69IR,231.378753912767,"4,724,409.00",Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 3-Aug-07,BARCLAYS BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B28YJW21,PELS'90' 20/11/17(WORLD BASKET P/WT)GBP1,83SF,0,"8,000,000.00",,,,,7,CWTR,UIDW,GBP,,,,,,,,,,,,,,,,,, 3-Aug-07,BARCLAYS BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B23DM470,PUT WTS REL BSKT INDICES 2/08/17 '86' ,47MC,0,"20,000,000.00",,,,,7,CWTR,UIDW,GBP,,,,,,,,,,,,,,,,,, 3-Aug-07,BARCLAYS BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B28YJT91,CALL WTS 20/11/17(BSK INDC) GBP1 PELS'90,83SK,0,"8,000,000.00",,,,,7,CWTR,UIDW,GBP,,,,,,,,,,,,,,,,,, 31-Dec-53,BARCLAYS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031348658,ORD GBP0.25 ,BARC,22022.4669691,"12,785,176,760.00",Financials,Banks,Banks,Banks,8355,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 18-Dec-02,BARING EMERGING EUROPE PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0032273343,ORD GBP0.10 ,BEE ,102.2922401725,"16,845,161.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 7-Mar-69,BARLOWORLD ,ZA,International Main Market,Standard Shares,ZAE000026639,ORD ZAR0.05 ,BWO ,1263.9487695,"214,228,605.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 14-Jul-04,BARON OIL PLC ,GB,AIM,,GB00B01QGH57,ORD GBP0.00025 ,BOIL ,6.2815630485,"1,322,434,326.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Jan-01,BARONSMEAD SECOND VENTURE TRUST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030028103,ORD GBP0.10 ,BMD ,147.06948812,"153,999,464.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Mar-06,BARONSMEAD VCT 5 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0YZHK97,ORD GBP0.10 ,BAV ,55.081433295,"73,197,918.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-Apr-98,BARONSMEAD VENTURE TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002631934,GBP0.10 ,BVT ,157.70789192,"174,262,864.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 2-Apr-70,BARR(A.G.) ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B6XZKY75,ORD GBP0.04167 ,BAG ,592.60154835,"116,768,778.00",Consumer Goods,Food & Beverage,Beverages,Soft Drinks,3537,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Dec-68,BARRATT DEVELOPMENTS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000811801,ORD GBP0.10 ,BDEV,4818.66150688,"975,437,552.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 8-Jan-13,BASE RESOURCES LTD ,AU,AIM,,AU000000BSE5,NPV (DI) ,BSE ,58.57855648,"732,231,956.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-May-80,BASF SE ,DE,International Main Market,Standard Shares,DE000BASF111,NPV ,BFA ,37913.4563525996,"611,993,800.00",Basic Materials,Chemicals,Chemicals,Commodity Chemicals,1353,SSMU,SMEU,EUR,,,,,,,,,,,,,,,,,, 12-Jul-99,BATM ADVANCED COMMUNICATIONS ,IL,International Main Market,Premium Equity Commercial Companies,IL0010849045,ORD ILS0.01 ,BVC ,71.19146641,"401,078,684.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 11-Nov-60,BBA AVIATION PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1FP8915,ORD GBP0.297619047 ,BBA ,2501.38540455,"1,037,919,255.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 11-Nov-60,BBA AVIATION PLC ,GB,UK Main Market,Standard Debt,GB0000677822,5% CUM PRF GBP1 ,77GE,2501.38540455,"199,332.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 21-Dec-11,BBGI SICAV SA ,LU,International Main Market,Premium Equity Closed Ended Investment Funds,LU0686550053,ORD NPV (DI) ,BBGI,515.00457309,"350,343,247.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 13-Apr-95,BBVA CAPITAL FUNDING ,KY,International Main Market,Standard Shares,KYG089961117,'A'9% N-CUM GTD N.VTG DM EURO PRF(BR) ,77GD,0,"2,090,000.00",,,,,7,SSX4,SXSN,EUR,,,,,,,,,,,,,,,,,, 26-Mar-98,BBVA INTERNATIONAL ,ES,International Main Market,Standard Debt,KYG0731H1011,SER'A'7.2% NON CUM GTD PRF ,80LJ,0,"3,500,000.00",,,,,7,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 2-Apr-15,BCA MARKETPLACE PLC ,GB,UK Main Market,Standard Shares,GB00BP0S1D85,GBP0.01 ,BCA ,1548.79067612,"780,247,192.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 28-May-14,BCRE BRACK CAPITAL REAL EST INV NV ,NL,International Main Market,Standard Shares,NL0010763611,ORD EUR0.01 (DI) ,BCRE,163.731189763688,"161,561,314.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQS3,EUR,,,,,,,,,,,,,,,,,, 10-May-16,BE HEARD GROUP PLC ,GB,AIM,,GB00BT6SJV45,ORD GBP0.01 ,BHRD ,20.59694806125,"680,890,845.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Apr-16,BEAZLEY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYQ0JC66,ORD GBP0.05 ,BEZ ,2038.98461264,"523,353,340.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Oct-04,BEGBIES TRAYNOR GROUP PLC ,GB,AIM,,GB00B0305S97,ORD GBP0.05 ,BEG ,48.97978311625,"105,616,783.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 21-May-79,BELLWAY ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000904986,ORD GBP0.125 ,BWY ,2829.8035701,"121,450,797.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Apr-10,BELLZONE MINING PLC ,JE,AIM,,JE00B3N0SJ29,ORD NPV ,BZM ,3.3553624819,"1,458,853,253.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 21-Feb-12,BELVOIR LETTINGS PLC ,GB,AIM,,GB00B4QY1P51,ORD GBP0.01 ,BLV ,45.7957968,"33,673,380.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Dec-15,BENCHMARK HLDGS PLC ,GB,AIM,,GB00BGHPT808,GBP0.001 ,BMK ,308.90346624,"482,661,666.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-May-05,BEOWULF MINING ,GB,AIM,,GB0033163287,ORD GBP0.01 ,BEM ,21.01803512,"525,450,878.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Mar-81,BERENDSEN PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0F99717,ORD GBP0.30 ,BRSN,2104.740512,"171,815,552.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Dec-06,BERKELEY ENERGIA LTD ,AU,AIM,,AU000000BKY0,ORD NPV (DI) ,BKY ,86.571141765,"199,014,119.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Dec-85,BERKELEY GROUP HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B02L3W35,ORD GBP0.05 ,BKG ,3574.94479168,"133,792,844.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 14-Aug-06,BEST OF THE BEST PLC ,GB,AIM,,GB00B16S3505,ORD GBP0.05 ,BEST ,18.9785025,"9,372,100.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,BET ,GB,UK Main Market,Standard Debt,GB0001331007,4.5% 2ND DEB STK ,84GK,0,"304,349.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,BET ,GB,UK Main Market,Standard Debt,GB0001330819,5% PERP DEB STK ,83GK,0,"1,315,663.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 8-Jul-10,BETTER CAPITAL PCC LD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B5885941,ORD GBP1.00 (2009) ,BCAP,295.82845698,"206,780,952.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Jul-10,BETTER CAPITAL PCC LD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B4N1RV71,ORD GBP1.00 (2012) ,BC12,295.82845698,"346,600,520.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 21-Oct-05,BEXIMCO PHARMACEUTICALS ,BD,AIM,,US0885792061,GDR (EACH REPR 1 ORD BDT10)'REGS' ,BXP ,135.2912284,"358,387,360.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 29-Sep-06,BEZANT RESOURCES PLC ,GB,AIM,,GB00B1CKQD97,ORD GBP0.002 ,BZT ,2.394580335,"136,833,162.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Feb-12,BGEO GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B759CR16,ORD GBP0.01 ,BGEO,1029.88110444,"35,909,383.00",Financials,Banks,Banks,Banks,8355,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-May-08,BH GLOBAL LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B2QQPS89,ORD USD NPV ,BHGU,570.181438359909,"13,827,893.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,USD,,,,,,,,,,,,,,,,,, 29-May-08,BH GLOBAL LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B2QQPT96,ORD GBP NPV ,BHGG,570.181438359909,"35,094,357.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 14-Mar-07,BH MACRO LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1NPGZ52,ORD NPV (EUR) ,BHME,1043.89015433197,"7,279,751.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON5 ,EUR,,,,,,,,,,,,,,,,,, 14-Mar-07,BH MACRO LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1NPGV15,ORD NPV (USD) ,BHMU,1043.89015433197,"22,131,147.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON5 ,USD,,,,,,,,,,,,,,,,,, 14-Mar-07,BH MACRO LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1NP5142,ORD NPV (GBP) ,BHMG,1043.89015433197,"33,134,509.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 28-Jul-97,BHP BILLITON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000566504,ORD USD0.50 ,BLT ,20907.398708604,"2,112,071,796.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 7-Jun-02,BIG YELLOW GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002869419,ORD GBP0.10 ,BYG ,1169.73385834,"154,624,436.00",Financials,Real Estate,Real Estate Investment Trusts,Specialty REITs,8675,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Mar-15,BILBY PLC ,GB,AIM,,GB00BV9GHQ09,ORD GBP0.10 ,BILB ,44.89459603,"39,729,731.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Jun-05,BILLING SERVICES GROUP ,BM,AIM,,BMG110261044,USD0.59446 ,BILL ,11.995515435,"282,247,422.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Sep-95,BILLINGTON HLDGS PLC ,GB,AIM,,GB0000332667,ORD GBP0.10 ,BILN ,32.658312125,"12,933,985.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 13-Jul-10,BIOME TECHNOLOGIES PLC ,GB,AIM,,GB00B9Z1M820,ORD GBP0.05 ,BIOM ,2.9225688,"2,435,474.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Mar-54,BIOQUELL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004992003,ORD GBP0.10 ,BQE ,56.867311875,"41,358,045.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Jun-97,BIOTECH GROWTH TRUST PLC (THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000385517,ORD GBP0.25 ,BIOG,375.00912335,"54,152,942.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 29-Apr-14,BIOVENTIX PLC ,GB,AIM,,GB00B4QVDF07,ORD GBP0.05 ,BVXP ,57.35988,"5,098,656.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Mar-48,BISICHI MINING ,GB,UK Main Market,Standard Shares,GB0001012045,GBP0.10 ,BISI,6.9561,"10,620,000.00",Basic Materials,Basic Resources,Mining,Coal,1771,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 13-Dec-05,BLACKROCK COMMODITIES INC INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0N8MF98,ORD GBP0.01 ,BRCI,67.378074375,"92,935,275.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 29-Nov-94,BLACKROCK EMERGING EUROPE PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0BN1P96,ORD USD0.10 ,BEEP,107.01645287,"42,636,037.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 17-Dec-10,BLACKROCK FRONTIERS INVESTMENT TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3SXM832,ORD USD0.01 ,BRFI,205.416385,"164,333,108.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Sep-04,BLACKROCK GREATER EUROPE INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B01RDH75,ORD GBP0.001 ,BRGE,336.13933264,"123,580,637.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Dec-01,BLACKROCK INCOME & GROWTH INV TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030961691,ORD GBP0.01 ,BRIG,48.00523848,"25,809,268.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 24-Mar-52,BLACKROCK INCOME STRATEGIES TR PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001297562,ORD GBP0.25 ,BIST,314.315039255,"280,013,398.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Jul-90,BLACKROCK LATIN AMERICAN INV TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005058408,ORD USD0.10 ,BRLA,162.94663071,"41,462,247.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 24-Oct-12,BLACKROCK NORTH AMERICAN INC TR PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B7W0XJ61,ORD GBP0.1 ,BRNA,1629.68017730625,"1,154,777,805.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,BLACKROCK SMALLER COMPANIES TST PLC,GB,UK Main Market,Standard Debt,GB0000545466,7.75% DEB STK 2022 ,BD96,428.76353736,"15,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 25-Mar-73,BLACKROCK SMALLER COMPANIES TST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006436108,ORD GBP0.25 ,BRSC,428.76353736,"47,879,792.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 8-Jun-62,BLACKROCK THROGMORTON TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008910555,ORD GBP0.05 ,THRG,239.86746928,"73,130,326.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 15-Dec-93,BLACKROCK WORLD MINING TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005774855,ORD GBP0.05 ,BRWM,495.83923002,"176,455,242.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 23-Jul-14,BLACKSTONE / GSO LOAN FINANCING LTD,JE,UK Main Market,,JE00BNCB5T53,ORD NPV ,BGLF,264.351662968574,"328,119,700.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,EUR,,,,,,,,,,,,,,,,,, 3-Apr-07,BLANCCO TECHNOLOGY GROUP PLC ,GB,AIM,,GB00B06GNN57,ORD GBP0.02 ,BLTG ,176.615508765,"79,022,599.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Apr-85,BLD PROPERTY HLDGS ,GB,UK Main Market,Standard Debt,GB0000526474,9.125% 1ST MTG DEB STK 2020 ,09GE,0,"30,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 25-Sep-02,BLENHEIM NATURAL RESOURCES PLC ,GB,AIM,,GB00BYQ5L258,ORD GBP0.001 ,BNR ,0.598945425,"184,290,900.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-May-06,BLOM BANK SAL ,LB,Trading Only,,US0936881095,GDS EACH REPR 1 ORD'B'SHS(REG'S') ,BLBD,0,"73,896,010.00",,,,,0,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 23-Jun-94,BLOOMSBURY PUBLISHING ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033147751,ORD GBP0.0125 ,BMY ,119.97600282,"74,059,261.00",Consumer Services,Media,Media,Publishing,5557,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Dec-12,BLUE CAPITAL GLOBAL REINSURANCE FD ,BM,International Main Market,,BMG1189R1043,ORD VTG NON RED PTG USD0.00001 (DI) ,BCGR,308.297410676022,"430,516,354.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 16-Aug-06,BLUE PLANET FIN GRWTH&INC INV TST ,GB,UK Main Market,,GB00B1B9C408,UTS(COMPR 1 ORD NO.1-NO.10) ,BPFU,0,"13,653,200.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 24-Mar-99,BLUE PLANET INVESTMENT TR PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005327076,ORD GBP0.01 ,BLP ,18.080926875,"48,215,805.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 18-Mar-16,BLUE PRISM GROUP PLC ,GB,AIM,,GB00BYQ0HV16,ORD GBP0.01 ,PRSM ,169.21383296,"62,210,968.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Oct-04,BLUE STAR CAPITAL PLC ,GB,AIM,,GB00B02SSZ25,ORD GBP0.001 ,BLU ,0.747993933,"498,662,622.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Apr-16,BLUEBIRD MERCHANT VENTURES LTD ,VG,International Main Market,Standard Shares,VGG118701058,ORD NPV (DI) ,BMV ,3.9304816,"184,963,840.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 12-Jul-13,BLUEFIELD SOLAR INCOME FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BB0RDB98,ORD NPV ,BSIF,314.276241475,"309,631,765.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 4-Sep-13,BLUEROCK DIAMONDS PLC ,GB,AIM,,GB00B84H1764,ORD GBP0.01 ,BRD ,3.540917925,"38,804,580.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Oct-12,BLUR GROUP PLC ,GB,AIM,,GB00B8DX2616,ORD GBP0.01 ,BLUR ,2.94330325,"47,092,852.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Apr-00,BMR GROUP PLC ,GB,AIM,,GB00BWV0F181,ORD GBP0.01 ,BMR ,9.34345538,"173,831,728.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Jan-72,BODYCOTE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B3FLWH99,ORD GBP0.1727272 ,BOY ,1128.906757265,"191,178,113.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 14-Jan-80,BOEING CO ,US,International Main Market,Standard Shares,US0970231058,USD5 ,BOE ,72225.4497389998,"729,000,000.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 30-Dec-97,BOND INTERNATIONAL SOFTWARE ,GB,AIM,,GB0002369352,ORD GBP0.01 ,BDI ,45.91820546,"42,126,794.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-Oct-15,BONMARCHE HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BF8H6F45,ORD GBP0.01 ,BON ,61.022143,"50,018,150.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 14-Mar-14,BOOHOO.COM PLC ,JE,AIM,,JE00BG6L7297,ORD GBP0.01 ,BOO ,923.99839175,"1,123,402,300.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 1-Jul-09,BOOKER GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01TND91,ORD GBP0.01 ,BOK ,3036.67643016,"1,724,404,560.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 3-Dec-74,BOOT(HENRY) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001110096,ORD GBP0.10 ,BHY ,264.340160975,"129,896,885.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 3-Dec-74,BOOT(HENRY) ,GB,UK Main Market,Standard Shares,GB0001111284,CUM PRF(5.25%)GBP1 ,BD82,264.340160975,0.00,Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 24-May-05,BORDERS & SOUTHERN PETROLEUM ,GB,AIM,,GB00B08F4599,ORD GBP0.01 ,BOR ,8.710171272,"483,898,404.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 30-Aug-16,BOS GLOBAL HLDGS NL ,AU,AIM,,AU000XINEAC2,ORD NPV (DI) ,BOS ,4.875,"50,000,000.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Feb-11,BOTSWANA DIAMONDS PLC ,GB,AIM,,GB00B5TFC825,ORD GBP0.0025 ,BOD ,5.3479984545,"274,256,331.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jul-08,BOUSSARD & GAVAUDAN HOLDING ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B39VMM07,ORD EUR0.0001 GBP SHS ,BGHS,492.257637929495,"1,496,750.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Jul-08,BOUSSARD & GAVAUDAN HOLDING ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1FQG453,ORD EUR0.0001 ,BGHL,492.257637929495,"30,647,320.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,EUR,,,,,,,,,,,,,,,,,, 9-Dec-97,BOVIS HOMES GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001859296,ORD GBP0.50 ,BVS ,1198.34383872,"133,743,732.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 7-Dec-04,BOWLEVEN ,GB,AIM,,GB00B04PYL99,ORD GBP0.1 ,BLVN ,89.9594652,"327,125,328.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 13-Sep-06,BOXHILL TECHNOLOGIES PLC ,GB,AIM,,GB00B1DWH640,ORD GBP0.001 ,BOX ,4.4108443056,"1,837,851,794.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Dec-54,BP ,GB,UK Main Market,Standard Shares,GB0001385474,9% CUM 2ND PRF GBP1 ,BP.B,80288.531993161,"5,473,414.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Dec-54,BP ,GB,UK Main Market,Standard Shares,GB0001385250,8% CUM 1ST PRF GBP1 ,BP.A,80288.531993161,"7,232,838.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Dec-54,BP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007980591,ORD USD0.25 ,BP. ,80288.531993161,"18,758,751,584.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 28-Jun-04,BRADY ,GB,AIM,,GB00B0188P35,ORD GBP0.01 ,BRY ,56.69703456,"83,377,992.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Nov-97,BRAEMAR SHIPPING SERVICES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000600931,ORD GBP0.10 ,BMS ,110.4197247525,"29,712,674.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 27-Jun-07,BRAIME(T.F.& J.H.)(HLDGS) ,GB,AIM,,GB0001185056,ORD 0.25 ,BMTO ,4.545,"480,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Jun-07,BRAIME(T.F.& J.H.)(HLDGS) ,GB,AIM,,GB0001185270,'A'ORD NON VOTING GBP0.25 ,BMT ,4.545,"120,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-Dec-06,BRAINJUICER GROUP PLC ,GB,AIM,,GB00B1GVQH21,ORD GBP0.01 ,BJU ,54.2501502,"12,616,314.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Oct-54,BRAMMER ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001195089,ORD GBP0.20 ,BRAM,147.48115315,"128,244,481.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 12-Nov-13,BRAVE BISON GROUP PLC ,GB,AIM,,GB00BF8HJ774,ORD GBP0.001 ,BBSN ,29.30832289375,"571,869,715.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Mar-07,BRAVEHEART INVESTMENT GROUP ,GB,AIM,,GB00B13XV322,ORD GBP0.02 ,BRH ,3.7932398,"27,094,570.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Sep-10,BREEDON GROUP PLC ,JE,AIM,,JE00B2419D89,ORD NPV ,BREE ,1024.00056097625,"1,395,571,463.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 9-Jun-94,BREWIN DOLPHIN HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001765816,ORD GBP0.01 ,BRW ,743.969527367,"280,637,317.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Apr-16,BRIGHTON PIER GROUP PLC (THE) ,GB,AIM,,GB00BG49KW66,ORD GBP0.25 ,PIER ,37.220812225,"31,677,287.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jul-97,BRISTOL & WEST PLC ,GB,UK Main Market,Standard Shares,GB0000510205,PRF SHS GBP1 ,BWSA,0,"125,000,000.00",,,,,7,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 29-Oct-92,BRISTOL WATER ,GB,UK Main Market,Standard Shares,GB0001257988,8.75% CUM IRRD PRF GBP1 ,BWRA,0,"12,500,000.00",,,,,7,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Jun-47,BRITISH & AMERICAN INVESTMENT TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000653112,ORD GBP1 ,BAF ,20,"25,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Jan-62,BRITISH AMERICAN TOBACCO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002875804,ORD GBP0.25 ,BATS,87951.34840275,"1,861,404,199.00",Consumer Goods,Personal & Household Goods,Tobacco,Tobacco,3785,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 17-Jun-43,BRITISH EMPIRE TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001335081,ORD GBP0.10 ,BTEM,726.14349708,"128,748,847.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 17-Jun-43,BRITISH EMPIRE TRUST PLC ,GB,UK Main Market,Standard Debt,GB0001335867,8.125% DEB STK 2023 ,BREM,726.14349708,"15,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBP,,,,,,,,,,,,,,,,,, 20-Mar-51,BRITISH LAND CO PLC ,GB,UK Main Market,Standard Debt,GB0001368538,11.375% 1ST MTG DEB STK 2019/24 ,BA68,6767.07971862,"20,381,170.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 20-Mar-51,BRITISH LAND CO PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001367019,ORD GBP0.25 ,BLND,6767.07971862,"1,020,675,674.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 20-Mar-51,BRITISH LAND CO PLC ,GB,UK Main Market,Standard Debt,GB0001367126,10.5% DFD 1ST MTG DEB STK 2019/24 ,BA45,6767.07971862,"12,561,841.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 4-Apr-96,BRITISH SMALLER COMPANIES VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001403152,ORD GBP 0.10 ,BSV ,96.935722845,"105,652,014.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 12-Apr-01,BRITISH SMALLER COMPANIES VCT2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005001796,ORD GBP0.10 ,BSC ,57.57890318,"99,273,971.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 14-Dec-05,BRITVIC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0N8QD54,ORD GBP0.2 ,BVIC,1555.197007825,"242,054,009.00",Consumer Goods,Food & Beverage,Beverages,Soft Drinks,3537,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 11-Mar-05,BROOKS MACDONALD GROUP ,GB,AIM,,GB00B067N833,ORD GBP0.01 ,BRK ,274.2348525,"13,643,525.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 13-Nov-72,BROWN(N.)GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1P6ZR11,ORD GBP0.1105263157 ,BWNG,577.912656706,"283,429,454.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 3-Apr-50,BRUNNER INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0001490449,5% CUM PRF STK ,44GL,250.80320694,"450,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBP,,,,,,,,,,,,,,,,,, 3-Apr-50,BRUNNER INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001490001,ORD GBP 0.25 ,BUT ,250.80320694,"43,019,418.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 3-Dec-84,BT GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0030913577,ORD GBP0.05 ,BT.A,38187.6276440335,"9,884,205,421.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 6-Jul-95,BTG PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001001592,ORD GBP0.10 ,BTG ,2187.98150022,"364,056,822.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Jun-57,BUNZL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0744B38,ORD GBP0.32142857 ,BNZL,7811.1369738,"331,261,110.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 18-Jul-02,BURBERRY GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031743007,ORD GBP0.0005 ,BRBY,5712.77276584,"438,096,071.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 21-Oct-09,BURFORD CAPITAL LTD ,GG,AIM,,GG00B4L84979,ORD NPV ,BUR ,799.77272514,"204,545,454.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Mar-12,BUSHVELD MINERALS LTD ,GG,AIM,,GG00B4TM3943,ORD GBP0.01 ,bmn ,8.33630849625,"585,004,105.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Feb-09,BYBLOS BANK ,LB,International Main Market,Standard GDRs,US12431A1016,GDR EACH REPR 50 ORD 'REG S' ,BYB ,56.7403535999998,"931,000.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 6-Jul-05,BYOTROL PLC ,GB,AIM,,GB00B0999995,ORD GBP0.0025 ,BYOT ,12.39738488125,"268,051,565.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-May-04,C&C GROUP ,IE,International Main Market,Premium Equity Commercial Companies,IE00B010DT83,ORD EUR0.01 ,CCR ,996.505899181199,"310,242,361.00",Consumer Goods,Food & Beverage,Beverages,Distillers & Vintners,3535,SET3,OL5 ,EUR,,,,,,,,,,,,,,,,,, 15-Sep-94,C.G.I.S. GROUP ,GB,UK Main Market,Standard Debt,GB0001547701,9.625% 1ST MTG DEB STK 2019 ,51GL,0,"145,999,570.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 23-Oct-14,C4X DISCOVERY HLDG PLC ,GB,AIM,,GB00BQQ2RV18,ORD GBP0.01 ,C4XD ,38.2555845,"34,004,964.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Jun-08,CADOGAN PETROLEUM ,GB,UK Main Market,Standard Shares,GB00B12WC938,ORD GBP0.03 ,CAD ,17.043010515,"231,091,668.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 20-Oct-61,CAFFYNS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001615219,ORD GBP0.50 ,CFYN,16.3301192,"2,673,057.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 20-Oct-61,CAFFYNS ,GB,UK Main Market,Standard Shares,GB0001615540,11% CUM PRF GBP1 ,79GL,16.3301192,"648,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 20-Oct-61,CAFFYNS ,GB,UK Main Market,Standard Shares,GB0001615433,7% CUM 1ST PRF GBP1 ,78GL,16.3301192,"389,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 22-Dec-88,CAIRN ENERGY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B74CDH82,ORD GBP0.13668639 ,CNE ,1071.593532387,"577,056,291.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Jun-15,CAIRN HOMES PLC ,IE,International Main Market,Standard Shares,IE00BWY4ZF18,ORD EUR0.001 ,CRN ,585.03722865684,"649,274,623.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SSMU,SMEU,EUR,,,,,,,,,,,,,,,,,, 8-Apr-10,CALCULUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B631ZQ22,ORD GBP0.01 ,CLC ,5.24653742,"5,252,806.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 8-Apr-10,CALCULUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYQPF348,ORD GBP0.01 D ,CLCD,5.24653742,"1,812,084.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 8-Apr-10,CALCULUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3RNDW55,ORD GBP0.01 C ,CLCC,5.24653742,"1,948,395.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 18-Jul-60,CALEDONIA INVESTMENTS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001639920,ORD GBP0.05 ,CLDN,1342.22517,"55,463,850.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Jun-05,CALEDONIA MINING CORP PLC ,JE,AIM,,JE00BD35H902,ORD NPV(DI) ,CMCL ,52.185946,"52,185,946.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Sep-95,CALEDONIAN TRUST ,GB,AIM,,GB0001628584,ORD GBP 0.2 ,CNN ,9.965572565,"11,793,577.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Jun-03,CALGARY & EDMONTON RAILWAY CO ,CA,International Main Market,Standard Debt,CA129587AA99,4% CONS DEB STK(GTD BY C.P.LTD)2002 ,05GM,0,"1,121,700.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 16-Apr-14,CAMBIAN GRP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKXNB024,ORD GBP0.01 ,CMBN,156.5689341,"184,198,746.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 6-Mar-07,CAMBIUM GLOBAL TIMBERLAND LTD ,JE,AIM,,JE00B1NNWQ21,ORD NPV ,TREE ,6.383125,"102,130,000.00",Basic Materials,Basic Resources,Forestry & Paper,Forestry,1733,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Dec-07,CAMBRIA AFRICA PLC ,IM,AIM,,IM00B28CVH58,ORD GBP0.0001 ,CMB ,1.3228447625,"211,655,162.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Apr-10,CAMBRIA AUTOMOBILES PLC ,GB,AIM,,GB00B4R32X65,ORD GBP0.10 ,CAMB ,67,"100,000,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Apr-13,CAMBRIDGE COGNITION HLDGS PLC ,GB,AIM,,GB00B8DV9647,ORD GBP0.01 ,COG ,11.542517775,"20,429,235.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,CAMBRIDGE WATER ,GB,UK Main Market,Standard Debt,GB0001663888,4% CONS PERP DEB STK ,06GM,0,"191,918.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 19-Sep-14,CAMELLIA ,GB,AIM,,GB0001667087,ORD GBP0.10 ,CAM ,237.8229,"2,824,500.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 29-Jan-07,CAMPER & NICHOLSONS MARINA INV LTD ,GG,AIM,,GG00B1FCZR96,ORD NPV ,CNMI ,11.190444165,"165,784,358.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Feb-95,CANADIAN GENERAL INVESTMENTS ,CA,International Main Market,Standard Shares,CA1358251074,COM NPV ,CGI ,224.805063725,"20,863,579.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Apr-14,CANADIAN OVERSEAS PETROLEUM LTD ,CA,International Main Market,Standard Shares,CA13643D1078,NPV (DI) ,COPL,43.436017755,"668,246,427.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 9-Nov-52,CANADIAN PACIFIC RAILWAYS ,CA,International Main Market,Standard Debt,CA136447AX71,4% PERP CONS DEB STK GBP ,BC87,0,"46,756,621.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Dec-84,CANDOVER INVESTMENTS ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001713154,ORD GBP 0.25 ,CDI ,21.744346925,"21,853,615.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 17-Jun-11,CAPE PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B5SJJD95,ORD GBP0.25 ,CIU ,254.289117255,"120,802,431.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 21-Aug-91,CAPITA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B23K0M20,ORD GBP0.02066667 ,CPI ,6772.1982552,"654,318,672.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 17-May-10,CAPITAL & COUNTIES PROPERTIES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B62G9D36,ORD GBP0.25 ,CAPC,2471.113337616,"833,146,776.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 22-May-95,CAPITAL & REGIONAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001741544,ORD GBP0.01 ,CAL ,415.195930905,"700,752,626.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 7-Jun-10,CAPITAL DRILLING LTD ,BM,International Main Market,Premium Equity Commercial Companies,BMG022411000,ORD USD0.0001 (DI) ,CAPD,64.75363008,"134,903,396.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Feb-73,CAPITAL GEARING TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001738615,ORD GBP0.25 ,CGT ,105.8768631,"2,912,706.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Apr-06,CAP-XX ,AU,AIM,,AU0000XINAS1,ORD NPV ,CPX ,13.3735122675,"270,171,965.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 9-Dec-08,CARADOR INCOME FUND PLC ,IE,International Main Market,Premium Equity Closed Ended Investment Funds,IE00B3D60Z08,ORD NPV(USD) ,CIFU,375.640802531058,"667,456,391.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,USD,,,,,,,,,,,,,,,,,, 23-Dec-59,CARCLO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001751915,ORD GBP0.05 ,CAR ,84.5324246,"65,024,942.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-May-14,CARD FACTORY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLY2F708,ORD GBP0.01 ,CARD,975.833225563,"340,842,901.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Jun-47,CARDIFF PROPERTY ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001754257,ORD GBP 0.2 ,CDFF,17.1545715,"1,270,709.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 12-Oct-05,CARETECH HLDGS PLC ,GB,AIM,,GB00B0KWHQ09,ORD GBP0.005 ,CTH ,175.01641521,"64,108,577.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Jun-99,CARIBBEAN INV HLDGS LTD ,BZ,AIM,,BZP211481049,ORD NPV ,CIHL ,6.51032005,"100,158,770.00",Financials,Banks,Banks,Banks,8355,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Jul-99,CARILLION PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007365546,ORD GBP0.50 ,CLLN,1119.522544658,"430,254,629.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Oct-00,CARNIVAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031215220,ORD USD1.66 ,CCL ,7908.4671183,"216,433,145.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 23-Jun-93,CARPETRIGHT ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001772945,ORD GBP0.01 ,CPR ,160.7606819,"67,546,505.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-May-72,CARR'S GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRK01058,ORD GBP0.025 ,CARR,130.02544545,"89,672,721.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,CASTINGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001795680,ORD GBP 0.10 ,CGS ,195.158495575,"43,610,837.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 22-May-06,CASTLETON TECHNOLOGY PLC ,GB,AIM,,GB00BYV2WV72,ORD GBP0.02 ,CTP ,50.52919164,"78,339,832.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Sep-05,CATALYST MEDIA GROUP ,GB,AIM,,GB00B282R334,ORD GBP0.10 ,CMX ,21.52619424,"28,138,816.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 20-Dec-10,CATCO REINSURANCE OPPORTUNITIES FD ,BM,International Main Market,,BMG1961Q1428,ORD USD0.0001 C (DI) ,CATC,335.613181053693,"102,510,018.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 20-Dec-10,CATCO REINSURANCE OPPORTUNITIES FD ,BM,International Main Market,,BMG1961Q2095,ORD USD0.00013716 (DI) ,CAT ,335.613181053693,"273,224,673.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 27-Sep-04,CATHAY FINANCIAL HLDG CO ,TW,Trading Only,,US14915V2051,GDR EACH REPR 10 ORD SHS REG'S'(BNY) ,CFHS,0,"10,273,473.00",Financials,Insurance,Life Insurance,Life Insurance,8575,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 12-Mar-01,CATHAY INTERNATIONAL HLDGS LTD ,BM,International Main Market,Premium Equity Commercial Companies,BMG1965E1030,COM SHS USD0.05 ,CTI ,72.5554827675,"367,369,533.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 15-Dec-15,CC JAPAN INCOME & GROWTH TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYSRMH16,ORD GBP0.01 ,CCJI,74.8125,"66,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 27-Jun-14,CDIALOGUES PLC ,GB,AIM,,GB00BN40HL64,ORD GBP0.01 ,CDOG ,3.08907225,"6,240,550.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Sep-05,CELLCAST GROUP ,GB,AIM,,GB00B0GWFM68,ORD GBP0.01 ,CLTV ,2.2285112275,"77,513,434.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 9-Nov-04,CELLO GROUP ,GB,AIM,,GB00B0310763,ORD GBP0.10 ,CLL ,86.99398026,"83,247,828.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-Dec-05,CELTIC ,GB,AIM,,GB0004339296,6% CUM CNV PREF GBP0.60 ,CCPA ,69.594207,"16,800,943.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Dec-05,CELTIC ,GB,AIM,,GB0030639925,CNV PFD ORD GBP1 ,CCPC ,69.594207,"18,012,448.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Dec-05,CELTIC ,GB,AIM,,GB0004339189,ORD GBP0.01 ,CCP ,69.594207,"92,792,276.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 31-Oct-06,CENKOS SECURITIES PLC ,GB,AIM,,GB00B1FLHR07,ORD GBP0.01 ,CNKS ,78.83761752,"64,886,928.00",Financials,Financial Services,Financial Services,Investment Services,8777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Dec-11,CENTAMIN PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B5TT1872,ORD NPV (DI) ,CEY ,1710.88035624,"1,152,107,984.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 17-Dec-04,CENTAUR MEDIA ,GB,UK Main Market,Premium Equity Commercial Companies,GB0034291418,ORD GBP0.10 ,CAU ,58.1119246125,"140,877,393.00",Consumer Services,Media,Media,Publishing,5557,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 12-Nov-10,CENTER FR CARGO CONT TRF TRCNT PJSC,RU,International Main Market,Standard GDRs,US8935561006,GDR EACH REP 1/10 ORD REG S ,TRCN,555.729288237898,"138,947,780.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 30-Sep-10,CENTRAL ASIA METALS PLC ,GB,AIM,,GB00B67KBV28,ORD USD0.01 ,CAML ,199.0229997075,"111,419,454.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 18-Sep-13,CENTRAL RAND GOLD LTD ,GG,AIM,,GG00B92NXM24,ORD GBP0.01 ,CRND ,2.350927439,"191,912,444.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Sep-13,CENTRALNIC GROUP PLC ,GB,AIM,,GB00BCCW4X83,ORD GBP0.001 ,CNIC ,41.23456964,"95,894,348.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Feb-97,CENTRICA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B033F229,ORD GBP0.0617284 ,CNA ,12601.292284868,"5,417,580,518.00",Utilities,Utilities,"Gas, Water & Multiutilities",Gas Distribution,7573,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 13-Feb-07,CEPS PLC ,GB,AIM,,GB00B86TNX04,ORD GBP0.10 ,CEPS ,19.30026702,"47,073,822.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Nov-04,CERES POWER HLDGS ,GB,AIM,,GB00B0351429,ORD GBP0.01 ,CWR ,75.034337776,"815,590,628.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 18-Mar-16,CERILLION PLC ,GB,AIM,,GB00BYYX6C66,ORD GBP0.005 ,CER ,35.71131806,"29,513,486.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Nov-07,CHAARAT GOLD HLDGS LTD ,VG,AIM,,VGG203461055,ORD USD0.01 (DI) ,CGH ,19.8151092414,"272,935,389.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 18-Nov-15,CHAGALA GROUP LTD ,VG,International Main Market,Standard Shares,VG1574371129,ORD USD0.40 DI ,CGLO,24.2830124999999,"21,250,000.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQS3,USD,,,,,,,,,,,,,,,,,, 8-Dec-15,CHALLENGER ACQUISITIONS LTD ,GG,UK Main Market,Standard Shares,GG00BV0LCK35,ORD GBP0.01 ,CHAL,3.295926855,"16,902,189.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-06,CHAMBERLIN PLC ,GB,AIM,,GB0001870228,ORD GBP0.25 ,CMH ,4.45174016,"7,949,536.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Dec-05,CHARACTER GROUP ,GB,AIM,,GB0008976119,ORD GBP0.05 ,CCT ,114.0975689,"22,593,578.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-May-08,CHARIOT OIL & GAS LTD ,GG,AIM,,GG00B2R9PM06,ORD GBP0.01 ,CHAR ,14.756398146,"258,884,178.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 4-Apr-06,CHARLEMAGNE CAPITAL LTD ,KY,AIM,,KYG2052F1028,ORD USD0.01 ,CCAP ,29.815774,"290,885,600.00",Financials,Financial Services,Financial Services,Asset Managers,8771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Oct-60,CHARLES STANLEY GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006556046,GBP0.25 ,CAY ,159.5876736,"49,871,148.00",Financials,Financial Services,Financial Services,Investment Services,8777,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 10-Oct-96,CHARLES TAYLOR PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001883718,GBP0.01 ,CTR ,129.61426225,"47,132,459.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 13-Nov-06,CHELIABINSK ELEKTROLIT ZINK PLANT ,RU,International Main Market,Standard GDRs,US1635231038,GDR EACH REPR 1 ORD SHS'144A' ,86OZ,268.366457100299,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 13-Nov-06,CHELIABINSK ELEKTROLIT ZINK PLANT ,RU,International Main Market,Standard GDRs,US1635232028,GDR EACH REPR 1 ORD SHS'REGS' ,CHZN,268.366457100299,"54,195,410.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 9-Aug-01,CHELVERTON GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002621349,ORD GBP0.01 ,CGW ,9.66311206,"11,784,283.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 12-May-99,CHELVERTON SMALL CO DIV TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006615826,ORD GBP0.25 ,SDV ,31.4449962,"16,549,998.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Aug-12,CHELVERTON SMALL CO ZDP PLC ,GB,UK Main Market,Standard Debt,GB00B8FJ5797,ZERO DIVIDEND PREF SHS GBP1 ,SDVZ,0,"8,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 1-Jul-74,CHEMRING GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B45C9X44,ORD GBP0.01 ,CHG ,402.8058482425,"281,147,189.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 1-Jul-74,CHEMRING GROUP ,GB,UK Main Market,Standard Shares,GB0001904845,7% CUM PRF GBP1 ,BC88,402.8058482425,"62,500.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 7-Oct-13,CHENAVARI CAPITAL SOLUTIONS LTD ,GG,UK Main Market,,GG00BCHWW517,ORD NPV ,CCSL,110.755,"130,300,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 15-May-06,CHERKIZOVO GROUP PJSC ,RU,International Main Market,Standard GDRs,US1641451042,GDR(EACH 3 REPR 2 ORD) 144A ,86CL,0,0.00,Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 15-May-06,CHERKIZOVO GROUP PJSC ,RU,International Main Market,Standard GDRs,US1641452032,GDR(EACH 3 REPR 2 ORD) REGS ,CHE ,0,0.00,Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-May-04,CHESNARA ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B00FPT80,ORD GBP0.05 ,CSN ,389.33721504,"114,848,736.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 1-Aug-11,CHINA AFRICA RESOURCES PLC ,GB,AIM,,GB00B3ZW6Z85,ORD GBP0.01 ,CAF ,0.8653809,"23,076,824.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-May-11,CHINA NEW ENERGY LTD ,JE,AIM,,JE00B3RWLF12,ORD GBP0.00025 ,CNEL ,0,"444,447,541.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Jul-13,CHINA NONFERROUS GOLD LTD ,KY,AIM,,KYG215771042,USD0.0001 (DI) ,CNG ,114.7176873,"382,392,291.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 18-Oct-00,CHINA PETROLEUM & CHEMICAL CORP ,CN,International Main Market,Standard GDRs,US16941R1086,ADS EACH REP 100'H'SHS CNY1 ,SNP ,8820.76120970397,"192,975,620.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 23-Mar-05,CHINA STEEL CORP ,TW,Trading Only,,USY150411251,GDR EACH REP 20 ORD SHS ,CNSD,0,0.00,,,,,0,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 10-Nov-05,CHRISTIE GROUP ,GB,AIM,,GB0001953156,ORD GBP0.02 ,CTG ,22.28092608,"26,524,912.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Apr-01,CHRYSALIS VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030348683,ORD GBP0.01 ,CYS ,30.076356155,"45,918,101.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Apr-03,CHURCHILL CHINA ,GB,AIM,,GB0001961035,ORD GBP0.10 ,CHH ,90.1768104,"10,997,172.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Durable Household Products,3722,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Apr-05,CHURCHILL MINING PLC ,GB,AIM,,GB00B1318J18,ORD GBP0.01 ,CHL ,41.1788464775,"153,939,613.00",Basic Materials,Basic Resources,Mining,Coal,1771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Jun-15,CIC GOLD GROUP LTD ,SC,International Main Market,,SC0665AHDJ29,ORD NPV (DI) ,CICG,0,"103,590,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 2-May-07,CINEWORLD GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B15FWH70,ORD GBP0.01 ,CINE,1267.99804197,"222,066,207.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Mar-14,CIRCASSIA PHARMACEUTICALS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJVD3B28,ORD GBP0.0008 ,CIR ,268.7473202,"282,891,916.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 17-Jun-11,CIRCLE HLDGS PLC ,JE,AIM,,JE00B4V99J57,ORD GBP0.02 ,CIRC ,36.32347178625,"236,250,223.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 18-Oct-04,CIRCLE OIL ,IE,AIM,,IE00B034YN94,ORD EUR0.01 ,COP ,0,"565,846,639.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 16-Feb-16,CIRCLE PROPERTY PLC ,JE,AIM,,JE00BYP0CK63,ORD NPV ,CRC ,42.65397296,"28,820,252.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Apr-12,CITY MERCHANTS HIGH YIELD TRUST LTD,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B6RMDP68,ORD NPV ,CMHY,144.74815803,"76,586,327.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 4-Nov-94,CITY NATURAL RES HIGH YIELD TRT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000353929,GBP0.25 ,CYN ,78.90161096,"66,865,772.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 19-Oct-15,CITY OF LONDON GROUP ,GB,AIM,,GB0001991685,ORD GBP0.10 ,CIN ,1.1977121325,"36,852,681.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Oct-10,CITY OF LONDON INVESTMENT GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B104RS51,ORD GBP0.01 ,CLIG,97.86132,"26,592,750.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001990497,ORD GBP0.25 ,CTY ,995.228288028,"238,209,868.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0008961913,8.5% DEB STK 2021 ,97IN,995.228288028,"30,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0001990059,PFD ORD STK(14% NON CUM)GBP1 ,BA47,995.228288028,"589,672.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0008689522,10.25% DEB STK 2020 ,82IL,995.228288028,"10,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0001990836,4.2% NON CUM 2ND PRF STK GBP1 ,CTYA,995.228288028,"507,202.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 4-May-55,CITY OF LONDON INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0001990612,4.2% CUM 1ST PRF STK ,BA69,995.228288028,"301,982.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBP,,,,,,,,,,,,,,,,,, 10-Apr-87,CITY SITE ESTATES ,GB,UK Main Market,Standard Debt,GB0002002193,10.50% 1ST MTG DEB STK 2017 ,BB38,0,"19,985,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 14-Jan-16,CITYFIBRE INFRASTRUCTURE HLDGS PLC ,GB,AIM,,GB00BH581H10,ORD GBP0.01 ,CITY ,174.01558182,"265,672,644.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Sep-49,CLARKE(T.) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002015021,ORD GBP0.10 ,CTO ,29.5802757275,"41,809,577.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 30-Jun-86,CLARKSON ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002018363,ORD GBP0.25 ,CKN ,659.5570002,"30,116,758.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 7-Apr-00,CLEAR LEISURE PLC ,GB,AIM,,GB00B50P5B53,ORD GBP0.0025 ,CLP ,1.846746265,"263,820,895.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Jul-14,CLEARSTAR INC ,KY,AIM,,KYG2294M1050,ORD USD0.0001 DI REGS ,9537 ,10.89087,"36,302,900.00",Technology,Technology,Software & Computer Services,Software,9537,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 11-Jul-14,CLEARSTAR INC ,KY,AIM,,KYG2294M1134,ORD USD0.0001 DI ,CLSU ,10.89087,0.00,Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Sep-12,CLINIGEN GROUP PLC ,GB,AIM,,GB00B89J2419,ORD GBP0.001 ,CLIN ,722.429893165,"112,967,927.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 4-Jun-14,CLIPPER LOGISTICS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMMV6B79,ORD GBP0.0005 ,CLG ,297.6428039275,"100,005,982.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 6-Apr-11,CLONTARF ENERGY PLC ,GB,AIM,,GB00B09WLX62,ORD GBP0.0025 ,CLON ,1.816903124,"454,225,781.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 24-Jul-62,CLOSE BROS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007668071,ORD GBP0.25 ,CBG ,1995.22674855,"146,600,055.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 14-Dec-05,CLOUDBUY PLC ,GB,AIM,,GB00B09Y8Y28,ORD GBP0.01 ,CBUY ,8.59491263125,"125,016,911.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Sep-12,CLOUDCALL GROUP PLC ,GB,AIM,,GB00B4XS5145,ORD GBP0.20 ,CALL ,10.3234962,"17,205,827.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Mar-13,CLOUDTAG INC ,KY,AIM,,KYG2215A1076,ORD GBP0.001 (DI) ,CTAG ,31.394872113,"393,666,108.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-May-94,CLS HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001592475,ORD GBP0.25 ,CLI ,690.19224754,"43,849,571.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-May-12,CLUFF NATURAL RESOURCES PLC ,GB,AIM,,GB00B6SYKF01,ORD GBP0.005 ,CLNR ,4.246993278,"257,393,532.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Feb-16,CMC MARKETS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B14SKR37,ORD GBP0.25 ,CMCX,818.853612084,"287,923,211.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Jul-96,CML MICROSYSTEMS ,GB,UK Main Market,Standard Shares,GB0001602944,ORD GBP0.05 ,CML ,57.43343085,"16,527,606.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 16-Dec-05,COAL OF AFRICA LTD ,AU,AIM,,AU000000CZA6,NPV ,CZA ,58.785430025,"1,679,583,715.00",Basic Materials,Basic Resources,Mining,Coal,1771,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 7-Jan-48,COATS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B4YZN328,ORD GBP0.05 ,COA ,431.3116362,"1,437,705,454.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 20-Dec-54,COBHAM PLC ,GB,UK Main Market,Standard Shares,GB0003430401,6% 2ND CUM PRF GBP1 ,85GU,2761.615847067,"19,700.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 20-Dec-54,COBHAM PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B07KD360,ORD GBP0.025 ,COB ,2761.615847067,"1,707,863,851.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Apr-13,COCA-COLA HBC AG ,CH,International Main Market,Premium Equity Commercial Companies,CH0198251305,ORD CHF6.70(CDI) ,CCH ,6086.5157673,"363,591,145.00",Consumer Goods,Food & Beverage,Beverages,Soft Drinks,3537,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 12-Feb-16,COGENPOWER PLC ,GB,AIM,,GB00BYT56612,ORD GBP0.0025 ,CGP ,9.6571013,"50,166,760.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Mar-06,COHORT ,GB,AIM,,GB00B0YD2B94,ORD GBP0.10 ,CHRT ,127.38280411,"40,959,101.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Aug-04,COLEFAX GROUP ,GB,AIM,,GB0002090453,ORD GBP0.10 ,CFX ,56.626,"12,310,000.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Dec-14,COLLAGEN SOLUTIONS PLC ,GB,AIM,,GB00B94T6Y14,ORD GBP0.01 ,COS ,16.6714431075,"193,292,094.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Jul-08,COMMERCIAL BANK ,QA,International Main Market,Standard GDRs,US2026092021,GDR EACH REPR 0.20 ORD 'REGS' ,CBQS,140.443764369,"92,176,475.00",Financials,Financial Services,Financial Services,Investment Services,8777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 3-Jul-08,COMMERCIAL BANK ,QA,International Main Market,Standard GDRs,US2026091031,GDR EACH REPR 0.20 ORD '144A' ,55BC,140.443764369,0.00,Financials,Financial Services,Financial Services,Investment Services,8777,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 31-Jul-96,COMMERCIAL INTL BANK(EGYPT)S.A.E ,EG,International Main Market,Standard GDRs,US2017121060,GDR-EACH REPR 1 ORD EGP10(144A) ,41JB,1628.59083568235,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 31-Jul-96,COMMERCIAL INTL BANK(EGYPT)S.A.E ,EG,International Main Market,Standard GDRs,US2017122050,GDR EACH REPR 1 ORD EGP10 REG'S' ,CBKD,1628.59083568235,"508,749,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 24-Apr-13,COMMERZBANK AG ,DE,International Main Market,Standard Shares,DE000CBK1001,NPV ,CZB ,6198.64616560944,"1,138,506,941.00",Financials,Banks,Banks,Banks,8355,SSMU,SMEV,EUR,,,,,,,,,,,,,,,,,, 27-Jun-94,COMMUNISIS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006683238,ORD GBP0.25 ,CMS ,85.83922665,"206,841,510.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Dec-09,COMPAL ELECTRONICS INC ,TW,Trading Only,,US20440Y2000,GDR EACH REPR 5 ORD SHS 'REG S' ,CEIR,0,"61,018,298.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 8-Jul-14,COMPASS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLNN3L44,ORD GBP0.10625 ,CPG ,23937.23221428,"1,660,002,234.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 21-Jun-16,COMPTOIR GROUP PLC ,GB,AIM,,GB00BYT1L205,ORD GBP0.01 ,COM ,65.28,"96,000,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Jun-13,COMPUTACENTER ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BV9FP302,ORD GBP0.075555 ,CCC ,951.42123636,"131,593,532.00",Technology,Technology,Software & Computer Services,Computer Services,9533,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 26-Jul-16,CONCEPTA PLC ,GB,AIM,,GB00BYZ2R301,ORD GBP0.025 ,CPT ,19.103100275,"109,160,573.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Sep-05,CONCHA PLC ,GB,AIM,,GB00B8Y82097,ORD GBP0.001 ,CHA ,12.17292684,"1,623,056,912.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Jul-96,CONCURRENT TECHNOLOGIES ,GB,AIM,,GB0002183191,ORD GBP0.01 ,CNC ,47.2098185,"72,630,490.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 31-May-06,CONDOR GOLD PLC ,GB,AIM,,GB00B8225591,ORD GBP0.20 ,CNR ,39.66953852,"48,377,486.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Aug-06,CONNECT GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B17WCR61,ORD GBP0.05 ,CNCT,311.01216558,"190,221,508.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 31-Jul-07,CONNEMARA MINING PLC ,IE,AIM,,IE00B2357X72,ORD EUR0.01 ,CON ,1.1016492725,"55,779,710.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-May-00,CONROY GOLD & NATURAL RESOURCES PLC,IE,AIM,,IE00BZ4BTZ13,ORD EUR0.001 ,CGNR ,2.51422146,"9,859,692.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Aug-83,CONSORT MEDICAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000946276,ORD GBP0.10 ,CSRT,315.10498733,"30,386,209.00",Health Care,Health Care,Health Care Equipment & Services,Medical Supplies,4537,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 8-Dec-14,CONSTELLATION HEALTHCARE TECHNO INC,US,AIM,,USU210051004,ORD USD0.0001 DI REG S ,CHT ,125.956817325,"88,390,749.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 2-Oct-15,CONVIVIALITY PLC ,GB,AIM,,GB00BC7H5F74,ORD GBP0.0002 ,CVR ,384.35757075,"170,825,587.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 27-Aug-09,CONYGAR INVESTMENT CO(THE) ,GB,AIM,,GB0033698720,ORD GBP0.05 ,CIC ,148.569824,"92,856,140.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Jan-14,CONYGAR ZDP PLC ,GB,UK Main Market,Standard Shares,GB00BH4TCL65,ZERO DIV PREF GBP0.01 ,CICZ,35.925,"30,000,000.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 10-Jan-94,CO-OPERATIVE GROUP LTD ,GB,UK Main Market,Standard Debt,GB0002224060,7.625% 1ST MTG DEB STK 2018 GBP ,87GO,0,"50,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 6-Sep-11,CORAL PRODUCTS ,GB,AIM,,GB0002235736,ORD GBP0.01 ,CRU ,16.207398675,"83,114,865.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Mar-11,CORERO NETWORK SECURITY PLC ,GB,AIM,,GB00B54X0432,ORD GBP0.01 ,CNS ,40.17366776,"203,410,976.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Jan-16,CORETX HLDGS PLC ,GB,AIM,,GB00B4NJ4984,ORD GBP0.025 ,COR ,64.90692514,"190,902,721.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Jul-91,CORUS FINANCE ,GB,UK Main Market,Standard Debt,GB0001411817,11.5% DEB STK 2016 ,BD84,0,"300,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 3-Jan-79,COSTAIN GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B64NSP76,ORD GBP0.50 ,COST,354.970873425,"100,700,957.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-Feb-16,COUNTRYSIDE PROPERTIES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYPHNG03,ORD GBP1 ,CSP ,1026,"450,000,000.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 25-Mar-13,COUNTRYWIDE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B9NWP991,ORD GBP0.01 ,CWD ,575.165242781,"219,444,961.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 2-Sep-93,COVENTRY BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0002290764,12.125% PERM INT BEARING SHS GBP1000 RG ,CVBP,0,"40,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 29-Jun-99,CPL RESOURCES ,IE,AIM,,IE0007214426,EUR0.10 ,CPS ,134.5223704,"30,573,266.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Feb-15,CPPGROUP PLC ,GB,AIM,,GB00B5W55H93,ORD GBP0.01 ,CPP ,59.384171,"848,345,300.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 7-Mar-07,CQS NEW CITY HIGH YIELD FD LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B1LZS514,ORD NPV ,NCYF,241.1676874075,"411,373,454.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 13-Sep-07,CRANEWARE PLC ,GB,AIM,,GB00B2425G68,ORD GBP0.01 ,CRW ,279.38096955,"27,190,362.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Jul-93,CRANSWICK ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002318888,ORD GBP0.10 ,CWK ,1160.9578438,"48,575,642.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Aug-04,CRAVEN HOUSE CAPITAL PLC ,GB,AIM,,GB00BD4FQ360,ORD USD1 ,CRV ,12.958699708065,"1,838,939.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 11-Apr-08,CRAWSHAW GROUP PLC ,GB,AIM,,GB00B2PQMW21,ORD GBP0.05 ,CRAW ,65.025505875,"78,818,795.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Aug-94,CREIGHTONS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002341666,ORD GBP0.01 ,CRL ,6.35770706875,"59,837,243.00",Consumer Goods,Personal & Household Goods,Personal Goods,Personal Products,3767,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 18-Feb-13,CREST NICHOLSON HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B8VZXT93,ORD GBP0.05 ,CRST,1171.062671837,"251,787,287.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Jun-93,CRESTON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004440284,ORD GBP0.10 ,CRE ,61.771161155,"59,111,159.00",Consumer Services,Media,Media,Media Agencies,5555,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Feb-73,CRH ,IE,International Main Market,Premium Equity Commercial Companies,IE0001827041,ORD EUR0.32 ,CRH ,20942.30537055,"816,464,147.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 5-Feb-73,CRH ,IE,International Main Market,Standard Shares,IE0001827603,7%'A'CUM PRF EUR1.27 ,97GM,20942.30537055,"872,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSX4,SXCL,GBX,,,,,,,,,,,,,,,,,, 22-Aug-06,CRIMSON TIDE PLC ,GB,AIM,,GB0002080082,ORD GBP0.001 ,TIDE ,13.0889723445,"447,486,234.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Jun-64,CRODA INTERNATIONAL PLC ,GB,UK Main Market,Standard Shares,GB0002342854,6.6% CUM PRF GBP1 ,49GP,4473.23584804,0.00,Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 10-Jun-64,CRODA INTERNATIONAL PLC ,GB,UK Main Market,Standard Shares,GB0002343159,5.9% CUM PRF GBP1 ,50GP,4473.23584804,"615,562.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 10-Jun-64,CRODA INTERNATIONAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYZWX769,ORD GBP0.10357143 ,CRDA,4473.23584804,"135,124,108.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Mar-12,CROMA SECURITY SOLUTIONS GROUP PLC ,GB,AIM,,GB00B5MJV178,ORD GBP0.05 ,CSSG ,5.206812345,"16,529,563.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Jul-96,CROMPTON GREAVES ,IN,PSM,Standard GDRs,US2271201020,GDR EACH REPR 5 ORD SHS(144A) ,CGVA,27.7116786374999,0.00,Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 11-Jul-96,CROMPTON GREAVES ,IN,PSM,Standard GDRs,US2271202010,GDR-EACH REPR 5 ORD SHS(REG'S') ,CGVD,27.7116786374999,"6,613,750.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 31-Dec-07,CRONIN GROUP PLC ,GB,AIM,,GB00B29YYY86,ORD GBP0.0001 ,CRON ,6.57739933,"657,739,933.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 31-Aug-07,CROPPER(JAMES) ,GB,AIM,,GB0002346053,ORD GBP0.25 ,CRPR ,82.7457344,"9,235,015.00",Basic Materials,Basic Resources,Forestry & Paper,Paper,1737,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Sep-14,CROSSRIDER LTD ,IM,AIM,,IM00BQ8NYV14,ORD USD0.0001 ,CROS ,41.56965092,"148,463,039.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Apr-98,CROWN PLACE VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002577434,ORD GBP0.10 ,CRWN,35.6700253075,"133,345,889.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Jun-08,CRYSTAL AMBER FUND LTD ,GG,AIM,,GG00B1Z2SL48,ORD GBP0.01 ,CRS ,168.31718112,"95,634,762.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-Mar-10,CSF GROUP PLC ,JE,AIM,,JE00B61NN442,ORD GBP0.10 ,CSFG ,2.0003583375,"160,028,667.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-May-15,CURTIS BANKS GROUP PLC ,GB,AIM,,GB00BW0D4R71,ORD GBP0.005 ,CBP ,176.1944877,"53,392,269.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 26-Mar-14,CUSTODIAN REIT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BJFLFT45,ORD GBP0.01 ,CREI,278.8121149,"260,572,070.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Jun-13,CVC CREDIT PTNRS EUROPEAN OPPS LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B9G79F59,ORD NPV EUR ,CCPE,449.490216210155,"238,248,185.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,EUR,,,,,,,,,,,,,,,,,, 25-Jun-13,CVC CREDIT PTNRS EUROPEAN OPPS LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B9MRHZ51,ORD NPV GBP ,CCPG,449.490216210155,"248,014,974.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Oct-07,CVS GROUP PLC ,GB,AIM,,GB00B2863827,ORD GBP0.002 ,CVSG ,537.30064713,"58,946,862.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 7-Dec-05,CYAN HLDGS PLC ,GB,AIM,,GB00B0P66Q02,ORD GBP0.0001 ,CYAN ,28.15510001,"14,077,550,005.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Feb-16,CYBG PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BD6GN030,ORD GBP0.10 ,CYBG,2373.271875944,"879,315,256.00",Financials,Banks,Banks,Banks,8355,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Feb-02,CYPROTEX PLC ,GB,AIM,,GB00BP25RZ14,ORD GBP0.01 ,CRX ,32.3544096,"22,468,340.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 16-Jun-08,D4T4 SOLUTIONS PLC ,GB,AIM,,GB0001351955,ORD GBP0.02 ,D4T4 ,47.80804736,"37,350,037.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Jul-59,DAEJAN HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002502036,GBP0.25 ,DJAN,880.4302413,"16,395,349.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Nov-32,DAILY MAIL & GENERAL TRUST ,GB,UK Main Market,Standard Shares,GB0009457366,'A'ORD NON VTG GBP0.125 ,DMGT,2369.3033231,"328,158,355.00",Consumer Services,Media,Media,Publishing,5557,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 28-Aug-96,DAIRY CREST GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002502812,ORD GBP0.25 ,DCG ,873.91493007,"133,117,278.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 14-May-90,DAIRY FARM INTERNATIONAL HLDGS ,BM,International Main Market,Standard Shares,BMG2624N1535,ORD USD0.05 5/9 CENTS ,DFI ,50.7585013417732,"1,547,644,719.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 14-May-90,DAIRY FARM INTERNATIONAL HLDGS ,BM,International Main Market,Standard Shares,BMG2624N1535,ORD USD0.05 5/9 CENTS (JERSEY REG) ,DFIJ,50.7585013417732,"7,153,082.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 14-May-90,DAIRY FARM INTERNATIONAL HLDGS ,BM,International Main Market,Standard Shares,BMG2624N1535,ORD USD0.05 5/9 CENTS (BERMUDA REG) ,DFIB,50.7585013417732,"112,779.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 30-Jun-16,DALATA HOTEL GROUP PLC ,IE,International Main Market,Standard Shares,IE00BJMZDW83,ORD EUR0.01 ,DAL ,674.689580875,"182,966,666.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 3-Dec-14,DALRADIAN RESOURCES INC ,CA,AIM,,CA2354991002,ORD NPV (DI) ,DALR ,163.076409405,"205,127,559.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 9-Nov-11,DAMILLE INVESTMENTS II LTD ,GG,UK Main Market,,GG00B7617Z91,ORD NPV ,DIL2,66.584303,"70,088,740.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM1,SFML,GBX,,,,,,,,,,,,,,,,,, 15-Aug-05,DART GROUP PLC ,GB,AIM,,GB00B1722W11,ORD GBP0.0125 ,DTG ,643.24623775,"143,341,780.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 21-Mar-97,DATANG INTL POWER GENERATION ,CN,International Main Market,Standard Shares,CNE1000002Z3,'H'CNY1 ,DAT ,633.455831020374,"3,043,369,580.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 20-Oct-06,DATATEC ,ZA,AIM,,ZAE000017745,ZAR0.01 (DI) ,DTC ,578.8413785,"210,487,774.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Jan-16,DAVICTUS PLC ,JE,UK Main Market,Standard Shares,JE00BYY5RQ34,ORD NPV ,DVT ,1.35,"11,250,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322253229,S&P GLOBAL INFRASTRUCTURE UCITS ,XSGI,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0476289623,MSCI INDONESIA IDX UCITS GBP ,XMID,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0460391732,DBLCI - OY BALANCED ETF 2C USD ,XBCU,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292106753,EURO STOXX 50 SHORT UCITS ,XSSX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292104030,STOXX 600 EUROPE TELECOMMUNICATION UCITS,XSKR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274210672,MSCI USA INDEX UCITS USD ,XMUD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292107645,MSCI EMERGING MARKETS INDEX UCITS USD ,XMMD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292107991,MSCI EM ASIA INDEX UCITS GBP ,XMAS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322251520,S&P 500 INVERSE DAILY UCITS ,XSPS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292108619,MSCI EM LATAM INDEX UCITS USD ,XMLD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0356591882,USD MONEY MARKETS UCITS'1C'USD ,XUSD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274209740,MSCI JAPAN INDEX UCITS (GBP) (DR) ,XMJP,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292104469,STOXX 600 EUROPE TECHNOLOGY UCITS ,XS8R,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109187,MSCI TAIWAN IDX UCITS ETF (DR) ,XMTD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292097747,FTSE ALL-SHARE UCITS ,XASX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292097317,FTSE 250 UCITS DR (GBP) ,XMCX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109187,MSCI TAIWAN IDX UCITS ETF (DR) ,XMTW,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274211217,EURO STOXX 50 UCITS ,XESX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252502,MSCI RUSSIA 25% CAPPED INDEX UCITS ,XMRC,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292107991,MSCI EM ASIA INDEX UCITS ,XMAD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109344,MSCI BRAZIL INDEX(DR) USD(USD) UCITS ,XMBD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109856,FTSE CHINA 50 1C USD DR UCITS ,XX2D,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252924,FTSE VIETNAM UCITS ,XFVT,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292100046,DBX MSCI KOREA IDX (USD) UCITS (DR) ,XKSD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274209237,MSCI EUROPE INDEX UCITS USD ,XMED,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109690,NIFTY 50 UCITS USD ,XNID,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0411075376,LEVDAX DAILY UCITS GBP ,XLDX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0411075020,SHORTDAX X2 UCITS(EUR)GBP ,XSD2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252338,MSCI PACIFIC EX JAPAN UCITS(DR) USD(USD),XPXD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292106241,SHORTDAX DAILY UCITS ,XSDX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292103222,STOXX 600 EUROPE HEALTH CARE UCITS ,XSDR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0411078636,S&P 500 2X INVERSE IIDX UCITS(USD)USD ,XT2D,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328475792,STOXX 600 EUROPE UCITS EUR DR (GBP) ,XSX6,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0380865021,EURO STOXX 50 UCITS ,XESC,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292100806,STOXX 600 EUROPE BASIC RESOURCES UCITS ,XSPR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292096186,STOXX GBL SELECT DIVIDEND 100 UCITS USD ,XGDD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292097234,FTSE 100 UCITS DR (GBP) ,XUKX,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0476289540,MSCI CANADA INDEX UCITS USD(USD) ,XCAD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292106084,STOXX 600 EUROPE INDUTRIAL GOODS UCITS ,XSNR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328473581,FTSE 100 SHORT DAILY UCITS ,XUKS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292103651,STOXX 600 EUROPE BANKS UCITS ,XS7R,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252171,MSCI AC ASIA EX JAPAN UCITS USD(USD) ,XAXD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292095535,EURO STOXX SELECT DIVIDEND 30 UCITS(GBP),XD3E,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0429790313,HSI SHORT DAILY INDEX UCITS 2C ,XHSD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292108619,MSCI EM LATAM INDEX UCITS ,XMLA,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292101796,STOXX 600 EUROPE OIL GAS UCITS ,XSER,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252338,MSCI PACIFIC EX JAPAN UCITS(DR) USD(GBP),XPXJ,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274209740,MSCI JAPAN INDEX UCITS (USD) (DR) ,XMJD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322250712,LPX MM PRIVATE EQUITY UCITS ,XLPE,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109005,MSCI EM EMEA INDEX UCITS ,XMXD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292105359,STOXX 600 EUROPE FOOD BEVERAGE UCITS ,XS3R,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322253732,MSCI EUROPE MID CAP TRN INDEX UCITS ,XEUM,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322253906,MSCI EUROPE SMALL CAP TRN INDEX ETF 1C ,XXSC,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328476410,S&P SELECT FRONTIER UCITS USD ,XSFD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252171,MSCI AC ASIA EX JAPAN UCITS USD(GBP) ,XAXJ,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322253229,S&P GLOBAL INFRASTRUCTURE UCITS USD ,XGID,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252924,FTSE VIETNAM UCITS USD ,XVTD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109690,NIFTY 50 UCITS GBP ,XNIF,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322249037,STOXX 600 EUROPE BANKS SHORT DAILY UCITS,XS7S,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328474803,S&P/ASX 200 UCITS (DR) ,XAUS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292104899,STOXX 600 EUROPE UTILITIES UCITS ,XS6R,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274209237,MSCI EUROPE INDEX UCITS ,XMEU,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322252502,MSCI RUSSIA 25% CAPPED INDEX UCITS USD ,XMRD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274208692,MSCI WORLD IDX UCITS USD ,XMWD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109344,MSCI BRAZIL INDEX(DR) USD(GBP) UCITS ,XMBR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292096186,STOXX GBL SELECT DIVIDEND 100 UCITS ,XGSD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292100046,DBX MSCI KOREA IDX UCITS (DR) ,XKS2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328475529,ISLAMIC MARKET TITANS 100 UCITS ,XIMT,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0274210672,MSCI USA INDEX UCITS ,XMUS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0328476410,S&P SELECT FRONTIER UCITS ,XSFR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0322251520,S&P 500 INVERSE DAILY UCITS USD ,XSPD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFL ,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0411078552,S&P 500 2X LEVERAGED INDEX UCITS(USD)USD,XS2D,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,USD,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292107645,MSCI EMERGING MARKETS INDEX UCITS ,XMEM,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292109856,FTSE CHINA 50 1C DR UCITS ,XX25,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 6-Sep-07,DB X-TRACKERS ,LU,International Main Market,Standard Shares,LU0292105193,STOXX 600 EUROPE INSURANCE UCITS ,XSIR,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 8-Sep-09,DB X-TRACKERS II ,LU,International Main Market,,LU0429459356,II IBOXX USD TREASURIES TR IDX UCITS(DR),XUTD,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,USD,,,,,,,,,,,,,,,,,, 8-Sep-09,DB X-TRACKERS II ,LU,International Main Market,,LU0429458895,II IBOXX USD TRSURS 1-3 TR IDX UCITS(DR),XUT3,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,USD,,,,,,,,,,,,,,,,,, 8-Sep-09,DB X-TRACKERS II ,LU,International Main Market,,LU0429459513,IBOXX USD TRES INFL LKD UCITS (DR) ,XUIT,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,USD,,,,,,,,,,,,,,,,,, 19-May-94,DCC ,IE,International Main Market,Premium Equity Commercial Companies,IE0002424939,ORD EUR0.25 ,DCC ,6079.5848421,"87,728,497.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 23-Feb-06,DCD MEDIA PLC ,GB,AIM,,GB00BBD7QB75,ORD GBP1 ,DCD ,6.22647655,"2,541,419.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Mar-47,DE LA RUE ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B3DGH821,ORD GBP0.4486857 ,DLAR,604.8624085,"99,894,700.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 9-May-06,DEBENHAMS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B126KH97,ORD GBP0.0001 ,DEB ,742.246081302,"1,224,828,517.00",Consumer Services,Retail,General Retailers,Broadline Retailers,5373,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 21-Sep-00,DECHRA PHARMACEUTICALS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009633180,ORD GBP0.01 ,DPH ,1186.148496,"91,242,192.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 16-Aug-02,DEE VALLEY GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031798449,ORD GBP0.05 ,DVW ,63.02384215,"4,133,333.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Aug-02,DEE VALLEY GROUP ,GB,UK Main Market,Standard Shares,GB0031801367,NON VTG ORD GBP0.05 ,DVWA,63.02384215,"493,268.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 3-Dec-15,DEFENX PLC ,GB,AIM,,GB00BYNF4J61,ORD GBP0.018 ,DFX ,7.32513354,"6,720,306.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Mar-13,DEKELOIL PUBLIC LTD ,CY,AIM,,CY0106502111,ORD EUR0.0003367 (DI) ,DKL ,26.6410843,"247,824,040.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Nov-01,DELTEX MEDICAL GROUP ,GB,AIM,,GB0059337583,ORD GBP0.01 ,DEMG ,16.10119333125,"286,243,437.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Apr-08,DEPA LTD ,AE,International Main Market,Standard GDRs,US2495081026,GDR EACH REPR 10 SHS '144A' ,71BT,21.8380490886335,0.00,Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 23-Apr-08,DEPA LTD ,AE,International Main Market,Standard GDRs,US2495082016,GDR EACH REPR 10 SHS 'REGS' ,DEPS,21.8380490886335,"10,538,834.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 13-Aug-84,DERWENT LONDON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002652740,ORD GBP 0.05 ,DLN ,2795.79689904,"102,335,172.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Jun-93,DEVRO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002670437,ORD GBP 0.10 ,DVO ,393.95798232,"165,528,564.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Feb-06,DEWHURST ,GB,AIM,,GB0002675261,'A'NON.V ORD GBP 0.1 ,DWHA ,45.04638585,"5,202,198.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Feb-06,DEWHURST ,GB,AIM,,GB0002675048,ORD GBP 0.10 ,DWHT ,45.04638585,"3,308,824.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 11-Mar-15,DFS FURNITURE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BTC0LB89,ORD GBP1.50 ,DFS ,573.375023109,"211,655,601.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 6-May-52,DIAGEO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002374006,ORD GBP0.28 101/108 ,DGE ,52333.452741075,"2,482,022,895.00",Consumer Goods,Food & Beverage,Beverages,Distillers & Vintners,3535,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 9-Nov-93,DIALIGHT ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033057794,ORD GBP0.0189 ,DIA ,202.805924,"32,140,400.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Dec-07,DIAMOND BANK ,NG,PSM,Standard GDRs,US25256V1098,GDR EACH REPR 100 ORD SHS'(CCI) ,DBPA,97.3754888191797,"37,593,985.00",Financials,Banks,Banks,Banks,8355,IOBU,IPLU,USD,,,,,,,,,,,,,,,,,, 11-Dec-07,DIAMOND BANK ,NG,PSM,Standard GDRs,US25256V2088,GDR EACH REPR 100 ORD SHS ,DBP ,97.3754888191797,"37,593,985.00",Financials,Banks,Banks,Banks,8355,IOBU,IPLU,USD,,,,,,,,,,,,,,,,,, 1-Feb-07,DIAMONDCORP PLC ,GB,AIM,,GB00B183ZC46,ORD GBP0.001 ,DCP ,33.5117706,"478,739,580.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Mar-10,DIGITAL BARRIERS LTD ,GB,AIM,,GB00B627R876,ORD GBP0.01 ,DGB ,73.022788375,"157,887,110.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Feb-13,DIGITAL GLOBE SERVICES LTD ,BM,AIM,,BMG2870A1036,ORD USD0.001 (DI) ,DGS ,14.2150742,"29,926,472.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Apr-04,DIGNITY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRB37M78,ORD GBP0.12335664335 ,DTY ,1322.1861402,"49,170,180.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Jun-06,DILLISTONE GROUP ,GB,AIM,,GB00B13QQB40,ORD GBP0.05 ,DSG ,16.04203416,"19,327,752.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Nov-60,DIPLOMA ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001826634,ORD GBP0.05 ,DPLM,941.02070205,"113,239,555.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 16-Oct-12,DIRECT LINE INSURANCE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BY9D0Y18,ORD GBP0.109090909 ,DLG ,5073.75,"1,375,000,000.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 27-May-16,DIRECTA PLUS PLC ,GB,AIM,,GB00BSM98843,ORD GBP0.0025 ,DCTA ,65.656048095,"44,212,827.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Jan-04,DISTIL PLC ,GB,AIM,,GB0030164023,ORD GBP0.001 ,DIS ,6.32204402625,"561,959,469.00",Consumer Goods,Food & Beverage,Beverages,Distillers & Vintners,3535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Dec-15,DIURNAL GROUP PLC ,GB,AIM,,GB00BDB6Q760,ORD GBP0.05 ,DNL ,73.878223985,"52,210,759.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Apr-11,DIVERSE INCOME TRUST PLC(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B65TLW28,ORD GBP0.001 ,DIVI,855.06924765,"934,501,910.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 26-Jun-13,DIXONS CARPHONE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B4Y7R145,ORD GBP0.001 ,DC. ,4265.982218465,"1,150,790,995.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 24-Jul-14,DJI HLDGS PLC ,GB,AIM,,GB00BNBNSF91,ORD GBP0.10 ,DJI ,286.0964730575,"206,941,391.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 31-Mar-03,DODS GROUP PLC ,GB,AIM,,GB0031129579,ORD GBP0.01 ,DODS ,49.421938185,"340,840,953.00",Consumer Services,Media,Media,Publishing,5557,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Dec-05,DOLPHIN CAPITAL INVESTORS ,VG,AIM,,VGG2803G1028,COM SHS EUR0.01 ,DCI ,48.17538283125,"904,702,025.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-May-08,DOMINO'S PIZZA GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYN59130,ORD GBP0.00520833 ,DOM ,1802.511798048,"502,372,296.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Jul-16,DORCASTER PLC ,GB,AIM,,GB00BDB79J29,ORD GBP0.0125 ,DAR ,16.25,"10,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Dec-10,DORIC NIMROD AIR ONE LTD ,GG,UK Main Market,,GG00B4MF3899,ORD PREF NPV ,DNA ,47.9154375,"42,450,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 2-Jul-13,DORIC NIMROD AIR THREE LTD ,GG,UK Main Market,,GG00B92LHN58,RED ORD PREF NPV ,DNA3,235.4,"220,000,000.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 14-Jul-11,DORIC NIMROD AIR TWO LTD ,GG,UK Main Market,,GG00B3Z62522,ORD PREF NPV ,DNA2,377.45875,"172,750,000.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 29-Mar-11,DOTDIGITAL GROUP PLC ,GB,AIM,,GB00B3W40C23,ORD GBP0.005 ,DOTD ,150.31474239,"294,734,789.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53730,ORD GBP0.001 DP2011 GENERAL A ,D4OA,9.55917278425,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4MGR241,ORD GBP0.001 B ,DO1B,9.55917278425,"19,911,100.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53B77,ORD GBP0.001 DP2011 STRUCTURED ,D4SO,9.55917278425,"-35,175.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6QPQ463,ORD GBP0.001 D ,DO1D,9.55917278425,"7,877,247.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53D91,ORD GBP0.001 DP67 ,D467,9.55917278425,"-80,473.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Standard Shares,GB00B4MCHT95,ORD GBP0.001 C ,DO1C,9.55917278425,"29,926,370.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53847,ORD GBP0.001 DP2011 GENERAL ,D4OO,9.55917278425,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53953,ORD GBP0.001 DP2011 LOW CARBON ,D4LC,9.55917278425,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,DOWNING FOUR VCT PLC ,GB,UK Main Market,Premium Equity Open Ended Investment Companies,GB00BWX53C84,ORD GBP0.001 DP2011 STRUCTURED A ,D4SA,9.55917278425,"-35,175.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 3-May-96,DOWNING ONE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BFRSVQ41,ORD GBP0.01 ,DDV1,83.068765195,"98,306,231.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BH7Y7B35,ORD GBP0.001 H ,DP3H,29.2380385651,"13,446,972.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Standard Shares,GB00B4VZ1D11,'E' SHS GBP0.001 ,DP3E,29.2380385651,"14,994,862.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3D75146,'C' SHS GBP0.001 ,DP3C,29.2380385651,"7,163,376.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BSTK6426,ORD GBP0.001 J ,DP3J,29.2380385651,"8,000,548.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6ZS1P26,F SHS GBP0.001 ,DP3F,29.2380385651,"10,821,660.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Standard Shares,GB00B3D74T59,'A' SHS GBP0.001 ,DP3A,29.2380385651,"10,750,064.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 13-Apr-05,DOWNING THREE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4V7FP75,'D' SHS GBP0.001 ,DP3D,29.2380385651,"9,979,109.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B8Y7CS47,G SHS GBP0.001 ,DP2G,74.77902923365,"64,217,150.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BZ6CSD33,ORD GBP0.001 K ,DP2K,74.77902923365,"12,925,824.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4VR3D16,'D' SHS GBP0.001 ,DP2D,74.77902923365,"10,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Standard Shares,GB00B3D74M80,'A' SHS GBP0.001 ,DP2A,74.77902923365,"10,724,029.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Standard Shares,GB00B4TLF407,'E' SHS GBP0.001 ,DP2E,74.77902923365,"15,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6ZS0J90,F SHS GBP0.001 ,DP2F,74.77902923365,"10,810,859.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Apr-05,DOWNING TWO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3D74S43,'C' SHS GBP0.001 ,DP2C,74.77902923365,"7,131,344.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Oct-13,DP AIRCRAFT I LTD ,GG,UK Main Market,,GG00BBP6HP33,ORD PREF NPV ,DPA ,167.448035733362,"209,333,333.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 28-Jul-10,DP POLAND PLC ,GB,AIM,,GB00B3Q74M51,ORD GBP0.005 ,DPP ,68.3809602,"130,249,448.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Apr-05,DRAGANFLY INVESTMENTS ,JE,AIM,,JE00BSJX1352,ORD NPV ,DRG ,0.56354595,"51,231,450.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Jun-07,DRAGON-UKRAINIAN PROPERTIES&DEVLPMT,IM,AIM,,IM00B1XH2B90,ORD GBP0.01 ,DUPD ,15.99813115875,"109,388,931.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 15-Jun-16,DRAPER ESPRIT PLC ,GB,AIM,,GB00BY7QYJ50,ORD GBP0.01 ,GROW ,123.038574725,"40,673,909.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Dec-05,DRAX GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1VNSX38,ORD GBP0.1155172 ,DRX ,1219.637363163,"401,328,517.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Oct-05,DRIVER GROUP ,GB,AIM,,GB00B0L9C092,ORD GBP0.004 ,DRV ,13.3144998,"31,701,190.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-May-94,DRS DATA & RESEARCH SERVICES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002502580,ORD GBP 0.05 ,DRS ,6.211404,"32,691,600.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-May-15,DRUM INCOME PLUS REIT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BW4NWS02,ORD GBP0.1 ,DRIP,71.197256,"68,458,900.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 14-Mar-11,DUET REAL ESTATE FINANCE LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B628S547,ORD NPV ,DREF,5.35627392125,"72,627,443.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 9-Jul-12,DUKE ROYALTY LTD ,GG,AIM,,GG00BYZSSY63,ORD NPV ,DUKE ,3.899342205,"7,877,459.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Apr-87,DUNEDIN ENTERPRISE INVESTMENT TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005776561,ORD GBP 0.25 ,DNE ,86.2230924,"27,114,180.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 21-Nov-49,DUNEDIN INCOME GROWTH INVEST TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003406096,ORD GBP0.25 ,DIG ,375.0837582825,"150,183,687.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Nov-49,DUNEDIN INCOME GROWTH INVEST TRUST ,GB,UK Main Market,Standard Debt,GB0002849015,7.875% DEB STK 2019 GBP ,44JV,375.0837582825,"29,600,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 12-Feb-59,DUNEDIN SMALLER COS INVMT TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1GCL258,ORD GBP0.05 ,DNDL,96.01374223125,"47,857,317.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 24-Oct-06,DUNELM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1CKQ739,ORD GBP0.01 ,DNLM,1788.39697524,"199,153,338.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 14-Dec-10,DW CATALYST LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B4XV9331,ORD RED NPV GBP ,DWCG,122.1161515,"11,359,642.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 27-Feb-14,DX (GROUP) PLC ,GB,AIM,,GB00BJTCG679,GBP0.01 ,DX. ,36.09459,"200,525,500.00",Industrials,Industrial Goods & Services,Industrial Transportation,Delivery Services,2771,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 23-Jul-04,E2V TECHNOLOGIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01DW905,ORD GBP0.05 ,E2V ,501.6679086,"209,464,680.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 16-Apr-14,EAGLE EYE SOLUTIONS LTD ,GB,AIM,,GB00BKF1YD83,ORD GBP0.01 ,EYE ,21.38274599,"22,158,286.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Jan-01,EARTHPORT PLC ,GB,AIM,,GB00B0DFPF10,ORD GBP0.10 ,EPO ,65.4862806675,"471,973,194.00",Technology,Technology,Software & Computer Services,Internet,9535,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 23-Mar-06,EASTERN EUROPEAN PROPERTY FUND ,GB,AIM,,GB00B0XQ3R24,ORD GBP0.01 ,EEP ,8.759717505,"17,696,399.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 18-Jul-07,EASTPHARMA LTD ,BM,International Main Market,Standard GDRs,US27778Q2049,GDR EACH REPR 1 ORD 'REGS' ,EAST,71.9919899999998,"67,500,000.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 18-Jul-07,EASTPHARMA LTD ,BM,International Main Market,Standard GDRs,US27778Q1058,GDR EACH REPR 1 ORD '144A' ,63PE,71.9919899999998,0.00,Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 30-Jun-14,EASYHOTEL PLC ,GB,AIM,,GB00BN56KF84,ORD GBP0.01 ,EZH ,52.5,"62,500,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Nov-00,EASYJET ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B7KR2P84,ORD GBP0.27285714 ,EZJ ,4369.57839695,"395,436,959.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 18-May-98,EATON FINANCE NV ,CW,PSM,Standard Debt,GB0003026654,12.50% UNS LN STK 2014(BR) ,96GR,0,0.00,,,,,6,CWNU,EIOU,GBP,,,,,,,,,,,,,,,,,, 18-May-98,EATON FINANCE NV ,CW,PSM,Standard Debt,GB0003026654,12.50% UNS LN STK 2014 ,95GR,0,"35,000,000.00",,,,,6,CWNU,EIOU,GBP,,,,,,,,,,,,,,,,,, 5-May-00,EBIQUITY PLC ,GB,AIM,,GB0004126057,ORD GBP0.25 ,EBQ ,76.638657,"76,638,657.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Sep-95,ECCLESIASTICAL INSURANCE OFFICE ,GB,UK Main Market,Standard Shares,GB0003035382,8.625% NON CUM IRRD PRF GBP1 ,ELLA,0,"106,450,000.00",,,,,7,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 27-Jun-03,ECKOH PLC ,GB,AIM,,GB0033359141,ORD GBP0.0025 ,ECK ,127.2389524775,"258,353,203.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Sep-95,ECO ANIMAL HEALTH GROUP PLC ,GB,AIM,,GB0032036807,ORD GBP0.05 ,EAH ,274.34706585,"63,068,291.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 29-Jun-05,ECOFIN WATER & POWER OPPORTUNITIES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B09LK252,ORD GBP0.001 ,ECWO,269.656906905,"209,849,733.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Jan-06,ECR MINERALS PLC ,GB,AIM,,GB00B0P4LQ95,ORD GBP0.00001 ,ECR ,0.7495927799375,"11,993,484,479.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-May-12,EDEN RESEARCH ,GB,AIM,,GB0001646941,ORD GBP0.01 ,EDEN ,21.3370717725,"172,420,782.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Feb-05,EDENVILLE ENERGY PLC ,GB,AIM,,GB00BD0S4T13,ORD GBP0.0002 ,EDL ,2.7960885225,"621,353,005.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B5B6VC05,ORD GBP0.10 I ,EDGI,18.47996945,"15,397,565.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,,GB00B1GJYK55,'C' SHS GBP0.10 ,EDGC,18.47996945,"23,421,473.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B44VMB16,ORD GBP0.10 H ,EDGH,18.47996945,"19,087,395.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,,GB00B4LQCP32,ORD GBP0.10 G ,EDGG,18.47996945,"24,056,803.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,,GB00B560SW69,'F' SHS GBP0.10 ,EDGF,18.47996945,"29,405,987.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,,GB00B00DDX23,'E' SHS GBP0.10 ,EDGE,18.47996945,"9,813,732.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Apr-12,EDGE PERFORMANCE VCT PLC ,GB,UK Main Market,,GB00B28M6V44,'D' ORD GBP0.10 ,EDGD,18.47996945,"19,123,350.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 7-Sep-87,EDINBURGH DRAGON TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002945029,ORD GBP0.20 ,EFM ,576.38384858,"190,855,579.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 8-Feb-52,EDINBURGH INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0000401033,7.75% DEB STK 2022 ,59KD,1405.70256645,"100,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 8-Feb-52,EDINBURGH INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003052338,ORD GBP 0.25 ,EDIN,1405.70256645,"195,916,734.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Jul-98,EDINBURGH WORLDWIDE INVESTMENT TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002916335,ORD GBP 0.05 ,EWI ,237.16,"49,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Oct-14,EDISTON PPTY INV CO PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BNGMZB68,ORD GBP0.01 ,EPIC,195.7,"190,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 2-Apr-15,EDITA FOOD INDUSTRIES SAE ,EG,International Main Market,Standard GDRs,US28106T1007,GDR EACH REPR 5 ORDS SPON 144A ,66XD,706.661672284798,0.00,Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 2-Apr-15,EDITA FOOD INDUSTRIES SAE ,EG,International Main Market,Standard GDRs,US28106T2096,GDR EACH REPR 5 ORDS SPON REG S ,EFID,706.661672284798,"144,936,975.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 4-Aug-98,EFG HERMES HLDGS ,EG,International Main Market,Standard GDRs,US2684253030,GDR EACH REPR 2 ORD EGP5'144A'(SPON) ,BG79,148.158753599999,0.00,Financials,Financial Services,Financial Services,Investment Services,8777,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 4-Aug-98,EFG HERMES HLDGS ,EG,International Main Market,Standard GDRs,US2684254020,GDR EACH REPR 2 ORD EGP5 REG'S(SPON) ,EFGD,148.158753599999,"104,000,000.00",Financials,Financial Services,Financial Services,Investment Services,8777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 6-Jun-05,EG SOLUTIONS PLC ,GB,AIM,,GB00B07XR777,ORD GBP0.01 ,EGS ,12.79203245,"20,970,545.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Jan-08,EGDON RESOURCES PLC ,GB,AIM,,GB00B28YML29,ORD GBP0.01 ,EDR ,32.095142595,"221,345,811.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Oct-94,EIH ,IN,International Main Market,Standard GDRs,US2685252015,GDR-REPR 1 ORD INR2 REG S ,EIHD,0,"2,867,383.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 18-Oct-94,EIH ,IN,International Main Market,Standard GDRs,US2685251025,GDR-REPR 1 ORD INR2(144A) ,80IR,0,0.00,Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 23-Mar-07,EIH PLC ,IM,AIM,,IM00B1HYQW54,ORD GBP0.01 ,EIH ,18.4265218213649,"64,500,002.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 7-Jul-10,EKF DIAGNOSTICS HOLDINGS PLC ,GB,AIM,,GB0031509804,GBP0.01 ,EKF ,68.42638988,"463,907,728.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 6-Jun-11,EL ORO LTD ,GG,Trading Only,,GG00B77Q7194,ORD NPV ,ELX ,35.02682535,"63,685,137.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 3-Sep-12,ELAND OIL & GAS PLC ,GB,AIM,,GB00B8HHWX64,ORD GBP0.10 ,ELA ,66.60916405,"186,319,340.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 18-May-98,ELDERSTREET VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002867140,ORD GBP0.05 ,EDV ,26.38279931,"44,716,609.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Mar-06,ELECOSOFT PLC ,GB,AIM,,GB0003081246,ORD GBP0.01 ,ELCO ,18.5296139325,"74,867,127.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Feb-76,ELECTRA PRIVATE EQUITY ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003085445,ORD GBP0.25 ,ELTA,1371.5431317,"35,440,391.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Mar-00,ELECTRIC WORD ,GB,AIM,,GB0003083622,ORD GBP0.01 ,ELE ,10.54005190875,"401,525,787.00",Consumer Services,Media,Media,Publishing,5557,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Apr-13,ELECTRICAL GEODESICS INC ,US,AIM,,US28501X2018,ORD USD0.001 (DI) ,EGIC ,3.50556654,"4,437,426.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jun-67,ELECTROCOMPONENTS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003096442,ORD GBP0.10 ,ECM ,1331.895871128,"436,973,711.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Apr-87,ELECTRONIC DATA PROCESSING PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003101523,ORD GBP0.05 ,EDP ,9.398232,"12,530,976.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 26-May-15,ELEGANT HOTELS GROUP PLC ,GB,AIM,,GB00BWXSNY91,ORD GBP0.01 ,EHG ,67.055920695,"88,815,789.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Apr-99,ELEKTRON TECHNOLOGY PLC ,GB,AIM,,GB00B0C5RG72,ORD GBP0.05 ,EKT ,12.79443350625,"186,100,851.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Apr-64,ELEMENTIS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002418548,ORD GBP0.05 ,ELM ,985.89807632,"452,246,824.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 7-Dec-09,EMERGING MARKET MINERALS PLC ,GB,AIM,,GB00B3CMRN66,ORD GBP0.001 ,EMM ,4.73296836,"39,441,403.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Mar-10,EMIS GROUP PLC ,GB,AIM,,GB00B61D1Y04,ORD GBP0.01 ,EMIS ,641.34444148,"63,311,396.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 30-Jun-14,EMPIRIC STUDENT PROP PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BLWDVR75,ORD GBP0.01 ,ESP ,396.9390686225,"347,430,257.00",Financials,Real Estate,Real Estate Investment Trusts,Residential REITs,8673,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 3-Nov-04,EMPRESARIA GROUP PLC ,GB,AIM,,GB00B0358N07,ORD GBP0.05 ,EMR ,53.18575822,"49,019,132.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Jul-05,EMPYREAN ENERGY ,GB,AIM,,GB00B09G2351,ORD GBP0.002 ,EME ,17.85484965,"216,422,420.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Dec-07,ENDEAVOUR INTL CORP ,US,International Main Market,Standard Shares,US29259G2003,USD0.001 ,ENDV,0,"127,003,440.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 2-Jun-97,ENERGISER INVESTMENTS PLC ,GB,AIM,,GB00B06CZD75,ORD GBP0.001 ,ENGI ,0.99389805125,"61,162,957.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Apr-10,ENQUEST PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B635TG28,ORD GBP0.05 ,ENQ ,213.8563270875,"799,462,905.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 2-May-02,ENSOR HLDGS ,GB,AIM,,GB0003186409,ORD GBP0.10 ,ESR ,19.28290452,"29,895,976.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 18-May-12,ENTEQ UPSTREAM PLC ,GB,AIM,,GB00B41Q8Q68,ORD GBP0.01 ,NTQ ,10.26960633,"60,409,449.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Nov-95,ENTERPRISE INNS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1L8B624,ORD GBP0.025 ,ETI ,476.8837324875,"505,977,435.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 15-Jul-10,ENTERTAINMENT ONE LTD ,CA,International Main Market,Premium Equity Commercial Companies,CA29382B1022,ORD NPV ,ETO ,937.6359959,"430,108,255.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Oct-14,ENTU (UK) LTD ,GB,AIM,,GB00BQXKYQ29,ORD GBP0.0005 ,ENTU ,23.944,"65,600,000.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Dec-03,EP GLOBAL OPPORTUNITIES TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0033862573,ORD GBP0.01 ,EPG ,120.76398225,"46,269,725.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 31-Aug-10,EPE SPECIAL OPPORTUNITIES PLC ,IM,AIM,,IM00B4JV7H77,ORD GBP0.05 ,ESO ,43.0028816,"29,154,496.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 23-Sep-09,EPISTAR CORP ,TW,Trading Only,,US29428C1062,GDR EACH REPR 5 SHS '144A' ,EPIA,0,0.00,,,,,9,MISC,INAD,USD,,,,,,,,,,,,,,,,,, 24-Jul-14,EPWIN GROUP PLC ,GB,AIM,,GB00BNGY4Y86,ORD GBP0.0005 ,EPWN ,153.905159775,"141,521,986.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 26-Feb-10,EQUATORIAL PALM OIL PLC ,GB,AIM,,GB00B2QBNL29,ORD GBP0.01 ,PAL ,5.938947348,"349,349,844.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Oct-15,EQUINITI GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYWWHR75,ORD GBP0.1 ,EQN ,503.25079178,"300,000,472.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 15-Jul-14,ERGOMED PLC ,GB,AIM,,GB00BN7ZCY67,ORD GBP0.01 ,ERGO ,47.63775485,"39,864,230.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Aug-11,ESCHER GROUP HLDGS PLC ,IE,AIM,,IE00B6SKRB38,ORD EUR0.005 ,ESCH ,33.554502,"18,641,390.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Oct-05,ESERVGLOBAL ,AU,AIM,,AU000000ESV3,NPV (DI) ,ESG ,39.8445788,"612,993,520.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Feb-94,ESKMUIR PROPERTIES LD ,GB,PSM,Standard Debt,GB0003130100,7 7/8% 1ST MTG DEB STK 2020 ,69GS,0,"50,000,000.00",,,,,6,SSX3,SQPM,GBP,,,,,,,,,,,,,,,,,, 25-Feb-94,ESKMUIR PROPERTIES LD ,GB,PSM,Standard Debt,GB0003200879,9.25% 1ST MTG DEB STK 2020 ,BD28,0,"50,000,000.00",,,,,6,SSX3,SQPM,GBP,,,,,,,,,,,,,,,,,, 6-Jun-05,ESSENTRA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0744359,ORD GBP0.25 ,ESNT,1342.13729532,"260,104,127.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Mar-02,ESTABLISHMENT INVESTMENT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031336919,ORD GBP0.25 ,ET. ,37.9,"20,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 25-Apr-86,ESTATES PROPERTY INVESTMENT CO ,GB,UK Main Market,,,,,0,,,,,,6,,,,,,,,,,,,,,,,,,,,, 27-Mar-13,ESURE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B8KJH563,ORD GBP0.0008333 ,ESUR,1125.471726,"416,841,380.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-Apr-11,ETALON GROUP LTD ,GG,UK Main Market,Standard GDRs,US29760G1031,GDR EACH REPR 1 SHARE REG S ,ETLN,651.644156254936,"294,957,971.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 28-Nov-07,E-THERAPEUTICS PLC ,GB,AIM,,GB00B2823H99,ORD GBP0.001 ,ETX ,30.30719499,"263,540,826.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Nov-13,EU SUPPLY PLC ,GB,AIM,,GB00BFG35570,ORD GBP0.001 ,EUSP ,6.7716406,"67,716,406.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Oct-96,EURASIA MINING ,GB,AIM,,GB0003230421,ORD GBP0.001 ,EUA ,7.52396538075,"1,433,136,263.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 9-Mar-15,EUROCELL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVV2KN49,ORD GBP0.001 ,ECEL,170,"100,000,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Jan-90,EUROMONEY INSTITUTIONAL INVESTOR ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006886666,ORD GBP0.0025 ,ERM ,1301.07488274,"124,266,942.00",Consumer Services,Media,Media,Publishing,5557,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Nov-04,EUROPA OIL & GAS(HLDGS) ,GB,AIM,,GB00B03CJS30,ORD GBP0.01 ,EOG ,11.6321805225,"244,888,011.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Oct-83,EUROPEAN ASSETS TRUST NV ,NL,International Main Market,Standard Shares,NL0000226090,EUR0.46 ,EAT ,159.0955501,"14,868,743.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 12-Oct-83,EUROPEAN ASSETS TRUST NV ,NL,International Main Market,Standard Shares,NL0000288017,EUR0.46(BR) ,49BI,159.0955501,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSX4,SXSN,EUR,,,,,,,,,,,,,,,,,, 28-Jun-72,EUROPEAN INVESTMENT TRUST PLC(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003295010,ORD GBP0.25 ,EUT ,300.7186325,"42,058,550.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Dec-15,EUROPEAN METALS HLDGS LTD ,VG,AIM,,VGG3191T1021,ORD NPV DI ,EMH ,30.24385335,"134,417,126.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Aug-16,EUROPEAN REAL ESTATE INVMT TR LTD ,GG,UK Main Market,Standard Shares,GG00BDCSC847,GBP PTG RED PRF NPV ,ERET,13.07269249,"7,735,321.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 7-May-14,EUROPEAN WEALTH GROUP LTD ,GG,AIM,,GG00BKY4JY43,10% UNSEC CNV NTS 09/06/17 GBP10 ,EWGL ,11.95453432,"422,875.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBP,,,,,,,,,,,,,,,,,, 7-May-14,EUROPEAN WEALTH GROUP LTD ,GG,AIM,,GG00BKY4K072,ORD GBP0.05 ,EWG ,11.95453432,"23,212,688.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Aug-96,EVERGREEN MARINE CORP(TAIWAN) ,TW,PSM,Standard GDRs,US3002461057,GDR-EACH REPR 10 COM SHS TWD(144A) ,EGMA,39.5793515072339,0.00,Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 5-Aug-96,EVERGREEN MARINE CORP(TAIWAN) ,TW,PSM,Standard GDRs,US3002462048,GDR-EACH REPR 10 COM SHS TWD10(REG S) ,EGMD,39.5793515072339,"6,267,030.00",Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 7-Nov-13,EVERYMAN MEDIA GROUP PLC ,GB,AIM,,GB00BFH55S51,ORD GBP0.10 ,EMAN ,66.69978614,"59,820,436.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Oct-15,EVGEN PHARMA PLC ,GB,AIM,,GB00BSVYN304,ORD GBP0.0025 ,EVG ,17.92000119,"73,142,862.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-May-16,EVR HLDGS PLC ,GB,AIM,,GB00BD2YHN21,ORD GBP0.01 ,EVRH ,12.03256646475,"718,362,177.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jun-05,EVRAZ PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B71N6K86,ORD USD1 ,EVR ,1928.35493632,"1,506,527,294.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 17-Dec-09,EXILLON ENERGY PLC ,IM,UK Main Market,Premium Equity Commercial Companies,IM00B58FMW76,ORD USD0.0000125 ,EXI ,173.624229325,"161,510,911.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 16-Apr-14,EXOVA GRP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKY7HG11,ORD GBP0.01 ,EXO ,493.3501535,"250,431,550.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Oct-06,EXPERIAN PLC ,JE,UK Main Market,Premium Equity Commercial Companies,GB00B19NLV48,ORD USD0.10 ,EXPN,14507.42310894,"958,218,171.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 30-Jun-99,EZZ STEEL ,EG,International Main Market,Standard GDRs,US26934Q2075,GDS EACH REP 3 ORD EGP5 REG'S' ,AEZD,0.983102046299997,"573,540.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 30-Jun-99,EZZ STEEL ,EG,International Main Market,Standard GDRs,US26934Q1085,GDS EACH REP 3 ORD EGP5 144A ,67NW,0.983102046299997,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,ADRN,USD,,,,,,,,,,,,,,,,,, 29-Oct-92,F&C CAPITAL & INCOME INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003463287,ORD GBP0.25 ,FCI ,244.8159504,"87,434,268.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 17-Jul-09,F&C COMMERCIAL PROPERTY TRUST LD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B4ZPCJ00,ORD GBP0.01 ,FCPT,1036.53245682,"822,644,807.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Jun-59,F&C GLOBAL SMALLER COMPANIES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000175058,ORD GBP0.25 ,FCS ,470.260336,"41,987,530.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 16-Apr-08,F&C MANAGED PORTFOLIO TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B2PP2527,GROWTH SHS GBP0.10 ,FMPG,80.8735317375,"27,883,500.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Apr-08,F&C MANAGED PORTFOLIO TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B2PP3J36,INCOME SHS GBP0.10 ,FMPI,80.8735317375,"31,225,035.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Mar-99,F&C PRIVATE EQUITY TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030738271,ORD GBP0.01 ,FPEO,193.49172433125,"74,241,429.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 1-Jun-04,F&C UK REAL ESTATE INVESTMENTS LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B012T521,ORD GBP0.01 ,FCRE,403.21912974,"428,956,521.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 4-May-95,F.B.D.HLDGS ,IE,International Main Market,Premium Equity Commercial Companies,IE0003290289,ORD EUR0.60 ,FBH ,194.192732643714,"33,306,894.00",Financials,Insurance,Nonlife Insurance,Full Line Insurance,8532,SSQ3,SQQ3,EUR,,,,,,,,,,,,,,,,,, 12-Jun-14,FAIR OAKS INCOME FUND LTD ,GG,UK Main Market,,GG00BMBN1D14,NPV ,FAIR,242.454642453271,"320,662,090.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 5-Aug-14,FAIRFX GROUP PLC ,GB,AIM,,GB00BLS0XX25,ORD GBP0.01 ,FFX ,38.8098117,"129,366,039.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Dec-02,FAIRPOINT GROUP PLC ,GB,AIM,,GB0032360280,ORD GBP0.01 ,FRP ,46.98238584,"45,175,371.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Jun-13,FALANX GROUP LTD ,VG,AIM,,VGG3338A1075,ORD NPV (DI) ,FLX ,4.487926305,"105,598,266.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Jan-16,FALCON ACQUISITIONS LTD ,GG,UK Main Market,,GG00BYTLL975,ORD GBP0.01 ,FAL ,0,"31,190,100.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 28-Mar-13,FALCON OIL & GAS ,CA,AIM,,CA3060711015,COM NPV (DI) ,FOG ,54.14032912375,"921,537,517.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Jan-03,FALKLAND ISLANDS HLDGS ,GB,AIM,,GB00BD0CWJ91,ORD GBP0.10 ,FKL ,23.930874275,"12,431,623.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 11-Oct-04,FAR EASTERN NEW CENTURY CORP ,TW,Trading Only,,US3073313062,GDS EACH REPR 10 ORD SHS REGS ,FETD,0,"2,875,294.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 13-Nov-08,FAR EASTONE TELECOMMUNICATIONS ,TW,Trading Only,,US30733Q7079,GDR EACH REPR 15 ORD SHS'REGS' ,FEC ,0,0.00,,,,,0,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 27-Jun-03,FAROE PETROLEUM PLC ,GB,AIM,,GB0033032904,ORD GBP0.10 ,FPM ,240.64130376,"364,608,036.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 17-Nov-15,FARON PHARMACEUTICALS OY ,FI,AIM,,FI4000153309,ORD NPV (DI) ,FARN ,57.77926,"23,111,704.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Mar-06,FASTFORWARD INNOVATIONS LTD ,GG,AIM,,GG00BRK9BQ81,ORD GBP0.01 ,FFWD ,18.37950723,"136,144,498.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Jul-12,FASTJET PLC ,GB,AIM,,GB00BWGCH354,ORD GBP0.01 ,FJET ,24.670639275,"96,747,605.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Jun-14,FDM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLWDVP51,ORD GBP0.01 ,FDM ,688.1120384,"107,517,506.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 31-Jan-06,FEDERAL BANK ,IN,PSM,Standard GDRs,US3131621092,GDR EACH REPR 1 INR10 '144A' ,FEDA,38.0909999999999,0.00,Financials,Banks,Banks,Banks,8355,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 31-Jan-06,FEDERAL BANK ,IN,PSM,Standard GDRs,XS0229331755,GDR EACH REPR 1 INR10 'REGS' ,FEDS,38.0909999999999,"20,000,000.00",Financials,Banks,Banks,Banks,8355,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 28-Mar-11,FEDERAL GRID CO UNI ENERGY SYS PJSC,RU,International Main Market,Standard GDRs,US3133541025,GDR EACH REPR 500 SHS '144A' ,FEEA,0,0.00,,,,,9,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 19-May-14,FEEDBACK ,GB,AIM,,GB0003340550,ORD GBP0.25 ,FDBK ,2.29133089125,"203,673,857.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 28-Jul-52,FENNER PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003345054,ORD GBP0.25 ,FENR,323.732856225,"193,273,347.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 20-Jun-07,FERREXPO PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1XH2C03,ORD GBP0.10 ,FXPO,369.361649105,"588,624,142.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 15-Dec-10,FERRUM CRESCENT LTD ,AU,AIM,,AU000000FCR2,NPV (DI) ,FCR ,3.6358823004,"1,731,372,524.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Nov-14,FEVERTREE DRINKS PLC ,GB,AIM,,GB00BRJ9BJ26,ORD GBP0.0025 ,FEVR ,1132.81800768,"115,240,896.00",Consumer Goods,Food & Beverage,Beverages,Soft Drinks,3537,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 13-Jun-96,FIDELITY ASIAN VALUES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003322319,ORD GBP0.25 ,FAS ,193.36656846,"60,807,097.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 19-Apr-10,FIDELITY CHINA SPECIAL SITUATIONS ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B62Z3C74,ORD GBP0.01 ,FCSS,943.52600016,"557,639,480.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 6-Nov-91,FIDELITY EUROPEAN VALUES ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BK1PKQ95,ORD GBP0.025 ,FEV ,740.624145477,"419,142,131.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 15-Mar-94,FIDELITY JAPANESE VALUES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003328555,ORD GBP0.25 ,FJV ,118.61687144125,"118,714,237.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 15-Mar-94,FIDELITY JAPANESE VALUES ,GB,UK Main Market,Standard Shares,GB00BLY2CK21,SUBSCRIPTION SHS GBP0.00001 ,FJVS,118.61687144125,"22,790,861.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISC,MISC,GBX,,,,,,,,,,,,,,,,,, 17-Nov-94,FIDELITY SPECIAL VALUES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BWXC7Y93,ORD GBP0.05 ,FSV ,531.139792,"270,644,480.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 9-Jun-97,FIDESSA GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007590234,ORD GBP0.10 ,FDSA,919.72461282,"37,070,722.00",Technology,Technology,Software & Computer Services,Software,9537,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 16-Nov-15,FILTRONIC ,GB,AIM,,GB0003362992,ORD GBP0.001 ,FTC ,23.79466679,"206,910,146.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Jun-98,FINANSBANK ,TR,International Main Market,Standard GDRs,US31770N3008,GDR EACH REPR 5 ORD'144A'(BNY) ,01LS,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 11-Jun-98,FINANSBANK ,TR,International Main Market,Standard GDRs,US31770N4097,GDR EACH REPR 5 ORD 'REG'S'(BNY) ,FBKD,0,"8,000,000.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 9-Apr-13,FINDEL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B8B4R053,ORD GBP0.10 ,FDL ,164.456920935,"86,442,534.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 2-Dec-13,FINNAUST MINING PLC ,GB,AIM,,GB00BFD3VF20,ORD GBP0.01 ,FAM ,36.6754052,"682,333,120.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 30-Oct-14,FINSBURY FOOD GROUP ,GB,AIM,,GB0009186429,ORD GBP0.01 ,FIF ,241.712989125,"189,578,815.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Dec-53,FINSBURY GROWTH & INCOME TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007816068,ORD GBP0.25 ,FGT ,437.00539555,"66,718,381.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Jun-93,FINTRUST DEBENTURE ,GB,UK Main Market,Standard Debt,GB0031578841,9.25% SEVERAL DEBS STK 2023 ,70GU,0,"85,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 30-Sep-10,FIRESTONE DIAMONDS ,GB,AIM,,GB00BKX59Y86,ORD GBP0.01 ,FDI ,133.4307407,"313,954,684.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Dec-87,FIRST DEBENTURE FINANCE ,GB,UK Main Market,Standard Debt,GB0003384228,11.125% SEVERALLY GTD DEB STK 2018 ,50GU,0,"80,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 28-Mar-02,FIRST DERIVATIVES PLC ,GB,AIM,,GB0031477770,ORD GBP0.005 ,FDP ,503.3613996,"24,494,472.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 22-Dec-00,FIRST PROPERTY GROUP ,GB,AIM,,GB0004109889,ORD GBP0.01 ,FPO ,52.482091545,"112,864,713.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 16-Jun-95,FIRSTGROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003452173,ORD GBP0.05 ,FGP ,1324.039180275,"1,204,767,225.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 31-Dec-96,FISHER(JAMES)& SONS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003395000,ORD GBP0.25 ,FSJ ,776.0203495,"50,065,829.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,FISHGUARD & ROSSLARE RLYS & HBRS CO,GB,UK Main Market,Standard Shares,GB0003401261,3.5% GTD PRF STK ,72GU,0,"1,237,664.00",,,,,7,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 4-Jun-15,FISHING REPUBLIC PLC ,GB,AIM,,GB00BY7RY763,ORD GBP0.01 ,FISH ,15.69811702,"37,826,788.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Recreational Products,3745,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Mar-00,FISKE ,GB,AIM,,GB0003353157,ORD GBP0.25 ,FKE ,2.9085196,"8,310,056.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Oct-04,FITBUG HLDGS PLC ,GB,AIM,,GB00B57JBH88,ORD GBP0.001 ,FITB ,2.770575678,"1,231,366,968.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Recreational Products,3745,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 14-Oct-08,FLETCHER KING ,GB,AIM,,GB0003425310,ORD GBP0.10 ,FLK ,4.743036185,"9,209,779.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Aug-06,FLOWGROUP PLC ,GB,AIM,,GB00B19H7076,ORD GBP0.05 ,FLOW ,38.49764505875,"317,506,351.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-May-14,FLOWTECH FLUIDPOWER PLC ,GB,AIM,,GB00BM4NR742,ORD GBP0.5 ,FLO ,52.7170475975,"43,078,282.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 15-Dec-10,FLYBE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B4QMVR10,ORD GBP0.01 ,FLYB,102.2370934725,"216,374,801.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 2-Aug-93,FLYING BRANDS ,JE,UK Main Market,,GB0003437059,UTS(COM 1ORD 0.01P&1'A'ORD0.005 FLY BDS),FBDU,0,"27,873,735.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 11-Dec-14,FOCUSRITE PLC ,GB,AIM,,GB00BSBMW716,ORD GBP0.001 ,TUNE ,95.82375,"58,075,000.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Apr-15,FONDUL PROPRIETATEA SA ,RO,Trading Only,,US34460G1067,GDR EACH REPR 50 ORD SPONS REG S ,FP. ,0,"81,228,524.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,IOBE,INNE,USD,,,,,,,,,,,,,,,,,, 29-Feb-00,FORBIDDEN TECHNOLOGIES ,GB,AIM,,GB0004740477,ORD GBP0.008 ,FBT ,12.98805966375,"150,586,199.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Mar-52,FOREIGN & COL INVESTM TRUST ,GB,UK Main Market,Standard Debt,GB0003467049,4.25% PERP DEB STK ,03GW,2731.35459849,"575,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 21-Mar-52,FOREIGN & COL INVESTM TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003466074,ORD GBP0.25 ,FRCL,2731.35459849,"547,365,651.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Apr-96,FORESIGHT 3 VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3QF3772,ORD GBP0.01 ,FTD ,22.97673005,"56,040,805.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Mar-98,FORESIGHT 4 VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B07YBS95,ORD GBP0.01 ,FTF ,33.7395925125,"71,406,545.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 2-Nov-10,FORESIGHT SOLAR & INFRA VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B8B31886,ORD GBP0.01 C ,FTSC,58.57147571,"22,742,557.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 2-Nov-10,FORESIGHT SOLAR & INFRA VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B640GZ49,ORD GBP0.01 ,FTSV,58.57147571,"38,311,862.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 2-Nov-10,FORESIGHT SOLAR & INFRA VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYQ06Y75,ORD GBP0.01 D ,FTSD,58.57147571,"2,496,781.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Oct-13,FORESIGHT SOLAR FUND LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00BD3QJR55,ORD NPV ,FSFL,280.668530925,"273,822,957.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Jan-07,FORESIGHT VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B61K7Y37,PLANNED EXIT SHS GBP0.01 ,FTVP,114.708491435,"11,487,350.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 18-Jan-07,FORESIGHT VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B68K3716,ORD GBP0.01 ,FTV ,114.708491435,"112,895,691.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 18-Jan-07,FORESIGHT VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B45M5X62,INFRASTRUCTURE SHS GBP0.01 ,FTVI,114.708491435,"32,487,558.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Jun-07,FORMATION GROUP PLC ,GB,AIM,,GB0030432735,ORD GBP0.01 ,FRM ,8.989967745,"217,938,612.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Apr-16,FORTERRA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYYW3C20,ORD GBP0.01 ,FORT,340.25041043,"200,442,068.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 31-Aug-12,FOX MARBLE HLDGS PLC ,GB,AIM,,GB00B7LGG306,ORD GBP0.01 ,FOX ,17.5962256275,"180,474,109.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Sep-13,FOXTONS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BCKFY513,ORD GBP0.01 ,FOXT,324.9754193125,"273,663,511.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 5-Aug-16,FRANCHISE BRANDS PLC ,GB,AIM,,GB00BD6P7Y24,ORD GBP0.005 ,FRAN ,19.554838595,"47,120,093.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-May-95,FRENCH CONNECTION GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033764746,ORD GBP0.01 ,FCCN,48.189626385,"95,899,754.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 28-Jul-04,FRENKEL TOPPING GROUP ,GB,AIM,,GB00B01YXQ71,ORD GBP0.005 ,FEN ,34.78503888,"72,468,831.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 14-May-08,FRESNILLO PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B2QPKJ12,ORD USD0.50 ,FRES,12151.42992514,"756,627,019.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Aug-11,FRONTERA RESOURCES CORP ,KY,AIM,,KYG368131069,ORD USD0.00004 (DI) ,FRR ,6.950969423,"6,950,969,423.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Jul-13,FRONTIER DEVELOPMENTS PLC ,GB,AIM,,GB00BBT32N39,GBP0.005 ,FDEV ,56.416513905,"33,284,079.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Jan-11,FRONTIER IP GROUP PLC ,GB,AIM,,GB00B63PS212,ORD GBP0.10 ,FIPP ,11.711800665,"34,960,599.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Feb-05,FRUTAROM INDUSTRIES ,IL,International Main Market,Standard GDRs,US35950R2058,GDR EACH REPR 1 ILS1'REGS' ,FRUT,273.936721148999,"7,902,900.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 8-Feb-05,FRUTAROM INDUSTRIES ,IL,International Main Market,Standard GDRs,US35950R1068,GDR EACH REPR 1 ILS1'144A' ,73CL,273.936721148999,0.00,Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 8-Jul-10,FULCRUM UTILITY SERVICES LD ,KY,AIM,,KYG368851047,ORD GBP0.001 (DI) ,FCRM ,59.21430975,"160,038,675.00",Utilities,Utilities,"Gas, Water & Multiutilities",Multiutilities,7575,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Oct-14,FULHAM SHORE PLC(THE) ,GB,AIM,,GB00B9F8VG44,ORD GBP0.01 ,FUL ,116.905199325,"570,269,265.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Aug-96,FULLER SMITH & TURNER ,GB,UK Main Market,Standard Shares,GB0003551537,8% 2ND CUM PRF GBP1 ,54GW,327.811814625,"1,200,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 27-Aug-96,FULLER SMITH & TURNER ,GB,UK Main Market,Standard Shares,GB0003551420,6% 1ST CUM PRF GBP1 ,53GW,327.811814625,"400,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 27-Aug-96,FULLER SMITH & TURNER ,GB,UK Main Market,Standard Debt,GB0002538154,6.875% DEB STK 2028 ,BA80,327.811814625,"20,000,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 27-Aug-96,FULLER SMITH & TURNER ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1YPC344,'A'ORD GBP0.40 ,FSTA,327.811814625,"32,177,957.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Nov-15,FUNDING CIRCLE SME INCOME FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYYJCZ96,ORD NPV ,FCIF,167.36534375,"164,285,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 10-Mar-93,FUNDING FOR HOMES ,GB,UK Main Market,Standard Debt,GB0003309126,10.125% DEB STK 2018 ,99GT,0,"183,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 25-Jun-14,FUNDSMITH EMERGING EQUITIES TR PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BLSNND18,ORD GBP0.01 ,FEET,215.61781915,"19,337,921.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Dec-12,FUSIONEX INTERNATIONAL PLC ,JE,AIM,,JE00B8BL8C53,ORD NPV ,FXI ,83.248,"47,300,000.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Jul-03,FUTURA MEDICAL ,GB,AIM,,GB0033278473,ORD GBP0.002 ,FUM ,29.3287147125,"98,583,915.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Jun-99,FUTURE ,GB,UK Main Market,Standard Shares,GB0007239980,GBP0.01 ,FUTR,31.89713205,"364,538,652.00",Consumer Services,Media,Media,Publishing,5557,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 10-Jan-07,FYFFES ,IE,AIM,,IE0003295239,ORD EUR0.06 ,FFY ,387.967773465,"297,293,313.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Jul-04,G4S PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01FLG62,ORD GBP0.25 ,GFS ,3577.996049882,"1,551,602,797.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 19-Feb-15,GABELLI VALUE PLUS + TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BTLJYS47,ORD GBP0.01 ,GVP ,114.495421145,"99,996,001.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Dec-05,GABLE HLDGS INC ,KY,AIM,,KYG3705F1019,ORD GBP0.0025 ,GAH ,3.21384603375,"135,319,833.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Nov-99,GAIL(INDIA) ,IN,PSM,Standard GDRs,US36268T1079,GDR EACH REP 6 ORD INR10 144A ,GAIA,0,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 15-Nov-99,GAIL(INDIA) ,IN,PSM,Standard GDRs,US36268T2069,GDR EACH REP 6 ORD INR10 REG'S' ,GAID,0,"25,833,333.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 31-Mar-06,GALANTAS GOLD CORP ,CA,AIM,,CA36315W2022,NPV ,GAL ,12.057578225,"137,800,894.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-May-14,GALASYS PLC ,JE,AIM,,JE00BKWBXC36,ORD NPV ,GLS ,0,"76,556,693.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Sep-11,GALILEO RESOURCES PLC ,GB,AIM,,GB00B115T142,ORD GBP0.001 ,GLR ,2.661032652,"221,752,721.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Mar-72,GALLIFORD TRY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B3Y2J508,ORD GBP0.50 ,GFRD,925.3338335,"81,527,210.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Jan-15,GAMA AVIATION PLC ,GB,AIM,,GB00B3ZP1526,ORD GBP0.01 ,GMAA ,87.96413411,"44,994,442.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Jun-14,GAME DIGITAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMP36W19,ORD GBP0.01 ,GMD ,121.30996526,"170,859,106.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Oct-94,GAMES WORKSHOP GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003718474,ORD GBP0.05 ,GAW ,170.5780836,"31,588,534.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 1-Aug-13,GAMING REALMS PLC ,GB,AIM,,GB00BBHXD542,ORD GBP0.10 ,GMR ,55.34113767,"280,208,292.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 10-Oct-14,GAMMA COMMUNICATIONS PLC ,GB,AIM,,GB00BQS10J50,ORD GBP0.0025 ,GAMA ,418.3647254325,"91,595,999.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 25-Nov-13,GAN PLC ,GB,AIM,,GB00BGCC6189,ORD GBP0.01 ,GAN ,29.51972395,"69,458,174.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jun-15,GATELEY HLDGS PLC ,GB,AIM,,GB00BXB07J71,ORD GBP0.1 ,GTLY ,131.40018632,"106,396,912.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Jun-06,GAZPROM NEFT PJSC ,RU,Trading Only,,US36829G1076,LEVEL 1 ADR EACH REPR 5 ORD SHS ,GAZ ,0,"20,348,882.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 28-Oct-96,GAZPROM OAO ,RU,International Main Market,Standard GDRs,US3682871088,ADS EACH REP 10 ORD REGD 144A ,81JK,36475.6963091963,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 28-Oct-96,GAZPROM OAO ,RU,International Main Market,Standard GDRs,US3682872078,ADS EACH REPR 2 ORD SHS ,OGZD,36475.6963091963,"11,836,756,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 27-Aug-10,GB GROUP ,GB,AIM,,GB0006870611,ORD GBP0.025 ,GBG ,389.943426285,"125,889,726.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 19-Apr-04,GCM RESOURCES PLC ,GB,AIM,,GB00B00KV284,ORD GBP0.10 ,GCM ,11.93884589,"62,836,031.00",Basic Materials,Basic Resources,Mining,Coal,1771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Jul-10,GCP INFRASTRUCTURE INVESTMENTS LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B6173J15,ORD GBP0.01 ,GCP ,834.896164248,"656,364,909.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-May-13,GCP STUDENT LIVING PLC ,GB,UK Main Market,,GB00B8460Z43,ORD GBP0.01 ,DIGS,384.83867205,"261,795,015.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 3-Jun-15,GEAR 4 MUSIC (HLDGS) LTD ,GB,AIM,,GB00BW9PJQ87,ORD GBP0.1 ,G4M ,33.358741045,"20,156,339.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Recreational Products,3745,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Jul-06,GEIGER COUNTER LTD ,IM,Trading Only,,GB00B15FW330,NPV ,GCL ,11.90962425,"63,517,996.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 19-Feb-07,GEM DIAMONDS LTD ,VG,International Main Market,Premium Equity Commercial Companies,VGG379591065,ORD USD0.01 (DI) ,GEMD,173.510451085,"137,980,478.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 6-Jun-08,GEMFIELDS PLC ,GB,AIM,,GB00B0HX1083,ORD GBP0.01 ,GEM ,211.52408726,"538,914,872.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 4-Apr-07,GENEDRIVE PLC ,GB,AIM,,GB00B1VKB244,ORD GBP0.015 ,GDR ,14.9604984,"18,700,623.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Jun-11,GENEL ENERGY PLC ,JE,UK Main Market,Standard Shares,JE00B55Q3P39,ORD GBP0.10 ,GENL,269.8537103625,"274,660,265.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 10-Sep-92,GENERAL ACCIDENT PLC ,GB,UK Main Market,Standard Shares,GB0003692737,8 7/8% CUM IRRD PRF GBP1 ,GACA,379.825,"140,000,000.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 10-Sep-92,GENERAL ACCIDENT PLC ,GB,UK Main Market,Standard Shares,GB0003692513,7 7/8% CUM IRRD PRF GBP1 ,GACB,379.825,"110,000,000.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Oct-73,GENERAL ELECTRIC CO. ,US,International Main Market,Standard Shares,US3696041033,USD0.06 ,GEC ,188411.345874373,"11,693,036,766.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SSX4,SXSN,EUR,,,,,,,,,,,,,,,,,, 13-Apr-65,GENERAL MOTORS CORP ,US,International Main Market,Standard Debt,GB0003658282,BDRS(ISS BARCL BANK-UNITS 1/20TH SH) ,GMRB,0,0.00,Consumer Goods,Automobiles & Parts,Automobiles & Parts,Automobiles,3353,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 6-Jul-89,GENESIS EMERGING MARKETS FUND ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B4L0PD47,PTG SHS NPV ,GSS ,791.5583469,"134,963,060.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 12-Nov-07,GENUS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002074580,ORD GBP0.10 ,GNS ,1101.6924351,"60,499,310.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 12-Nov-15,GEORGIA HEALTHCARE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYSS4K11,ORD GBP0.01 ,GHG ,381.877278,"131,681,820.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 23-Sep-05,GETECH GROUP ,GB,AIM,,GB00B0HZVP95,ORD GBP0.0025 ,GTC ,9.578109825,"37,561,215.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Dec-14,GFINITY PLC ,GB,AIM,,GB00BT9QD572,ORD GBP0.001 ,GFIN ,17.709026625,"157,413,570.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jun-46,GKN ,GB,UK Main Market,Premium Equity Commercial Companies,GB0030646508,ORD GBP0.10 ,GKN ,5052.95667632,"1,624,744,912.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 8-Sep-88,GLANBIA ,IE,International Main Market,Premium Equity Commercial Companies,IE0000669501,ORD EUR0.06 ,GLB ,4342.7636193468,"292,869,684.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET3,OL10,EUR,,,,,,,,,,,,,,,,,, 22-May-72,GLAXOSMITHKLINE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009252882,ORD GBP0.25 ,GSK ,77779.31632262,"4,745,534,858.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 24-May-11,GLENCORE PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B4T3BW64,ORD USD0.01 ,GLEN,25121.083944259,"14,433,257,078.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 14-Dec-05,GLENWICK PLC ,IM,AIM,,GB00B0RFL714,ORD NPV ,GWIK ,1.2,"2,518,637,367.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Jun-97,GLH HOTELS LTD ,GB,UK Main Market,Standard Debt,GB0000440312,7.875% 1ST MTG DEB STK 2022 ,97KI,0,"60,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 5-Aug-05,GLI FINANCE LTD ,GG,AIM,,GB00B0CL3P62,ORD NPV ,GLIF ,69.32493284,"209,880,262.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Oct-15,GLI FINANCE LTD ,GG,UK Main Market,Standard Shares,GG00BTDYD136,ZDP 05/12/19 NPV ,GLIZ,20.9213643625,"20,791,418.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 5-Oct-15,GLI FINANCE LTD ,GG,UK Main Market,,GB00BYY7WT75,ORD NPV (RFD 30/11/16) ,GLIS ,20.9213643625,"54,501,607.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Mar-02,GLOBAL ENERGY DEVELOPMENT ,GB,AIM,,GB0031461949,ORD GBP0.01 ,GED ,9.2073309,"36,107,180.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Nov-06,GLOBAL FIXED INC REAL LTD ,GG,Trading Only,,GG00B1GJQ984,ORD NPV GBP ,GFIR,15.04546475,"120,363,718.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 2-Jul-14,GLOBAL INVACOM GROUP LTD ,SG,AIM,,SG2E91982768,NPV (DI) ,GINV ,21.180172425,"282,402,299.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Mar-05,GLOBAL PETROLEUM ,AU,AIM,,AU000000GBP6,NPV ,GBP ,3.5720373325,"204,116,419.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Jun-11,GLOBAL PORTS INVESTMENTS PLC ,CY,International Main Market,Standard GDRs,US37951Q2021,GDR EACH REPR 3 SHS REG S ,GLPR,363.877437940499,"191,056,910.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 7-Mar-14,GLOBAL RESOURCES INV TR PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BCKFVJ45,ORD GBP0.01 ,GRIT,3.277540984,"39,970,012.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 19-Jul-00,GLOBAL TELECOM HLDG SAE ,EG,International Main Market,Standard GDRs,US37953P2020,GDR EACH REPR 5 ORD REG S ,GLTD,1387.92266211564,"915,503,103.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 19-Jul-00,GLOBAL TELECOM HLDG SAE ,EG,International Main Market,Standard GDRs,US37953P1030,GDR EACH REPR 5 ORD 144A ,31PH,1387.92266211564,0.00,Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 25-Jun-09,GLOBALDATA PLC ,GB,AIM,,GB00B87ZTG26,ORD GBP0.0007142 ,DATA ,355.65381645,"102,346,422.00",Consumer Services,Media,Media,Publishing,5557,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-May-08,GLOBALTRANS INVESTMENT PLC ,CY,International Main Market,Standard GDRs,US37949E1055,GDR EACH REPR 1 ORD '144A' ,38KH,637.727451327286,0.00,Industrials,Industrial Goods & Services,Industrial Transportation,Railroads,2775,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 8-May-08,GLOBALTRANS INVESTMENT PLC ,CY,International Main Market,Standard GDRs,US37949E2046,GDR EACH REPR 1 ORD 'REGS' ,GLTR,637.727451327286,"199,312,002.00",Industrials,Industrial Goods & Services,Industrial Transportation,Railroads,2775,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Jul-13,GLOBALWORTH REAL ESTATE INVMTS LTD ,GG,AIM,,GG00B979FD04,ORD NPV ,GWI ,293.199085385041,"64,023,987.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,EUR,,,,,,,,,,,,,,,,,, 11-Aug-15,GLOO NETWORKS PLC ,GB,AIM,,GB00BYVTYD43,ORD GBP0.01 ,GLOO ,30.784,"25,600,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4WPHX27,ETFS LONGER DATED ALL COMMODITIES GBP ,CMFP,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNHZ41,DAX DAILY 2X SHORT GO UCITS GBP ,DS2P,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNHH68,DAX DAILY 2X LONG GO UCITS ,DEL2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,EUR,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4WPHX27,ETFS LONGER DATED ALL COMMODITIES USD ,COMF,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,USD,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNK008,FTSE 100 SUPER SHORT STRATEGY GBP ,SUK2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNHZ41,DAX DAILY 2X SHORT GO UCITS EUR ,DES2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,EUR,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNJJ23,FTSE 100 LEVERAGED (DAILY 2X) GBP ,LUK2,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETLL,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,GO UCITS ETF SOLUTIONS PLC ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B4QNHH68,DAX DAILY 2X LONG GO UCITS GBP ,DL2P,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLL,GBX,,,,,,,,,,,,,,,,,, 9-May-94,GO-AHEAD GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003753778,ORD GBP0.10 ,GOG ,843.70354738,"42,632,822.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 7-Dec-04,GOALS SOCCER CENTRES ,GB,AIM,,GB00B0486M37,ORD GBP0.0025 ,GOAL ,85.7451684,"75,215,060.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Mar-04,GOLD BULLION SECURITIES LIMITED ,JE,UK Main Market,Standard Debt,GB00B00FHZ82,(GBS)0% SEC UND NTS ,GBS ,0,"40,549,528.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETCS,ECLL,USD,,,,,,,,,,,,,,,,,, 19-Dec-14,GOLDBRIDGES GLOBAL RESOURCES PLC ,GB,UK Main Market,Standard Shares,GB00B015PT76,ORD GBP0.001 ,GBGR,41.2011385945,"2,334,342,130.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 16-Jun-09,GOLDEN PROSPECT PRECIOUS METALS LTD,GG,Trading Only,,GG00B1G9T992,ORD GBP0.001 ,GPM ,25.792669235,"57,000,374.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 19-Jul-13,GOLDEN SAINT RESOURCES LTD ,VG,AIM,,VGG3960L1085,ORD NPV (DI) ,GSR ,2.3634047052,"4,501,723,248.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Jul-06,GOLDPLAT PLC ,GB,AIM,,GB00B0HCWM45,ORD GBP0.01 ,GDP ,10.10646,"168,441,000.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Mar-04,GOLDSTONE RESOURCES LTD ,JE,AIM,,JE00BRJ8YF63,ORD GBP0.01 ,GRL ,2.22472839525,"102,286,363.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Dec-97,GOOCH & HOUSEGO PLC ,GB,AIM,,GB0002259116,ORD GBP0.20 ,GHH ,226.55746245,"21,763,445.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 30-Jul-12,GOOD ENERGY GROUP PLC ,GB,AIM,,GB0033600353,ORD GBP0.05 ,GOOD ,36.00299227,"16,477,342.00",Utilities,Utilities,Electricity,Alternative Electricity,7537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Aug-58,GOODWIN ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003781050,ORD GBP0.10 ,GDWN,155.34,"7,200,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Aug-04,GRAFENIA PLC ,GB,AIM,,GB0009638130,ORD GBP0.01 ,GRA ,4.7569444,"47,569,444.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Jul-74,GRAFTON GROUP ,IE,International Main Market,Premium Equity Commercial Companies,IE00B00MZ448,"UTS(1 ORD,1'C'ORD & 17'A'ORD SHS) ",GFTU,1260.949795875,"230,310,465.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 22-Feb-84,GRAINGER PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B04V1276,ORD GBP0.05 ,GRI ,958.21358479,"413,557,870.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Jan-15,GRAND GROUP INVESTMENT PLC ,KY,AIM,,KYG405631014,ORD GBP0.00004 (DI) ,GIPO ,0,"33,952,631.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Mar-13,GRAPHENE NANOCHEM PLC ,GB,AIM,,GB00B9BBJ076,ORD GBP0.20 ,GRPH ,0,"116,536,536.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 28-May-10,GREAT EASTERN ENERGY CORP ,IN,International Main Market,Standard GDRs,US39032T1060,GDR EACH REPR 0.5 ORD 'REGS' ,GEEC,32.758380875,"119,121,385.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 23-May-59,GREAT PORTLAND ESTATES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01FLL16,ORD GBP0.125 ,GPOR,2118.343172725,"312,670,579.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-May-59,GREAT PORTLAND ESTATES PLC ,GB,UK Main Market,Standard Debt,GB0004841101,5.625% 1ST MTG DEB STK 2029 ,32NJ,2118.343172725,"150,000,000.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 18-Aug-11,GREAT WESTERN MINING CORP PLC ,IE,AIM,,IE00B1FR8863,ORD EUR0.0001 ,GWMO ,1.15198356915,"264,823,809.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Jul-06,GREATLAND GOLD PLC ,GB,AIM,,GB00B15XDH89,ORD GBP0.001 ,GGP ,4.32307708925,"1,631,349,845.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-May-16,GREEN & SMART HLDGS PLC ,JE,AIM,,JE00BYTQ7945,ORD NPV ,GSH ,29.39583336875,"276,666,667.00",Utilities,Utilities,Electricity,Alternative Electricity,7537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Oct-14,GREEN DRAGON GAS LTD ,KY,International Main Market,Standard Shares,KYG409381053,ORD USD0.0001 (DI) ,GDG ,359.348629725,"142,316,289.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 3-Aug-09,GREEN ENERGY TECHNOLOGY INC ,TW,Trading Only,,US39303W1018,GDR EACH REPR 5 SHS '144A' ,GETA,0,0.00,,,,,9,MISC,INAD,USD,,,,,,,,,,,,,,,,,, 18-Jul-13,GREEN REIT PLC ,IE,International Main Market,Premium Equity Closed Ended Investment Funds,IE00BBR67J55,ORD EUR0.10 ,GRN ,864.677121687968,"680,864,987.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,SET3,ON15,EUR,,,,,,,,,,,,,,,,,, 27-Mar-13,GREENCOAT UK WIND PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B8SC6K54,ORD GBP0.01 ,UKW ,688.2754146975,"602,429,247.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 9-Sep-11,GREENCORE GROUP ,IE,International Main Market,Premium Equity Commercial Companies,IE0003864109,ORD GBP0.01 ,GNC ,1437.49900827,"409,543,877.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 4-Feb-55,GREENE KING ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0HZP136,ORD GBP0.125 ,GNK ,2490.696333125,"306,547,241.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Apr-84,GREGGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B63QSB39,ORD GBP0.02 ,GRG ,1048.98669337,"101,155,901.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Mar-11,GREKA DRILLING LTD ,KY,AIM,,KYG411101002,ORD USD0.00001 (DI) ,GDL ,12.9530517675,"398,555,439.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 27-Feb-95,GRESHAM COMPUTING ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008808825,ORD GBP0.05 ,GHT ,61.61534866,"63,520,978.00",Technology,Technology,Software & Computer Services,Software,9537,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-15,GRESHAM HOUSE ,GB,AIM,,GB0003887287,ORD GBP0.25 ,GHE ,33.840704675,"10,185,487.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Nov-15,GRESHAM HOUSE ,GB,AIM,,GB00BPYP3515,WTS (TO SUB FOR ORD) ,GHEW ,33.840704675,"1,073,855.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Oct-99,GRESHAM HOUSE STRATEGIC PLC ,GB,AIM,,GB00BYRH4982,ORD GBP0.5 ,GHS ,33.340410625,"3,843,275.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Jun-97,GRIFFIN MINING ,BM,AIM,,BMG319201049,ORD USD0.01 ,GFM ,73.75173547875,"179,335,527.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Jun-01,GROSVENOR UK FINANCE ,GB,UK Main Market,Standard Debt,GB0030308554,6.5% DEB STK 29/9/2026 GBP1 ,62QE,0,"200,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 13-Aug-12,GROUND RENTS INCOME FUND PLC ,GB,Trading Only,,GB00B715WG26,ORD GBP0.50 ,GRIO,119.51337636,"93,124,311.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 13-Aug-12,GROUND RENTS INCOME FUND PLC ,GB,Trading Only,,GB00B8N43P05,WTS (TO SUB FOR ORD) ,GRIW,119.51337636,"9,674,420.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 25-Oct-07,GRUPO CLARIN SA ,AR,International Main Market,Standard GDRs,US40052A1007,GDR EACH REPR 2 CLS'B' SHS '144A' ,42KU,399.955499999999,0.00,Consumer Services,Media,Media,Broadcasting & Entertainment,5553,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 25-Oct-07,GRUPO CLARIN SA ,AR,International Main Market,Standard GDRs,US40052A2096,GDR EACH REPR 2 CLS'B' SHS'REGS' ,GCLA,399.955499999999,"25,000,000.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 26-Jul-07,GUARANTY TRUST BANK ,NG,International Main Market,Standard GDRs,US40124Q2084,GDR EACH REPR 50 ORD 'REGS' ,GRTB,216.798735599999,"66,960,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 26-Jul-07,GUARANTY TRUST BANK ,NG,International Main Market,Standard GDRs,US40124Q1094,GDR EACH REPR 50 ORD '144A' ,87QR,216.798735599999,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 15-Feb-95,GUINNESS PARTNERSHIP(THE)LD ,GB,UK Main Market,Standard Debt,GB0001854792,7.5% 1ST MTG DEB STK 2037 ,BB26,0,"100,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 15-Feb-95,GUINNESS PARTNERSHIP(THE)LD ,GB,UK Main Market,Standard Debt,GB0006467723,9.125% GTD SEC STK 2025 ,52HX,0,"110,000,000.00",,,,,6,CWNU,NIOU,GBP,,,,,,,,,,,,,,,,,, 25-Mar-14,GULF KEYSTONE PETROLEUM LTD ,BM,International Main Market,Standard Shares,BMG4209G1087,ORD USD0.01 (DI) ,GKP ,38.5923018,"1,029,128,048.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 19-Mar-14,GULF MARINE SERVICES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJVWTM27,ORD GBP0.1 ,GMS ,159.03515082,"349,527,804.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 8-Apr-05,GULFSANDS PETROLEUM ,GB,AIM,,GB00B06VGC01,ORD GBP0.01 ,GPX ,16.24986828125,"519,995,785.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Mar-06,GUNSYND PLC ,GB,AIM,,GB00B4WKYH05,ORD GBP0.0001 ,GUN ,0.6429548097,"1,224,675,828.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Sep-13,GUSBOURNE PLC ,GB,AIM,,GB00B8TS4M09,ORD GBP0.50 ,GUS ,10.6378929,"23,639,762.00",Consumer Goods,Food & Beverage,Beverages,Distillers & Vintners,3535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-May-16,GUSCIO PLC ,GB,AIM,,GB00BPT23R97,ORD GBP0.001 ,GUSC ,5.0739200625,"135,304,535.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Feb-16,GVC HLDGS PLC ,IM,UK Main Market,Premium Equity Commercial Companies,IM00B5VQMV65,ORD EUR0.01 ,GVC ,2011.01639879,"291,663,002.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,SET3,ON5 ,GBX,,,,,,,,,,,,,,,,,, 28-Jun-01,GW PHARMACEUTICALS ,GB,AIM,,GB0030544687,ORD GBP0.001 ,GWP ,1485.86487955,"288,237,610.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 12-Nov-15,GYM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BZBX0P70,ORD GBP0.0001 ,GYM ,269.1874983,"128,184,523.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 8-May-06,H & T GROUP ,GB,AIM,,GB00B12RQD06,ORD GBP0.05 ,HAT ,106.52371224,"36,859,416.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 30-Jul-92,HACO ,GB,UK Main Market,Standard Debt,GB00B1BPH986,10.625% SEVERAL DEB STK 2017 GBP1 ,35GZ,0,"141,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 20-Jun-16,HADRIANS WALL SECURED INV LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYMYC345,ORD NPV ,HWSL,85.22631189,"80,024,706.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 23-Mar-11,HAGL JSC ,VN,PSM,Standard GDRs,US4337181030,GDR EACH REPR 1 ORD REG'S ,HAG ,0,"200,000,000.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 23-Mar-11,HAGUE & LONDON OIL PLC ,GB,AIM,,GB00BSNM2916,ORD GBP0.04 ,HNL ,2.65469446,"24,133,586.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Feb-07,HAIKE CHEMICAL GROUP LTD ,KY,AIM,,KYG423181083,ORD USD0.002 (DI) ,HAIK ,6.0406874325,"38,353,571.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Jun-04,HALFORDS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B012TP20,ORD GBP0.01 ,HFD ,692.142822894,"199,063,222.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Jan-72,HALMA ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004052071,ORD GBP0.10 ,HLMA,3988.574943,"376,280,655.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Nov-93,HALOS ,GB,UK Main Market,Standard Debt,GB0004047980,8.375% DEB STK 9/11/2018 ,34HA,0,"125,000,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 18-Oct-10,HALOSOURCE INC ,US,AIM,,US40638H1086,NPV (DI) ,HALO ,19.69560574,"29,914,480.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Oct-10,HALOSOURCE INC ,US,AIM,,USU4063G1077,NPV DI REG S ,HAL ,19.69560574,"193,939,372.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 16-Aug-11,HALS-DEVELOPMENT PJSC ,RU,International Main Market,Standard GDRs,US40637J2042,GDR EACH REP 1/20 ORD REG'S ,HALS,170.908131021599,"224,341,880.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 16-Aug-11,HALS-DEVELOPMENT PJSC ,RU,International Main Market,Standard GDRs,US40637J1051,GDR EACH REP 1/20 ORD 144A ,86PN,170.908131021599,0.00,Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 20-Dec-06,HALYK SAVINGS BANK OF KAZAKHSTN JSC,KZ,International Main Market,Standard GDRs,US46627J2033,GDR EACH REPR 40 ORD SHS'144A' (SPON) ,37QB,194.587873499999,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 20-Dec-06,HALYK SAVINGS BANK OF KAZAKHSTN JSC,KZ,International Main Market,Standard GDRs,US46627J3023,GDR EACH REPR 40 ORD SHS'REGS' (SPON) ,HSBK,194.587873499999,"42,500,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 31-May-45,HAMMERSON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004065016,ORD GBP0.25 ,HMSO,4771.6752714,"822,702,633.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 10-Nov-06,HANATOUR SERVICE INC ,KR,International Main Market,Standard GDRs,US4096502079,GDR EACH REPR 1/5 ORD SHS 'REGS' ,TOUR,0,"5,805,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 10-Nov-06,HANATOUR SERVICE INC ,KR,International Main Market,Standard GDRs,US4096501089,GDR EACH REPR 1/5 ORD SHS '144A' ,86PB,0,0.00,Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 25-Mar-51,HANSA TRUST ,GB,UK Main Market,Standard Shares,GB0007879835,'A'NON V.ORD GBP0.05 ,HANA,196.04,"16,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 25-Mar-51,HANSA TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007879728,ORD GBP0.05 ,HAN ,196.04,"8,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Dec-06,HANSARD GLOBAL PLC ,IM,UK Main Market,Premium Equity Commercial Companies,IM00B1H1XF89,ORD GBP0.50 ,HSD ,167.48306644,"137,281,202.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Oct-09,HANSTEEN HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0PPFY88,ORD GBP0.10 ,HSTN,859.262320182,"742,022,729.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 9-Sep-15,HARBOURVEST GLOBAL PRIVATE EQUITY ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BR30MJ80,ORD RED A ,HVPE,738.7279955,"79,862,486.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Apr-05,HARDIDE PLC ,GB,AIM,,GB00B069T034,ORD GBP0.001 ,HDD ,14.149628871,"1,347,583,702.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Feb-08,HARDY OIL & GAS ,IM,UK Main Market,Premium Equity Commercial Companies,GB00B09MB366,ORD USD0.01 ,HDY ,12.7016564475,"73,632,791.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 29-Oct-04,HARGREAVE HALE AIM VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B02WHS05,ORD GBP0.01 ,HHV ,43.716724,"64,289,300.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Apr-07,HARGREAVE HALE AIM VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1GDYS53,ORD GBP0.01 ,HHVT,35.60418166,"37,876,789.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 18-May-07,HARGREAVES LANSDOWN PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1VZ0M25,ORD GBP0.004 ,HL. ,6270.4922225,"474,318,625.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 30-Nov-05,HARGREAVES SERVICES ,GB,AIM,,GB00B0MTC970,ORD GBP0.10 ,HSP ,56.6639056475,"30,180,509.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 7-Sep-15,HARVEST MINERALS LTD ,AU,AIM,,AU000XINEAB4,ORD NPV (DI) ,HML ,19.26819641,"93,991,202.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Apr-97,HARVEY NASH GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006573546,ORD GBP0.05 ,HVN ,44.0702358,"73,450,393.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 29-Mar-16,HARWOOD WEALTH MANAGEMENT GROUP PLC,GB,AIM,,GB00BYYWB172,ORD GBP0.0025 ,HW. ,66.7067124,"55,588,927.00",Financials,Financial Services,Financial Services,Asset Managers,8771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Mar-15,HARWORTH GROUP PLC ,GB,UK Main Market,Standard Shares,GB00BYZJ7G42,ORD GBP0.1 ,HWG ,253.544039355,"292,269,786.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 15-Oct-15,HASTINGS GROUP HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYRJH519,ORD GBP0.02 ,HSTG,1453.765421892,"657,217,641.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 30-Jul-10,HAVELOCK EUROPA PLC ,GB,AIM,,GB0004149356,ORD GBP0.10 ,HVE ,3.66054475,"38,532,050.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Apr-14,HAYDALE GRAPHENE INDUSTRIES PLC ,GB,AIM,,GB00BKWQ1135,ORD GBP0.02 ,HAYD ,25.75043874,"15,236,946.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Nov-96,HAYNES PUBLISHING GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004160833,ORD GBP0.20 ,HYNS,6.7206975,"6,109,725.00",Consumer Services,Media,Media,Publishing,5557,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 26-Oct-89,HAYS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004161021,ORD GBP0.01 ,HAS ,1814.263285278,"1,389,175,563.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Jan-10,HAYWARD TYLER GROUP PLC ,IM,AIM,,IM00B511CF53,ORD GBP0.01 ,HAYT ,47.11497616,"54,784,856.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Jan-11,HAZEL RENEWABLE ENERGY VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4M2G812,ORD GBP0.001 ,HR1O,27.1193417745,"23,867,218.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 10-Jan-11,HAZEL RENEWABLE ENERGY VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4L13999,ORD GBP0.001 A ,HR1A,27.1193417745,"33,678,309.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 10-Jan-11,HAZEL RENEWABLE ENERGY VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4KWC525,ORD GBP0.001 A ,HR2A,27.831414194,"34,300,598.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 10-Jan-11,HAZEL RENEWABLE ENERGY VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B43GVJ82,ORD GBP0.001 ,HR2O,27.831414194,"24,506,323.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 6-Jul-88,HEADLAM GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004170089,ORD GBP0.05 ,HEAD,368.24625738,"83,125,566.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 2-Oct-00,HEATH(SAMUEL)& SONS ,GB,AIM,,GB0004178710,ORD GBP0.10 ,HSM ,7.1005928,"2,535,926.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 1-Jul-96,HEAVITREE BREWERY ,GB,AIM,,GB0004182720,'A'LIM.V ORD GBP0.05 ,HVTA ,16.1260477,"3,435,061.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Jul-96,HEAVITREE BREWERY ,GB,AIM,,GB0004182944,11.5% CUM PRF GBP1 ,HVTB ,16.1260477,"11,695.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,ASXN,AIMN,GBX,,,,,,,,,,,,,,,,,, 1-Jul-96,HEAVITREE BREWERY ,GB,AIM,,GB0004182506,ORD GBP0.05 ,HVT ,16.1260477,"1,994,699.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Jul-57,HELICAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0FYMT95,ORD GBP0.01 ,HLCL,336.134949115,"118,149,367.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 4-Sep-07,HELIOS UNDERWRITING PLC ,GB,AIM,,GB00B23XLS45,ORD GBP0.10 ,HUW ,18.58726975,"10,621,297.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Jun-98,HELLENIC PETROLEUM SA ,GR,International Main Market,Standard GDRs,US4233231046,GDS EACH REPR 1 ORD SH'144A' ,98LQ,0,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 30-Jun-98,HELLENIC PETROLEUM SA ,GR,International Main Market,Standard GDRs,US4233232036,GDS EACH REPR 1 ORD REG'S' ,HLPD,0,"23,215,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 24-Jun-97,HELLENIC TELECOM.ORGANIZATION S.A. ,GR,International Main Market,Standard GDRs,US4233253073,ADS EACH REP 1/2 ORD ,OTES,452.777145000001,"145,000,000.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 13-Sep-94,HEMINGWAY DEBENTURE ,GB,UK Main Market,Standard Debt,GB0004198445,10.375% 1ST MTG DEB STK 31/7/23 ,06HB,0,"100,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 25-Jul-91,HENDERSON ALTERNATIVE STRAT TR PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001216000,ORD GBP0.25 ,HAST,117.945840895,"48,437,717.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Jul-07,HENDERSON DIVERSIFIED INCOME LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B1Y1NS49,ORD NPV ,HDIV,106.1130254525,"111,992,639.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 8-Dec-71,HENDERSON EUROPEAN FOCUS TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005268858,ORD GBP0.50 ,HEFT,174.411558575,"16,941,385.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Jul-92,HENDERSON EUROTRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004199294,ORD GBP0.05 ,HNE ,191.61875425,"20,715,541.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Dec-06,HENDERSON FAR EAST INCOME LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B1GXH751,ORD NPV ,HFEL,344.64833452,"100,480,564.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-Dec-03,HENDERSON GROUP PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B3CM9527,ORD GBP0.125 ,HGG ,2638.165353856,"1,106,612,984.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Dec-89,HENDERSON HIGH INCOME TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0009580571,ORD GBP0.05 ,HHI ,172.32656896,"93,655,744.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Apr-11,HENDERSON INTL INCOME TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3PHCS86,ORD GBP0.01 ,HINT,220.393759005,"155,480,606.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 16-Oct-85,HENDERSON OPPORTUNITIES TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008536574,ORD GBP0.25 ,HOT ,63.68151816,"7,965,168.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 29-Mar-55,HENDERSON SMALLER COS INV TST ,GB,UK Main Market,Standard Debt,GB0008707977,10.5% DEB STK 2016 ,95IL,461.34439333,"20,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 29-Mar-55,HENDERSON SMALLER COS INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0009065060,GBP0.25 ,HSL ,461.34439333,"74,350,426.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 29-Mar-55,HENDERSON SMALLER COS INV TST ,GB,UK Main Market,Standard Shares,GB0009065284,4.5% CUM PRF STK ,44IO,461.34439333,"875,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBP,,,,,,,,,,,,,,,,,, 21-Feb-94,HERALD INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004228648,ORD GBP0.25 ,HRI ,593.01992295,"74,593,701.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Nov-05,HERENCIA RESOURCES ,GB,AIM,,GB00B069DV22,ORD GBP0.0001 ,HER ,1.06665239075,"4,266,609,563.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Feb-08,HERMES PACIFIC INVESTMENTS PLC ,GB,AIM,,GB00BD02KZ12,ORD GBP1 ,HPAC ,1.866636,"2,333,295.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 13-Dec-89,HG CAPITAL TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003921052,ORD GBP0.25 ,HGT ,430.63144445,"33,564,415.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Dec-13,HIBERNIA REIT PLC ,IE,International Main Market,Premium Equity Closed Ended Investment Funds,IE00BGHQ1986,ORD EUR0.10 ,HBRN,794.312125528039,"665,451,875.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SET3,ON10,EUR,,,,,,,,,,,,,,,,,, 29-Mar-06,HICL INFRASTRUCTURE CO LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0T4LH64,ORD GBP0.0001 ,HICL,3044.391817401,"1,726,824,627.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 16-Apr-48,HIDONG ESTATE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004251863,ORD GBP0.10 ,HID ,0,"1,713,334.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 19-Jun-08,HIGHBRIDGE MULTI STRATEGY FD LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B13YVW48,ORD NPV GBP ,HMSF,809.0594784,"421,385,145.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,HIGHCROFT INVESTMENTS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004254875,ORD GBP0.25 ,HCFT,46.646289,"5,182,921.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Dec-02,HIGHLAND GOLD MINING ,JE,AIM,,GB0032360173,ORD GBP0.001 ,HGM ,355.305142065,"325,222,098.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 3-Feb-16,HIGHLANDS NATURAL RESOURCES PLC ,GB,UK Main Market,Standard Shares,GB00BWC4X262,ORD GBP0.05 ,HNR ,0,"38,067,349.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Mar-95,HIGHWAY CAPITAL PLC ,GB,UK Main Market,Standard Shares,GB0008579384,ORD GBP0.02 ,HWC ,1.21723882,"8,694,563.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 4-Nov-05,HIKMA PHARMACEUTICALS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0LCW083,ORD GBP0.10 ,HIK ,5067.2505098,"236,787,407.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 26-Mar-69,HILL & SMITH HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004270301,ORD GBP0.25 ,HILS,896.15940741,"76,791,723.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 17-May-07,HILTON FOOD GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1V9NW54,ORD GBP0.10 ,HFG ,418.047351855,"70,437,633.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 22-Jun-90,HIMALAYAN FUND NV ,NL,International Main Market,Premium Equity Closed Ended Investment Funds,NL0000464154,EUR0.01 ,HYF ,441.524839848778,"16,325,798.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSX4,SXNC,USD,,,,,,,,,,,,,,,,,, 19-Mar-14,HISCOX LTD ,BM,International Main Market,Premium Equity Commercial Companies,BMG4593F1389,ORD GBP0.065(DI) ,HSX ,3095.80690032,"296,533,228.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Jun-06,HML HLDGS PLC ,GB,AIM,,GB00B16DFY89,ORD GBP0.015 ,HMLH ,12.8321687,"39,483,596.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 14-Feb-11,HMS HYDRAULIC MACH & SYS GRP PLC ,CY,International Main Market,Standard GDRs,US40425X4079,GDR EACH REP 5 SHS REG S ,HMSG,670.401599999998,"200,000,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 8-Nov-06,HOCHSCHILD MINING PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1FW5029,ORD GBP0.25 ,HOC ,1216.40504103,"505,571,505.00",Basic Materials,Basic Resources,Mining,General Mining,1775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 12-Oct-06,HOGG ROBINSON GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1CM8S45,ORD GBP0.01 ,HRG ,224.9557625625,"317,958,675.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 8-Oct-01,HOLDERS TECHNOLOGY ,GB,AIM,,GB0004312350,ORD GBP0.10 ,HDT ,1.185472035,"4,159,551.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,HOME GROUP ,GB,UK Main Market,Standard Debt,GB0006442155,0% LN STK 2027 ,86HW,0,"104,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,HOME GROUP ,GB,UK Main Market,Standard Debt,GB0006441744,8.75% GTD LN STK 2037 ,84HW,0,"100,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,HOME GROUP ,GB,UK Main Market,Standard Debt,GB0006441967,0% LN STK 2019 ,85HW,0,"73,222,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 11-Oct-06,HOME RETAIL GROUP PLC ,GB,UK Main Market,,,,,0,,Consumer Services,Retail,General Retailers,Broadline Retailers,5373,,,,,,,,,,,,,,,,,,,,, 20-Nov-91,HOMESERVE ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYYTFB60,ORD GBP0.0269230769 ,HSV ,1741.42808762,"307,672,807.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 8-Oct-99,HON HAI PRECISION INDUSTRY ,TW,International Main Market,Standard GDRs,US4380901029,GDR EACH REP 2 SHS TWD10 '144A' ,HHPG,103.797975,0.00,Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 8-Oct-99,HON HAI PRECISION INDUSTRY ,TW,International Main Market,Standard GDRs,US4380902019,GDR EACH REP 2 SHS TWD10 REG'S' ,HHPD,103.797975,"25,000,000.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 23-Dec-15,HONEYCOMB INVESTMENT TRUST PLC ,GB,UK Main Market,,GB00BYZV3G25,ORD GBP0.01 ,HONY,0,"15,000,001.00",,,,,0,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 22-May-87,HONEYWELL INTERNATIONAL INC ,US,International Main Market,Standard Shares,US4385161066,USD1 ,HON ,87342.9144220983,"981,343,234.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 1-Oct-90,HONG KONG LAND HLDGS ,BM,International Main Market,Standard Shares,BMG4587L1090,ORD USD0.10 (JERSEY REG) ,HKLJ,13199.3935319739,0.00,,,,,8733,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 1-Oct-90,HONG KONG LAND HLDGS ,BM,International Main Market,Standard Shares,BMG4587L1090,ORD USD0.10 (BERMUDA REG) ,HKLB,13199.3935319739,"2,338,209,385.00",,,,,8733,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 27-Mar-14,HORIZON DISCOVERY GROUP PLC ,GB,AIM,,GB00BK8FL363,ORD GBP0.01 ,HZD ,151.572363525,"95,029,695.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Aug-10,HORIZONTE MINERALS ,GB,AIM,,GB00B11DNM70,ORD GBP0.01 ,HZM ,14.8033152495,"722,112,939.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 12-Aug-15,HORNBY PLC ,GB,AIM,,GB00B01CZ652,ORD GBP0.01 ,HRN ,26.326522245,"84,583,204.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 2-Nov-15,HOSTELWORLD GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYYN4225,ORD EUR0.01 ,HSW ,176.8059393,"95,570,778.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-May-16,HOTEL CHOCOLAT GROUP PLC ,GB,AIM,,GB00BYZC3B04,ORD GBP0.001 ,HOTC ,234.1384931,"112,837,828.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Nov-91,HOUSING FINANCE CORP ,GB,UK Main Market,Standard Debt,GB0004398318,8.625% DEB STK 2023 ,65HB,0,"227,500,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 21-Nov-91,HOUSING FINANCE CORP ,GB,UK Main Market,Standard Debt,GB0004398193,11.5% DEB STK 2016 ,64HB,0,"231,500,000.00",,,,,6,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 21-Nov-91,HOUSING FINANCE CORP ,GB,UK Main Market,Standard Debt,GB0004410071,5% DEB STK 2027 ,68HB,0,"50,954,200.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 21-Nov-91,HOUSING FINANCE CORP ,GB,UK Main Market,Standard Debt,GB0004398425,9.625% DEB STK 2025 ,66HB,0,"66,950,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 17-Jul-92,HOWDEN JOINERY GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005576813,ORD GBP0.10 ,HWDN,2800.571460652,"613,622,143.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Feb-12,HSBC BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B6Y1YW03,LEPO WTS 02/02/22(CHINA CNR CORP)USD ,11IE,0,"7,000,000.00",,,,,5,CWTR,UIDW,USD,,,,,,,,,,,,,,,,,, 9-Feb-12,HSBC BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B7D4CP64,LEPO WTS 24/02/22(ZOOMLION HEAVY IND)USD,42MA,0,"3,000,000.00",,,,,5,CWTR,UIDW,USD,,,,,,,,,,,,,,,,,, 9-Feb-12,HSBC BANK PLC ,GB,UK Main Market,Standard Securitised Derivatives,GB00B73ML866,LEPO 23/02/22 (CHINA CONSTRUCTION BK)USD,42KM,0,"40,000,000.00",,,,,5,CWTR,UIDW,USD,,,,,,,,,,,,,,,,,, 8-Apr-91,HSBC HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005405286,ORD USD0.50 ,HSBA,109590.589894005,"19,420,625,535.00",Financials,Banks,Banks,Banks,8355,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 4-Feb-15,HSS HIRE GRP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVFD4645,ORD GBP0.01 ,HSS ,120.71428512,"154,761,904.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Dec-10,HUMMINGBIRD RESOURCES PLC ,GB,AIM,,GB00B60BWY28,ORD GBP0.01 ,HUM ,80.5325978625,"346,376,765.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Jul-14,HUNTER RESOURCES PLC ,IM,AIM,,IM00BMNQNZ42,ORD GBP0.01 ,HUN ,0,"133,195,035.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 2-Jul-15,HUNTERS PROPERTY PLC ,GB,AIM,,GB00BYMW5L71,ORD GBP0.04 ,HUNT ,19.800893,"28,286,990.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 28-Jun-85,HUNTING ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004478896,ORD GBP0.25 ,HTG ,679.7671033725,"146,265,111.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 4-Aug-86,HUNTSWORTH ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0CRWK29,ORD GBP0.01 ,HNT ,140.42137878,"326,561,346.00",Consumer Services,Media,Media,Media Agencies,5555,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 4-Feb-14,HURRICANE ENERGY PLC ,GB,AIM,,GB00B580MF54,ORD GBP0.001 ,HUR ,290.288931715,"984,030,277.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 19-May-06,HUTCHISON CHINA MEDITECH ,KY,AIM,,KYG4672N1016,ORD USD1 ,HCM ,1156.1765129,"63,092,852.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-May-12,HVIVO PLC ,GB,AIM,,GB00B6ZM0X53,ORD GBP0.05 ,HVO ,139.373130225,"78,080,185.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 27-Apr-50,HWANGE COLLIERY CO ,ZW,International Main Market,Standard Shares,ZW0009011934,ZWD1 ,HWA ,0,"101,333,952.00",Basic Materials,Basic Resources,Mining,Coal,1771,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 21-Dec-04,HYDRODEC GROUP ,GB,AIM,,GB00B02FJF09,ORD GBP0.005 ,HYR ,25.153403582,"734,405,944.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Sep-06,HYDROGEN GROUP PLC ,GB,AIM,,GB00B1DJTV45,ORD GBP0.01 ,HYDG ,8.2254921,"23,501,406.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-Apr-02,HYGEA VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031256109,ORD GBP0.50 ,HYG ,3.89538048,"8,115,376.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Jun-95,HYUNDAI MOTOR CO ,KR,Trading Only,,US4491875096,GDS EACH REP 0.5 PFD N/VTG ,HYUP,670.994910139282,0.00,Consumer Goods,Automobiles & Parts,Automobiles & Parts,Automobiles,3353,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 22-Jun-95,HYUNDAI MOTOR CO ,KR,International Main Market,Standard GDRs,USY384721251,GDR EACH REP 1/2 PFD N/VTG(REG'S')(CIT) ,HYUD,670.994910139282,"20,822,194.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Automobiles,3353,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 22-Jun-95,HYUNDAI MOTOR CO ,KR,Trading Only,,US4491877076,GDS EACH REPR 0.5 ORD SHARE ,HYUO,670.994910139282,0.00,Consumer Goods,Automobiles & Parts,Automobiles & Parts,Automobiles,3353,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 28-Jun-13,IBEX GLOBAL SOLUTIONS PLC ,GB,AIM,,GB00BBCRF441,ORD GBP0.01 ,IBEX ,33.819012,"39,554,400.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Apr-06,IBIS MEDIA VCT 1 ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0WHB612,ORD GBP0.01 ,IBSA,2.58775986,"12,322,666.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 27-Oct-15,IBSTOCK PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYXJC278,ORD GBP0.01 ,IBST,741.947663394,"406,101,622.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 17-Nov-98,ICAP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033872168,ORD GBP0.10 ,IAP ,3089.095886575,"645,849,025.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Jul-81,ICG ENTERPRISE TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003292009,ORD GBP0.10 ,ICGT,405.66762691,"69,822,311.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 5-Feb-13,ICG-LONGBOW SNR SEC UK PRP DEBT INV,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B8C23S81,ORD NPV ,LBOW,109.3014425,"108,219,250.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 2-Jul-12,IDEAGEN PLC ,GB,AIM,,GB00B0CM0C50,ORD GBP0.01 ,IDEA ,98.04246326,"179,894,428.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Jun-07,IDOX ,GB,AIM,,GB0002998192,ORD GBP0.01 ,IDOX ,271.930850685,"366,854,436.00",Technology,Technology,Software & Computer Services,Software,9537,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 14-Sep-10,IENERGIZER LTD ,GG,AIM,,GG00B54NMG96,ORD GBP0.01 ,IBPO ,135.94295572,"190,130,008.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Jul-00,IFG GROUP ,IE,International Main Market,Standard Shares,IE0002325243,ORD EUR0.12 ,IFP ,202.82421708,"125,200,134.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 31-Oct-95,IG DESIGN GROUP PLC ,GB,AIM,,GB0004526900,ORD GBP0.05 ,IGR ,143.565976915,"58,479,013.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Nondurable Household Products,3724,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-May-05,IG GROUP HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B06QFB75,ORD GBP0.00005 ,IGG ,3486.77995128,"366,643,528.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 12-Dec-12,IG SEISMIC SERVICES PLC ,CY,International Main Market,Standard GDRs,US4495971032,GDR EACH REPR 2 ORD SHS 144A ,14VM,41.6621645684999,0.00,Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 12-Dec-12,IG SEISMIC SERVICES PLC ,CY,International Main Market,Standard GDRs,US4495972022,GDR EACH REPR 2 ORD SHS REG S ,IGSS,41.6621645684999,"31,250,100.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 12-Dec-11,IGAS ENERGY PLC ,GB,AIM,,GB00B29PWM59,ORD GBP0.10 ,IGAS ,53.0111600825,"298,654,423.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 14-May-10,ILIKA PLC ,GB,AIM,,GB00B608Z994,ORD GBP0.01 ,IKA ,38.3105718,"66,052,710.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Apr-02,IMAGE SCAN HLDGS ,GB,AIM,,GB0031410581,ORD GBP0.01 ,IGE ,8.164297505,"125,604,577.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Dec-06,IMAGINATIK PLC ,GB,AIM,,GB00BP8XY588,ORD GBP0.01 ,IMTK ,2.65700043,"151,828,596.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Jul-94,IMAGINATION TECHNOLOGIES GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009303123,GBP0.10 ,IMG ,649.714716035,"284,650,478.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 9-Mar-66,IMI ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BGLP8L22,ORD GBP0.2857 ,IMI ,3040.61339505,"287,664,465.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Jun-14,IMIMOBILE PLC ,GB,AIM,,GB00BLBP4Y22,ORD GBP0.10 ,IMO ,95.499372735,"49,353,681.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Dec-03,IMMEDIA GROUP PLC ,GB,AIM,,GB0033881904,ORD GBP0.10 ,IME ,4.3705035,"14,568,345.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 24-Dec-04,IMMUNODIAGNOSTIC SYSTEMS HLDGS ,GB,AIM,,GB00B01YZ052,ORD GBP0.02 ,IDH ,53.1953044,"29,148,112.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Feb-06,IMMUPHARMA ,GB,AIM,,GB0033711010,ORD GBP0.10 ,IMM ,45.8187772875,"124,676,945.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 20-Jun-06,IMPACT HLDGS(UK) ,GB,AIM,,GB00B3DFYL18,ORD GBP0.50 ,IHUK ,1.66522527,"2,622,402.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Oct-09,IMPAX ASIAN ENVIRONMENTAL MKTS PLC ,GB,UK Main Market,,GB00B4M82P85,SUB SHS GBP0.001 ,IAES,0,"39,075,491.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 23-Oct-09,IMPAX ASIAN ENVIRONMENTAL MKTS PLC ,GB,UK Main Market,,GB00BCBV5662,ORD GBP0.01(A RIGHTS) ,IAEA,0,"20,805,744.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 23-Oct-09,IMPAX ASIAN ENVIRONMENTAL MKTS PLC ,GB,UK Main Market,,GB00BCBV5886,ORD GBP0.01(B RIGHTS) ,IAEB,0,"178,779,313.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 19-Jun-01,IMPAX ASSET MANAGEMENT GROUP PLC ,GB,AIM,,GB0004905260,ORD GBP0.01 ,IPX ,61.400049,"122,800,098.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-Feb-02,IMPAX ENVIRONMENTAL MARKETS PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031232498,ORD GBP0.10 ,IEM ,402.6998147,"196,438,934.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 7-May-08,IMPELLAM GROUP PLC ,GB,AIM,,GB00B8HWGJ55,ORD GBP0.01 ,IPEL ,375.507267,"50,403,660.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Oct-96,IMPERIAL BRANDS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004544929,ORD GBP0.10 ,IMB ,38064.723945325,"953,166,995.00",Consumer Goods,Personal & Household Goods,Tobacco,Tobacco,3785,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 31-Jul-06,IMPERIAL INNOVATIONS GROUP ,GB,AIM,,GB00B170L953,ORD GBP0.030303 ,IVO ,623.85995988,"161,204,124.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 29-May-40,INCH KENNETH KAJANG RUBBER ,GB,UK Main Market,Standard Shares,GB0004601091,ORD GBP0.10 ,IKK ,46.445395,"403,873,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 31-Oct-58,INCHCAPE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B61TVQ02,ORD GBP0.10 ,INCH,3236.520237715,"461,371,381.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Feb-08,INCOME & GROWTH VCT PLC(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B29BN198,ORD GBP0.01 ,IGV ,97.43586538125,"110,565,521.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 18-Oct-00,INDEPENDENT INVESTMENT TRUST(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000811686,ORD GBP0.25 ,IIT ,205.69085,"55,145,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Sep-73,INDEPENDENT NEWS & MEDIA ,IE,International Main Market,Premium Equity Commercial Companies,IE00B59HWB19,ORD EUR0.01 ,INM ,158.743012398708,"1,386,547,376.00",Consumer Services,Media,Media,Publishing,5557,SSQ3,SQQ3,EUR,,,,,,,,,,,,,,,,,, 30-Sep-13,INDEPENDENT OIL & GAS PLC ,GB,AIM,,GB00BF49WF64,ORD GBP0.01 ,IOG ,29.3044219275,"103,732,467.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Dec-05,INDEPENDENT RESOURCES ,GB,AIM,,GB00B0RNX796,ORD GBP0.0001 ,IRG ,0.83469018375,"1,335,504,294.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Dec-05,INDIA CAPITAL GROWTH FUND ,GG,AIM,,GB00B0P8RJ60,ORD GBP0.01 ,IGC ,80.01717054625,"112,502,173.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Dec-03,INDIGOVISION GROUP ,GB,AIM,,GB0032654534,ORD GBP0.01 ,IND ,12.4853223,"7,566,862.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Dec-14,INDIVIOR PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRS65X63,ORD USD0.10 ,INDV,2260.645186228,"718,577,618.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Jun-08,INDUS GAS LTD ,GG,AIM,,GG00B39HF298,ORD GBP0.01 ,INDI ,741.0443922,"182,973,924.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 27-Oct-14,INDUSTRIAL MULTI PROPERTY TRUST PLC,IM,UK Main Market,,IM00B4N9KC32,ORD GBP0.10 ,IMPT,15.137136,"8,409,520.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 29-Sep-05,INFINITY ENERGY SA ,LU,AIM,,LU0726886947,ORD NPV ,INFT ,0.47092274775,"348,831,665.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-May-14,INFORMA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMJ6DW54,ORD GBP0.001 ,INF ,4597.748749165,"648,941,249.00",Consumer Services,Media,Media,Publishing,5557,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 17-Jan-08,INFRASTRATA PLC ,GB,AIM,,GB00B28YMP66,ORD GBP0.01 ,INFA ,2.3505199875,"188,041,599.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Mar-11,INFRASTRUCTURE INDIA PLC ,IM,AIM,,IM00B2QVWM67,ORD GBP0.01 ,IIP ,86.7340477275,"680,267,041.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B62VNG90,ORD GBP0.01 G ,IE1G,0,"3,518,044.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B402J954,ORD GBP0.01 F ,IE1F,0,"1,572,092.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B42F8N96,ORD GBP0.01 E ,IE1E,0,"2,846,122.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B956JT75,ORD GBP0.01 H ,IE1H,0,"6,132,684.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 1 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B598LZ10,'D' SHS GBP0.01 ,IE1D,0,"6,785,624.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4N8CB39,ORD GBP0.01 E ,IEVE,0,"2,846,122.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B41BXG64,ORD GBP0.01 F ,IEVF,0,"1,572,095.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B94SVP47,ORD GBP0.01 H ,IEVH,0,"6,132,684.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6S3D702,ORD GBP0.01 G ,IEVG,0,"3,518,044.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Apr-08,INGENIOUS ENTERTAINMENT VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B59YCM30,'D' SHS GBP0.01 ,IEVD,0,"6,785,624.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 28-Feb-07,INGENTA PLC ,GB,AIM,,GB00B3BDTG73,ORD GBP0.10 ,ING ,24.56112225,"16,938,705.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Apr-07,INLAND HOMES PLC ,GB,AIM,,GB00B1TR0310,ORD GBP0.10 ,INL ,131.88399939,"184,453,146.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Dec-12,INLAND ZDP PLC ,GB,UK Main Market,Standard Misc Securities,GB00B99R1Q79,0% DIV PREF SHS 17/4/19 GBP0.10 ,INLZ,0,"28,313,200.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 22-Jun-05,INMARSAT ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B09LSH68,ORD EUR0.0005 ,ISAT,3466.09319772,"449,558,132.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 24-Jun-15,INSPIRATION HEALTHCARE GROUP PLC ,GB,AIM,,GB00BXDZL105,ORD GBP0.1 ,IHC ,20.7005949,"30,667,548.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Nov-11,INSPIRED ENERGY PLC ,GB,AIM,,GB00B5TZC716,ORD GBP0.0125 ,INSE ,63.6286013175,"480,215,859.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Jul-13,INSPIRIT ENERGY HLDGS PLC ,GB,AIM,,GB00B44W9L31,ORD GBP0.001 ,INSP ,3.0446222885,"936,806,858.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 13-Oct-10,INSTEM PLC ,GB,AIM,,GB00B3TQCK30,ORD GBP0.10 ,INS ,40.22003456,"15,710,951.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-May-15,INTEGRATED DIAGNOSTICS HLDGS PLC ,JE,UK Main Market,Standard Shares,JE00BV9H9G76,ORD USD1 ,IDHC,413.096894999999,"150,000,000.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,SSMU,SMEU,USD,,,,,,,,,,,,,,,,,, 9-Jul-14,INTELLIGENT ENERGY HLDGS PLC ,GB,UK Main Market,Standard Shares,GB00BNB7LQ31,ORD GBP0.05 ,IEH ,16.3726655805,"205,945,479.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 8-Jan-01,INTERCEDE GROUP ,GB,AIM,,GB0003287249,ORD GBP0.01 ,IGP ,51.815847085,"49,114,547.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 1-Jul-14,INTERCONTINENTAL HOTELS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYXK6398,ORD GBP0.1896656535 ,IHG ,6730.0439736,"206,379,760.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SET1,FF10,GBX,,,,,,,,,,,,,,,,,, 1-Aug-16,INTERMEDIATE CAPITAL GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYT1DJ19,ORD GBP0.2625 ,ICP ,1747.61241935,"293,716,373.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-May-94,INTERNATIONAL BIOTECHNOLOGY TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004559349,ORD GBP0.25 ,IBT ,193.0183585,"38,797,660.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 19-Jul-73,INTERNATIONAL BUS MACH CORP ,US,International Main Market,Standard Shares,US4592001014,USD0.20 ,IBM ,73462.8549771848,"607,590,732.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 24-Jan-11,INTERNATIONAL CONSOLIDATED AIRL GRP,ES,International Main Market,Premium Equity Commercial Companies,ES0177542018,ORD EUR0.50(CDI) ,IAG ,6947.69322194,"1,814,019,118.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 31-Aug-07,INTERNATIONAL FERRO METALS ,AU,International Main Market,,AU0000XINAK8,NPV ,IFL ,0,"554,008,047.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 16-Jul-07,INTERNATIONAL PERSONAL FINANCE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1YKG049,ORD GBP0.10 ,IPF ,602.909829408,"222,311,884.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Nov-06,INTERNATIONAL PUBLIC PARTNERSHIP ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B188SR50,ORD GBP0.0001 ,INPP,1834.906360704,"1,167,243,232.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-May-05,INTERQUEST GROUP ,GB,AIM,,GB00B07W3X22,ORD GBP0.01 ,ITQ ,21.55728688,"37,167,736.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 12-Oct-66,INTERSERVE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001528156,ORD GBP0.10 ,IRV ,627.2143755325,"145,779,053.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 29-May-02,INTERTEK GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031638363,ORD GBP0.01 ,ITRK,5612.96165507,"160,783,777.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 6-Oct-06,INTU DEBENTURE PLC ,GB,UK Main Market,Standard Debt,GB00B1DBF788,5.562% 1ST MTG DEB STK 31/12/27 GBP50000,69ZM,0,"354,876,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 24-Jun-99,INTU PROPERTIES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006834344,ORD GBP0.50 ,INTU,4158.13023368,"1,315,863,998.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 11-Jul-95,INVESCO ASIA TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004535307,ORD GBP0.10 ,IAT ,235.65426096,"103,357,132.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Mar-96,INVESCO INCOME GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003585725,ORD GBP0.25 ,IVI ,167.42970816,"58,541,856.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 15-Oct-99,INVESCO PERPETUAL ENHANCED INC LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B05NYM32,ORD GBP0.05 ,IPE ,86.1396106125,"112,051,526.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-06,INVESCO PERPETUAL SELECT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1DQ6472,GLOBAL EQUITY INC SHS GBP0.01 ,IVPG,158.382375935,"34,902,663.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-06,INVESCO PERPETUAL SELECT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1DPVL60,UK EQUITY SHS GBP0.01 ,IVPU,158.382375935,"43,810,145.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-06,INVESCO PERPETUAL SELECT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1DQ6704,MANAGED LIQUIDITY SHS GBP0.01 ,IVPM,158.382375935,"9,487,207.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Nov-06,INVESCO PERPETUAL SELECT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1DQ6696,BALANCED RISK SHS GBP0.01 ,IVPB,158.382375935,"10,061,862.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Mar-88,INVESCO PERPETUAL UK SMLLER CO IT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1FL3C76,ORD GBP0.2 ,IPU ,208.57960928,"53,209,084.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,INVESTEC INVESTMENT TRUST(GB) ,GB,UK Main Market,Standard Shares,GB0004057468,3.5% CUM PRF STK ,46HA,0,"1,300,000.00",,,,,7,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,INVESTEC INVESTMENT TRUST(GB) ,GB,UK Main Market,Standard Shares,GB0004058433,5% CUM PRF STK GBP1 ,47HA,0,"345,438.00",,,,,7,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 29-Jul-02,INVESTEC PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B17BBQ50,ORD GBP0.0002 ,INVP,2952.17501236,"654,874,670.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Jul-02,INVESTEC PLC ,GB,Trading Only,,GB00B19RX541,NON-RED NON-CUM NON-PTG PREF GBP0.01 ,INVR,2952.17501236,0.00,Financials,Financial Services,Financial Services,Investment Services,8777,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 23-Jul-64,INVESTMENT CO ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004658257,ORD GBP0.50 ,INV ,17.15716738,"4,739,549.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Mar-07,INVESTORS CAPITAL TRUST PLC ,GB,UK Main Market,,GB00B1N4H933,UNITS(COMP 3'A'ORD& 1'B'ORD) ,ICTU,199.563703385,"21,822,855.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Mar-07,INVESTORS CAPITAL TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1N4G299,'A' ORD GBP0.001 ,ICTA,199.563703385,"89,428,144.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Mar-07,INVESTORS CAPITAL TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1N4H594,'B' ORD GBP0.001 ,ICTB,199.563703385,"30,771,703.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-May-08,IOFINA PLC ,GB,AIM,,GB00B2QL5C79,ORD GBP0.01 ,IOF ,19.1354097,"127,569,398.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 19-Apr-00,IOMART GROUP ,GB,AIM,,GB0004281639,ORD GBP0.01 ,IOM ,304.55842274,"102,200,813.00",Technology,Technology,Software & Computer Services,Internet,9535,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 22-Apr-10,IONA ENVIRONMENTAL VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B40HX431,ORD GBP0.001 B ,IONB,1.2272484855,"960,110.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Apr-10,IONA ENVIRONMENTAL VCT PLC ,GB,UK Main Market,Standard Shares,GB00B5BMPY80,ORD GBP0.001 A ,IONA,1.2272484855,"6,510,471.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 22-Apr-10,IONA ENVIRONMENTAL VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B57F1L02,ORD GBP0.001 ,ION1,1.2272484855,"318,370.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 19-Jun-06,IP GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B128J450,ORD GBP0.02 ,IPO ,1002.0706761,"527,405,619.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Sep-00,IPPLUS PLC ,GB,AIM,,GB0009737155,ORD GBP0.01 ,IPP ,4.8386214125,"31,728,665.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 20-Sep-05,IPSA GROUP ,GB,AIM,,GB00B0CJ3F01,ORD GBP0.02 ,IPSA ,0,"107,504,081.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Sep-03,IQE PLC ,GB,AIM,,GB0009619924,ORD GBP0.01 ,IQE ,156.0601093275,"606,058,677.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 19-Jan-09,IRF EUROPEAN FINANCE INVESTMENTS ,BM,International Main Market,,BMG493831058,USD0.0015 (DI) ,IRF ,0.0836878364256477,"137,315,633.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 10-Jun-14,IRISH CONTINENTAL GROUP ,IE,International Main Market,Premium Equity Commercial Companies,IE00BLP58571,UNIT(COMP 1 ORD EUR0.065 &10 RD(NIL IS)),ICGC,730.799260205986,"184,376,890.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,SET3,ON15,EUR,,,,,,,,,,,,,,,,,, 12-Feb-15,IRONRIDGE RESOURCES LTD ,AU,AIM,,AU0000XINEX3,ORD NPV (DI) ,IRR ,30.75958639,"236,612,203.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-May-01,IRONVELD PLC ,GB,AIM,,GB0030426455,ORD GBP0.01 ,IRON ,15.83109045375,"324,740,317.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 17-Mar-98,ITE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002520509,ORD GBP0.01 ,ITE ,434.9826189125,"254,004,449.00",Consumer Services,Media,Media,Media Agencies,5555,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 6-Jun-06,ITHACA ENERGY INC ,CA,AIM,,CA4656761042,ORD NPV (DI) ,IAE ,201.681554025,"316,363,222.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 11-Jun-04,ITM POWER ,GB,AIM,,GB00B0130H42,ORD GBP0.05 ,ITM ,48.7588401,"216,705,956.00",Oil & Gas,Oil & Gas,Alternative Energy,Renewable Energy Equipment,583,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 2-Feb-04,ITV ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033986497,ORD GBP0.10 ,ITV ,7849.545939225,"3,911,084,175.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 15-Oct-13,IXICO PLC ,GB,AIM,,GB00BCLY7L40,ORD GBP0.01 ,IXI ,8.33035959,"26,445,586.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Mar-02,JAMES HALSTEAD ,GB,AIM,,GB00B0LS8535,ORD GBP0.05 ,JHD ,937.768388945,"207,127,198.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 11-Mar-02,JAMES HALSTEAD ,GB,AIM,,GB0004053483,5.5% CUM PRF GBP1 ,JHDA ,937.768388945,"200,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,ASXN,AIMN,GBX,,,,,,,,,,,,,,,,,, 19-Oct-87,JARDINE LLOYD THOMPSON GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005203376,GBP0.05 ,JLT ,2145.824831475,"218,404,563.00",Financials,Insurance,Nonlife Insurance,Insurance Brokers,8534,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 14-May-90,JARDINE MATHESON HLDGS ,BM,International Main Market,Standard Shares,BMG507361001,ORD USD0.25(BERMUDA REG) ,JARB,17303.6962982371,"442,691,108.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 14-May-90,JARDINE MATHESON HLDGS ,BM,International Main Market,Standard Shares,BMG507361001,ORD USD0.25(JERSEY REG) ,JARJ,17303.6962982371,"16,089,825.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 20-Jun-91,JARDINE STRATEGIC HLDGS ,BM,International Main Market,Standard Shares,BMG507641022,ORD USD0.05 ,JDSB,22816.2132675449,"1,120,102,500.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 20-Jun-91,JARDINE STRATEGIC HLDGS ,BM,International Main Market,Standard Shares,BMG507641022,ORD USD0.05 ,88EI,22816.2132675449,"9,563,897.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 23-Dec-04,JARVIS SECURITIES ,GB,AIM,,GB00B013J330,ORD GBP0.01 ,JIM ,34.99461375,"11,056,750.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 26-Oct-06,JAYWING PLC ,GB,AIM,,GB00B1FPT107,ORD GBP0.05 ,JWNG ,22.8790746,"76,263,582.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Oct-96,JD SPORTS FASHION PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMNQZP86,ORD GBP0.0125 ,JD. ,2514.83448544,"194,646,632.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 28-Feb-64,JERSEY ELECTRICITY PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B43SP147,ORD GBP0.05 A ,JEL ,49.179,"11,640,000.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 17-Mar-11,JERSEY OIL & GAS PLC ,GB,AIM,,GB00BYN5YK77,ORD GBP0.01 ,JOG ,3.2516957875,"8,391,473.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jul-14,JIASEN INTL HLDGS LTD ,VG,AIM,,VGG5139D1078,ORD USD0.1 (DI) ,JSI ,3.19347947625,"121,656,361.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Oct-14,JIMMY CHOO PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BQPW6Y82,ORD GBP1 ,CHOO,613.3265775,"490,661,262.00",Consumer Goods,Personal & Household Goods,Personal Goods,Footwear,3765,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-Jul-95,JKX OIL & GAS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004697420,ORD GBP0.10 ,JKX ,32.9892794,"171,372,880.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 31-Mar-14,JOHN LAING ENVIRONMENTAL ASSET GRP ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BJL5FH87,NPV ,JLEN,204.3005,"198,350,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 17-Feb-15,JOHN LAING GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVC3CB83,ORD GBP0.10 ,JLG ,933.81922842,"366,923,076.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Nov-10,JOHN LAING INFRASTRUCTURE FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B4ZWPH08,ORD GBP0.0001 ,JLIF,1215.4309308,"900,319,208.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Jan-97,JOHN LEWIS OF HUNGERFORD ,GB,AIM,,GB0004773148,ORD GBP0.001 ,JLH ,2.054200709,"186,745,519.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Aug-12,JOHNSON MATTHEY ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BZ4BQC70,ORD GBP1.109245 ,JMAT,6640.63742828,"198,940,606.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 10-Jun-08,JOHNSON SERVICE GROUP PLC ,GB,AIM,,GB0004762810,ORD GBP0.10 ,JSG ,345.068753,"345,068,753.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 29-Apr-88,JOHNSTON PRESS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRK8Y334,ORD GBP0.01 ,JPR ,8.47081168,"105,885,146.00",Consumer Services,Media,Media,Publishing,5557,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 26-May-16,JOULES GROUP PLC ,GB,AIM,,GB00BZ059357,ORD GBP0.01 ,JOUL ,151.81214606,"87,499,796.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Aug-08,JOURNEY GROUP PLC ,GB,AIM,,GB00B909HR51,ORD GBP0.25 ,JNY ,32.56479512,"13,798,642.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Oct-93,JP MORGAN CHINESE INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003435012,ORD GBP0.25 ,JMC ,150.18383536,"75,469,264.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Oct-55,JP MORGAN JAPANESE INVESTMENT TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001740025,ORD GBP0.25 ,JFJ ,518.459200575,"161,388,078.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Jun-05,JPEL PRIVATE EQUITY LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B07V0H27,USD EQTY SHS NPV ,JPEL,256.088141744387,"336,995,572.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,USD,,,,,,,,,,,,,,,,,, 8-May-14,JPMORGAN AMERICAN IT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BKZGVH64,ORD GBP0.05 ,JAM ,900.83954046,"275,486,098.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 12-Sep-97,JPMORGAN ASIAN INV TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0001320778,ORD GBP0.25 ,JAI ,390.81916813625,"143,617,517.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 26-Apr-10,JPMORGAN BRAZIL INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B602HS43,ORD GBP0.01 ,JPB ,23.24547077,"39,399,103.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Jun-83,JPMORGAN CHASE & CO ,US,International Main Market,Standard Shares,US46625H1005,USD1 ,JPM ,202437.65913445,"3,930,320,810.00",Financials,Banks,Banks,Banks,8355,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 24-Apr-63,JPMORGAN CLAVERHOUSE IT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003422184,ORD GBP0.25 ,JCH ,313.842019565,"54,723,979.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 24-Nov-99,JPMORGAN ELECT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008528142,MANAGED GROWTH SHS GBP0.0001 ,JPE ,293.30132691,"35,301,180.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 24-Nov-99,JPMORGAN ELECT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0034080217,MANAGED INCOME SHS GBP0.00003 ,JPEI,293.30132691,"48,748,057.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 24-Nov-99,JPMORGAN ELECT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0034080092,MANAGED CASH SHS GBP0.00002 ,JPEC,293.30132691,"14,768,722.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 15-Jul-91,JPMORGAN EMERGING MKTS INV TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003418950,ORD GBP0.25 ,JMG ,875.74360797,"126,369,929.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 23-Jul-14,JPMORGAN EURO SMALL CO TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BMTS0Z37,ORD GBP0.05 ,JESC,478.84217615,"160,147,885.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 23-Jun-55,JPMORGAN EUROPEAN INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B18JK166,GROWTH SHARES GBP0.05 ,JETG,356.6265698475,"97,058,903.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-Jun-55,JPMORGAN EUROPEAN INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B17XWW44,INCOME SHARES GBP0.025 ,JETI,356.6265698475,"92,715,991.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Jun-13,JPMORGAN GLOBAL CONVERTIBLES INC FD,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B96SW597,ORD NPV ,JGCI,115.273424675,"125,638,610.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 29-Jul-10,JPMORGAN GLOBAL EMERG MKTS IT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B5ZZY915,ORD GBP0.01 ,JEMI,200.80630776,"176,145,884.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-Oct-68,JPMORGAN GLOBAL GWTH & INC PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYMKY695,ORD GBP0.05 ,JPGI,371.7732,"154,905,500.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-Oct-68,JPMORGAN GLOBAL GWTH & INC PLC ,GB,UK Main Market,Standard Debt,GB0009143495,4.5% PERP DEB STK ,61IO,371.7732,"200,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 20-Dec-06,JPMORGAN INC & GRWTH INVEST TST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1G3N114,INC SHS GBP0.01 ,JIGI,87.35434648125,"61,747,803.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 20-Dec-06,JPMORGAN INC & GRWTH INVEST TST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1G3N007,CAP SHS GBP0.01 ,JIGC,87.35434648125,"40,659,873.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 20-Dec-06,JPMORGAN INC & GRWTH INVEST TST PLC,GB,UK Main Market,,GB00B1G3N221,UNITS(COMP 1 INC SHARE & 1 CAP SHARE) ,JIGU,87.35434648125,"21,957,930.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-Mar-08,JPMORGAN INCOME & CAPITAL TRUST PLC,GB,UK Main Market,Standard Shares,GB00B2NBJ282,ZERO DIV PREF SHS GBP0.01 ,JPIZ,139.82445124,"46,037,200.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 3-Mar-08,JPMORGAN INCOME & CAPITAL TRUST PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B2NBJ068,ORD GBP0.01 ,JPI ,139.82445124,"68,056,782.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-Mar-08,JPMORGAN INCOME & CAPITAL TRUST PLC,GB,UK Main Market,,GB00B2NBJ407,UNITS (COMPR 2 ORD & 1 ZDP GBP) ,JPIU,139.82445124,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 26-May-94,JPMORGAN INDIAN INV TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003450359,ORD GBP0.25 ,JII ,663.156688725,"101,633,209.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 12-Apr-00,JPMORGAN JAPAN SMALLER COS TST PLC ,GB,UK Main Market,Standard Shares,GB00BSFWJ549,ORD GBP0.001 SUBSCRIPTION SHARE ,JPSS,139.98907624,"9,255,764.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 12-Apr-00,JPMORGAN JAPAN SMALLER COS TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003165817,ORD GBP0.10 ,JPS ,139.98907624,"46,396,599.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Jun-72,JPMORGAN MID CAP INV TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002357613,ORD GBP0.25 ,JMF ,221.3916791,"23,947,180.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Dec-02,JPMORGAN RUSSIAN SECURITIES ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0032164732,ORD GBP0.01 ,JRS ,212.51841912,"52,997,112.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Aug-90,JPMORGAN SMALLER COS IT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007416000,ORD GBP0.25 ,JMI ,135.56917144,"17,154,409.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Aug-90,JPMORGAN SMALLER COS IT PLC ,GB,UK Main Market,Standard Shares,GB00BV7L8Z35,ORD GBP0.001 (SUBSCRIPTION SHS) ,JMIS,135.56917144,"3,567,532.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 6-Mar-14,JPMORGAN US SMALLER CO INV TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BJL5F346,ORD GBP0.025 ,JUSC,121.589685,"57,899,850.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 15-Nov-13,JRP GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BCRX1J15,ORD GBP0.1 ,JRP ,914.24405114,"932,902,093.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 31-Jul-02,JUBILEE PLATINUM ,GB,AIM,,GB0031852162,ORD GBP0.01 ,JLP ,37.85754626225,"1,058,952,343.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-May-05,JUDGES SCIENTIFIC PLC ,GB,AIM,,GB0032398678,ORD GBP0.05 ,JDG ,86.960829375,"6,049,449.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Nov-99,JUPITER DIVIDEND & GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4MW8K78,COM SHS GBP0.03967705 ,JDTC,50.87741074,"8,054,045.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-Nov-99,JUPITER DIVIDEND & GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4KXYX79,ZDP GBP0.0396770514 (NEW) ,JDTZ,50.87741074,"32,119,031.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-Nov-99,JUPITER DIVIDEND & GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0M3FZ66,ORD INC GBP0.0898274742 ,JDT ,50.87741074,"91,675,333.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-Nov-11,JUPITER ENERGY ,AU,AIM,,AU000000JPR6,NPV (DI) ,JPRL ,16.104657765,"153,377,693.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Nov-00,JUPITER EUROPEAN OPPORTUNITIES TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000197722,ORD GBP0.01 ,JEO ,445.9677432,"79,637,097.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 21-Jun-10,JUPITER FUND MANAGEMENT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B53P2009,ORD GBP0.02 ,JUP ,1920.05114762,"457,699,916.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Jun-06,JUPITER GREEN INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B120GL77,ORD GBP0.001 ,JGC ,31.1303154675,"19,796,703.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 2-Jul-87,JUPITER UK GROWTH INV TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BFD3V961,ORD GBP0.05 ,JUKG,65.9210454175,"22,289,449.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 11-Mar-93,JUPITER US SMALLER COMPANIES PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003463402,ORD GBP0.25 ,JUS ,140.74041124,"18,815,563.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Dec-07,JURIDICA INVESTMENTS LTD ,GG,AIM,,GG00B29LSW52,ORD NPV ,JIL ,77.012813085,"110,809,803.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Apr-14,JUST EAT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKX5CN86,ORD GBP0.01 ,JE. ,3619.23965454,"668,990,694.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Jul-08,JZ CAPITAL PARTNERS LTD ,GG,UK Main Market,,GG00BZ0RY036,ZERO DIV RED PREF NPV (2022) ,JZCZ,343.030848675,"11,907,720.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 1-Jul-08,JZ CAPITAL PARTNERS LTD ,GG,UK Main Market,,GG00B403HK58,ORD NPV ,JZCP,343.030848675,"65,018,607.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 3-Jul-15,K&C REIT PLC ,GB,AIM,,GB00BRKCYB38,ORD GBP0.01 ,KCR ,3.27499361,"46,785,623.00",Financials,Real Estate,Real Estate Investment Trusts,Residential REITs,8673,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Mar-01,K3 BUSINESS TECHNOLOGY GROUP ,GB,AIM,,GB00B00P6061,ORD GBP0.25 ,KBT ,114.833296,"35,885,405.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Jul-15,KAINOS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BZ0D6727,ORD GBP0.005 ,KNOS,199.93462674,"117,955,532.00",Technology,Technology,Software & Computer Services,Software,9537,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 12-Feb-53,KAKUZI ,KE,International Main Market,Standard Shares,KE0000000281,STK KES5 ,KAKU,12.08666605,"13,066,666.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 29-Nov-13,KALIBRATE TECHNOLOGIES PLC ,GB,AIM,,GB00BFZCRC66,ORD GBP0.002 ,KLBT ,24.843025725,"33,800,035.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Sep-05,KARELIAN DIAMOND RESOURCES ,IE,AIM,,IE00B01ZSK94,ORD EUR0.01 ,KDR ,2.224495238,"317,785,034.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 12-Oct-05,KAZ MINERALS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0HZPV38,ORD GBP0.20 ,KAZ ,896.602016272,"523,716,131.00",Basic Materials,Basic Resources,Mining,General Mining,1775,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 8-Nov-06,KAZKOMMERTSBANK JSC ,KZ,International Main Market,Standard GDRs,US48666E6086,GDR EACH REPR 2 ORD SHS 'REGS' ,KKB ,66.0966603055432,"54,566,993.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 8-Nov-06,KAZKOMMERTSBANK JSC ,KZ,International Main Market,Standard GDRs,US48666E5096,GDR EACH REPR 2 ORD SHS '144A' ,33KE,66.0966603055432,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 5-Oct-06,KAZMUNAIGAS EXPLORATION PRODUCTION ,KZ,International Main Market,Standard GDRs,US48666V2043,GDR EACH REPR 1/6 ORD 'REGS' ,KMG ,152.564697593717,"28,206,119.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 17-Dec-12,KCELL JSC ,KZ,International Main Market,Standard GDRs,US48668G2057,GDR EACH REPR 1 SHARE(SPONS) REG S ,KCEL,720.555116181478,"280,247,056.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 17-Dec-12,KCELL JSC ,KZ,International Main Market,Standard GDRs,US48668G1067,GDR EACH REPR 1 SHARE(SPONS)144A ,19PS,720.555116181478,0.00,Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 19-Jul-99,KCOM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007448250,ORD GBP0.10 ,KCOM,572.6224611775,"517,040,597.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-Dec-06,KEFI MINERALS PLC ,GB,AIM,,GB00B1HNYB75,ORD GBP0.001 ,KEFI ,22.7878571648,"4,382,280,224.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-Sep-07,KELLAN GROUP(THE)PLC ,GB,AIM,,GB00B03W5P29,ORD GBP0.0001 ,KLN ,2.97189428375,"339,645,061.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-May-94,KELLER GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004866223,ORD GBP0.10 ,KLR ,642.46742865,"70,678,485.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 1-Mar-13,KEMIN RESOURCES PLC ,GB,AIM,,GB00B8T2QJ39,ORD GBP0.01 ,KEM ,2.84103701375,"174,833,047.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Nov-94,KENMARE RESOURCES ,IE,International Main Market,Premium Equity Commercial Companies,IE00BDC5DG00,ORD EUR0.001 ,KMR ,247.4855115275,"95,278,349.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET3,ON25,GBX,,,,,,,,,,,,,,,,,, 12-Jun-06,KENNEDY VENTURES PLC ,GB,AIM,,GB00B830HW33,ORD GBP0.01 ,KENV ,4.81602561,"175,128,204.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Feb-14,KENNEDY WILSON EUROPE REAL EST PLC ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00BJT32513,ORD NPV ,KWE ,1307.4695298,"135,770,460.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Jul-11,KERAS RESOURCES PLC ,GB,AIM,,GB00B649J414,ORD GBP0.001 ,KRS ,9.17304509025,"1,358,969,643.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Apr-90,KERRY GROUP PLC ,IE,International Main Market,Premium Equity Commercial Companies,IE0004906560,'A'ORD EUR0.125 ,KYGA,11325.9595767127,"174,874,337.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET3,OL5 ,EUR,,,,,,,,,,,,,,,,,, 19-Nov-54,KEYSTONE INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0004912282,5% CUM PRF GBP1 ,70HF,231.57177295,"250,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 19-Nov-54,KEYSTONE INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0004913470,7.75% DEB STK 2020 ,73HF,231.57177295,"7,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 19-Nov-54,KEYSTONE INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004912068,ORD GBP0.50 ,KIT ,231.57177295,"13,568,799.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Jul-13,KEYWORDS STUDIOS PLC ,GB,AIM,,GB00BBQ38507,ORD GBP0.01 ,KWS ,198.608025255,"54,338,721.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Sep-12,KIBO MINING PLC ,IE,AIM,,IE00B97C0C31,ORD EUR0.015 ,KIBO ,18.74416428875,"365,739,791.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Dec-96,KIER GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004915632,ORD GBP0.01 ,KIE ,689.7060768,"55,264,910.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Dec-05,KIMBERLY ENTERPRISES N.V. ,NL,AIM,,NL0000051043,ORD EUR0.01 ,KBE ,0.7680555575,"87,777,778.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 24-Nov-82,KINGFISHER ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033195214,ORD GBP0.157142857 ,KGF ,8260.157375472,"2,225,857,552.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 4-Apr-96,KINGS ARMS YARD VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007174294,ORD GBP0.01 ,KAY ,43.97367006,"244,298,167.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Jun-95,KINGSPAN GROUP ,IE,International Main Market,Premium Equity Commercial Companies,IE0004927939,ORD EUR0.13 ,KGP ,3524.57839218705,"167,785,734.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SET3,OL5 ,EUR,,,,,,,,,,,,,,,,,, 30-Dec-13,KODAL MINERALS PLC ,GB,AIM,,GB00BH3X7Y70,GBP0.03125 ,KOD ,2.736769765525,"3,774,854,849.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Jun-11,KOLAR GOLD LTD ,GG,AIM,,GG00B3M9KL68,ORD NPV ,KGLD ,2.61093988375,"189,886,537.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-99,KONAMI HOLDINGS CORP ,JP,International Main Market,Standard Shares,JP3300200007,NPV ,KNM ,1921.14040729729,"71,860,339.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Toys,3747,SSX4,SXSN,JPY,,,,,,,,,,,,,,,,,, 10-Mar-14,KOOVS PLC ,GB,AIM,,GB00BHB22S55,ORD GBP0.01 ,KOOV ,94.30072533,"149,683,691.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Oct-13,KROMEK GROUP PLC ,GB,AIM,,GB00BD7V5D43,ORD GBP0.01 ,KMK ,41.73154755,"151,751,082.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Mar-10,KSK POWER VENTUR PLC ,IM,UK Main Market,Standard Shares,IM00B1G29327,ORD GBP0.001 ,KSK ,151.641939,"175,308,600.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 27-Dec-06,KUBERA CROSS-BORDER FUND LTD ,KY,AIM,,KYG522771032,ORD SHS USD0.01 ,KUBC ,15.8213003473583,"122,163,336.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 16-Feb-05,KUMHO TIRE CO INC ,KR,International Main Market,Standard GDRs,US50125M2052,GDR EACH REPR 1/2 ORD KRW5000 'REGS' ,KHTC,141.8585022,"41,380,000.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Tires,3357,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 16-Feb-05,KUMHO TIRE CO INC ,KR,International Main Market,Standard GDRs,US50125M1062,GDR EACH REPR 1/2 ORD KRW5000'144A' ,56UB,141.8585022,0.00,Consumer Goods,Automobiles & Parts,Automobiles & Parts,Tires,3357,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 21-Feb-94,L.A.B.INVESTMENTS ,GB,UK Main Market,Standard Debt,GB0005015580,7.125% SECURED BDS 18/2/19 GBP1 ,67HG,0,"85,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 22-May-95,L.G.S.INVESTMENTS ,GB,UK Main Market,Standard Debt,GB0004996970,8.75% SECURED BDS 22/5/2020 GBP(REGD) ,60HG,0,"73,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 20-Sep-67,LADBROKES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0ZSH635,ORD GBP0.2833333 ,LAD ,1438.606983788,"935,983,724.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Jun-49,LAIRD PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1VNST91,ORD GBP0.28125 ,LRD ,806.61934444,"269,772,356.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Mar-15,LAKEHOUSE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BSKS1M86,ORD GBP0.1 ,LAKE,62.223205685,"157,527,103.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 6-Nov-08,LAMPRELL PLC ,IM,UK Main Market,Premium Equity Commercial Companies,GB00B1CL5249,ORD GBP0.05 ,LAM ,209.0851247625,"341,363,469.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 16-Mar-09,LANCASHIRE HLDGS ,BM,International Main Market,Premium Equity Commercial Companies,BMG5361W1047,USD0.50 ,LRE ,1156.16049593,"183,226,703.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Sep-02,LAND SECURITIES GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031809436,ORD GBP0.10 ,LAND,8673.83761652,"792,855,358.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 6-Apr-05,LANDORE RESOURCES PLC ,GG,AIM,,GB00B06VJ325,ORD NPV ,LND ,18.212688026,"700,488,001.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Apr-06,LANSDOWNE OIL & GAS ,GB,AIM,,GB00B1250X28,ORD GBP0.001 ,LOGP ,2.102643335,"161,741,795.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,LARSEN & TOUBRO ,IN,Trading Only,,USY5217N1183,GDS-EACH REPR 1 ORD INR2 REG'S' ,LTOD,0,"24,645,631.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 31-Dec-04,LATHAM(JAMES) ,GB,AIM,,GB00B04NP100,ORD GBP0.25 ,LTHM ,135.76491675,"19,257,435.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 31-Dec-04,LATHAM(JAMES) ,GB,AIM,,GB0005065312,8% CUM PRF GBP1 ,LTHP ,135.76491675,"986,926.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,ASXN,AIMN,GBX,,,,,,,,,,,,,,,,,, 10-Oct-96,LAVENDON GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005057541,GBP0.01 ,LVD ,220.224164535,"164,961,921.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 10-Jul-46,LAW DEBENTURE CORP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031429219,ORD GBP0.05 ,LWDB,575.6626673,"117,482,177.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 3-Feb-10,LAZARD WORLD TRUST FUND ,LU,International Main Market,Premium Equity Closed Ended Investment Funds,LU0483266259,ORD USD0.20 ,WTR ,174.60388005,"60,679,020.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 8-Feb-12,LEAD ALL INVESTMENTS LTD ,KY,AIM,,KYG540891341,ORD GBP0.005(DI) ,LEAL ,2.887500055,"210,000,004.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jun-07,LEAF CLEAN ENERGY CO ,KY,AIM,,KYG541351196,ORD GBP0.0001(DI) ,LEAF ,50.81002679,"118,162,853.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Nov-13,LEARNING TECHNOLOGIES GROUP PLC ,GB,AIM,,GB00B4T7HX10,ORD GBP0.00375 ,LTG ,133.98221408,"418,694,419.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Aug-92,LEEDS BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0005104913,13.375% PERM INT BEARING SHS ,LBS ,0,"25,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 13-Mar-02,LEEDS GROUP PLC ,GB,AIM,,GB0005100606,ORD GBP0.12 ,LDSG ,10.28390654,"27,794,342.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 2-Jul-79,LEGAL & GENERAL GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005603997,ORD GBP0.025 ,LGEN,12352.580592918,"5,873,790,106.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 2-Mar-00,LEGENDARY INVESTMENTS ,GB,AIM,,GB0001514032,ORD GBP0.001 ,LEG ,6.9530399874,"2,726,682,348.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-May-13,LEKOIL LTD ,KY,AIM,,KYG5462G1073,ORD USD0.00005 (DI) ,LEK ,83.03649711,"488,449,983.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 5-Mar-14,LENTA LTD ,VG,International Main Market,Standard GDRs,US52634T1016,GDR EACH 5 REPR 1 ORD 144A ,LNTR,2682.25816215005,0.00,Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 5-Mar-14,LENTA LTD ,VG,International Main Market,Standard GDRs,US52634T2006,GDR EACH 5 REPR 1 ORD REGS ,LNTA,2682.25816215005,"451,391,735.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 17-Dec-15,LEVRETT PLC ,GB,UK Main Market,Standard Shares,GB00BYW79Y38,ORD GBP0.001 ,LVRT,2.0346875,"95,750,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 9-Apr-09,LEWIS(JOHN) ,GB,UK Main Market,Standard Shares,GB0005140628,7% CUM PRF STK GBP1 ,BC32,0,"750,000.00",,,,,7,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Apr-09,LEWIS(JOHN) ,GB,UK Main Market,Standard Shares,GB0005140404,5% 1ST CUM PRF STK GBP1 ,BB90,0,"1,025,000.00",,,,,7,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Apr-09,LEWIS(JOHN)PARTNERSHIP ,GB,UK Main Market,Standard Shares,GB0005141691,7.5% CUM PRF STK GBP1 ,BD32,0,"500,000.00",,,,,7,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Apr-09,LEWIS(JOHN)PARTNERSHIP ,GB,UK Main Market,Standard Shares,GB0005141816,5% CUM PRF STK GBP1 ,BD45,0,"4,665,896.00",,,,,7,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 5-Sep-02,LG ELECTRONICS INC ,KR,International Main Market,Standard GDRs,US50186Q2021,GDR ECH REP 1/2 NV STK KRW5000 144A ,39IB,0,"8,767,182.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 5-Sep-02,LG ELECTRONICS INC ,KR,International Main Market,Standard GDRs,US50186Q2021,GDR ECH REP 1/2 NV STK KRW5000 REGS/144A,LGLD,0,0.00,Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 16-Nov-07,LGO ENERGY PLC ,GB,AIM,,GB00B1TWX932,ORD GBP0.0005 ,LGO ,9.603870558375,"7,248,204,195.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Jul-01,LIDCO GROUP ,GB,AIM,,GB0030546849,ORD GBP0.005 ,LID ,11.62051824,"193,675,304.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Dec-10,LIFE SCIENCE DEVELOPMENTS LTD ,VG,AIM,,VGG7255F1062,ORD NPV (DI) ,LIFE ,1.17190728125,"37,501,033.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Jan-08,LIFELINE SCIENTIFIC INC ,US,AIM,,US53223V1017,ORD USD0.01 ,LSIC ,54.20179095,"17,771,079.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-Apr-02,LIGHTHOUSE GROUP PLC ,GB,AIM,,GB0009779116,ORD GBP0.01 ,LGT ,11.6520280425,"127,693,458.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Nov-08,LIGHTWAVERF PLC ,GB,AIM,,GB00BKJ9BV58,ORD GBP0.05 ,LWRF ,3.1437507475,"20,614,759.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-May-14,LIMITLESS EARTH PLC ,GB,AIM,,GB00BKXP5L71,ORD GBP0.01 ,LME ,2.20725,"65,400,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Jan-01,LINDSELL TRAIN INVESTMENT TST(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031977944,ORD GBP0.75 ,LTI ,159,"200,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBP,,,,,,,,,,,,,,,,,, 21-Jul-99,LIONTRUST ASSET MANAGEMENT ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007388407,ORD GBP0.01 ,LIO ,160.652135925,"48,171,555.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 27-Sep-96,LITE-ON TECHNOLOGY CORP ,TW,PSM,Standard GDRs,US5367593010,GDR EACH REPR 10 ORD 'REG S' ,LTTD,34.1561996999999,"4,900,000.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 27-Sep-96,LITE-ON TECHNOLOGY CORP ,TW,PSM,Standard GDRs,US5367594000,GDR REPR 10 ORD '144A' ,LTTG,34.1561996999999,0.00,Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 19-Oct-15,LIVANOVA PLC ,GB,UK Main Market,Standard Shares,GB00BYMT0J19,ORD GBP1 (DI) ,LIVN,0,0.00,Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,SSMU,SMEW,USD,,,,,,,,,,,,,,,,,, 15-Jun-05,LIVERMORE INVESTMENTS GROUP LTD ,VG,AIM,,VGG550931015,ORD NPV ,LIV ,52.43489478,"194,203,314.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 13-Oct-05,LLOYD ELECTRIC & ENGINEERING ,IN,PSM,Standard GDRs,US5393731006,GDR EACH REPR 2 ORD INR10 ,LLD ,0,"4,600,000.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,GB00B3KSB568,6.475% NON-CUM IRRD PREF SHS ,LLPE,43017.9265511925,"186,190,532.00",Financials,Banks,Banks,Banks,8355,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,US539439AC38,ADR REPR 6.413% NON CUM PRF 144A ,LLD2,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,GB00B3KSB238,9.75% NON-CUM IRRD PREF SHS GBP0.25 ,LLPD,43017.9265511925,"99,999,942.00",Financials,Banks,Banks,Banks,8355,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,US539439AE93,ADR REPR 6.657% NON CUM PRF REG'S ,LLD5,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,XS0408826427,6.3673% NON-CUM FXD/FLTG RT PREF SHS ,LLPG,43017.9265511925,"344,951,000.00",Financials,Banks,Banks,Banks,8355,STBS,SBDU,GBX,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,USG5533WAA56,ADR REPR 6.413% NON CUM PRF REG'S ,LLD1,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,US539439AB54,ADS EACH REPR 1 FX/FR N.CUM PREF 'REGS' ,LLD7,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,GB00B3KSBK12,6.657% NON-CUM FXD/FLTG RT PREF SHS ,LLPJ,43017.9265511925,"750,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,GB00B3KSBH82,6.413% NON-CUM FXD/FLTG RT PREF SHS ,LLPH,43017.9265511925,"750,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,GB00B3KS9W93,9.25% NON-CUM IRRD PREF SHS GBP0.25 ,LLPC,43017.9265511925,"299,987,729.00",Financials,Banks,Banks,Banks,8355,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,XS0460002693,FXD/FLTG NON-CUM CALL PREF SHS USD0.25 ,LLPK,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Standard Debt,US539439AF68,ADR REPR 6.657% NON CUM PRF 144A ,LLD6,43017.9265511925,0.00,Financials,Banks,Banks,Banks,8355,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 8-Oct-86,LLOYDS BANKING GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008706128,ORD GBP0.10 ,LLOY,43017.9265511925,"72,481,763,355.00",Financials,Banks,Banks,Banks,8355,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 30-Jun-09,LMS CAPITAL PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B12MHD28,ORD GBP0.10 ,LMS ,135.5191663925,"224,928,077.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 2-May-07,LOCAL SHOPPING REIT PLC(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1VS7G47,ORD GBP0.20 ,LSR ,23.514168105,"82,505,853.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 28-Jun-00,LOK'N STORE GROUP ,GB,AIM,,GB0007276115,ORD GBP0.01 ,LOK ,90.95392112,"25,194,992.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Sep-04,LOMBARD RISK MANAGEMENT ,GB,AIM,,GB00B030JP46,ORD GBP0.005 ,LRM ,30.9902288,"399,873,920.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 29-Nov-44,LONDON & ASSOCIATED PROPERTIES ,GB,UK Main Market,Standard Shares,GB0005234223,ORD GBP0.10 ,LAS ,19.53114018,"84,004,904.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 9-Feb-59,LONDON & ST LAWRENCE INVESTMENT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005310056,ORD GBP0.05 ,LSLI,99.72911208,"28,948,944.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 9-Feb-59,LONDON & ST LAWRENCE INVESTMENT ,GB,UK Main Market,Standard Shares,GB0005310270,5% CUM PRF GBP1 ,04HK,99.72911208,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 22-Dec-05,LONDON CAPITAL GROUP HLDGS PLC ,GB,AIM,,GB00B0RHGY93,ORD GBP0.05 ,LCG ,18.664591935,"452,474,956.00",Financials,Financial Services,Financial Services,Investment Services,8777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Nov-46,LONDON FINANCE & INVESTMENT GROUP ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002994001,ORD GBP0.05 ,LFI ,12.636,"31,200,000.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-Dec-99,LONDON SECURITY PLC ,GB,AIM,,GB0005314363,ORD GBP0.01 ,LSC ,239.0988015,"12,261,477.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Jul-01,LONDON STOCK EXCHANGE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0SWJX34,ORD GBP0.06918604 ,LSE ,9608.09916905,"348,751,331.00",Financials,Financial Services,Financial Services,Investment Services,8777,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 1-Oct-10,LONDONMETRIC PROPERTY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B4WFW713,ORD GBP0.10 ,LMP ,1183.809331203,"721,395,083.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 22-Sep-61,LONMIN ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYSRJ698,ORD USD0.0001 ,LMI ,542.892459725,"282,022,057.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 21-Jun-73,LOOKERS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B17MMZ46,ORD GBP0.05 ,LOOK,529.710653745,"388,066,413.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 24-Aug-16,LOOPUP GROUP PLC ,GB,AIM,,GB00BYQP6S60,ORD GBP0.005 ,LOOP ,47.71748592,"40,784,176.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Feb-06,LOTTE SHOPPING CO LTD ,KR,International Main Market,Standard GDRs,US54569T1060,GDR EACH REPR 1/20 KRW5000'144A'/REG'S' ,LOTS,936.124435502589,"137,142,860.00",Consumer Services,Retail,General Retailers,Broadline Retailers,5373,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 18-Sep-47,LOW & BONAR PLC ,GB,UK Main Market,Standard Shares,GB0005363451,6% 2ND CUM PRF STK GBP1 ,BD70,190.6321946,"100,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 18-Sep-47,LOW & BONAR PLC ,GB,UK Main Market,Standard Shares,GB0005363238,6% 1ST CUM PRF STK GBP1 ,BD46,190.6321946,"100,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 18-Sep-47,LOW & BONAR PLC ,GB,UK Main Market,Standard Shares,GB0005363675,5.5% 3RD CUM PRF STK GBP1 ,BD90,190.6321946,"200,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 18-Sep-47,LOW & BONAR PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005363014,ORD GBP0.05 ,LWB ,190.6321946,"317,511,991.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 5-Apr-66,LOWLAND INVESTMENT CO ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005368062,ORD GBP0.25 ,LWI ,348.28247025,"27,061,575.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 7-May-02,LPA GROUP ,GB,AIM,,GB0007320806,ORD GBP0.10 ,LPA ,14.164576365,"11,953,229.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Nov-06,LSL PROPERTY SERVICES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1G5HX72,ORD GBP0.002 ,LSL ,234.3576375,"104,158,950.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 16-Nov-07,LSR GROUP PJSC ,RU,International Main Market,Standard GDRs,US50218G1076,GDR EACH REPR 0.20 ORD '144A' ,54UD,1153.81003235211,0.00,Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 16-Nov-07,LSR GROUP PJSC ,RU,International Main Market,Standard GDRs,US50218G2066,GDR EACH REPR 0.20 ORD 'REGS' ,LSRG,1153.81003235211,"515,151,075.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 14-May-08,LUCKY CEMENT LTD ,PK,PSM,Standard GDRs,US5495202039,GDR EACH REPR 4 ORD 'REGS' ,LKCS,218.832794999999,"15,000,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 14-May-08,LUCKY CEMENT LTD ,PK,PSM,Standard GDRs,US5495201049,GDR EACH REPR 4 ORD '144A' ,LKCA,218.832794999999,0.00,Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 2-Aug-07,LUDGATE ENVIRONMENTAL FUND LTD ,JE,AIM,,JE00B1YW3102,ORD NPV ,LEF ,13.53742159,"55,254,782.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-May-97,LUKOIL PJSC ,RU,International Main Market,Standard GDRs,US69343P2048,GDR EACH REPR 1 ORD RUB0.025 SPON 144A ,LKOE,58934.5838413799,"3,450,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 7-May-97,LUKOIL PJSC ,RU,International Main Market,Standard GDRs,US69343P1057,ADR EACH REPR 1 ORD RUB0.025 SPON ,LKOD,58934.5838413799,"850,563,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 7-May-97,LUKOIL PJSC ,RU,International Main Market,Standard Shares,RU0009024277,RUB0.025 ,LKOH,58934.5838413799,"850,563,255.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 23-Oct-09,LXB RETAIL PROPERTIES PLC ,JE,AIM,,JE00B4MFKH73,ORD NPV ,LXB ,124.409578385,"183,630,374.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 19-Dec-14,M J GLEESON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRKD9Z53,ORD GBP0.02 ,GLE ,315.251883375,"54,120,495.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 12-Nov-09,M WINKWORTH PLC ,GB,AIM,,GB00B4TT7L53,ORD GBP0.005 ,WINK ,13.75542108,"12,736,501.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jul-04,M&C SAATCHI ,GB,AIM,,GB00B01F7T14,ORD GBP0.01 ,SAA ,271.6852674025,"78,806,459.00",Consumer Services,Media,Media,Media Agencies,5555,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 17-Mar-97,M&G HIGH INCOME INVESTMENT TRUST ,GB,UK Main Market,,GB0005532923,INC & GW UTS(COMPR 1 INC & 1CAP SH) ,MGHU,689.0881487725,"63,743,431.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-97,M&G HIGH INCOME INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005532709,CAP SHS GBP0.01 ,MGHC,689.0881487725,"250,503,500.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-97,M&G HIGH INCOME INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005532816,INC SHS GBP0.01 ,MGHI,689.0881487725,"250,503,500.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-97,M&G HIGH INCOME INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0005533228,ZERO DIV PRF SHS GBP0.01 ,MGHZ,689.0881487725,"250,503,505.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-97,M&G HIGH INCOME INVESTMENT TRUST ,GB,UK Main Market,,GB0005533004,PACK UTS(COMPR 1'0'DIV PF 1INC&1CAP SH) ,MGHP,689.0881487725,"146,076,174.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Oct-02,M.P.EVANS GROUP ,GB,AIM,,GB0007538100,GBP0.10 ,MPE ,244.737888615,"54,935,553.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 30-Jun-10,MACAU PROPERTY OPPORTUNITIES FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1436N68,ORD USD0.01 ,MPO ,106.154552335,"88,278,214.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 20-Jun-73,MACFARLANE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005518872,ORD GBP0.25 ,MACF,83.16465317,"136,335,497.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Apr-08,MAGNIT PJSC ,RU,International Main Market,Standard GDRs,US55953Q1031,GDR EACH REPR 0.20 ORD '144A' ,50XD,13366.8056502559,0.00,Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 22-Apr-08,MAGNIT PJSC ,RU,International Main Market,Standard GDRs,US55953Q2021,GDR 5 REPR 1 ORD REGS ,MGNT,13366.8056502559,"444,875,365.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 30-Apr-07,MAGNITOGORSK IRON & STEEL WORKS ,RU,International Main Market,Standard GDRs,US5591891057,GDR EACH REPR 13 ORD '144A' ,42CL,4046.86750220706,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 30-Apr-07,MAGNITOGORSK IRON & STEEL WORKS ,RU,International Main Market,Standard GDRs,US5591892048,GDR EACH REPR 13 ORD 'REGS' ,MMK ,4046.86750220706,"859,563,846.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Nov-11,MAGNOLIA PETROLEUM PLC ,GB,AIM,,GB00B1G3RY22,ORD GBP0.001 ,MAGP ,1.5556599905,"1,414,236,355.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,MAGYAR OLAJ-ES GAZIPARE RESZVENYTAR,HU,Trading Only,,US6084642023,ADR EACH REP 0.50 ORD SHS(REG'S') ,MOLD,0,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 27-Sep-04,MAGYAR TELEKOM TELECOMMUNICATIONS ,HU,Trading Only,,US5597761098,ADR EACH REPR 5 SHS HUF100 ,MAVD,0,0.00,,,,,0,IOBU,INLU,USD,,,,,,,,,,,,,,,,,, 27-Sep-04,MAHINDRA & MAHINDRA ,IN,Trading Only,,USY541641194,GDR EACH REPR 1 ORD INR10 REG'S' ,MHID,0,"18,032,803.00",Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 11-Nov-10,MAIL.RU GROUP LTD ,VG,International Main Market,Standard GDRs,US5603171092,GDR EACH REPR 1 SHARE 144A (SPONS)WI ,61HE,2669.55362871522,0.00,Technology,Technology,Software & Computer Services,Internet,9535,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 11-Nov-10,MAIL.RU GROUP LTD ,VG,International Main Market,Standard GDRs,US5603172082,GDR EACH REPR 1 SHARE REG S (SPONS)WI ,MAIL,2669.55362871522,"208,582,082.00",Technology,Technology,Software & Computer Services,Internet,9535,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 28-Apr-16,MAINTEL HLDGS ,GB,AIM,,GB00B046YG73,ORD GBP0.01 ,MAI ,138.42132525,"14,197,059.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Mar-41,MAJEDIE INVESTMENTS ,GB,UK Main Market,Standard Debt,GB0005583389,9.5% DEB STK 2020 ,86HK,133.126196775,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 5-Mar-41,MAJEDIE INVESTMENTS ,GB,UK Main Market,Standard Debt,GB0006733058,7.25% DEB STK 2025 ,BD22,133.126196775,"25,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 5-Mar-41,MAJEDIE INVESTMENTS ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005555221,ORD GBP0.10 ,MAJE,133.126196775,"52,515,265.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Nov-96,MAJESTIC WINE PLC ,GB,AIM,,GB00B021F836,ORD GBP0.075 ,WINE ,295.34602768,"69,657,082.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 17-Dec-12,MAN GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B83VD954,ORD USD0.03428571 ,EMG ,1980.28573,"1,821,790,000.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Dec-87,MANAGEMENT CONSULTING GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001979029,ORD GBP0.01 ,MMC ,83.3532258325,"497,631,199.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 1-Feb-16,MANAGEMENT RESOURCE SOLUTIONS PLC ,GB,AIM,,GB00B8BL4R23,ORD EUR0.01 ,MRS ,3.99807023,"36,346,093.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Dec-97,MANCHESTER & LONDON INV TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002258472,ORD GBP0.25 ,MNL ,62.33728553,"21,607,378.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 1-Nov-99,MANCHESTER BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0008775057,8% PERM INTEREST BEARING SHS ,MBSR,0,"5,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 1-Nov-99,MANCHESTER BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB00B0712W15,6.75% PERM INTEREST BEARING SHS GBP1000 ,MBSP,0,"10,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 22-Jan-90,MANDARIN ORIENTAL INTERNATIONAL ,BM,International Main Market,Standard Shares,BMG578481068,ORD USD0.05 ,MDO ,0.505848479999998,"964,524,103.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 22-Jan-90,MANDARIN ORIENTAL INTERNATIONAL ,BM,International Main Market,Standard Shares,BMG578481068,ORD USD0.05 ,MDOB,0.505848479999998,"400,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 22-Jan-90,MANDARIN ORIENTAL INTERNATIONAL ,BM,International Main Market,Standard Shares,BMG578481068,ORD USD0.05 ,MDOJ,0.505848479999998,0.00,Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 2-Jun-95,MANDO MACHINERY CORP ,KR,International Main Market,Standard GDRs,USY576241019,GDR EACH REP 1/2 ORD ,MNMD,0,"806,234.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 2-Jun-95,MANDO MACHINERY CORP ,KR,International Main Market,Standard GDRs,US5626651096,GDR EACH REPR 1/2 SHARE(144A) ,05IS,0,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 31-Jan-08,MANX FINANCIAL GROUP PLC ,IM,AIM,,IM00B28ZPX83,ORD NPV ,MFX ,8.548383605,"102,070,252.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Feb-14,MANX TELECOM PLC ,IM,AIM,,IM00BHY3RF70,ORD GBP0.002 ,MANX ,224.78997613,"112,959,787.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Mar-08,MARECHALE CAPITAL PLC ,GB,AIM,,GB0005401087,ORD GBP0.01 ,MAC ,0.78656115,"52,437,410.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-May-06,MARIANA RESOURCES ,GG,AIM,,GG00BD3GC324,ORD GBP0.001 ,MARL ,64.7901828,"119,981,820.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Jan-16,MARKET TECH HLDG LTD ,GG,UK Main Market,Standard Shares,GG00BSSWD593,ORD GBP0.1 ,MKT ,823.523019695,"469,913,278.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 19-Mar-02,MARKS & SPENCER GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031274896,ORD GBP0.25 ,MKS ,5425.024980555,"1,573,839,565.00",Consumer Services,Retail,General Retailers,Broadline Retailers,5373,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 31-Mar-16,MARLOWE PLC ,GB,AIM,,GB00BD8SLV43,ORD GBP0.5 ,MRL ,35.799568975,"21,372,877.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Jun-80,MARSH & MCLENNAN COS INC ,US,International Main Market,Standard Shares,US5717481023,COM USD1 ,MHM ,33814.0306055946,"656,595,460.00",Financials,Insurance,Nonlife Insurance,Insurance Brokers,8534,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 2-Apr-15,MARSHALL MOTOR HLDGS PLC ,GB,AIM,,GB00BVYB2Q58,ORD GBP0.64 ,MMH ,126.53732937,"77,392,862.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jul-04,MARSHALLS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B012BV22,ORD GBP0.25 ,MSLH,620.01042074,"196,953,755.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 23-May-47,MARSTON'S PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1JQDM80,ORD GBP0.07375 ,MARS,831.542363417,"570,722,281.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-May-47,MARSTON'S PLC ,GB,UK Main Market,Standard Shares,GB0009772459,6% CUM PRF(PTG)STK GBP1 ,92IP,831.542363417,"75,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 10-May-85,MARTIN CURRIE ASIA UNCONSTND TR PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005695126,ORD GBP0.50 ,MCP ,116.45426562,"36,165,921.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Mar-99,MARTIN CURRIE GLOBAL PORTFOLIO TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005372411,ORD GBP0.05 ,MNP ,188.38822842,"91,008,806.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Dec-13,MARTINCO PLC ,GB,AIM,,GB00BH0WFH67,ORD GBP0.01 ,MCO ,28.05,"22,000,000.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Dec-00,MARUWA CO LTD ,JP,International Main Market,Standard Shares,JP3879250003,NPV ,MAW ,321.579969311261,"12,372,000.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSX4,SXSN,JPY,,,,,,,,,,,,,,,,,, 8-Dec-08,MARWYN VALUE INVESTORS LTD ,KY,International Main Market,,KYG5897M1740,ORD GBP0.000001 ,MVI ,117.74866752,"79,292,032.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 19-Aug-10,MASAWARA PLC ,JE,AIM,,JE00B42XFD25,ORD USD0.01 ,MASA ,54.764107005,"123,065,409.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Oct-06,MATCHTECH GROUP PLC ,GB,AIM,,GB00B1FMDQ43,ORD GBP0.01 ,MTEC ,111.3186599,"29,884,204.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 11-Jul-14,MATOMY MEDIA GROUP LTD ,IL,International Main Market,,IL0011316978,ILS0.01 WI (DI) ,MTMY,74.443811525,"89,962,310.00",Consumer Services,Media,Media,Media Agencies,5555,HGS1,HG10,GBX,,,,,,,,,,,,,,,,,, 23-Nov-05,MATTIOLI WOODS ,GB,AIM,,GB00B0MT3Y97,ORD GBP0.01 ,MTW ,155.1444321,"23,831,710.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Apr-01,MAVEN INCOME & GROWTH VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030367451,ORD GBP0.10 ,MIG2,17.8740195975,"38,233,197.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 12-Dec-01,MAVEN INCOME & GROWTH VCT 3 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031153769,ORD GBP0.10 ,MIG3,33.8168821925,"39,667,897.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Feb-05,MAVEN INCOME & GROWTH VCT 4 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B043QW84,ORD GBP0.1 ,MAV4,46.979243625,"52,490,775.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Dec-00,MAVEN INCOME & GROWTH VCT 5 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002057536,ORD GBP0.10 ,MIG5,26.2424306,"72,392,912.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Apr-00,MAVEN INCOME & GROWTH VCT 6 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1BV3Z44,ORD GBP0.1 ,MIG6,14.345655695,"28,407,239.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 6-Apr-00,MAVEN INCOME & GROWTH VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004122858,ORD GBP0.10 ,MIG1,34.507465425,"51,122,171.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Mar-16,MAXCYTE INC ,US,AIM,,US57777K1060,ORD USD0.01 DI REG S ,MXCT ,36.764622505,"43,508,429.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 7-May-15,MAYAIR GROUP PLC ,JE,AIM,,JE00BWV6BD02,ORD NPV ,MAYA ,32.918125,"42,475,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jan-13,MAYAN ENERGY LTD ,VG,AIM,,VGG5S26K1079,ORD NPV (DI) ,MYN ,2.373089597645,"10,098,253,607.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Oct-04,MBL GROUP PLC ,GB,AIM,,GB00B0W48T45,ORD GBP0.075 ,MUBL ,2.450559675,"17,196,910.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 18-Oct-06,MCB BANK LTD ,PK,PSM,Standard GDRs,US5792331077,GDR EACH REPR 2 ORD 144A SPON ,MCBA,22.9897087769999,0.00,Financials,Banks,Banks,Banks,8355,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 18-Oct-06,MCB BANK LTD ,PK,PSM,Standard GDRs,US5792332067,GDR EACH REPR 2 ORD 'REGS'SPON ,MCBS,22.9897087769999,"8,622,100.00",Financials,Banks,Banks,Banks,8355,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 13-Jul-95,MCBRIDE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005746358,ORD GBP0.10 ,MCB ,280.4236170675,"181,798,131.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Nondurable Household Products,3724,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 11-Nov-15,MCCARTHY & STONE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYNVD082,ORD GBP0.08 ,MCS ,1097.732642967,"537,314,069.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 28-Feb-14,MCCOLL'S RETAIL GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJ3VW957,ORD GBP0.001 ,MCLS,191.18680484,"115,172,774.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Jul-59,MCKAY SECURITIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005522007,ORD GBP0.20 ,MCKS,173.14109334,"93,716,424.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 17-Oct-12,MD MEDICAL GROUP INVEST PLC ,CY,International Main Market,Standard GDRs,US55279C2008,GDR EACH REPR 1 SHR REGS(SPONS) ,MDMG,995.216007957531,"150,157,051.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 23-Jun-08,MEARS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005630420,ORD GBP0.01 ,MER ,485.68776155,"108,533,578.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 27-Aug-14,MEDAPHOR GROUP PLC ,GB,AIM,,GB00BN791Q39,ORD GBP0.01 ,MED ,13.5568948,"31,898,576.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Jul-89,MEDIA & INCOME TRUST ,GB,UK Main Market,,GB0009216283,ORD GBP0.025 ,MEI ,0,"131,766,154.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 17-Jul-89,MEDIA & INCOME TRUST ,GB,UK Main Market,,GB0030358831,PREF INC GBP0.01 ,MEIP,0,"15,670,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 22-Feb-05,MEDIAZEST ,GB,AIM,,GB00B064NT52,ORD GBP0.001 ,MDZ ,1.6736729949,"1,239,757,774.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Feb-16,MEDICLINIC INTERNATIONAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B8HX8Z88,ORD GBP0.10 ,MDC ,8185.22545092,"800,902,686.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Nov-06,MEDICX FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1DVQL92,ORD NPV ,MXF ,354.7371711825,"386,634,519.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-Nov-08,MEDILINK-GLOBAL UK LTD ,JE,AIM,,JE00B3FFC377,ORD GBP0.05 ,MEDI ,0.9111900225,"121,492,003.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Dec-12,MEGAFON(PJSC) ,RU,International Main Market,Standard GDRs,US58517T2096,GDR EACH REPR 1 ORD REG S ,MFON,4794.13325999998,"620,000,000.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 3-Dec-12,MEGAFON(PJSC) ,RU,International Main Market,Standard GDRs,US58517T1007,GDR EACH REPR 1 ORD 144A ,17GK,4794.13325999998,0.00,Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 28-Apr-47,MEGGITT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005758098,ORD GBP0.05 ,MGGT,3578.514946398,"764,150,106.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 24-Nov-43,MEIKLES LTD ,ZW,International Main Market,Standard Shares,ZW0009012114,ORD ZWR0.1 ,MIK ,0,"150,258,617.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 31-Aug-16,MELROSE INDUSTRIES PLC ,GB,UK Main Market,Standard Shares,GB00BZ1G4322,ORD GBP0.06857143 ,MRO ,2792.38495172,"1,886,746,589.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 31-Jul-15,MENHADEN CAPITAL PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BZ0XWD04,ORD GBP0.01 ,MHN ,46.40000058,"80,000,001.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-Oct-62,MENZIES(JOHN) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005790059,ORD GBP0.25 ,MNZS,358.58199888,"59,869,872.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 3-Oct-62,MENZIES(JOHN) ,GB,UK Main Market,Standard Shares,GB0005790273,9% CUM PRF GBP1 ,68HN,358.58199888,"1,215,177.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 21-Jul-52,MERCANTILE INVESTMENT TST PLC(THE) ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005794036,ORD GBP0.25 ,MRC ,1563.15841832,"93,156,044.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 21-Jul-52,MERCANTILE INVESTMENT TST PLC(THE) ,GB,UK Main Market,Standard Debt,GB0005795009,4.25% PERP DEB STK ,71HN,1563.15841832,"3,850,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 9-Mar-54,MERCHANTS TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005800072,ORD GBP0.25 ,MRCH,439.81133971,"103,759,877.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 9-Mar-54,MERCHANTS TRUST ,GB,UK Main Market,Standard Shares,GB0005800296,3.65% CUM PRF GBP1 ,72HN,439.81133971,"1,178,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Mar-54,MERCHANTS TRUST ,GB,UK Main Market,Standard Debt,GB0005800858,4% PERP DEB STK ,73HN,439.81133971,"1,375,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 18-Dec-14,MERCIA TECHNOLOGIES PLC ,GB,AIM,,GB00BSL71W47,ORD GBP0.00001 ,MERC ,109.79862522,"215,291,422.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-May-12,MERCOM CAPITAL PLC ,GB,AIM,,GB00B979BX21,ORD GBP0.001 ,MMO ,0.99315480375,"29,426,809.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-Jun-16,MEREO BIOPHARMA GROUP LTD ,GB,AIM,,GB00BZ4G2K23,ORD GBP0.003 ,MPH ,201.38669774,"64,340,798.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Dec-85,MERIVALE MOORE ,GB,UK Main Market,Standard Debt,GB0005786594,10.5% 1ST MTG DEB STK 2020 ,67HN,0,"10,200,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 13-Nov-13,MERLIN ENTERTAINMENTS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BDZT6P94,GBP0.01 ,MERL,4866.994699632,"1,013,746,032.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 31-May-01,METAL TIGER PLC ,GB,AIM,,GB0030493232,ORD GBP0.0001 ,MTR ,21.3044049405,"604,380,282.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 22-Oct-04,METALS EXPLORATION PLC ,GB,AIM,,GB00B0394F60,ORD GBP0.01 ,MTL ,114.89942132125,"1,955,734,831.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Apr-10,METMINCO LTD ,AU,AIM,,AU000000MNC7,NPV ,MNC ,6.27556717725,"3,586,038,387.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Mar-16,METRO BANK PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BZ6STL67,ORD GBP0.000001 ,MTRO,1923.8475408,"80,260,640.00",Financials,Banks,Banks,Banks,8355,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 15-May-08,MHP SA ,LU,International Main Market,Standard GDRs,US55302T2042,GDR EACH REPR 1 ORD SHARE 'REGS' ,MHPC,775.476385319997,"108,290,000.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 15-May-08,MHP SA ,LU,International Main Market,Standard GDRs,US55302T1051,GDR EACH REPR 1 ORD SHARE '144A' ,71HT,775.476385319997,0.00,Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 26-May-04,MICHELMERSH BRICK HLDGS ,GB,AIM,,GB00B013H060,ORD GBP0.2 ,MBH ,61.02605506,"80,829,212.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 20-Nov-14,MICRO FOCUS INTERNATIONAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BQY7BX88,ORD GBP0.10 ,MCRO,4564.25599518,"228,441,241.00",Technology,Technology,Software & Computer Services,Software,9537,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-May-84,MICROGEN ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVVHWX30,ORD GBP0.06428571 ,MCGN,107.33215218,"59,136,172.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 11-Apr-11,MICROSAIC SYSTEMS PLC ,GB,AIM,,GB00B547ZY09,ORD GBP0.0025 ,MSYS ,3.2097251375,"73,365,146.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jun-02,MID KENT WATER ,GB,UK Main Market,Standard Debt,GB0005879894,4% PERP DEB STK ,48HO,0,"108,799.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 21-Oct-81,MID WYND INTL INVESTMENT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6VTTK07,ORD GBP0.05 ,MWY ,111.28713996,"27,580,456.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Dec-14,MIDATECH PHARMA PLC ,GB,AIM,,GB00BRTL9B63,ORD GBP0.00005 ,MTPH ,55.51269186,"33,542,412.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Jul-06,MIDDLEFIELD CANADIAN INC PCC ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B15PV034,RED PART PREF SHS GBP NPV ,MCT ,124.938125095,"134,704,178.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-May-16,MIDWICH GROUP PLC ,GB,AIM,,GB00BYSXWW41,ORD GBP0.01 ,MIDW ,191.470162,"79,448,200.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 1-Jul-03,MILESTONE GROUP ,GB,AIM,,GB0033127910,ORD GBP0.001 ,MSG ,4.133792047,"751,598,554.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Apr-96,MILLENNIUM & COPTHORNE HOTELS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0005622542,ORD GBP0.30 ,MLC ,1402.560114696,"324,366,354.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Jan-01,MINCO PLC ,IE,AIM,,IE0004678326,ORD EUR0.0125 ,MIO ,5.618170662,"478,142,184.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Nov-13,MINCON GROUP PLC ,IE,AIM,,IE00BD64C665,ORD EUR0.01 ,MCON ,126.3246612,"210,541,102.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Mar-14,MINDS + MACHINES GROUP LTD ,VG,AIM,,VGG614091012,ORD NPV (DI) ,MMX ,95.2170808225,"837,073,238.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Oct-06,MINERAL & FINANCIAL INVESTMENTS LTD,KY,AIM,,KYG6181G1055,ORD GBP0.01 (DI) ,MAFL ,1.3519441125,"24,034,562.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Oct-11,MINOAN GROUP ,GB,AIM,,GB0008497975,ORD GBP0.01 ,MIN ,17.51858712,"194,650,968.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Apr-14,MI-PAY GROUP PLC ,GB,AIM,,GB00B0N59376,ORD GBP0.1 ,MPAY ,9.92383824,"41,349,326.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Dec-04,MIRADA PLC ,GB,AIM,,GB00B29WFV68,ORD GBP0.01 ,MIRA ,7.517596275,"167,057,695.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Dec-06,MIRLAND DEVELOPMENT CORP PLC ,CY,AIM,,CY0100141015,ORD SHS USD0.01 ,MLD ,15.2748057375,"103,558,005.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 13-Apr-06,MISSION MARKETING GROUP(THE) ,GB,AIM,,GB00B11FD453,ORD GBP0.10 ,TMMG ,30.70388541,"84,120,234.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Apr-03,MITCHELLS & BUTLERS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1FP6H53,ORD GBP0.085416 ,MAB ,1054.629995034,"410,202,254.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 21-Feb-94,MITHRAS INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005962864,ORD GBP0.02 ,MTH ,59.53723324,"36,303,191.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Nov-88,MITIE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004657408,ORD GBP0.025 ,MTO ,922.76774304,"341,260,260.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Apr-04,MITON GLOBAL OPPORTUNITIES PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0034365949,ORD GBP0.01 ,MIGO,47.0207721,"25,279,985.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 7-Mar-08,MITON GROUP PLC ,GB,AIM,,GB00B01WR582,ORD GBP0.001 ,MGR ,46.280839195,"169,837,942.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Apr-15,MITON UK MICROCAP TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BWFGQ085,ORD GBP0.001 ,MINI,87.0362553875,"161,927,917.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 5-Sep-89,MITSUBISHI ELECTRIC CORP ,JP,International Main Market,Standard Shares,JP3902400005,NPV ,MEL ,21055.377586472,"2,146,544,072.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSX4,SXSN,JPY,,,,,,,,,,,,,,,,,, 15-Jun-16,MKANGO RESOURCES LTD ,CA,AIM,,CA60686A4090,NPV(DI) ,MKA ,2.753394735,"71,055,348.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Jul-00,MOBEUS INCOME & GROWTH 2 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0LKLZ05,ORD GBP0.01 ,MIG ,37.381815975,"36,030,666.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Mar-99,MOBEUS INCOME & GROWTH 4 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1FMDH51,ORD GBP0.01 ,MIG4,77.56522841,"79,964,153.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Oct-04,MOBEUS INCOME & GROWTH VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B01WL239,ORD GBP0.01 ,MIX ,85.25122385,"114,048,460.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 15-Feb-06,MOBILE STREAMS ,GB,AIM,,GB00B0WJ3L68,ORD GBP0.002 ,MOS ,1.51594504875,"36,750,183.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Mar-06,MOBILE TORNADO GROUP ,GB,AIM,,GB00B01RQV23,ORD GBP0.02 ,MBT ,7.73603715625,"247,553,189.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Jul-07,MOBILITYONE LTD ,JE,AIM,,JE00B1Z48326,ORD GBP0.025 ,MBO ,4.384824675,"106,298,780.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Jun-07,MODERN WATER PLC ,GB,AIM,,GB00B1XF5X66,ORD GBP0.0025 ,MWG ,4.57155222,"79,505,256.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-Jun-14,MOLINS ,GB,AIM,,GB0005991111,ORD GBP0.25 ,MLIN ,10.3883431,"20,171,540.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Jul-07,MONDI PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1CRLC47,ORD EUR0.20 ,MNDI,5688.56006945,"367,240,805.00",Basic Materials,Basic Resources,Forestry & Paper,Paper,1737,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 31-Jul-07,MONEYSUPERMARKET.COM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1ZBKY84,ORD GBP0.0002 ,MONY,1548.741027568,"537,011,452.00",Consumer Services,Media,Media,Media Agencies,5555,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 31-Aug-11,MONEYSWAP PLC ,GI,AIM,,GI000A1JASX5,ORD GBP0.001 (DI) ,SWAP ,2.1766749018,"1,176,581,028.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Jun-07,MONITISE PLC ,GB,AIM,,GB00B1YMRB82,ORD GBP0.01 ,MONI ,58.895190662,"2,291,641,660.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 29-Jan-52,MONKS INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030517261,ORD GBP0.05 ,MNKS,1078.82210205,"217,943,859.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Jan-52,MONKS INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0002782273,6.375% DEB STK 2023 ,82LO,1078.82210205,"40,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 13-May-81,MONTANARO EUROPEAN SMALLER COS TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004543517,ORD GBP0.50 ,MTE ,102.159495,"16,611,300.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 16-Mar-95,MONTANARO UK SMALLER COS INVESTM TR,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006007560,ORD GBP0.10 ,MTU ,157.00224302,"33,475,958.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 2-Oct-46,MORGAN ADVANCED MATERIALS PLC ,GB,UK Main Market,Standard Shares,GB0006026446,5.5% CUM 1ST PRF GBP1 ,BA05,826.626805766,"125,327.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 2-Oct-46,MORGAN ADVANCED MATERIALS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006027295,ORD GBP0.25 ,MGAM,826.626805766,"289,095,992.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 2-Oct-46,MORGAN ADVANCED MATERIALS PLC ,GB,UK Main Market,Standard Shares,GB0006026669,5% CUM 2ND PRF GBP1 ,BA29,826.626805766,"311,954.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 28-Oct-94,MORGAN SINDALL GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008085614,ORD GBP0.05 ,MGNS,317.243007555,"43,074,407.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Nov-72,MORRISON(WM.)SUPERMARKETS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006043169,ORD GBP0.10 ,MRW ,4632.52452327,"2,351,535,291.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 5-May-16,MORSES CLUB PLC ,GB,AIM,,GB00BZ6C4F71,ORD GBP0.01 ,MCL ,151.515,"129,500,000.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 14-Nov-14,MORTGAGE ADVICE BUREAU (HLDGS) LTD ,GB,AIM,,GB00BQSBH502,ORD GBP0.001 ,MAB1 ,166.68168,"50,509,600.00",Financials,Financial Services,Financial Services,Mortgage Finance,8779,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 15-May-08,MORTICE LTD ,SG,AIM,,SG9999005326,ORD NPV (DI) ,MORT ,42.334500835,"50,700,001.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,MOSENERGO AO ,RU,Trading Only,,US0373763087,ADR EACH REPR 50 SHS LVL1(BNY) ,AOMD,0,"2,012,666.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBU,INNU,USD,,,,,,,,,,,,,,,,,, 20-Mar-14,MOSMAN OIL & GAS LTD ,AU,AIM,,AU0000XINET1,ORD NPV (DI) ,MSMN ,2.1559101,"215,591,010.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-Jul-47,MOSS BROS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006056104,ORD GBP0.05 ,MOSB,94.5506614,"99,527,012.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 8-Jan-86,MOTHERCARE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009067447,ORD GBP0.50 ,MTC ,111.46729154,"88,116,436.00",Consumer Services,Retail,General Retailers,Broadline Retailers,5373,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 2-Apr-15,MOTIF BIO PLC ,GB,AIM,,GB00BVVT4H71,ORD GBP0.01 ,MTFB ,54.84375548,"108,601,496.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 18-May-16,MOTORPOINT GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BD0SFR60,ORD GBP0.01 ,MOTR,200,"100,000,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 30-Oct-08,MOUNTFIELD GROUP PLC ,GB,AIM,,GB00B3CQW227,ORD GBP0.001 ,MOGP ,3.432300129,"254,244,454.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Feb-60,MOUNTVIEW ESTATES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006081037,ORD GBP0.05 ,MTVW,434.7426255,"3,899,037.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 18-Dec-13,MPORIUM GROUP PLC ,GB,AIM,,GB00BGDW0L56,ORD GBP0.005 ,MPM ,39.63049362,"511,361,208.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Nov-13,MS INTERNATIONAL ,GB,AIM,,GB0005957005,ORD GBP0.10 ,MSI ,28.054011325,"18,396,073.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Mar-06,MTI WIRELESS EDGE ,IL,AIM,,IL0010958762,ORD ILS0.01 ,MWE ,12.68168755,"51,761,990.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Apr-62,MUCKLOW(A.& J.)GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006091408,ORD GBP0.25 ,MKLW,262.30886575,"63,044,305.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 4-Apr-62,MUCKLOW(A.& J.)GROUP ,GB,UK Main Market,Standard Shares,GB0006091622,7% CUM PRF GBP1 ,37HR,262.30886575,"675,000.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 23-May-96,MULBERRY GROUP ,GB,AIM,,GB0006094303,ORD GBP0.05 ,MUL ,674.9714025,"59,997,458.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 15-May-07,MULTI UNITS FRANCE ,FR,International Main Market,Standard Shares,FR0010438127,ETF FTSE 100 ,L100,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 15-May-07,MULTI UNITS FRANCE ,FR,International Main Market,Standard Shares,FR0010438150,ETF FTSE ALL SHARE ,LFAS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 15-May-07,MULTI UNITS FRANCE ,FR,International Main Market,Standard Shares,FR0010614834,LYXOR ETF FTSE COAST KUWAIT 40 USD (GBP),LKUW,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETF2,EFLN,GBX,,,,,,,,,,,,,,,,,, 15-May-07,MULTI UNITS FRANCE ,FR,International Main Market,Standard Shares,FR0010614834,LYXOR ETF FTSE COAST KUWAIT 40 USD ,LKUU,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFN,USD,,,,,,,,,,,,,,,,,, 15-May-07,MULTI UNITS FRANCE ,FR,International Main Market,Standard Shares,FR0010438135,ETF FTSE 250 ,L250,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 30-Nov-01,MURGITROYD GROUP ,GB,AIM,,GB0031067456,ORD GBP0.10 ,MUR ,48.297766625,"8,985,631.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 17-Sep-53,MURRAY INCOME TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006111123,ORD GBP0.25 ,MUT ,470.6854434,"64,477,458.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Jun-45,MURRAY INTERNATIONAL TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006111909,ORD GBP0.25 ,MYI ,1288.83870927,"116,426,261.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 21-Jun-45,MURRAY INTERNATIONAL TRUST ,GB,UK Main Market,Standard Debt,GB0006112428,4% DEB STK ,45HR,1288.83870927,"1,620,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 3-Aug-95,MUSEDIA CORP ,US,International Main Market,,US68389V1098,USD0.01 ,MSD ,0,"10,358,333.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 16-Dec-05,MX OIL PLC ,GB,AIM,,GB00BKRV5441,ORD GBP0.0001 ,MXO ,18.6557208,"1,492,457,664.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Feb-15,MXC CAPITAL LTD ,GG,AIM,,GG00BSBMMK42,NPV ,MXCP ,110.99474182725,"3,441,697,421.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Jun-13,MYANMAR INVESTMENTS INTL LTD ,VG,AIM,,VGG636111004,ORD NPV ,MIL ,39.1333476449699,"27,308,180.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 27-Jun-13,MYANMAR INVESTMENTS INTL LTD ,VG,AIM,,VGG636111186,WTS (TO SUB FOR ORD) ,MILW ,39.1333476449699,"15,240,027.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 4-Aug-11,MYCELX TECHNOLOGIES CORP ,US,AIM,,US62847T2024,ORD USD0.025 (DI) ,MYX ,4.941030265,"2,919,086.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,ASX1,AIMP,GBX,,,,,,,,,,,,,,,,,, 4-Aug-11,MYCELX TECHNOLOGIES CORP ,US,AIM,,USU624551078,ORD USD0.025 DI REG S ,MYXR ,4.941030265,"18,197,757.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 16-Jun-14,MYSALE GROUP PLC ,JE,AIM,,JE00BMH4MR96,ORD NPV ,MYSL ,135.06349941,"151,331,652.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 1-Jul-15,MYSQUAR LTD ,VG,AIM,,VGG6361G1072,ORD NPV (DI) ,MYSQ ,7.29915851625,"201,356,097.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Oct-10,MYTRAH ENERGY LTD ,GG,AIM,,GG00B64BJ143,ORD NPV ,MYT ,93.68161,"163,636,000.00",Utilities,Utilities,Electricity,Alternative Electricity,7537,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 25-Sep-95,N.W.F GROUP ,GB,AIM,,GB0006523608,ORD GBP0.25 ,NWF ,78.99444416,"48,167,344.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-May-14,NAHL GROUP PLC ,GB,AIM,,GB00BM7S2W63,ORD GBP0.0025 ,NAH ,119.98868485,"45,278,749.00",Consumer Services,Media,Media,Media Agencies,5555,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 16-Dec-96,NAKAMA GROUP PLC ,GB,AIM,,GB0004251970,ORD GBP0.0001 ,NAK ,2.20858951875,"117,791,441.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 1-May-15,NANOCO GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01JLR99,ORD GBP0.10 ,NANO,180.075062805,"255,425,621.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 23-Aug-07,NASPERS ,ZA,International Main Market,Standard GDRs,US6315121003,ADRS EACH REPR 1 10 N ORD(SPON) ,NPSN,433.059178770789,"36,787,894.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 10-Jan-14,NASSTAR ,GB,AIM,,GB00B0T1S097,ORD GBP0.01 ,NASA ,32.23333309125,"384,875,619.00",Technology,Technology,Software & Computer Services,Internet,9535,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-May-97,NATIONAL EXHIBITION CENTRE(DEVELOP),GB,UK Main Market,Standard Debt,GB0006285984,7.5625% GTD UNSEC LN STK 2027 ,55KJ,0,"73,000,000.00",,,,,6,MISL,FSLL,GBP,,,,,,,,,,,,,,,,,, 26-Apr-95,NATIONAL EXPRESS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006215205,ORD GBP0.05 ,NEX ,1799.554654854,"508,779,942.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 31-Jan-02,NATIONAL GRID ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B08SNH34,ORD GBP0.113953 ,NG. ,39246.202525075,"3,750,234,355.00",Utilities,Utilities,"Gas, Water & Multiutilities",Multiutilities,7575,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 18-Sep-91,NATIONAL WESTMINSTER BANK ,GB,UK Main Market,Standard Debt,GB0006227382,NON-CUM USD PRF SER'A'USD25(BR) ,30HT,0,"10,000,000.00",,,,,7,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 18-Sep-91,NATIONAL WESTMINSTER BANK ,GB,UK Main Market,Standard Debt,GB0006227051,9% SER'A'NON-CUM PRF GBP1 ,NWBD,0,"140,000,000.00",,,,,7,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 18-Sep-91,NATIONAL WESTMINSTER BANK ,GB,UK Main Market,Standard Debt,GB0006217243,NON-CUM USD PRF SER'B'USD25 ,81HS,0,"10,000,000.00",,,,,7,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0001918076,FLTG RATE PERM INT BEARING SHS ,CEBB,0,"10,000,000.00",,,,,7,SSX3,SQCL,GBP,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0033882084,6.875% PERM INT BEAR SHS GBP1000 ,CEBA,0,"30,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,XS0284776274,6.024% PIBS GBP50000 ,NAWI,0,"350,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0033627968,6.25% PERM INT BEARING SHS GBP1000 ,POBA,0,"125,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0001777886,7.859% PERM INT BEARING SHS TRANCH 2 ,NABB,0,"100,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 11-Jul-86,NATIONWIDE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB00B120GX99,6% PERM INT BEARING SHS GBP1000 ,NANW,0,"140,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 1-Aug-02,NATURE GROUP PLC ,JE,AIM,,JE00B3B5FZ40,ORD GBP0.002 ,NGR ,3.96403275,"79,280,655.00",Industrials,Industrial Goods & Services,Support Services,Waste & Disposal Services,2799,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Mar-14,NB DISTRESSED DEBT INV FD LTD ,GG,UK Main Market,,GG00BH7JH183,RED ORD NPV ,NBDG,281.004512748067,"110,785,785.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 4-Mar-14,NB DISTRESSED DEBT INV FD LTD ,GG,UK Main Market,,GG00BYT2S336,EXTENDED LIFE RED ORD NPV ,NBDX,281.004512748067,"236,829,693.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 4-Mar-14,NB DISTRESSED DEBT INV FD LTD ,GG,UK Main Market,,GG00BYT2S112,ORD NPV ,NBDD,281.004512748067,"38,265,672.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 20-Apr-11,NB GLOBAL FLOATING RATE INC FD LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B3P7S359,RED ORD NPV USD ,NBLU,1098.66963255915,"173,894,631.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,USD,,,,,,,,,,,,,,,,,, 20-Apr-11,NB GLOBAL FLOATING RATE INC FD LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B3KX4Q34,RED ORD NPV GBP ,NBLS,1098.66963255915,"1,038,096,022.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 30-Jun-09,NB PRIVATE EQUITY PARTNERS LTD ,GG,UK Main Market,,GG00B4ZXGJ22,ZERO DIV PREF SHARE NPV ,NBPZ,487.584338292499,"32,999,999.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM3,SFNC,GBX,,,,,,,,,,,,,,,,,, 30-Jun-09,NB PRIVATE EQUITY PARTNERS LTD ,GG,UK Main Market,,GG00B1ZBD492,ORD USD0.01 ,NBPE,487.584338292499,"54,210,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 13-Jul-07,NCC GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01QGK86,ORD GBP0.01 ,NCC ,879.15718282,"273,030,181.00",Technology,Technology,Software & Computer Services,Computer Services,9533,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Jun-10,NCONDEZI ENERGY LTD ,VG,AIM,,VGG640631039,ORD NPV (DI) ,NCCL ,14.05246483125,"249,821,597.00",Basic Materials,Basic Resources,Mining,Coal,1771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Nov-91,NEC FINANCE ,GB,UK Main Market,Standard Debt,GB0006185556,13.625% DEB STK 2016 ,BD92,0,"115,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 6-Nov-91,NEC FINANCE ,GB,UK Main Market,Standard Debt,GB0006185440,10.625% DEB STK 2016 ,BD71,0,"100,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 3-Nov-14,NEKTAN PLC ,GI,AIM,,GI000A12CYF8,ORD GBP0.01 (DI) ,NKTN ,10.8461646,"24,102,588.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Feb-05,NEPTUNE-CALCULUS INCOME&GROWTH VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0523M32,ORD GBP0.10 ,NEP ,2.511716955,"7,280,339.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 30-Jul-10,NETCALL ,GB,AIM,,GB0000060532,ORD GBP0.05 ,NET ,78.12636048,"139,511,358.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-May-07,NETDIMENSIONS(HLDGS)LTD ,KY,AIM,,KYG6427F1019,ORD USD0.001 (DI) ,NETD ,17.3344291,"50,983,615.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Apr-01,NETPLAY TV PLC ,GB,AIM,,GB00BZBXBN29,ORD GBP0.01071429 ,NPT ,24.3887161,"278,728,184.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Sep-13,NETSCIENTIFIC PLC ,GB,AIM,,GB00B9F4MT28,ORD GBP0.05 ,NSCI ,39.32828515,"51,075,695.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Feb-98,NEW BRUNSWICK RAILWAY CO ,CA,International Main Market,Standard Debt,GB0006301062,PERP 4% CONS DEB STK ,98HT,0,"1,654,533.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 24-Mar-05,NEW CENTURY AIM VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B06JWZ91,ORD GBP0.10 ,NCA ,8.66231272,"12,645,712.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-Apr-07,NEW CENTURY AIM VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1SN3863,ORD GBP0.10 ,NCA2,3.63254976,"6,486,696.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 11-Feb-08,NEW CITY ENERGY LTD ,JE,Trading Only,,JE00B2B0SY27,ORD NPV ,NCE ,0,"49,000,000.00",,,,,5,SSX3,SQNL,GBX,,,,,,,,,,,,,,,,,, 22-Aug-07,NEW EUROPE PROPERTY INVESTMENTS PLC,IM,AIM,,IM00B23XCH02,ORD EUR0.01 ,NEPI ,2950.28510935981,"335,312,502.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ2,AMQ2,EUR,,,,,,,,,,,,,,,,,, 31-Mar-94,NEW INDIA INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006048770,ORD GBP0.25 ,NII ,231.45055928,"59,652,206.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 2-May-00,NEW STAR INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002631041,ORD GBP0.01 ,NSI ,64.276443975,"71,023,695.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Jun-12,NEW TREND LIFESTYLE GROUP PLC ,GB,AIM,,GB00B8L0LP68,ORD GBP0.001 ,NTLG ,2.75,"100,000,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Jul-12,NEW WORLD OIL & GAS PLC ,JE,AIM,,JE00B65FK239,ORD NPV ,NEW ,0,"4,740,429,426.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-May-11,NEW WORLD RESOURCES PLC ,GB,UK Main Market,,GB00B42CTW68,ORD EUR0.0004 A ,NWR ,0,"6,673,102,546.00",Basic Materials,Basic Resources,Mining,Coal,1771,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 16-Sep-92,NEWCASTLE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0006361371,12.625% PERM INT BEARING SHS GBP1000 ,NBSR,0,"10,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 16-Sep-92,NEWCASTLE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0006371529,10.75% PERM INT BEARING SHS GBP1000 ,NBSP,0,"10,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 20-Sep-02,NEWMARK SECURITY ,GB,AIM,,GB0006596406,ORD GBP0.01 ,NWT ,9.726195557,"468,732,316.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Aug-16,NEWRIVER REIT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BD7XPJ64,ORD GBP0.01 ,NRR ,761.09742984,"238,588,536.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 12-Mar-48,NEXT ,GB,UK Main Market,Premium Equity Commercial Companies,GB0032089863,ORD GBP0.10 ,NXT ,8194.274907,"148,312,668.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 31-Mar-05,NEXT FIFTEEN COMMUNICATIONS GROUP ,GB,AIM,,GB0030026057,ORD GBP0.025 ,NFC ,235.138032855,"69,056,691.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Apr-14,NEXTENERGY SOLAR FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BJ0JVY01,ORD RED NPV GBP ,NESF,309.9117892,"297,992,105.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Jun-04,NICHOLS ,GB,AIM,,GB0006389398,ORD GBP0.10 ,NICL ,520.08371778,"36,846,172.00",Consumer Goods,Food & Beverage,Beverages,Soft Drinks,3537,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 12-Mar-07,NIGHTHAWK ENERGY PLC ,GB,AIM,,GB00B156TD53,ORD GBP0.0025 ,HAWK ,7.616202849,"964,076,310.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 24-Mar-14,NIMROD SEA ASSETS LTD ,GG,UK Main Market,,GG00BK0SC854,ORD NPV ,NSA ,10.894026,"130,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 17-Apr-97,NMBZ HLDGS ,ZW,International Main Market,Standard Shares,ZW0009011389,ORD ZWR0.25 ,NMBA,0,0.00,Financials,Financial Services,Financial Services,Investment Services,8777,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 17-Apr-97,NMBZ HLDGS ,ZW,International Main Market,Standard Shares,ZW0009011389,ORD ZWR0.25 ,NMB ,0,"30,465,589.00",Financials,Financial Services,Financial Services,Investment Services,8777,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 5-Apr-12,NMC HEALTH PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B7FC0762,ORD GBP0.10 ,NMC ,2516.4285753,"185,714,286.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 21-Mar-06,NOIDA TOLL BRIDGE CO ,IN,AIM,,US65527N1063,GDR EACH REPR 5 ORD SHS ,NTBC ,26.1875604049949,"12,499,999.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 14-Apr-16,NON-STANDARD FINANCE PLC ,GB,UK Main Market,Standard Shares,GB00BRJ6JV17,ORD GBP0.05 ,NSF ,237.7872615,"317,049,682.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 16-Jul-07,NORCROS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYYJL418,ORD GBP0.1 ,NXR ,100.64491305,"60,996,917.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 19-Jan-12,NORD GOLD SE ,NL,International Main Market,Standard GDRs,US65557T2050,GDR EACH REPR 1 ORD REG S(SPONS) ,NORD,932.785573773237,"354,903,560.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 17-Dec-10,NORICUM GOLD LTD ,VG,AIM,,VGG659191057,ORD NPV (DI) ,NMG ,6.7086794894,"4,791,913,921.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Oct-12,NORISH ,IE,AIM,,IE0006447985,ORD EUR0.25 ,NSH ,12.13395309,"29,960,378.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Dec-08,NORMAN BROADBENT PLC ,GB,AIM,,GB00B3VF4Y66,ORD GBP0.01 ,NBB ,1.654566265,"17,416,487.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Apr-72,NORSK HYDRO ASA ,NO,International Main Market,Standard Shares,NO0005052605,NOK1.098 ,NHY ,6861.6632844,"2,117,797,310.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Aluminum,1753,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 21-Oct-52,NORTH AMERICAN INCOME TST (THE) PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000293620,ORD GBP0.25 ,NAIT,305.51062012,"28,261,852.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 31-Jan-73,NORTH ATLANTIC SMALL COS INV TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006439003,ORD GBP0.05 ,NAS ,375.141744,"15,630,906.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,NORTH MIDLAND CONSTRUCTION ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006452857,ORD GBP0.10 ,NMD ,14.21,"10,150,000.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 27-Dec-06,NORTH RIVER RESOURCES PLC ,GB,AIM,,GB00BDDRJJ03,ORD GBP0.002 ,NRRP ,3.69496344,"26,392,596.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Sep-00,NORTHACRE ,GB,AIM,,GB0006877939,ORD GBP0.025 ,NTA ,14.182405565,"42,335,539.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 2-Sep-13,NORTHAMBER ,GB,AIM,,GB00B2Q99X01,ORD GBP0.01 ,NAR ,9.151588875,"28,158,735.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Mar-06,NORTHBRIDGE INDUSTRIAL SERVICES ,GB,AIM,,GB00B0SPFW38,ORD GBP0.10 ,NBI ,20.163619075,"26,017,573.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Apr-99,NORTHERN 2 VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0005356430,ORD GBP0.05 ,NTV ,63.31260978,"95,206,932.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Dec-01,NORTHERN 3 VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031152027,ORD GBP0.05 ,NTN ,61.446695985,"67,154,859.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 19-Dec-06,NORTHERN BEAR PLC ,GB,AIM,,GB00B19FLM15,ORD GBP0.01 ,NTBR ,8.3473096875,"17,807,594.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Sep-95,NORTHERN ELECTRIC ,GB,UK Main Market,Standard Shares,GB0006546898,8.061P(NET)CUM IRRD PRF 1P ,NTEA,0,"111,663,303.00",,,,,7,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 27-Apr-90,NORTHERN INVESTORS CO ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B08S4K30,ORD GBP0.25 ,NRI ,119.514676,"15,128,440.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Dec-95,NORTHERN PETROLEUM ,GB,AIM,,GB00B0D47T64,ORD GBP0.01 ,NOP ,4.568591025,"135,365,660.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 1-Nov-95,NORTHERN VENTURE TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006450703,ORD GBP0.25 ,NVT ,67.9992439,"97,141,777.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 14-Oct-55,NORTHGATE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B41H7391,ORD GBP0.50 ,NTG ,558.6329985,"132,602,850.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 14-Oct-55,NORTHGATE PLC ,GB,UK Main Market,Standard Shares,GB0003775664,5% CUM PRF 50P ,67GX,558.6329985,"1,000,000.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Jun-10,NORTHWEST INVESTMENT GROUP LTD ,VG,AIM,,VGG666521197,ORD GBP0.005 (DI) ,NWIG ,1.34,"134,000,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Jul-07,NOSTRA TERRA OIL&GAS CO PLC ,GB,AIM,,GB00BZ76F335,ORD GBP0.001 ,NTOG ,1.373250833,"94,706,954.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Jun-14,NOSTRUM OIL & GAS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BGP6Q951,ORD GBP0.01 ,NOG ,558.90338526,"188,182,958.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 14-Jun-01,NOTTINGHAM BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0030517931,7.875% PERM INT BEARING SHS GBP5000 REG ,NOTP,0,"25,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 19-May-08,NOVAE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B40SF849,ORD GBP1.125 ,NVA ,521.5255558,"64,425,640.00",Financials,Insurance,Nonlife Insurance,Property & Casualty Insurance,8536,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 27-Jul-05,NOVATEK OAO ,RU,International Main Market,Standard GDRs,US6698881090,GDR EACH REPR 10 ORD 'REG S' ,NVTK,24935.4517556759,"303,631,000.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 15-Dec-05,NOVOLIPETSK IRON AND STEEL CORP ,RU,International Main Market,Standard GDRs,US67011E2046,GDS EACH REPR 10 ORD RUB1 'REGS' ,NLMK,6369.23865764698,"599,323,000.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 15-Dec-05,NOVOLIPETSK IRON AND STEEL CORP ,RU,International Main Market,Standard GDRs,US67011E1055,GDS EACH REPR 10 ORD RUB1 '144A' ,NLMA,6369.23865764698,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 8-Nov-07,NOVOROSSIYSK COMMERCIAL SEA PORT ,RU,International Main Market,Standard GDRs,US67011U1097,GDR EACH REPR 75 ORD '144A' ,71FG,1085.73880394742,0.00,Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 8-Nov-07,NOVOROSSIYSK COMMERCIAL SEA PORT ,RU,International Main Market,Standard GDRs,US67011U2087,GDR EACH REPR 75 ORD 'REGS' ,NCSP,1085.73880394742,"256,791,123.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 27-Mar-96,NUMIS CORP ,GB,AIM,,GB00B05M6465,ORD GBP0.05 ,NUM ,254.637334505,"117,615,397.00",Financials,Financial Services,Financial Services,Investment Services,8777,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 20-Mar-08,NU-OIL AND GAS PLC ,GB,AIM,,GB00B29T9605,ORD GBP0.001 ,NUOG ,0.2669663527,"314,078,062.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Dec-01,NYOTA MINERALS LTD ,AU,AIM,,AU000000NYO7,NPV ,NYO ,0.8918617442,"1,877,603,672.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Aug-07,OAKLEY CAPITAL INVESTMENTS LTD ,BM,AIM,,BMG670131058,ORD GBP0.01 (DI) ,OCL ,285.723458625,"207,798,879.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Sep-10,OBTALA LTD ,GG,AIM,,GG00B4WJSD17,ORD GBP0.01 ,OBT ,32.13144007,"254,506,456.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Jul-10,OCADO GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B3MBS747,ORD GBP0.02 ,OCDO,1687.755648372,"554,089,182.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Jul-92,OCEAN WILSONS HLDGS ,BM,International Main Market,Premium Equity Commercial Companies,BMG6699D1074,ORD GBP0.20 ,OCN ,341.253336,"35,363,040.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 30-Jun-15,OCTAGONAL PLC ,GB,AIM,,GB00BWWCHQ23,ORD GBP0.0005 ,OCT ,10.5042541125,"560,226,886.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Jan-06,OCTOPUS AIM VCT 2 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0JQZZ80,ORD GBP0.0001 ,OSEC,67.4973166375,"88,521,071.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-98,OCTOPUS AIM VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0034202076,ORD GBP0.01 ,OOA ,101.766263415,"102,535,278.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Oct-06,OCTOPUS APOLLO VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B17B3479,ORD GBP0.10 ,OAP3,169.97469822,"222,189,148.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Aug-04,OCTOPUS ECLIPSE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B00MKB60,ORD GBP0.1 ,OEC1,20.304076505,"67,963,436.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 28-Dec-07,OCTOPUS TITAN VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B28V9347,ORD GBP0.10 ,OTV2,277.59232353,"309,295,068.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 19-Mar-12,OCTOPUS VCT 3 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B4KQKM77,ORD GBP0.01 ,OCV3,6.214225855,"7,624,817.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 19-Mar-12,OCTOPUS VCT 4 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6QM2B64,ORD GBP0.01 ,OCV4,6.80173898,"8,345,692.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 6-Dec-06,OIL & GAS DEVELOPMENT CO ,PK,International Main Market,Standard GDRs,US67778Q1013,GDR EACH REPR 10 ORD SHS '144A' ,37OC,441.904661207999,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 6-Dec-06,OIL & GAS DEVELOPMENT CO ,PK,International Main Market,Standard GDRs,US67778Q2003,GDR EACH REPR 10 ORD 'REGS' ,OGDC,441.904661207999,"48,338,700.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 16-Feb-06,OILEX LTD ,AU,AIM,,AU000000OEX8,ORD NPV ,OEX ,5.6066781845,"1,180,353,302.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Nov-10,O'KEY GROUP SA ,LU,International Main Market,Standard GDRs,US6708662019,GDR EACH REPR 1 SHARE REG S ,OKEY,367.918255016249,"272,082,500.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 12-Jul-99,OLD MUTUAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B77J0862,ORD GBP0.114285714 ,OML ,9559.359029292,"4,924,966,012.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 21-Dec-10,OMEGA DIAGNOSTICS GROUP PLC ,GB,AIM,,GB00B1VCP282,ORD GBP0.04 ,ODX ,19.16642416125,"108,745,669.00",Health Care,Health Care,Health Care Equipment & Services,Medical Supplies,4537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Apr-01,OMG ,GB,AIM,,GB0030312788,ORD GBP0.0025 ,OMG ,55.203879185,"121,327,207.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Sep-15,ON THE BEACH GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYM1K758,ORD GBP0.01 ,OTB ,295.1765865125,"135,869,545.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-May-16,ONCIMMUNE HLDGS PLC ,GB,AIM,,GB00BYQ94H38,ORD GBP0.01 ,ONC ,60.20879672,"51,024,404.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Apr-13,ONE MEDIA IP GROUP PLC ,GB,AIM,,GB00B1DRDZ07,GBP0.005 ,OMIP ,2.48687943,"71,053,698.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Jun-14,ONESAVINGS BANK PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BM7S7K96,ORD GBP0.01 ,OSB ,650.244593425,"243,082,091.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 21-Mar-16,ONEVIEW GROUP PLC ,GB,AIM,,GB0000496611,ORD GBP0.01 ,ONEV ,18.46706358,"351,753,592.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Dec-96,ON-LINE PLC ,GB,AIM,,GB0006601479,ORD GBP0.05 ,ONL ,1.22322576,"7,645,161.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 7-Jun-05,ONZIMA VENTURES PLC ,GB,AIM,,GB00BYQCDH57,ORD GBP0.001 ,ONZ ,2.680981745,"206,229,365.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Jul-13,OOREDOO QSC ,QA,International Main Market,Standard GDRs,US6834201039,GDR EACH REP 1/2 ORD 144A ,BG04,2262.60539999999,0.00,Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,MISC,ADRN,USD,,,,,,,,,,,,,,,,,, 16-Jul-13,OOREDOO QSC ,QA,International Main Market,Standard GDRs,US6834202029,GDR EACH REP 1/2 ORD REG'S ,ORDS,2262.60539999999,"90,000,000.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 27-Apr-15,OPERA INVESTMENTS PLC ,GB,UK Main Market,Standard Shares,GB00BSNBL022,GBP0.01 ,OPRA,0.7546875,"17,250,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 30-May-08,OPG POWER VENTURE PLC ,IM,AIM,,IM00B2R3RX72,ORD GBP0.000147 ,OPG ,246.0533565,"351,504,795.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Jul-11,OPHIR ENERGY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B24CT194,ORD GBP0.0025 ,OPHR,415.5490780375,"563,456,377.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 5-Aug-14,OPTIBIOTIX HEALTH PLC ,GB,AIM,,GB00BP0RTP38,ORD GBP0.02 ,OPTI ,60.578946825,"78,166,383.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Apr-11,ORACLE COALFIELDS PLC ,GB,AIM,,GB00B23JN426,ORD GBP0.001 ,ORCP ,26.897602217,"911,783,126.00",Basic Materials,Basic Resources,Mining,Coal,1771,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Jun-12,ORASCOM TELECOM MEDIA&TECH HLDG SAE,EG,International Main Market,Standard GDRs,US68555D2062,GDR EACH REP 5 ORD REG'S SPON ,OTMT,318.502880641832,"1,049,138,124.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 1-Jul-15,ORCHARD FUNDING GROUP PLC ,GB,AIM,,GB00BYZFM569,ORD GBP0.01 ,ORCH ,18.15104195,"21,354,167.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Oct-05,ORCHID PHARMA LTD ,IN,Trading Only,,US68572Y1001,GDR EACH REPR INR10'144A' ,OCPA,0,0.00,,,,,9,MISC,INAD,USD,,,,,,,,,,,,,,,,,, 5-Jun-07,ORIGIN ENTERPRISES PLC ,IE,AIM,,IE00B1WV4493,ORD EUR0.01 ,OGN ,646.005103407008,"138,499,155.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AIM ,AIM ,EUR,,,,,,,,,,,,,,,,,, 14-Dec-09,ORIGO PARTNERS PLC ,IM,AIM,,IM00B3SXFX94,CNV RED PREF NPV ,OPPP ,0,"60,000,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 14-Dec-09,ORIGO PARTNERS PLC ,IM,AIM,,IM00B1G3MS12,ORD GBP0.0001 ,OPP ,0,"359,306,814.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-Apr-05,ORMONDE MINING ,IE,AIM,,IE0006627891,ORD EUR0.025 ,ORM ,10.631418345,"472,507,482.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Mar-11,OROGEN GOLD PLC ,GB,AIM,,GB00B06LPZ62,ORD GBP0.0001 ,ORE ,1.35922560075,"6,041,002,670.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Dec-04,OROSUR MINING INC ,CA,AIM,,CA6871961059,NPV ,OMI ,15.60432888,"99,075,104.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Sep-10,ORTAC RESOURCES LTD ,VG,AIM,,VGG6829M1005,ORD NPV (DI) ,OTC ,2.31812148555,"7,132,681,494.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Mar-95,ORYX INTERNATIONAL GROWTH FUND ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B3BTVQ94,ORD GBP0.50 ,OIG ,95.599296,"14,995,968.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 15-Apr-16,OSIRIUM TECHNOLOGIES PLC ,GB,AIM,,GB00BZ58DH10,ORD GBP0.01 ,OSI ,19.22955675,"10,394,355.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,OTP BANK ,HU,Trading Only,,USX607461166,GDR EACH REPR 0.50 ORD(REG S) ,OTPD,0,"140,000,005.00",Financials,Banks,Banks,Banks,8355,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 28-Dec-05,OTTOMAN FUND(THE) ,JE,AIM,,GB00B0PJ6V42,ORD NPV ,OTM ,0,"134,764,709.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Jun-05,OVOCA GOLD ,IE,AIM,,IE00B4XVDC01,EUR0.125 ,OVG ,11.138885265,"87,363,806.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Apr-01,OXFORD BIOMEDICA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006648157,ORD GBP0.01 ,OXB ,112.806336342,"2,685,865,151.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 12-Oct-83,OXFORD INSTRUMENTS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006650450,ORD GBP0.05 ,OXIG,430.57963008,"56,065,056.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 12-Feb-10,OXFORD PHARMASCIENCE GROUP PLC ,GB,AIM,,GB00B3LXPB43,ORD GBP0.001 ,OXP ,36.16984857,"1,205,661,619.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Apr-00,OXFORD TECHNOLOGY 2 VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003105052,ORD GBP0.10 ,OXH ,1.25578706,"5,708,123.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Apr-02,OXFORD TECHNOLOGY 3 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0031420390,ORD GBP0.10 ,OTT ,4.024793,"6,999,640.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 8-Sep-04,OXFORD TECHNOLOGY 4 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B01H4V84,ORD GBP0.10 ,OXF ,5.40817062,"11,506,746.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 4-Apr-97,OXFORD TECHNOLOGY VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006640204,ORD GBP0.10 ,OXT ,2.0640289,"5,431,655.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 30-May-14,P2P GLOBAL INVESTMENTS PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BLP57Y95,ORD GBP0.01 ,P2P ,510.631362875,"60,970,909.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 22-Nov-07,PACIFIC ALLIANCE CHINA LAND LTD ,KY,AIM,,KYG6846Y1035,ORD USD0.01 ,PACL ,192.089341968749,"134,477,500.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 29-Jan-85,PACIFIC ASSETS TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006674385,ORD GBP0.125 ,PAC ,269.9012878,"117,348,386.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 22-Sep-89,PACIFIC HORIZON INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006667470,ORD GBP0.10 ,PHI ,152.06302412,"73,817,002.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 13-Apr-16,PACIFIC INDUSTRIAL & LOGIS REIT PLC,GB,AIM,,GB00BYV8MN78,ORD GBP0.01 ,PILR ,10.8338055,"10,317,910.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Dec-00,PADDY POWER BETFAIR PLC ,IE,International Main Market,Premium Equity Commercial Companies,IE00BWT6H894,ORD EUR0.09 ,PPB ,3626.0952788,"39,586,193.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Apr-01,PAGEGROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0030232317,ORD GBP0.01 ,PAGE,1032.81064732,"297,639,956.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Oct-97,PAINTS & CHEMICAL INDUSTRIES ,EG,International Main Market,Standard GDRs,US69578R1077,GDR EACH REPR 1/3 SHARE EGP10(144A) ,47KT,0,0.00,Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 9-Oct-97,PAINTS & CHEMICAL INDUSTRIES ,EG,International Main Market,Standard GDRs,US69578R2067,GDR EACH REPR 1/3 SHARE EGP10(REG'S') ,PCLD,0,"8,000,001.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 21-Oct-13,PALACE CAPITAL PLC ,GB,AIM,,GB00BF5SGF06,ORD GBP0.1 ,PCA ,65.289231675,"20,244,723.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Aug-16,PALM HILLS DEVELOPMENTS SAE ,EG,International Main Market,Standard GDRs,US6966405077,GDR EACH REPR 20 SHS REGS ,PHDC,0,"93,184,000.00",,,,,8733,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 31-Jul-07,PAN AFRICAN RESOURCES PLC ,GB,AIM,,GB0004300496,ORD GBP0.01 ,PAF ,359.49321249,"1,943,206,554.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 26-Apr-05,PANMURE GORDON & CO ,GB,AIM,,GB00B97CW509,ORD GBP0.04 ,PMR ,7.419936,"15,458,200.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Sep-87,PANTHEON INTL PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004148507,ORD GBP0.67 ,PIN ,890.79856107,"33,425,923.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 21-Sep-87,PANTHEON INTL PLC ,GB,UK Main Market,Standard Shares,GB00B020KN05,RED SHS GBP0.01 ,PINR,890.79856107,"32,230,013.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 5-Apr-06,PANTHEON RESOURCES ,GB,AIM,,GB00B125SX82,ORD GBP0.01 ,PANR ,317.6395872,"233,558,520.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 30-Dec-13,PANTHER SECURITIES ,GB,AIM,,GB0005132070,ORD GBP0.25 ,PNS ,54.571806675,"17,746,929.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Nov-06,PAO TMK ,RU,International Main Market,Standard GDRs,US87260R1023,GDR EACH REPR 4 ORD SHS '144A' ,69SI,5901.67106255803,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 3-Nov-06,PAO TMK ,RU,International Main Market,Standard GDRs,US87260R2013,GDR EACH REPR 4 ORD SHS 'REGS' ,TMKS,5901.67106255803,"2,343,965,235.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 24-Jun-16,PAPILLON HOLDINGS PLC ,GB,UK Main Market,Standard Shares,GB00BYZC5R04,ORD GBP0.001 ,PPHP,1.5888,"132,400,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 2-Mar-12,PAPUA MINING PLC ,GB,AIM,,GB00B42TN250,ORD GBP0.001 ,PML ,1.01029126875,"53,882,201.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Dec-11,PARAGON ENTERTAINMENT LTD ,KY,AIM,,KYG6906M1069,ORD GBP0.001 (DI) ,PEL ,4.5512533375,"187,680,550.00",Consumer Services,Travel & Leisure,Travel & Leisure,Recreational Services,5755,ASX1,AIMP,GBX,,,,,,,,,,,,,,,,,, 15-May-89,PARAGON GROUP OF COMPANIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B2NGPM57,ORD GBP1 ,PAG ,864.464862768,"272,444,016.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Aug-01,PARALLEL MEDIA GROUP PLC ,GB,AIM,,GB00BGSGT481,ORD GBP0.01 ,PAA ,0.3385387125,"3,009,233.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Jul-13,PARITY GROUP ,GB,AIM,,GB00B1235860,ORD GBP0.02 ,PTY ,8.6741667,"102,049,020.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Oct-07,PARK GROUP ,GB,AIM,,GB0006710643,ORD GBP0.02 ,PKG ,128.5943939,"183,706,277.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 13-Mar-00,PARKMEAD GROUP(THE) ,GB,AIM,,GB00BGCYZL73,ORD GBP0.015 ,PMG ,54.09494365,"98,354,443.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 5-Mar-03,PATAGONIA GOLD ,GB,AIM,,GB0003049409,ORD GBP0.01 ,PGD ,26.57973088375,"1,586,849,605.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Nov-05,PATERNOSTER RESOURCES PLC ,GB,AIM,,GB0001636918,ORD GBP0.001 ,PRS ,1.5757423318,"1,016,607,956.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Feb-11,PATHFINDER MINERALS PLC ,GB,AIM,,GB00BYY0JQ23,ORD GBP0.001 ,PFP ,1.310869464,"163,858,683.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 19-May-14,PATISSERIE HOLDINGS PLC ,GB,AIM,,GB00BM4NV504,ORD GBP0.01 ,CAKE ,319,"100,000,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 24-Sep-04,PAYPOINT ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B02QND93,ORD GBP0.0033 ,PAY ,661.1647812,"67,465,794.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 23-Dec-15,PAYSAFE GROUP PLC ,IM,UK Main Market,Premium Equity Commercial Companies,GB0034264548,ORD GBP0.0001 ,PAYS,2099.118018019,"480,677,357.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 28-Aug-15,PCG ENTERTAINMENT PLC ,GI,AIM,,GI000A1171Y8,ORD GBP0.001 (DI) ,PCGE ,3.64620544475,"1,325,892,889.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Aug-69,PEARSON ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006776081,ORD GBP0.25 ,PSON,7037.389111725,"813,100,995.00",Consumer Services,Media,Media,Publishing,5557,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 23-Dec-98,PEEL HOTELS ,GB,AIM,,GB0002583606,ORD GBP0.10 ,PHO ,16.2571332,"14,014,770.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Apr-86,PEEL LAND & PROPERTY INV PLC ,GB,UK Main Market,Standard Debt,GB0006783558,8.375% 1ST MTG DEB STK 30/04/40 GBP ,33IE,0,"250,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 23-May-86,PEEL SOUTH EAST LTD ,GB,UK Main Market,Standard Debt,GB0005320196,10% 1ST MTG DEB STK 2026 ,64JS,0,"110,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 23-May-86,PEEL SOUTH EAST LTD ,GB,UK Main Market,Standard Debt,GB0005318901,11.625% 1ST MTG DEB STK 2018 ,09HK,0,"12,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 16-Apr-13,PEMBROKE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BQVC9S79,ORD GBP0.01 B ,PEMB,30.51597239,"11,449,546.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Apr-13,PEMBROKE VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B89W2T50,ORD GBP0.01 ,PEMV,30.51597239,"18,041,202.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 13-Nov-89,PENDRAGON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1JQBT10,ORD GBP0.05 ,PDG ,493.229055135,"1,454,952,965.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 12-Mar-98,PENNANT INTERNATIONAL GROUP ,GB,AIM,,GB0002570660,ORD GBP0.05 ,PEN ,15.431617305,"27,312,597.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 12-Dec-89,PENNON GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B18V8630,ORD GBP0.407 ,PNN ,3606.1033437,"410,951,948.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 4-Dec-14,PEOPLES OPERATOR PLC(THE) ,GB,AIM,,GB00BSJWQH14,ORD GBP0.0005 ,TPOP ,13.22486848,"77,793,344.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-May-15,PERMANENT TSB GROUP HLDGS PLC ,IE,International Main Market,Standard Shares,IE00BWB8X525,ORD EUR0.50 ,IL0A,938.118107475714,"543,584,381.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSMU,SMEV,EUR,,,,,,,,,,,,,,,,,, 21-Mar-96,PERPETUAL INCOME&GROWTH INVESTM TR ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006798424,ORD GBP0.10 ,PLI ,899.14764417,"235,996,757.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Apr-85,PERSIMMON ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006825383,ORD GBP0.10 ,PSN ,5520.43566336,"302,655,464.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Sep-83,PERSONAL ASSETS TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006827546,ORD GBP12.50 ,PNL ,573.2008,"1,433,002.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Nov-00,PERSONAL GROUP HLDGS ,GB,AIM,,GB0002760279,ORD GBP0.05 ,PGH ,143.7499606,"30,585,098.00",Financials,Insurance,Nonlife Insurance,Insurance Brokers,8534,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Mar-97,PETARDS GROUP ,GB,AIM,,GB00B4YL8F73,ORD GBP0.01 ,PEG ,5.943781305,"34,708,212.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Dec-11,PETRA DIAMONDS ,BM,International Main Market,Premium Equity Commercial Companies,BMG702781094,ORD GBP0.10 (DI) ,PDL ,582.07664383,"512,842,858.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 18-Aug-00,PETREL RESOURCES ,IE,AIM,,IE0001340177,ORD EUR0.0125 ,PET ,5.96280951,"97,351,992.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-May-08,PETRO MATAD LTD ,IM,AIM,,IM00B292WR19,ORD USD0.01 ,MATD ,8.7533406375,"286,994,775.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 7-Oct-05,PETROFAC ,JE,UK Main Market,Premium Equity Commercial Companies,GB00B0H2K534,ORD USD0.02 ,PFC ,2876.08773935,"345,891,490.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Sep-06,PETRONEFT RESOURCES ,IE,AIM,,IE00B0Q82B24,ORD EUR0.01 ,PTR ,15.913032885,"707,245,906.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Apr-09,PETROPAVLOVSK PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031544546,ORD GBP0.01 ,POG ,222.6739990568,"3,303,768,532.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-Mar-14,PETS AT HOME GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJ62K685,ORD GBP0.01 ,PETS,1225,"500,000,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 4-Jan-16,PEWT SECURITIES 2020 PLC ,GB,UK Main Market,Standard Shares,GB00BYP98L62,GBP0.01 ZDP ,PEZ ,27.082504125,"24,073,337.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 26-Aug-67,PFIZER INC ,US,International Main Market,Standard Shares,US7170811035,USD0.05 ,PFZ ,8553.1458573625,"323,101,293.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 11-May-07,PHARMSTANDARD PJSC ,RU,International Main Market,Standard GDRs,US7171402065,GDR EACH REPR 0.25 ORD'REGS' ,PHST,430.7157658292,"151,170,412.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 11-May-07,PHARMSTANDARD PJSC ,RU,International Main Market,Standard GDRs,US7171401075,GDR EACH REPR 0.25 ORD'144A' ,70SK,430.7157658292,0.00,Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 11-Jun-08,PHAUNOS TIMBER FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1G3RS66,ORD NPV ,PTF ,173.645069261438,"555,937,832.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,USD,,,,,,,,,,,,,,,,,, 17-Nov-09,PHOENIX GROUP HLDGS ,KY,International Main Market,Premium Equity Commercial Companies,KYG7091M1096,ORD EUR0.0001 (DI) ,PHNX,2146.55874235,"247,014,815.00",Financials,Insurance,Life Insurance,Life Insurance,8575,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 15-Jun-15,PHOENIX SPREE DEUTSCHLAND LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B248KJ21,ORD NPV ,PSDL,193.769367775,"92,491,345.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 13-Jul-11,PHOSAGRO OJSC ,RU,International Main Market,Standard GDRs,US71922G1004,3 GDRS REPR 1 ORD 144A ,10NC,3966.35524199829,0.00,Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 13-Jul-11,PHOSAGRO OJSC ,RU,International Main Market,Standard GDRs,US71922G2093,GDR EACH REPR 0.3333 ORD REGS SPON ,PHOR,3966.35524199829,"388,538,841.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 5-Dec-62,PHOTO-ME INTERNATIONAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008481250,ORD GBP0.005 ,PHTM,574.523767355,"362,475,563.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Recreational Products,3745,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 24-Dec-10,PHOTONSTAR LED GROUP PLC ,GB,AIM,,GB00B1TK2453,ORD GBP0.01 ,PSL ,4.57026664,"228,513,332.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Durable Household Products,3722,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Jul-05,PHSC ,GB,AIM,,GB0033113456,ORD GBP0.10 ,PHSC ,3.10800765,"13,086,348.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 20-Dec-04,PHYSIOMICS PLC ,GB,AIM,,GB00B04QT956,ORD GBP0.00004 ,PYC ,0.80653882335,"2,481,657,918.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Oct-05,PICTON PROPERTY INCOME LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0LCW208,ORD NPV ,PCTN,312.40297955,"449,500,690.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 15-Oct-12,PICTON ZDP LTD ,GG,UK Main Market,Standard Shares,GG00B8N2KC06,0% DIV PREF GBP0.0001 2016 ,PCTZ,0,"22,000,000.00",,,,,5,SSX3,SQCL,GBX,,,,,,,,,,,,,,,,,, 6-Jun-07,PIK GROUP PJSC ,RU,International Main Market,Standard GDRs,US69338N2062,GDR EACH REPR 1 ORD 'REGS ,PIK ,2163.67437240614,"660,497,344.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 6-Jun-07,PIK GROUP PJSC ,RU,International Main Market,Standard GDRs,US69338N1072,GDR EACH REPR 1 ORD '144A' ,70ZF,2163.67437240614,0.00,Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 23-Jul-12,PINEWOOD GRP PLC ,GB,AIM,,GB00B00KLG25,ORD GBP0.10 ,PWS ,319.19918856,"57,409,926.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 5-Dec-00,PIPEHAWK ,GB,AIM,,GB0003010609,ORD GBP0.01 ,PIP ,1.816128325,"33,020,515.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Dec-03,PIRES INVESTMENTS PLC ,GB,AIM,,GB00BD07SH45,ORD GBP0.0025 ,PIRI ,0.58429115375,"11,400,803.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Sep-04,PITTARDS PLC ,GB,AIM,,GB00BHB1XR83,GBP0.50 ,PTD ,14.0275769,"13,888,690.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Aug-08,PJSC ACRON ,RU,International Main Market,Standard GDRs,US00501T2096,GDR EACH REPR 0.1 SH 'REGS' ,AKRN,1741.61011003199,"405,340,000.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 12-Aug-08,PJSC ACRON ,RU,International Main Market,Standard GDRs,US00501T1007,GDR EACH REPR 0.1 SH '144A' ,34NF,1741.61011003199,0.00,Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 6-Jul-04,PLANT HEALTH CARE ,GB,AIM,,GB00B01JC540,ORD GBP0.01 ,PHC ,30.55730491625,"146,382,299.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 16-Oct-06,PLANT IMPACT PLC ,GB,AIM,,GB00B1F4K366,ORD GBP0.01 ,PIM ,41.6243582925,"78,167,809.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Dec-07,PLASTICS CAPITAL PLC ,GB,AIM,,GB00B289KK20,ORD GBP0.01 ,PLA ,38.1180708,"35,294,510.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Jul-12,PLAYTECH PLC ,IM,UK Main Market,Premium Equity Commercial Companies,IM00B7S9G985,ORD NPV ,PTEC,2900.05579108,"318,337,628.00",Technology,Technology,Software & Computer Services,Software,9537,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Nov-06,PLAZA CENTERS NV ,NL,International Main Market,Premium Equity Commercial Companies,NL0011882741,ORD EUR1 ,PLAZ,17.27611956,"6,855,603.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-Dec-05,PLEXUS HLDGS ,GB,AIM,,GB00B0MDF233,ORD GBP0.01 ,POS ,85.87361274,"105,366,396.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 24-Jul-13,PLUS500 LTD ,IL,AIM,,IL0011284465,ILS0.01 (DI) ,PLUS ,819.728569895,"114,888,377.00",Financials,Financial Services,Financial Services,Investment Services,8777,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 22-Aug-14,PLUTUS POWERGEN PLC ,GB,AIM,,GB00B1GDWB47,ORD GBP0.001 ,PPG ,10.0491117125,"803,928,937.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Jul-07,PME AFRICAN INFRASTRUCTURE OPP PLC ,IM,AIM,,IM00B1WSL611,ORD USD0.01 ,PMEA ,4.21392113768519,"40,973,236.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 15-Jun-10,POLAR CAP GBL HLTHCARE GWTH&INC TST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B6832P16,ORD GBP0.25 ,PCGH,231.16140625,"120,475,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 1-Jul-13,POLAR CAPITAL GLOBAL FINANCIALS TR ,GB,UK Main Market,Standard Shares,GB00B9XQV370,RED SUBSCRIPTION SHS 31/07/17 GBP0.01 ,PCFS,165.95824375,"30,600,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 1-Jul-13,POLAR CAPITAL GLOBAL FINANCIALS TR ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B9XQT119,ORD GBP0.05 ,PCFT,165.95824375,"158,225,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Feb-07,POLAR CAPITAL HLDGS PLC ,GB,AIM,,GB00B1GCLT25,ORD GBP0.025 ,POLR ,281.2695366,"91,025,740.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 16-Dec-96,POLAR CAPITAL TECHNOLOGY TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004220025,GBP0.25 ,PCT ,937.842141775,"128,208,085.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 30-Apr-03,POLEMOS PLC ,GB,AIM,,GB0032654641,ORD GBP0.0001 ,PLMO ,0.8765342918,"1,524,407,464.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Mar-08,POLO RESOURCES LTD ,VG,AIM,,VGG6844A1158,ORD NPV (DI) ,POL ,19.65830597055,"311,789,151.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 2-Nov-11,POLYMETAL INTL PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B6T5S470,ORD NPV ,POLY,4594.82958558,"436,356,086.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 16-Apr-14,POLYPIPE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKRC5K31,ORD GBP0.001 ,PLP ,586.428551595,"199,262,165.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 15-Sep-11,PORT ERIN BIOPHARMA INVESTMENTS LTD,IM,AIM,,IM00B6QH1J21,ORD GBP0.0000001 ,PEBI ,1.735572845,"33,864,836.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Nov-11,PORTA COMMUNICATIONS PLC ,GB,AIM,,GB00B71C7K21,ORD GBP0.10 ,PTCM ,14.30325513125,"279,087,905.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Jun-04,PORTMEIRION GROUP ,GB,AIM,,GB0006957293,ORD GBP0.05 ,PMP ,96.276923,"10,848,104.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Durable Household Products,3722,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Aug-87,PORTUGAL FUND ,GB,UK Main Market,Standard Debt,BE0073116759,IDR'S ,PRT ,0,"3,928,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,CWNR,EIDW,USD,,,,,,,,,,,,,,,,,, 20-Feb-92,PORVAIR PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006963689,ORD GBP0.02 ,PRV ,165.8957508,"42,537,372.00",Oil & Gas,Oil & Gas,Alternative Energy,Renewable Energy Equipment,583,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 17-Mar-14,POUNDLAND GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJ34VB96,ORD GBP0.01 ,PLND,602.5637797725,"268,701,797.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 14-Nov-06,POWERCHIP TECHNOLOGY CORP ,TW,Trading Only,,US73931M7552,GDR EACH REPR 10 ORD 'REGS' (TEMP) ,POSX,0,0.00,,,,,9,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 1-Dec-14,POWERFLUTE OYJ ,FI,AIM,,FI0009015291,ORD NPV(DI) ,POWR ,228.18978798,"296,350,374.00",Basic Materials,Basic Resources,Forestry & Paper,Paper,1737,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 29-Jun-11,POWERHOUSE ENERGY GROUP PLC ,GB,AIM,,GB00B4WQVY43,ORD GBP0.005 ,PHE ,4.69304026825,"605,553,583.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D9026,GLOBAL WATER UCITS GBP ,PSHO,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D9133,GLOBAL CLEAN ENERGY UCITS GBP ,PSBW,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D9240,DYNAMIC US MARKET UCITS GBP ,PSWC,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D8S39,FTSE RAFI US 1000 UCITS GBP ,PSRF,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B3BQ0418,GLOBAL AGRICULTURE UCITS GBP ,PSGA,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23LNQ02,PS FTSE RAFI ALL-WORLD 3000 UCITS GBP ,PSRW,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D8Z06,GLOBAL LISTED PRIVATE EQTY UCITS GBP ,PSSP,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D8X81,FTSE RAFI EUROPE UCITS GBP ,PSRE,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D9570,FTSE RAFI EMERG MKTS UCITS GBP ,PSRM,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23D8Y98,FTSE RAFI EUR MID-SML UCITS GBP ,PSES,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 21-Nov-07,POWERSHARES GLOBAL FUNDS IRELAND ,IE,International Main Market,Premium Equity Open Ended Investment Companies,IE00B23LNN70,FTSE RAFI UK 100 UCITS GBP ,PSRU,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETFL,GBX,,,,,,,,,,,,,,,,,, 30-Jun-11,PPHE HOTEL GROUP LTD ,GG,UK Main Market,Standard Shares,GG00B1Z5FH87,ORD NPV ,PPH ,314.3948522,"42,059,512.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 3-Sep-15,PRAIRIE MINING LTD ,AU,International Main Market,Standard Shares,AU000000PDZ2,ORD NPV (DI) ,PDZ ,17.06052968,"148,352,432.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 4-Jul-14,PREMAITH HEALTH PLC ,GB,AIM,,GB00BN31ZD89,ORD GBP0.10 ,NIPT ,24.24239408125,"228,163,709.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Dec-12,PREMIER AFRICAN MINERALS LTD ,VG,AIM,,VGG7223M1005,ORD NPV (DI) ,PREM ,8.85262910875,"2,082,971,555.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Nov-03,PREMIER ENERGY & WATER TST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0033537902,ORD GBP0.01 ,PEW ,29.4233844,"17,778,480.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Feb-96,PREMIER FARNELL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003318416,ORD GBP0.05 ,PFL ,674.867934425,"369,790,649.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 23-Jul-04,PREMIER FOODS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B7N0K053,ORD GBP0.10 ,PFD ,378.360979815,"749,229,663.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 20-Feb-73,PREMIER OIL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B43G0577,ORD GBP0.125 ,PMO ,375.32186817,"515,906,348.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 11-Feb-15,PREMIER TECHNICAL SERVICES GRP LTD ,GB,AIM,,GB00BV9FPW93,ORD GBP0.01 ,PTSG ,68.27946385,"88,102,534.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Feb-15,PREMIER VETERINARY GROUP PLC ,GB,UK Main Market,Standard Shares,GB00BSZLMS59,ORD GBP0.1 ,PVG ,21.988463675,"14,907,433.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,SSMU,SMEW,GBX,,,,,,,,,,,,,,,,,, 20-Jul-04,PRESIDENT ENERGY PLC ,GB,AIM,,GB00B3DDP128,GBP0.01 ,PPC ,60.411873715,"525,320,641.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 20-Jul-98,PRESS CORP ,MW,PSM,Standard GDRs,US74111E2090,GDR-EACH REPR 20 ORD MWK1(144A) ,PESA,0,0.00,Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 20-Jul-98,PRESS CORP ,MW,PSM,Standard GDRs,US74111E1001,GDR EACH REPR 20 ORD MWK1 (REG'S) ,PESD,0,"2,000,000.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 6-Jun-07,PRESSURE TECHNOLOGIES PLC ,GB,AIM,,GB00B1XFKR57,ORD GBP0.05 ,PRES ,22.07356312,"14,522,081.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Nov-98,PRIMARY HEALTH PROPERTIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYRJ5J14,ORD GBP0.125 ,PHP ,660.71097703,"597,928,486.00",Financials,Real Estate,Real Estate Investment Trusts,Specialty REITs,8675,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 4-Jan-06,PRIME PEOPLE ,GB,AIM,,GB00B4ZG0R74,ORD GBP0.10 ,PRP ,11.657295535,"12,080,099.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 1-Nov-07,PRINCESS PRIVATE EQUITY HLDGS ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B28C2R28,ORD EUR0.001 ,PEY ,465.45583562678,"69,168,031.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON10,EUR,,,,,,,,,,,,,,,,,, 2-Sep-98,PRIVATE & COMMERCIAL FINANCE GROUP ,GB,AIM,,GB0004189378,ORD GBP0.05 ,PCF ,46.14690105,"159,127,245.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Feb-00,PRIVATE EQUITY INVESTOR ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000504034,GBP0.0001 ,PEQ ,37.2751672,"22,454,920.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 26-Jul-07,PRO GLOBAL INSURANCE SOLUTIONS PLC ,GB,AIM,,GB00B1Z5KB73,ORD GBP0.02 ,PROG ,18.886549935,"114,463,939.00",Financials,Insurance,Nonlife Insurance,Reinsurance,8538,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Jun-06,PROACTIS HLDGS ,GB,AIM,,GB00B13GSS58,ORD GBP0.10 ,PHD ,58.845359525,"39,895,159.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Nov-10,PRODUCE INVESTMENTS PLC ,GB,AIM,,GB00B3ZGBY47,ORD GBP0.01 ,PIL ,39.367090125,"26,509,825.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Oct-13,PROGILITY PLC ,GB,AIM,,GB0033422824,ORD GBP0.10 ,PGY ,1.247918,"199,666,880.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 23-Oct-15,PROJECT FINANCE INVESTMENTS LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00BYZX8G32,NPV C ,PRJC,163.39709542,"44,086,270.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Oct-15,PROJECT FINANCE INVESTMENTS LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00BYXX8B08,ORD NPV ,PROJ,163.39709542,"106,000,002.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 7-Jul-06,PROMOS TECHNOLOGIES INC ,TW,Trading Only,,US74343C6093,GDS EACH REPR 10 COM SHS'REGS'(TEMP) ,PRNT,0,"87,500,000.00",,,,,9,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 23-Dec-10,PROPHOTONIX LTD ,US,AIM,,US7434651060,ORD USD0.001 (DI) ,PPIX ,2.4053803075,"83,665,402.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Dec-94,PROSPECT JAPAN FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B011QL44,ORD USD0.001 ,PJF ,70.7721440010616,"93,365,602.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,USD,,,,,,,,,,,,,,,,,, 30-Mar-12,PROSPEX OIL & GAS PLC ,GB,AIM,,GB00BW4NPC58,ORD GBP0.01 ,PXOG ,4.143894622,"285,785,836.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 3-Oct-95,PROTEOME SCIENCES PLC ,GB,AIM,,GB0003104196,ORD GBP0.01 ,PRM ,33.05517614,"227,966,732.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 31-Oct-06,PROTON POWER SYSTEMS PLC ,GB,AIM,,GB00B140Y116,ORD GBP0.01 ,PPS ,29.719806925,"642,590,420.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 31-May-01,PROVEN GROWTH & INCOME VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B5B7YS03,ORD GBP0.016187 ,PGOO,77.58260048,"104,841,352.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Aug-14,PROVEN VCT ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B8GH9P84,ORD GBP0.10 ,PVN ,105.12441465,"113,037,005.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Jun-05,PROVEXIS ,GB,AIM,,GB00B0923P27,ORD GBP0.001 ,PXS ,7.39670640475,"1,740,401,507.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 24-Jun-05,PROVIDENCE RESOURCES ,IE,AIM,,IE00B66B5T26,EUR0.10 ,PVR ,64.248337985,"597,658,958.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 16-Mar-62,PROVIDENT FINANCIAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1Z4ST84,ORD GBP0.207272 ,PFG ,4330.46518308,"144,060,718.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 23-Aug-13,PROXAMA PLC ,GB,AIM,,GB00B2PKZ581,ORD GBP0.01 ,PROX ,8.9622954855,"1,707,103,902.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Dec-78,PRUDENTIAL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007099541,GBP0.05 ,PRU ,34792.86044781,"2,551,731,606.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 12-Dec-01,PUBLIC POWER CORP S.A. ,GR,International Main Market,Standard GDRs,XS0139849052,GDR EACH REPR 1 ORD SHS'144A' ,AG40,0,0.00,Utilities,Utilities,Electricity,Conventional Electricity,7535,MISC,INTM,EUR,,,,,,,,,,,,,,,,,, 12-Dec-01,PUBLIC POWER CORP S.A. ,GR,International Main Market,Standard GDRs,XS0139847601,GDR EACH REPR 1 ORD EUR4.6 REG'S' ,PPCD,0,"35,000,000.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBU,LLLN,EUR,,,,,,,,,,,,,,,,,, 26-Mar-07,PUBLIC SERVICE PROPERTIES INVESTMNT,VG,AIM,,VGG729641511,ORD USD0.01(DI) ,PSPI ,1.10412675,"227,655.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 13-Jun-14,PUMA VCT 10 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BFG3QX28,ORD GBP0.0005 ,PUMX,30.7419617,"34,541,530.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 12-Jun-15,PUMA VCT 11 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BQVBS545,ORD GBP0.0005 ,PU11,36.23296485,"38,139,963.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 14-Jun-16,PUMA VCT 12 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYSJJR68,ORD GBP0.0005 ,PU12,38.636487,"38,636,487.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-May-12,PUMA VCT 8 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B40PR121,ORD GBP0.01 ,PUM8,8.9745887,"12,820,841.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-May-13,PUMA VCT 9 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B73D8H78,ORD GBP0.01 ,PUM9,68.88763989,"85,046,469.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 22-Jul-11,PUMA VCT VII PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B41RMC30,ORD GBP0.01 ,PUMA,8.78080255,"13,508,927.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 27-May-02,PUNCH TAVERNS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BPXRVT80,ORD GBP0.009572 ,PUB ,216.427301025,"221,976,719.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 28-Oct-15,PURECIRCLE LTD ,BM,International Main Market,Premium Equity Commercial Companies,BMG7300G1096,ORD USD0.10 (DI) ,PURE,523.50713376,"172,206,294.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 24-Jun-15,PURETECH HEALTH PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BY2Z0H74,ORD GBP0.01 ,PRTC,352.2344124,"227,248,008.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 23-Dec-14,PURICORE PLC ,GB,AIM,,GB00B3XBCR18,ORD GBP0.10 ,PURI ,10.40310214,"50,135,432.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Dec-15,PURPLEBRICKS GROUP PLC ,GB,AIM,,GB00BYV2MV74,ORD GBP0.01 ,PURP ,313.72140672,"245,094,849.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 27-Nov-13,PV CRYSTALOX SOLAR PLC ,GB,UK Main Market,Standard Shares,GB00BFTDG626,ORD GBP0.052 ,PVCS,24.04184625,"160,278,975.00",Oil & Gas,Oil & Gas,Alternative Energy,Renewable Energy Equipment,583,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 26-Nov-53,PZ CUSSONS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B19Z1432,ORD GBP0.01 ,PZC ,1437.12928025,"428,993,815.00",Consumer Goods,Personal & Household Goods,Personal Goods,Personal Products,3767,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 4-Apr-14,QANNAS INVESTMENTS LTD ,KY,AIM,,KYG7306P1037,USD0.01 (DI) ,QIL ,59.5235936443798,"78,133,409.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 13-May-11,QATAR INVESTMENT FUND PLC ,IM,UK Main Market,Premium Equity Closed Ended Investment Funds,IM00B1Z40704,ORD USD0.01 ,QIF ,185.651783026865,"211,908,762.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,USD,,,,,,,,,,,,,,,,,, 15-Feb-06,QINETIQ GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0WMWD03,ORD GBP0.01 ,QQ. ,1345.69073985,"583,813,770.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 19-Apr-06,QUADRISE FUELS INTERNATIONAL ,GB,AIM,,GB00B11DDB67,ORD GBP0.01 ,QFI ,103.222108155,"809,585,162.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 11-Dec-14,QUANTUM PHARMA PLC ,GB,AIM,,GB00BRTL8Q42,ORD GBP0.1 ,QP. ,97.49999454,"124,999,993.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 6-Nov-14,QUARTIX HLDGS PLC ,GB,AIM,,GB00BLZH2C83,ORD GBP0.01 ,QTX ,201.718617,"47,463,204.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Jun-90,QUARTO GROUP INC ,US,International Main Market,Premium Equity Commercial Companies,US74772E1001,USD0.10 ,QRT ,54.84932175,"19,694,550.00",Consumer Services,Media,Media,Publishing,5557,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 21-May-13,QUIXANT PLC ,GB,AIM,,GB00B99PCP71,ORD GBP0.001 ,QXT ,153.3966777,"65,275,182.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Oct-60,R.E.A.HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002349065,ORD GBP0.25 ,RE. ,142.1358011675,"38,373,348.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 5-Oct-60,R.E.A.HLDGS PLC ,GB,UK Main Market,Standard Shares,GB0007185639,9% CUM PRF GBP1 ,RE.B,142.1358011675,"47,518,151.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 8-Apr-05,RAMBLER METALS & MINING ,GB,AIM,,GB00B06Y3F14,ORD GBP0.01 ,RMM ,19.67937407,"414,302,612.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Apr-14,RAME ENERGY PLC ,JE,AIM,,JE00BBD8GG53,ORD NPV ,RAME ,0,"101,097,444.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Jul-13,RANDALL & QUILTER INVT HLDGS LTD ,BM,AIM,,BMG7371X1065,ORD GBP0.02 (DI) ,RQIH ,77.4730527,"72,067,956.00",Financials,Insurance,Nonlife Insurance,Reinsurance,8538,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Jul-97,RANDGOLD RESOURCES ,JE,UK Main Market,Premium Equity Commercial Companies,GB00B01C3S32,ORD USD0.05 ,RRS ,9319.80143911049,"92,192,895.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 1-Jul-97,RANDGOLD RESOURCES ,JE,UK Main Market,Standard GDRs,US7523443098,ADS EACH REPR 1 ORD USD0.05 ,GOLD,9319.80143911049,"91,818,225.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 23-Oct-07,RANGE RESOURCES ,AU,AIM,,AU000000RRS3,ORD NPV (DI) ,RRL ,40.43137163135,"7,155,994,979.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 1-May-15,RANGER DIRECT LENDING FUND PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BW4NPD65,ORD GBP0.01 ,RDL ,158.583582,"14,848,650.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 1-Aug-16,RANGER DIRECT LENDING ZDP PLC ,GB,UK Main Market,Standard Shares,GB00BD20L056,ZERO DIV PREF GBP0.01 ,RDLZ,31.875,"30,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 7-Oct-96,RANK GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1L5QH97,ORD GBP0.1388888 ,RNK ,843.72500016,"390,613,426.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 14-Aug-13,RAPIDCLOUD INTL PLC ,JE,AIM,,JE00B8FX4C95,ORD NPV ,RCI ,6.257116795,"22,149,086.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 31-Mar-06,RARE EARTH MINERALS PLC ,GB,AIM,,GB00B067JC96,ORD GBP0.0001 ,REM ,64.5067105305,"7,771,892,835.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-May-06,RASMALA PLC ,GB,AIM,,GB00BNG83T81,ORD GBP0.50 ,RMA ,38.85015724,"39,441,784.00",Financials,Banks,Banks,Banks,8355,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jun-92,RATHBONE BROS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002148343,ORD GBP0.05 ,RAT ,831.41783928,"45,161,208.00",Financials,Financial Services,Financial Services,Asset Managers,8771,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,RAVEN RUSSIA LTD ,GG,UK Main Market,,GG00B55K7758,WTS TO SUB FOR ORD ,RUSW,656.81341177,0.00,Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,RAVEN RUSSIA LTD ,GG,UK Main Market,Premium Equity Commercial Companies,GB00B0D5V538,ORD GBP0.01 ,RUS ,656.81341177,"762,465,439.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Mar-09,RAVEN RUSSIA LTD ,GG,UK Main Market,Standard Shares,GG00B55K7B92,CUM RED PREF SHS GBP0.01 ,RUSP,656.81341177,"196,330,692.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 1-Jul-04,REABOLD RESOURCES PLC ,GB,AIM,,GB00B95L0551,ORD GBP0.001 ,RBD ,2.40686922,"320,915,896.00",Consumer Services,Media,Media,Media Agencies,5555,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 31-Oct-08,REACH4ENTERTAINMENT ENTERPRISES PLC,GB,AIM,,GB00B1HLCW86,ORD GBP0.005 ,R4E ,10.268597635,"483,228,124.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Oct-08,REACT ENERGY PLC ,IE,AIM,,IE00BH3XCL94,ORD EUR0.1 ,REAC ,2.817768525,"75,140,494.00",Utilities,Utilities,Electricity,Alternative Electricity,7537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Aug-15,REACT GROUP PLC ,GB,AIM,,GB00BZ2JBG28,ORD GBP0.0025 ,REAT ,3.66631129275,"257,285,003.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Dec-05,REAL ESTATE CREDIT INVESTMENTS PCC ,GG,UK Main Market,Standard Shares,GG00B4ZRT175,RED PREF NPV ,RECP,160.18013685,"44,751,346.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 13-Dec-05,REAL ESTATE CREDIT INVESTMENTS PCC ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0HW5366,ORD NPV ,RECI,160.18013685,"71,668,496.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Jun-04,REAL ESTATE INVESTORS ,GB,AIM,,GB00B45XLP34,ORD GBP0.10 ,RLE ,101.59922591,"186,420,598.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 31-Aug-05,REAL GOOD FOOD PLC ,GB,AIM,,GB0033572867,ORD GBP0.02 ,RGD ,23.9979142775,"70,066,903.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Oct-07,RECKITT BENCKISER GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B24CGK77,ORD GBP0.10 ,RB. ,50376.606128,"685,023,200.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Nondurable Household Products,3724,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 23-Dec-05,RECONSTRUCTION CAPITAL II ,KY,AIM,,KYG741521028,ORD EUR0.01 ,RC2 ,21.8197318701263,"99,918,531.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASX1,AIMP,EUR,,,,,,,,,,,,,,,,,, 3-Dec-07,RECORD PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B28ZPS36,ORD GBP0.00025 ,REC ,54.515022,"221,380,800.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 23-Jun-11,RED EMPEROR RESOURCES NL ,AU,AIM,,AU000000RMP0,ORD NPV(DI) ,RMP ,4.78420623,"425,262,776.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 25-Sep-13,RED LEOPARD HLDGS ,GB,AIM,,GB00B4JXWP66,ORD GBP0.001 ,RLH ,0.49833720185,"586,279,061.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Jul-05,RED ROCK RESOURCES ,GB,AIM,,GB00BYWKBV38,ORD GBP0.0001 ,RRR ,1.986134395,"467,325,740.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Jul-02,RED24 PLC ,GB,AIM,,GB00B297TG43,ORD GBP0.01(REORG) ,REDT ,12.1209635875,"49,983,355.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Dec-13,REDCENTRIC PLC ,GB,AIM,,GB00B7TW1V39,ORD GBP0.001 ,RCN ,259.1927132375,"146,643,685.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 25-Apr-13,REDDE PLC ,GB,AIM,,GB00BLWF0R63,ORD GBP0.001 ,REDD ,577.675789245,"288,477,298.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 11-Oct-12,REDEFINE INTL PLC ,IM,UK Main Market,Premium Equity Commercial Companies,IM00B8BV8G91,ORD GBP0.08 ,RDI ,722.963504466,"1,639,373,026.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 2-Jul-03,REDHALL GROUP ,GB,AIM,,GB0001112035,ORD GBP0.0001 ,RHL ,12.50316775,"200,050,684.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 17-May-94,REDROW ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007282386,ORD GBP0.10 ,RDW ,1373.80676967,"369,799,938.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Sep-06,REDSTONECONNECT PLC ,GB,AIM,,GB00B3CDXQ41,ORD GBP0.001 ,REDS ,32.0632759435,"1,733,150,051.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Apr-06,REDT ENERGY PLC ,JE,AIM,,GB00B11FB960,ORD EUR0.01 ,RED ,38.76763456125,"449,479,821.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Mar-15,REDX PHARMA LTD ,GB,AIM,,GB00BSNB6S51,ORD GBP0.01 ,REDX ,24.79144907,"93,552,638.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-02,REGAL PETROLEUM ,GB,AIM,,GB0031775819,ORD GBP0.05 ,RPT ,10.0039004832,"320,637,836.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 22-Feb-05,REGENCY MINES ,GB,AIM,,GB00BYVT4J08,ORD GBP0.0001 ,RGM ,1.435730571,"319,051,238.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Nov-15,REGIONAL REIT LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYV2ZQ34,ORD NPV ,RGL ,281.0726956,"274,217,264.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 14-Oct-08,REGUS PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B3CGFD43,ORD GBP0.01 ,RGU ,2769.549554124,"924,107,292.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Nov-05,REI AGRO ,IN,International Main Market,Standard GDRs,US74948P3029,GDR EACH REPR 20 ORD SHARE'REGS' ,REA ,0,"3,770,000.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 18-Nov-05,REI AGRO ,IN,International Main Market,Standard GDRs,US74948P1049,GDR EACH REPR 1 SHR 144A ,REAA,0,0.00,Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 27-Sep-04,RELIANCE INDUSTRIES ,IN,Trading Only,,US7594701077,GDR EACH REP 2 INR10 LEVEL 1(BNY)'144A ,RIGD,0,"65,893,333.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 8-Mar-96,RELIANCE INFRASTRUCTURE LTD ,IN,PSM,Standard GDRs,USY097891193,GDR-EACH REPR 3 ORD SHS(REG'S') ,RIFS,0,"2,364,897.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 8-Mar-96,RELIANCE INFRASTRUCTURE LTD ,IN,PSM,Standard GDRs,US75945E1091,GDR EACH REPR 3 ORD SHS(144A) ,RIFA,0,0.00,Utilities,Utilities,Electricity,Conventional Electricity,7535,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 21-Apr-48,RELX PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B2B0DG97,ORD GBP0.1444 ,REL ,15618.76953725,"1,080,883,705.00",Consumer Services,Media,Media,Publishing,5557,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 12-Aug-05,RENEURON GROUP ,GB,AIM,,GB00B0DZML60,ORD GBP0.01 ,RENE ,86.7923491875,"3,156,085,425.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Feb-11,RENEW HLDGS ,GB,AIM,,GB0005359004,ORD GBP0.10 ,RNWH ,216.3848737875,"59,898,927.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 29-Jul-13,RENEWABLES INFRASTRUCTURE GRP(THE) ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BBHX2H91,ORD NPV ,TRIG,563.968660752,"538,652,016.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 16-Nov-84,RENISHAW PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007323586,ORD GBP0.20 ,RSW ,1909.57674708,"72,829,014.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Dec-09,RENOLD ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007325078,ORD GBP0.05 ,RNO ,96.2063541,"225,480,096.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Dec-09,RENOLD ,GB,UK Main Market,Standard Shares,GB0007325417,6% CUM PRF STK GBP1 ,32ID,96.2063541,"580,482.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 21-Jun-05,RENTOKIL INITIAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B082RF11,ORD GBP0.01 ,RTO ,3881.923613811,"1,814,831,049.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Jul-84,REPUBLIC GOLDFIELDS INC ,CA,International Main Market,Standard Shares,CA76045L1004,COM NPV ,RPG ,0,"4,538,304.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 20-Jan-69,RESTAURANT GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0YG1K06,ORD GBP0.28125 ,RTN ,747.92027335,"200,783,966.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Jun-05,RESTORE PLC ,GB,AIM,,GB00B5NR1S72,ORD GBP0.05 ,RST ,372.572058775,"112,051,747.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Mar-15,REVOLUTION BARS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVDPPV41,ORD GBP0.001 ,RBG ,78.75,"50,000,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 10-Jul-12,REVOLYMER PLC ,GB,AIM,,GB00B84LVH87,ORD GBP0.01 ,REVO ,29.56200312,"75,800,008.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-May-14,REX BIONICS PLC ,GB,AIM,,GB00BLRLQM66,ORD GBP0.1 ,RXB ,7.90929629,"25,513,859.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-May-07,RHYTHMONE PLC ,GB,AIM,,GB00B1WBW239,ORD GBP0.01 ,RTHM ,140.94109044,"391,503,029.00",Technology,Technology,Software & Computer Services,Internet,9535,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 5-Apr-62,RICARDO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007370074,ORD GBP0.25 ,RCDO,416.725461,"51,831,525.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 20-Aug-04,RICHLAND RESOURCES LTD ,BM,AIM,,BMG7567C1064,USD0.0003 ,RLD ,4.45221208,"222,610,604.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 16-Jun-98,RICHOUX GROUP PLC ,GB,AIM,,GB00B0NYFG99,ORD GBP0.04 ,RIC ,18.88247046,"92,109,612.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-Nov-08,RICOH CO ,JP,Trading Only,,JP3973400009,NPV ,RICO,0,0.00,,,,,0,SSX4,SXNL,JPY,,,,,,,,,,,,,,,,,, 15-Mar-06,RIGHTMOVE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B2987V85,ORD GBP0.01 ,RMV ,4335.93277542,"105,780,258.00",Consumer Services,Media,Media,Media Agencies,5555,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 28-Jul-66,RIGHTS & ISSUES INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007392078,INC GBP0.25 ,RIII,144.8053466,"9,884,324.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 1-Nov-73,RIO TINTO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007188757,ORD GBP0.10 ,RIO ,31572.29723505,"1,372,112,005.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 1-Aug-88,RIT CAPITAL PARTNERS ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007366395,ORD GBP1 ,RCP ,2676.70515613,"155,351,431.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 26-Jun-14,RIVER & MERCANTILE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLZH7X42,ORD GBP0.003 ,RIV ,172.4002266,"82,095,346.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 2-Dec-14,RIVER AND MERCANTL UK MICRO CAP INV,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BRGCGK06,REDEEMABLE ORD NPV ,RMMC,78.44116536,"68,507,568.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Oct-13,RIVERSTONE ENERGY LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BBHXCL35,RED ORD NPV ,RSE ,933.5047072,"84,480,064.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-Mar-14,RM PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BJT0FF39,ORD GBP0.02 ,RM. ,116.2895342,"83,063,953.00",Technology,Technology,Software & Computer Services,Software,9537,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 6-Jan-14,RM2 INTL SA ,LU,AIM,,LU0994178464,ORD USD0.01 (DI) ,RM2 ,100.076289,"400,305,156.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Jul-00,ROBERT WALTERS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008475088,ORD GBP0.20 ,RWA ,282.3087993,"85,548,121.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Apr-04,ROBINSON ,GB,AIM,,GB00B00K4418,GBP0.005 ,RBN ,20.6940513,"15,918,501.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Aug-05,ROCKHOPPER EXPLORATION ,GB,AIM,,GB00B0FVQX23,ORD GBP0.01 ,RKH ,141.3095258,"455,837,180.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 13-Jan-16,ROCKROSE ENERGY PLC ,GB,UK Main Market,Standard Shares,GB00BYNFCH09,ORD GBP0.2 ,RRE ,4.4375,"10,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 20-May-87,ROLLS-ROYCE HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B63H8491,ORD GBP0.20 ,RR. ,14027.8590914,"1,821,799,882.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 18-Apr-06,ROLTA INDIA ,IN,International Main Market,Standard GDRs,US7757901084,GDR EACH REPR 1 ORD SHR'144A' ,82HP,16.0390322134217,0.00,Technology,Technology,Software & Computer Services,Computer Services,9533,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 18-Apr-06,ROLTA INDIA ,IN,International Main Market,Standard GDRs,US7757902074,GDR EACH REPR 1 ORD SHR'REGS' ,RTI ,16.0390322134217,"16,071,429.00",Technology,Technology,Software & Computer Services,Computer Services,9533,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 13-Apr-11,ROS AGRO PLC ,CY,International Main Market,Standard GDRs,US7496552057,GDR EACH REPR 1/5 ORD REG S ,AGRO,1261.57392,"120,000,000.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 2-Jun-04,ROSE PETROLEUM PLC ,GB,AIM,,GB00B013M672,ORD GBP0.001 ,ROSE ,4.8802962032,"3,050,185,127.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-Jul-06,ROSNEFT OIL CO ,RU,International Main Market,Standard GDRs,US67812M1080,GDR EACH REPR 1 ORD '144A' ,40XT,38202.6640968441,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 19-Jul-06,ROSNEFT OIL CO ,RU,International Main Market,Standard GDRs,US67812M2070,GDR EACH REPR 1 ORD 'REGS' ,ROSN,38202.6640968441,"9,597,430,705.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Mar-73,ROSS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002192606,GBP0.001 ,RGP ,1.301225853,"179,479,428.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 25-Sep-15,ROSSETI PJSC ,RU,International Main Market,Standard GDRs,US69343X2071,GDR EACH REPR 200 ORD REG S UNSPON ,RSTI,0,0.00,Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Sep-15,ROSSETI PJSC ,RU,International Main Market,Standard GDRs,US69343X1081,GDR EACH REPR 200 SHS 144A UNSPON ,MRSA,0,0.00,Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 29-Apr-14,ROSSLYN DATA TECHNOLOGIES PLC ,GB,AIM,,GB00BKX5CP01,ORD GBP0.005 ,RDT ,7.19775233,"75,765,814.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,ROSTELEKOM PJSC ,RU,Trading Only,,US7785291078,ADR EACH REPR 6 SHS LEVEL I ,RKMD,0,"7,526,453.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 30-Aug-05,ROTALA ,GB,AIM,,GB00B1Z2MP60,ORD GBP0.25 ,ROL ,29.06328035,"44,712,739.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 23-Jul-68,ROTORK ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVFNZH21,ORD GBP0.005 ,ROR ,1747.488327641,"869,672,949.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Jul-68,ROTORK ,GB,UK Main Market,Standard Shares,GB0007530149,9.5% CUM PRF GBP1 ,76ID,1747.488327641,"225,266.50",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 3-Mar-08,ROXI PETROLEUM PLC ,GB,AIM,,GB00B1W0VW36,ORD GBP0.01 ,RXP ,85.3641647,"853,641,647.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007548133,11% CUM PRF GBP1 ,91ID,23657.546763955,"500,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,XS0121856859,NON CUM PRF GBP0.01 ,59PQ,23657.546763955,"200,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007548356,SER'A'NON CUM PRF USD0.01(BR) ,93ID,23657.546763955,0.00,Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007592941,SER'B'NON CUM PRF US(0.01(BR) ,01IE,23657.546763955,0.00,Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007548240,SER'A'NON CUM PRF USD0.01(REGD) ,92ID,23657.546763955,"8,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007592834,SER'B'NON CUM PRF USD0.01(REGD) ,99ID,23657.546763955,"8,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B7T77214,ORD GBP1 ,RBS ,23657.546763955,"11,740,717,997.00",Financials,Banks,Banks,Banks,8355,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007595738,SER'C'NON CUM PRF USD0.01(REGD) ,04IE,23657.546763955,"16,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007548026,5.5% CUM PRF GBP1 ,90ID,23657.546763955,"400,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007611030,CATEGORY II NON-CUM PRF USD0.01(BR) ,BL85,23657.546763955,0.00,Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0002213394,SER'1'NON CUM PRF USD0.01 ,91OT,23657.546763955,"1,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007611147,CATEGORY II NON-CUM PRF USD0.01(RG) ,BC35,23657.546763955,"8,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0007610958,EXCH CAPITAL SECS SER'A'USD25(BR) ,BL15,23657.546763955,"8,000,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,XS0108763896,SER'1'NON CUM PRF EUR0.01 (REG'S) ,93OT,23657.546763955,"750,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,EUR,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,XS0108764274,SER'1'NON CUM PRF EUR0.01 '144A' ,94OT,23657.546763955,0.00,Financials,Banks,Banks,Banks,8355,MISL,STBL,EUR,,,,,,,,,,,,,,,,,, 10-Jul-68,ROYAL BANK OF SCOTLAND GROUP PLC ,GB,UK Main Market,Standard Debt,GB0002213840,SER'2'NON CUM PRF USD0.01 ,92OT,23657.546763955,"500,000.00",Financials,Banks,Banks,Banks,8355,MISL,STBL,USD,,,,,,,,,,,,,,,,,, 20-Jul-05,ROYAL DUTCH SHELL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B03MLX29,'A'ORD EUR0.07 ,RDSA,153220.715397295,"4,325,899,655.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 20-Jul-05,ROYAL DUTCH SHELL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B03MM408,ORD EUR0.07 B ,RDSB,153220.715397295,"3,745,486,731.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 15-Oct-13,ROYAL MAIL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BDVZYZ77,ORD GBP0.01 ,RMG ,5140,"1,000,000,000.00",Industrials,Industrial Goods & Services,Industrial Transportation,Delivery Services,2771,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 28-May-93,RPC GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007197378,ORD GBP0.05 ,RPC ,2827.00906631,"325,317,499.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 10-Apr-95,RPS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007594764,ORD GBP0.03 ,RPS ,399.2688476325,"219,077,557.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 13-Oct-93,RSA INSURANCE GROUP PLC ,GB,UK Main Market,Standard Shares,GB0008631391,7.375% CUM IRRD PRF GBP1 ,RSAB,5211.168958817,"125,000,000.00",Financials,Insurance,Nonlife Insurance,Full Line Insurance,8532,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 13-Oct-93,RSA INSURANCE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKKMKR23,ORD GBP1 ,RSA ,5211.168958817,"1,016,569,663.00",Financials,Insurance,Nonlife Insurance,Full Line Insurance,8532,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 15-Jun-98,RTC GROUP PLC ,GB,AIM,,GB0002920121,ORD GBP0.01 ,RTC ,8.43535006,"14,543,707.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Jul-04,RUFFER INVESTMENT CO ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B018CS46,RED PTG PREF SHS GBP0.0001 ,RICA,319.66813872,"143,188,416.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Jan-06,RURELEC ,GB,AIM,,GB00B01XPW41,ORD GBP0.02 ,RUR ,5.7952227565,"565,387,586.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 11-Nov-03,RWS HLDGS ,GB,AIM,,GB00BVFCZV34,ORD GBP0.01 ,RWS ,558.8304435,"215,764,650.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,AF50,GBX,,,,,,,,,,,,,,,,,, 16-Jul-98,RYANAIR HLDGS ,IE,International Main Market,Standard Shares,IE00BYTBXV33,ORD EUR0.006 ,RYA ,13426.3446700534,"1,319,320,802.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,SSMU,SMEU,EUR,,,,,,,,,,,,,,,,,, 6-Oct-61,S & U ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007655037,ORD GBP0.125 ,SUS ,284.264984355,"11,876,197.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Oct-61,S & U ,GB,UK Main Market,Standard Shares,GB0007655474,31.5% CUM PRF 12 1/2P ,47IE,284.264984355,"3,600,756.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 6-Oct-61,S & U ,GB,UK Main Market,Standard Shares,GB0007655250,6% CUM PRF GBP1 ,46IE,284.264984355,"198,350.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 20-Dec-06,SABIEN TECHNOLOGY GROUP PLC ,GB,AIM,,GB00B1FPCD38,ORD GBP0.005 ,SNT ,2.20024335,"44,004,867.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Sep-08,SABLE MINING AFRICA LTD ,VG,AIM,,VGG7762V1076,ORD NPV (DI) ,SBLM ,2.4918153165,"1,107,473,474.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 8-Mar-99,SABMILLER ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004835483,ORD USD0.10 ,SAB ,70039.74568236,"1,592,536,282.00",Consumer Goods,Food & Beverage,Beverages,Brewers,3533,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 8-Apr-11,SACOIL HLDGS LTD ,ZA,AIM,,ZAE000127460,NPV(DI) ,SAC ,30.3526939235,"3,195,020,413.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jun-12,SACOVEN PLC ,JE,AIM,,JE00B7YH8W36,ORD GBP0.001 ,SCN ,7.50000125,"6,000,001.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Apr-14,SAFECHARGE INTL GROUP LTD ,GG,AIM,,GG00BYMK4250,ORD USD0.0001 ,SCH ,404.70662505,"151,575,515.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-Oct-06,SAFELAND PLC ,GB,AIM,,GB0007667008,ORD GBP0.05 ,SAF ,8.4501325,"16,900,265.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 10-Sep-15,SAFESTAY PLC ,GB,AIM,,GB00BKT0J702,ORD GBP0.01 ,SSTY ,24.95171744,"47,984,072.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Mar-07,SAFESTORE HLDGS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1N7Z094,ORD GBP0.01 ,SAFE,765.74038536,"205,678,320.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Dec-13,SAFESTYLE UK PLC ,JE,AIM,,JE00BGP63272,ORD GBP0.01 ,SFE ,229.581215325,"82,806,570.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 29-May-14,SAGA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BLT1Y088,ORD GBP0.01 ,SAGA,2461.84790181,"1,118,005,405.00",Consumer Services,Retail,General Retailers,Specialized Consumer Services,5377,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Jun-13,SAGE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B8C3BL03,ORD GBP0.01051948 ,SGE ,8170.950158,"1,127,027,608.00",Technology,Technology,Software & Computer Services,Software,9537,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 14-Feb-07,SAGICOR FINANCIAL CORP LTD ,BM,International Main Market,Standard Shares,BMG7777B1046,ORD USD0.01 DI ,SFI ,197.92118515,"304,494,131.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 11-Jul-75,SAINSBURY(J) ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B019KW72,ORD GBP0.28 4/7 ,SBRY,4531.802323203,"1,885,893,601.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Jul-87,SAINT-GOBAIN(COMPAGNIE DE) ,FR,International Main Market,Standard Shares,FR0000125007,EUR4 ,COD ,11586.9017109257,"345,851,068.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMU,SMEU,EUR,,,,,,,,,,,,,,,,,, 2-Aug-11,SALT LAKE POTASH LTD ,AU,AIM,,AU000000SO44,NPV (DI) ,SO4 ,37.80629587,"133,827,596.00",Oil & Gas,Oil & Gas,Alternative Energy,Alternative Fuels,587,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Mar-16,SALVARX GROUP PLC ,IM,AIM,,IM00BZ4SS228,ORD GBP0.025 ,SALV ,20.8771393775,"72,933,238.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 28-Jun-95,SAMSUNG ELECTRONICS CO ,KR,Trading Only,,US7960502018,GDR EACH REP 1/2 N/VTG PFD 144A/REG'S ,SMSD,12019.7173182404,0.00,Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 28-Jun-95,SAMSUNG ELECTRONICS CO ,KR,International Main Market,Standard GDRs,US7960508882,GDR EACH REP 1/2 KRW(REG'S'/144A) REGD ,BC94,12019.7173182404,"255,210.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 28-Jun-95,SAMSUNG ELECTRONICS CO ,KR,International Main Market,Standard GDRs,US7960508882,GDR EACH REP 1/2 KRW5000(REG'S'/144A) ,SMSN,12019.7173182404,"21,822,454.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Consumer Electronics,3743,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 29-Sep-08,SAN LEON ENERGY PLC ,IE,AIM,,IE00BWVFTP56,ORD EUR0.01 ,SLE ,31.36809389,"61,809,052.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 9-Dec-96,SANCTUARY HOUSING ,GB,UK Main Market,Standard Debt,GB0007747149,8.375% 1ST MTG DEB STK 2031 ,BB21,0,"110,000,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 16-Dec-04,SANDERSON GROUP ,GB,AIM,,GB00B04X1Q77,ORD GBP0.1 ,SND ,39.219169275,"54,851,985.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 27-Jun-14,SANDITON INVESTMENT TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BMPHJ807,ORD GBP0.01 ,SIT ,53.75,"50,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 1-Apr-15,SANNE GROUP PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00BVRZ8S85,ORD GBP0.01 ,SNN ,510.98,"116,000,000.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Jul-89,SANTANDER UK PLC ,GB,UK Main Market,Standard Debt,XS0060837068,10 1/16% EXCH CAP SEC GBP1000(BR) ,BB08,0,"200,000,000.00",,,,,8,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Jul-89,SANTANDER UK PLC ,GB,UK Main Market,Standard Debt,GB0000272145,10 1/16% EXCH CAP SEC GBP1000(RG) ,BB34,0,0.00,,,,,8,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 11-Oct-04,SAREUM HLDGS PLC ,GB,AIM,,GB00B02RFS12,ORD GBP0.00025 ,SAR ,19.177873913,"2,645,223,988.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-May-15,SATELLITE SOLUTIONS WRLDWIDE GRP ,GB,AIM,,GB00BT6SRD21,ORD GBP0.01 ,SAT ,38.8727396275,"536,175,719.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Aug-14,SAVANNAH PETROLEUM PLC ,GB,AIM,,GB00BP41S218,ORD GBP0.001 ,SAVP ,84.4460949525,"274,621,447.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Nov-10,SAVANNAH RESOURCES PLC ,GB,AIM,,GB00B647W791,ORD GBP0.01 ,SAV ,16.750441575,"413,591,150.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-May-06,SAVILLS ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B135BJ46,ORD GBP0.025 ,SVS ,1014.5289592,"137,098,508.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Services,8637,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-Jul-11,SBERBANK OF RUSSIA ,RU,International Main Market,Standard GDRs,US80585Y3080,ADR EACH REPR 4 ORD SHS(SPONS) ,SBER,37701.0078028877,"5,396,737,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 1-Jul-11,SBERBANK OF RUSSIA ,RU,International Main Market,Standard GDRs,US80585Y4070,GDR EACH REP 4 ORD 144A ,38LF,37701.0078028877,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 30-Jul-10,SCANCELL HLDGS PLC ,GB,AIM,,GB00B63D3314,ORD GBP0.001 ,SCLP ,47.71769246,"261,466,808.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Aug-06,SCAPA GROUP PLC ,GB,AIM,,GB0007281198,ORD GBP0.05 ,SCPA ,353.57888918,"146,106,979.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 29-Apr-63,SCHLUMBERGER ,CW,International Main Market,Standard Shares,AN8068571086,USD0.01 ,SCL ,86436.4966176853,"1,434,212,164.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,SSX3,SQSL,USD,,,,,,,,,,,,,,,,,, 28-Mar-14,SCHOLIUM GROUP PLC ,GB,AIM,,GB00BJYS2173,ORD GBP0.01 ,SCHO ,4.896,"13,600,000.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 20-Nov-95,SCHRODER ASIA PACIFIC FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007918872,ORD GBP0.10 ,SDP ,467.11153776,"139,021,291.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 9-Dec-15,SCHRODER EURPN REAL EST INV TST LTD,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BY7R8K77,ORD GBP0.10 ,SERE,147.96124035,"120,784,686.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 9-Mar-95,SCHRODER INCOME GROWTH FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007915860,ORD GBP0.10 ,SCF ,176.71850191,"68,762,063.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Jul-94,SCHRODER JAPAN GROWTH FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008022849,ORD GBP0.10 ,SJG ,201.25,"125,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Jul-05,SCHRODER ORIENTAL INCOME FUND ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0CRWN59,ORD GBP0.01 ,SOI ,493.87659363,"219,989,574.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 16-Jul-04,SCHRODER REAL ESTATE INVEST TST LT ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B01HM147,ORD SHS NPV ,SREI,300.73777722,"518,513,409.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Mar-94,SCHRODER UK GROWTH FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007913485,ORD GBP0.25 ,SDU ,253.071664,"158,169,790.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-May-83,SCHRODER UK MID CAP FD PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006108418,ORD GBP0.25 ,SCP ,157.40576995,"36,143,690.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Sep-59,SCHRODERS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002405495,VTG SHS GBP1 ,SDR ,7426.8106896,"226,022,400.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 30-Sep-59,SCHRODERS PLC ,GB,UK Main Market,Standard Shares,GB0002395811,NON VTG ORD GBP1 ,SDRC,7426.8106896,"54,535,917.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 8-Jul-08,SCIENCE GROUP PLC ,GB,AIM,,GB00B39GTJ17,ORD GBP0.01 ,SAG ,54.732396,"37,746,480.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 9-Aug-13,SCIENCE IN SPORT PLC ,GB,AIM,,GB00BBPV5329,ORD GBP0.1 ,SIS ,32.63526005,"45,965,155.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Dec-08,SCIENTIFIC DIGITAL IMAGING PLC ,GB,AIM,,GB00B3FBWW43,ORD GBP0.01 ,SDI ,8.819908485,"63,566,908.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Sep-97,SCISYS PLC ,GB,AIM,,GB0001520757,ORD GBP0.25 ,SSY ,26.784480375,"28,956,195.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Feb-10,SCOTGOLD RESOURCES LTD ,AU,AIM,,AU000000SGZ9,NPV (DI) ,SGZ ,8.57727098325,"1,106,744,643.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Feb-53,SCOTTISH AMERICAN INVESTMENT CO ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007873697,ORD GBP0.25 ,SCAM,396.02831957,"132,450,943.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 26-Feb-53,SCOTTISH AMERICAN INVESTMENT CO ,GB,UK Main Market,Standard Debt,GB0007785453,8% DEB STK 2022 ,01KG,396.02831957,"80,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 20-Aug-52,SCOTTISH INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0007826653,4.25% PERP DEB STK ,45IF,690.860982,"700,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 20-Aug-52,SCOTTISH INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007826091,ORD GBP0.25 ,SCIN,690.860982,"98,694,426.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-Aug-52,SCOTTISH INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0007826547,5% PERP DEB STK ,44IF,690.860982,"1,009,490.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 20-Aug-52,SCOTTISH INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0007826323,4% PERP DEB STK ,42IF,690.860982,"350,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 27-Jun-86,SCOTTISH MORTGAGE INVESTMENT TST ,GB,UK Main Market,Standard Debt,GB0007837650,4 1/2% IRRD DEB STK ,50IF,3776.130531075,"675,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 27-Jun-86,SCOTTISH MORTGAGE INVESTMENT TST ,GB,UK Main Market,Standard Debt,GB0007867426,12% STEPPED INT DEB STK 2026 ,82JS,3776.130531075,"50,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 27-Jun-86,SCOTTISH MORTGAGE INVESTMENT TST ,GB,UK Main Market,Standard Debt,GB0007837767,8%-14% STEPPED INT DEB STK 2020 ,51IF,3776.130531075,"20,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 27-Jun-86,SCOTTISH MORTGAGE INVESTMENT TST ,GB,UK Main Market,Standard Debt,GB0002360989,6.875% DEB STK 2023 ,BD78,3776.130531075,"75,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 27-Jun-86,SCOTTISH MORTGAGE INVESTMENT TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BLDYK618,ORD GBP0.05 ,SMT ,3776.130531075,"1,220,074,485.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 29-Mar-95,SCOTTISH ORIENTAL SMALLER COS TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007836132,ORD GBP0.25 ,SST ,295.2711609925,"32,635,663.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 28-Jan-15,SCS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BRF0TJ56,ORD GBP0.001 ,SCS ,75.75,"40,000,000.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 7-Dec-99,SDL ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009376368,ORD GBP0.01 ,SDL ,361.1488705275,"80,568,627.00",Technology,Technology,Software & Computer Services,Software,9537,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 20-May-16,SDX ENERGY INC ,CA,AIM,,CA78410A1075,NPV (DI) ,SDX ,19.362146235,"79,843,902.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Nov-15,SEALAND CAPITAL GALAXY LTD ,KY,International Main Market,,KYG7948E1026,ORD GBP0.0001 DI ,SCGL,0,"30,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 26-Jul-16,SEC SPA ,IT,AIM,,IT0005200453,ORD NPV(CDI) ,SECG ,18.760731625,"12,221,975.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Jun-14,SECURE INCOME REIT PLC ,GB,AIM,,GB00BLMQ9L68,ORD GBP0.1 ,SIR ,484.22413941,"180,344,186.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Aug-07,SECURE PROPERTY DEV & INV PLC ,CY,AIM,,CY0102102213,ORD EUR0.01 (DI) ,SPDI ,14.40235584,"90,014,724.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 2-Nov-11,SECURE TRUST BANK PLC ,GB,AIM,,GB00B6TKHP66,ORD GBP0.40 ,STB ,403.13237104,"18,191,894.00",Financials,Banks,Banks,Banks,8355,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 28-Jun-05,SECURITIES TRUST OF SCOTLAND. ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B09G3N23,RED ORD GBP0.01 ,STS ,161.9370782,"106,188,248.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 1-Dec-05,SEEING MACHINES ,AU,AIM,,AU0000XINAJ0,ORD NPV ,SEE ,48.12949644,"1,203,237,411.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Dec-49,SEGRO PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B5ZN1N88,ORD GBP0.10 ,SGRO,3409.130819204,"752,235,397.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 4-Apr-96,SENECA GLOBAL INCOME & GROWTH TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008769993,ORD GBP0.25 ,SIGT,61.5401368425,"39,896,361.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 16-Feb-47,SENIOR PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007958233,GBP0.10 ,SNR ,974.083400985,"412,572,385.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Aerospace,2713,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 10-Nov-15,SENTERRA ENERGY PLC ,GB,UK Main Market,,GB00BYX0MB92,ORD GBP0.01 ,SEN ,0,"27,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 14-Apr-14,SEPLAT PETROLEUM DEVT CO PLC ,NG,International Main Market,Standard Shares,NGSEPLAT0008,ORD NGN0.5 (DI) ,SEPL,414.98273475,"553,310,313.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 3-Aug-07,SEPURA PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1ZBLD47,ORD GBP0.0005 ,SEPU,177.60549702,"362,460,198.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 3-Mar-15,SEQUOIA ECONOMIC INFRAST INC FD LTD,GG,UK Main Market,Standard Shares,GG00BYTNQV04,ORD NPV C ,SEQC,529.5659105,"175,171,834.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 3-Mar-15,SEQUOIA ECONOMIC INFRAST INC FD LTD,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BV54HY67,ORD NPV ,SEQI,529.5659105,"302,771,724.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-May-05,SERABI GOLD PLC ,GB,AIM,,GB00B4T0YL77,ORD GBP 0.005 ,SRB ,36.68184303,"698,701,772.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-May-88,SERCO GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007973794,ORD GBP0.02 ,SRP ,1406.92432768,"1,099,159,631.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Dec-05,SERICA ENERGY ,GB,AIM,,GB00B0CY5V57,ORD USD0.10 ,SQZ ,40.5406524,"263,679,040.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM8,GBX,,,,,,,,,,,,,,,,,, 2-Dec-13,SERVELEC GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BFRBTP86,ORD GBP0.18 ,SERV,191.8971647275,"68,351,617.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 26-Sep-08,SERVICEPOWER TECHNOLOGIES PLC ,GB,AIM,,GB0003831095,ORD GBP0.01 ,SVR ,6.51170406,"217,056,802.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Dec-04,SERVISION ,GB,AIM,,GB00B0586C20,ORD GBP0.01 ,SEV ,2.88262943625,"121,373,871.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Jun-07,SERVOCA PLC ,GB,AIM,,GB00B1XHM086,ORD GBP0.01 ,SVCA ,28.254589425,"125,575,953.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Jun-95,SEVERFIELD PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B27YGJ97,ORD GBP0.025 ,SFR ,49.17737118,"88,607,876.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Dec-89,SEVERN TRENT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1FH8J72,ORD GBP0.9789 ,SVT ,5555.54525154,"233,328,234.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 14-Nov-06,SEVERSTAL PJSC ,RU,International Main Market,Standard GDRs,US8181501045,GDR EACH REPR 1 ORD '144A' ,50AW,7511.5060639353,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 14-Nov-06,SEVERSTAL PJSC ,RU,International Main Market,Standard GDRs,US8181503025,GDR EACH REPR 1 ORD SHARE'REGS' ,SVST,7511.5060639353,"837,718,660.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 20-Oct-87,SHAFTESBURY PLC ,GB,UK Main Market,Standard Debt,GB0007991150,8.5% 1ST MTG DEB STK 31/3/24 ,09IG,2690.44197615,"132,000,000.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 20-Oct-87,SHAFTESBURY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007990962,ORD GBP0.25 ,SHB ,2690.44197615,"278,081,858.00",Financials,Real Estate,Real Estate Investment Trusts,Retail REITs,8672,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Feb-88,SHANKS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007995243,ORD GBP0.10 ,SKS ,406.7786423,"396,857,212.00",Industrials,Industrial Goods & Services,Support Services,Waste & Disposal Services,2799,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 11-Jul-05,SHANTA GOLD LTD ,GG,AIM,,GB00B0CGR828,ORD GBP0.0001 ,SHG ,47.026720785,"561,513,084.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-May-08,SHARE PLC ,GB,AIM,,GB0001977866,ORD GBP0.005 ,SHRE ,41.40903243,"142,789,767.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Apr-15,SHAWBROOK GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BWDPMF43,ORD GBP0.01 ,SHAW,576.25,"250,000,000.00",Financials,Banks,Banks,Banks,8355,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 7-May-13,SHERBORNE INVESTORS(GUERNSEY) B LTD,GG,UK Main Market,,GG00B883XC99,ORD NPV A ,SIGB,247.365,"207,000,000.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 26-Feb-16,SHIELD THERAPEUTICS PLC ,GB,AIM,,GB00BD97Z526,WTS (TO SUB FOR ORD) ,STXW ,173.11327812,"11,666,658.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Feb-16,SHIELD THERAPEUTICS PLC ,GB,AIM,,GB00BYV81293,ORD GBP0.015 ,STX ,173.11327812,"108,135,416.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Jul-09,SHIN KONG FINANCIAL HLDG CO ,TW,Trading Only,,US82455T2033,GDR EACH REP 25 ORD REG'S ,SKFS,0,"42,088,000.00",Financials,Insurance,Life Insurance,Life Insurance,8575,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 23-May-08,SHIRE PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B2QKY057,ORD GBP0.05 ,SHP ,42924.37048641,"901,583,081.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 26-Jan-72,SHIRES INCOME ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008052507,ORD GBP0.50 ,SHRS,66.748,"29,600,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 23-May-14,SHOE ZONE PLC ,GB,AIM,,GB00BLTVCF91,ORD GBP0.01 ,SHOE ,87.5,"50,000,000.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Mar-10,SHORE CAPITAL GROUP LTD ,GG,AIM,,GG00BGCZJ741,ORD NPV ,SGR ,54.9731,"24,164,000.00",Financials,Financial Services,Financial Services,Investment Services,8777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Aug-05,SIERRA RUTILE LTD ,VG,AIM,,VGG812641063,COM NPV ,SRX ,199.527607685,"574,180,166.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-May-89,SIG ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008025412,ORD GBP0.10 ,SHI ,739.107304443,"590,813,193.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Apr-00,SIGMA CAPITAL GROUP PLC ,GB,AIM,,GB0004225073,ORD GBP0.01 ,SGM ,81.38573634,"91,961,284.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Aug-05,SIGMAROC PLC ,GB,AIM,,GB00BDBY9264,ORD GBP0.001 ,SRC ,1.082222972,"270,555,743.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Jan-10,SILENCE THERAPEUTICS PLC ,GB,AIM,,GB00B9GTXM62,ORD GBP0.05 ,SLN ,74.33872956,"69,801,624.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 9-Nov-15,SILVER FALCON PLC ,GB,UK Main Market,,GB00BYX3WZ24,GBP0.01 ,SILF,0,"64,900,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 2-Nov-06,SIMIGON LTD ,IL,AIM,,IL0010991185,ORD ILS0.01 (DI) ,SIM ,10.963527895,"50,993,153.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Jun-11,SINCLAIR PHARMA PLC ,GB,AIM,,GB0033856740,GBP0.01 ,SPH ,152.34651005,"497,457,992.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 1-Aug-05,SIRIUS MINERALS PLC ,GB,AIM,,GB00B0DG3H29,ORD GBP0.0025 ,SXX ,926.507481075,"2,246,078,742.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AMSM,AE50,GBX,,,,,,,,,,,,,,,,,, 24-Mar-11,SIRIUS PETROLEUM PLC ,GB,AIM,,GB00B03VVN93,ORD GBP0.0025 ,SRSP ,8.15883616125,"2,175,689,643.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-May-07,SIRIUS REAL ESTATE LD ,GG,AIM,,GG00B1W3VF54,ORD NPV ,SRE ,359.526000829857,"831,254,467.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,EUR,,,,,,,,,,,,,,,,,, 14-Feb-05,SISTEMA PJSFC ,RU,International Main Market,Standard GDRs,US48122U1051,GDR EACH REPR 20 ORD'144A' ,SSAA,3120.73849349999,"11,945,000.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 14-Feb-05,SISTEMA PJSFC ,RU,International Main Market,Standard GDRs,US48122U2042,GDR EACH REPR 20 ORD REG'S' ,SSA ,3120.73849349999,"482,500,000.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 3-Apr-95,SK TELECOM ,KR,International Main Market,Standard GDRs,US78440P1084,ADR EACH REP 1/9 KRW500(CIT)SPONS ,SKMD,989.517988150098,"56,970,090.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 7-Oct-10,SKIL PORTS & LOGISTICS LTD ,GG,AIM,,GG00B53M7D91,ORD NPV ,SPL ,10.34,"44,000,000.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Aug-92,SKIPTON BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0004440623,8.50% PERM INT BEARING SHS ,SBSA,0,"15,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 3-Aug-92,SKIPTON BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,GB0008194119,12.875% PERM INT BEARING SHS GBP1000 RG ,SKIP,0,"25,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 15-Dec-94,SKY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001411924,ORD GBP0.50 ,SKY ,14727.94785531,"1,734,740,619.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 24-May-05,SLINGSBY(H.C.) ,GB,AIM,,GB0008138009,ORD GBP0.25 ,SLNG ,1.25,"1,000,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Jul-11,SMART METERING SYSTEMS PLC ,GB,AIM,,GB00B4X1RC86,ORD GBP0.01 ,SMS ,459.937178175,"86,373,179.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,SMART(J.)& CO(CONTRACTORS) ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B76BK617,ORD GBP0.02 ,SMJ ,47.338400125,"46,183,805.00",Industrials,Construction & Materials,Construction & Materials,Heavy Construction,2357,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Sep-15,SME LOAN FUND PLC(THE) ,GB,UK Main Market,,GB00BYMK5S87,ORD GBP0.01 ,SMEF,100.102165,"105,370,700.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,GBX,,,,,,,,,,,,,,,,,, 13-Aug-51,SMITH & NEPHEW ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009223206,ORD USD0.20 ,SN. ,10621.55636345,"864,243,805.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 2-Jul-12,SMITH(DS) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008220112,ORD GBP0.10 ,SMDS,3786.697519645,"926,976,137.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Dec-50,SMITHS GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1WY2338,ORD GBP0.375 ,SMIN,5265.55309995,"392,658,695.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 20-Mar-07,SMURFIT KAPPA GROUP PLC ,IE,International Main Market,Premium Equity Commercial Companies,IE00B1RR8406,ORD EUR0.001 ,SKG ,4195.94295055,"222,596,443.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 1-May-12,SNOOZEBOX HLDGS PLC ,GB,AIM,,GB00B7D66J40,ORD GBP0.01 ,ZZZ ,2.11049500805,"295,174,127.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Jul-14,SOCIETATEA ENERGETICA ELECTRICA SA ,RO,International Main Market,Standard GDRs,US83367Y2072,GDR EACH REPR 4 SHS REG S ,ELSA,465.701454891574,"44,297,186.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 12-Nov-13,SOCIETATEA NATL DE GAZE N ROMGAZ SA,RO,International Main Market,Standard GDRs,US83367U1060,GDR EACH REPR 1 SHARE SPON 144A ,SNG1,173.237270733119,0.00,Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 12-Nov-13,SOCIETATEA NATL DE GAZE N ROMGAZ SA,RO,International Main Market,Standard GDRs,US83367U2050,GDR EACH REPR 1 SHARE SPON REGS ,SNGR,173.237270733119,"38,542,240.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 29-May-97,SOCO INTERNATIONAL ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B572ZV91,ORD GBP0.05 ,SIA ,485.3043687375,"331,832,047.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSMM,SSC1,GBX,,,,,,,,,,,,,,,,,, 18-Nov-15,SOFTCAT PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYZDVK82,ORD GBP0.0005 ,SCT ,652.427302615,"197,406,143.00",Technology,Technology,Software & Computer Services,Computer Services,9533,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Feb-06,SOLGOLD PLC ,GB,AIM,,GB00B0WD0R35,ORD GBP0.01 ,SOLG ,78.6500735,"1,084,828,600.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 26-Jun-96,SOLID STATE PLC ,GB,AIM,,GB0008237132,ORD GBP0.05 ,SSP ,31.4519779,"8,443,484.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 4-Dec-96,SOLIDERE ,LB,International Main Market,Standard GDRs,US5223861015,GDS EACH REP 1 USD10'A'(144A) ,BQ30,67.6724705999998,0.00,,,,,8733,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 4-Dec-96,SOLIDERE ,LB,International Main Market,Standard GDRs,US5223862005,GDS EACH REP 1 USD10'A'(REG S) ,SLED,67.6724705999998,"9,870,000.00",,,,,8733,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 12-Apr-07,SOLO OIL PLC ,GB,AIM,,GB00B1TYBN97,ORD GBP0.0001 ,SOLO ,16.74825462735,"5,876,580,571.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Nov-06,SOMERO ENTERPRISE INC ,US,AIM,,USU834501038,USD0.001(DI) ,SOM ,89.0550549,"56,542,892.00",Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Sep-96,SOPHEON ,GB,AIM,,GB00BSZM1369,ORD GBP0.20 ,SPE ,22.40521875,"7,286,250.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 1-Jul-15,SOPHOS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYZFZ918,ORD GBP0.03 ,SOPH,1132.2,"450,000,000.00",Technology,Technology,Software & Computer Services,Software,9537,STMM,F25T,GBX,,,,,,,,,,,,,,,,,, 13-Jul-06,SOUND ENERGY PLC ,GB,AIM,,GB00B90XFF12,ORD GBP0.01 ,SOU ,313.57570802,"505,767,271.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Nov-89,SOURCE BIOSCIENCE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009739649,ORD GBP0.02 ,SBS ,61.841838155,"348,404,722.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 7-Sep-09,SOURCE MARKETS PLC ,IE,International Main Market,,IE00B60SWV01,FTSE 250 UCITS ETF A GBP ,S250,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,GBX,,,,,,,,,,,,,,,,,, 7-Sep-09,SOURCE MARKETS PLC ,IE,International Main Market,,IE00B60SWT88,FTSE 100 UCITS ETF A GBP ,S100,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,GBX,,,,,,,,,,,,,,,,,, 7-Sep-09,SOURCE MARKETS PLC ,IE,International Main Market,,IE00B5NDLN01,RDX UCITS ETF A USD ,RDXS,0,0.00,Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,ETFS,ETEU,USD,,,,,,,,,,,,,,,,,, 26-Oct-06,SOUTH AFRICAN PROPERTY OPPS PLC ,IM,AIM,,GB00B16GQJ90,ORD GBP0.01 ,SAPO ,4.04903265,"62,292,810.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0009518852,4% PERP DEB STK(FMLY WEST KENT) ,55IP,0,"13,500.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005895437,10% RED DEB STK 2013/17 ,56HO,0,"3,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005882278,4% PERP DEB STK ,49HO,0,"21,900.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005882492,5% PERP DEB STK ,50HO,0,"22,100.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005886147,11% RED DEB STK 2012/16 ,52HO,0,"3,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0009519595,3 1/2% PERP DEB STK(FMLY WEST KENT) ,80NI,0,"40,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005888077,5 1/2% PERP DEB STK(FMLY MID SOUTHERN) ,82NI,0,"3,525.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0003007779,4% IRRD DEB(FMLY EASTBOURNE) ,84NI,0,"5,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005884654,3 1/2% PERP DEB STK(FMLY MID SOUTHERN) ,51HO,0,"320,476.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005887889,5% PERP DEB STK(FMLY MID SOUTHERN) ,53HO,0,"179,939.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005888291,6% PERP DEB STK(FMLY MID SOUTHERN) ,83NI,0,"61,556.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 12-Sep-86,SOUTH EAST WATER ,GB,UK Main Market,Standard Debt,GB0005888416,4% PERP DEB STK(FMLY MID SOUTHERN) ,81NI,0,"47,155.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,SOUTH STAFFORDSHIRE WATER ,GB,UK Main Market,Standard Debt,GB0008267675,4% PERM DEB STK ,42IH,0,"627,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,SOUTH STAFFORDSHIRE WATER ,GB,UK Main Market,Standard Debt,GB0008267899,5% PERM DEB STK ,43IH,0,"500,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 28-Jun-02,SOUTH STAFFORDSHIRE WATER ,GB,UK Main Market,Standard Debt,GB0008268640,3 1/2% PERM DEB STK ,44IH,0,"476,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 26-May-15,SOUTH32 LTD ,AU,International Main Market,Standard Shares,AU000000S320,ORD NPV (DI) ,S32 ,5856.1391911,"5,323,762,901.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Aluminum,1753,SSMU,SMEU,GBX,,,,,,,,,,,,,,,,,, 28-Jul-11,SOVEREIGN MINES OF AFRICA PLC ,GB,AIM,,GB00B3P3XP06,ORD GBP0.0001 ,SMA ,3.2282214375,"860,859,050.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 31-Dec-04,SPACEANDPEOPLE ,GB,AIM,,GB00B058DS79,ORD GBP0.01 ,SAL ,7.22012265,"19,513,845.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 12-Jul-04,SPECIALIST INVESTMENT PROP PLC ,IM,AIM,,IM00BZ97VJ22,ORD GBP0.01 ,SIPP ,0.4546565925,"2,491,269.00",Consumer Services,Travel & Leisure,Travel & Leisure,Hotels,5753,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Jul-11,SPECTRA SYSTEMS CORP ,US,AIM,,US84756T1060,ORD USD0.01 ,SPSY ,11.5752999475,"45,251,370.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASX1,AIMP,GBX,,,,,,,,,,,,,,,,,, 25-Jul-11,SPECTRA SYSTEMS CORP ,US,AIM,,USU8457D1091,ORD USD0.01 DI REG S ,SPSC ,11.5752999475,"4,640,894.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 29-Nov-88,SPECTRIS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003308607,ORD GBP0.05 ,SXS ,2270.7212352,"117,289,320.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Oct-93,SPEEDY HIRE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0000163088,ORD GBP0.05 ,SDY ,198.053148825,"517,786,010.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 17-Nov-11,SPHERE MEDICAL HLDG PLC ,GB,AIM,,GB00B551W951,ORD GBP0.01 ,SPHR ,15.41616858,"141,757,872.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 3-Jun-13,SPIRAX-SARCO ENGINEERING ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BWFGQN14,ORD GBP0.269230769 ,SPX ,3177.2486823,"73,309,845.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Jul-14,SPIRE HEALTHCARE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BNLPYF73,ORD GBP0.01 ,SPI ,1398.971891808,"401,081,391.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Jul-55,SPIRENT COMMUNICATIONS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004726096,ORD GBP0.03333 ,SPT ,521.2578896,"613,244,576.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-Jul-07,SPITFIRE OIL LTD ,BM,AIM,,BMG836741048,ORD USD0.0005 (DI) ,SRO ,0.80887503125,"25,884,001.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Dec-07,SPORTECH ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B28ZPV64,ORD GBP0.50 ,SPO ,135.19100536,"198,810,302.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 2-Mar-07,SPORTS DIRECT INTL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1QH8P22,ORD GBP0.10 ,SPD ,1773.767807718,"596,625,566.00",Consumer Services,Retail,General Retailers,Apparel Retailers,5371,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Apr-14,SPRUE AEGIS ,GB,AIM,,GB0030508757,GBP0.02 ,SPRP ,74.514968125,"45,855,365.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jul-14,SQN ASSET FINANCE INCOME FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BN56JF17,ORD NPV ,SQN ,400.688405515,"178,985,507.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 14-Jul-14,SQN ASSET FINANCE INCOME FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BZ184P04,ORD RED NPV C ,SQNC,400.688405515,"180,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 20-Sep-05,SQS SOFTWARE QUALITY SYSTEMS AG ,DE,AIM,,DE0005493514,ORD EUR1 ,SQS ,174.53264967,"31,675,617.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 2-Nov-05,SRT MARINE SYSTEMS PLC ,GB,AIM,,GB00B0M8KM36,ORD GBP0.001 ,SRT ,63.04484005,"127,685,752.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Jun-91,SSE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007908733,ORD GBP0.50 ,SSE ,15263.19287808,"1,014,839,952.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 15-Jul-14,SSP GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BNGWY422,ORD GBP0.01 ,SSPG,1548.024850086,"474,999,954.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 3-Oct-85,ST IVES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007689002,ORD GBP0.10 ,SIV ,163.465095975,"134,816,574.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 27-Aug-96,ST JAMES'S PLACE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007669376,ORD GBP0.15 ,STJ ,4914.35760536,"500,443,748.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 14-Feb-98,ST LAWRENCE & OTTAWA RAILWAY CO ,CA,International Main Market,Standard Debt,GB0007691073,4% STLG 1ST MTG BDS(BR) ,62IE,0,"200,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 16-Apr-07,ST PETER PORT CAPITAL LTD ,GG,AIM,,GG00B1V4NS68,ORD NPV ,SPPC ,8.712909875,"69,703,279.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Apr-86,ST.MODWEN PROPERTIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007291015,ORD GBP0.10 ,SMP ,635.011939656,"221,876,988.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 23-Jul-01,STADIUM GROUP PLC ,GB,AIM,,GB0008375098,ORD GBP0.05 ,SDM ,29.20544396,"37,929,148.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 8-Dec-04,STAFFLINE GROUP PLC ,GB,AIM,,GB00B040L800,ORD GBP0.10 ,STAF ,281.54924652,"27,388,059.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 19-Oct-98,STAGECOACH GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B6YTLS95,ORD GBP0.0054824 ,SGC ,1303.24001256,"572,601,060.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 2-Feb-70,STANDARD CHARTERED ,GB,UK Main Market,Standard Debt,GB0008401324,7.375% NON-CUM IRRD PRF GBP1 ,STAB,16094.86559862,"96,035,000.00",Financials,Banks,Banks,Banks,8355,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 2-Feb-70,STANDARD CHARTERED ,GB,UK Main Market,Standard Debt,GB0008399700,8.25% NON-CUM IRRD PRF GBP1 ,STAC,16094.86559862,"99,250,000.00",Financials,Banks,Banks,Banks,8355,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 2-Feb-70,STANDARD CHARTERED ,GB,UK Main Market,Premium Equity Commercial Companies,GB0004082847,ORD USD0.50 ,STAN,16094.86559862,"2,506,988,411.00",Financials,Banks,Banks,Banks,8355,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 14-Nov-91,STANDARD LIFE EQUITY INCOME TST ,GB,UK Main Market,Standard Shares,GB00B3NWXM64,SUBSCRIPTION SHS GBP0.0001 ,SLES,174.12920510875,"7,948,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 14-Nov-91,STANDARD LIFE EQUITY INCOME TST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0006039597,ORD GBP 0.25 ,SLET,174.12920510875,"41,009,753.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 29-May-01,STANDARD LIFE EUROPN PRIVT EQTY TST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0030474687,ORD GBP0.002 ,SEP ,385.41752912,"155,410,294.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 19-Dec-03,STANDARD LIFE INVEST PROP INC TRUST,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0033875286,ORD GBP0.01 ,SLI ,290.459182505,"359,701,774.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 10-Jul-06,STANDARD LIFE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BVFD7Q58,ORD GBP0.1222222 ,SL. ,7177.170114855,"1,969,045,299.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 19-Aug-93,STANDARD LIFE UK SMALLER CO TRUST ,GB,UK Main Market,Standard Debt,GB00B3YX0W77,3.5% CNV UNSEC LOAN STK 31/03/18 GBP1 ,SLSC,225.88570752,"25,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 19-Aug-93,STANDARD LIFE UK SMALLER CO TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0002959582,ORD GBP0.25 ,SLS ,225.88570752,"64,172,076.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 19-Sep-00,STANLEY GIBBONS GROUP PLC ,JE,AIM,,GB0009628438,ORD GBP0.01 ,SGI ,25.3398095625,"177,823,225.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Feb-13,STARCOM PLC ,JE,AIM,,JE00B8WSDY21,ORD NPV ,STAR ,5.6126725425,"154,832,346.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Sep-00,STARVEST ,GB,AIM,,GB0009619817,ORD GBP0.01 ,SVE ,0.78436892,"39,218,446.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Dec-12,STARWOOD EUROPEAN REAL EST FIN LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B79WC100,ORD NPV ,SWEF,896.008754355,"835,439,398.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Oct-96,STATE BANK OF INDIA ,IN,PSM,Standard GDRs,US8565522039,GDR-EACH REPR 10 EQT SHS INR1(REG S) ,SBID,0,"26,145,000.00",Financials,Banks,Banks,Banks,8355,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 11-Oct-96,STATE BANK OF INDIA ,IN,PSM,Standard GDRs,US8565521049,GDR-EACH REPR 10 EQT SHS OF INR1(144A) ,SBIA,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 16-Jun-03,STATPRO GROUP ,GB,AIM,,GB0006300213,ORD GBP0.01 ,SOG ,68.897583,"67,546,650.00",Technology,Technology,Software & Computer Services,Software,9537,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Mar-96,STEEL AUTHORITY OF INDIA ,IN,PSM,Standard GDRs,US8580552052,GDR EACH REP 15 INR10(REG'S')(CIT) ,SAUD,44.0357861879999,"9,633,900.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 15-Mar-96,STEEL AUTHORITY OF INDIA ,IN,PSM,Standard GDRs,US8580551062,GDR EACH REP 15 INR10(144A)(CIT) ,SAUA,44.0357861879999,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 22-Feb-10,STELLAR DIAMONDS PLC ,GB,AIM,,GB00BYZ5QT80,ORD GBP0.01 ,STEL ,0,"37,802,476.00",Basic Materials,Basic Resources,Mining,Diamonds & Gemstones,1773,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Dec-00,STELLAR RESOURCES PLC ,GB,AIM,,GB0002673332,ORD GBP0.0001 ,STG ,2.11489629215,"1,458,549,167.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Sep-05,STEPPE CEMENT ,MY,AIM,,MYA004433001,ORD NPV ,STCM ,52.56,"219,000,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Oct-02,STERLING ENERGY ,GB,AIM,,GB00B4X3Q493,ORD GBP0.40 ,SEY ,32.1828273,"220,053,520.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 25-Mar-60,STEWART & WIGHT ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008556192,ORD GBP0.05 ,STE ,7.60100245,"1,567,217.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 16-Nov-05,STHREE PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B0KM9T71,ORD GBP0.01 ,STHR,288.78886296,"116,918,568.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 12-Sep-49,STILFONTEIN GOLD MINING CO ,ZA,International Main Market,,ZAE000007118,ZAR0.50 ,STIL,0,"13,062,920.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 30-Aug-00,STILO INTERNATIONAL ,GB,AIM,,GB0009597484,ORD GBP0.01 ,STL ,8.7846776,"109,808,470.00",Technology,Technology,Software & Computer Services,Internet,9535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Mar-07,STM GROUP PLC ,IM,AIM,,IM00B1S9KY98,ORD GBP0.001 ,STM ,24.95139654,"59,408,087.00",Financials,Financial Services,Financial Services,Asset Managers,8771,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Sep-07,STOBART GROUP LTD ,GG,UK Main Market,Premium Equity Commercial Companies,GB00B03HDJ73,ORD GBP0.10 ,STOB,511.4359759,"322,672,540.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 25-Oct-13,STOCK SPIRITS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BF5SDZ96,ORD GBP0.10 ,STCK,338.5,"200,000,000.00",Consumer Goods,Food & Beverage,Beverages,Distillers & Vintners,3535,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-Nov-14,STRAT AERO PLC ,GB,AIM,,GB00BQQPLG38,ORD GBP0.001 ,AERO ,12.450037185,"2,621,060,460.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Jul-05,STRATEGIC EQUITY CAPITAL ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0BDCB21,ORD GBP0.10 ,SEC ,139.78195504,"71,317,324.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 8-Jun-11,STRATEGIC MINERALS PLC ,GB,AIM,,GB00B4W8PD74,ORD GBP0.001 ,SML ,2.221398788,"965,825,560.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 4-Jan-06,STRATEX INTERNATIONAL ,GB,AIM,,GB00B0T29327,ORD GBP0.01 ,STI ,8.293000149,"467,211,276.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Jan-13,STRATMIN GLOBAL RESOURCES PLC ,GB,AIM,,GB00B9276C59,ORD GBP0.0001 ,STGR ,3.50298782,"175,149,391.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-May-15,STRIDE GAMING PLC ,JE,AIM,,JE00BWT5X884,ORD GBP0.01 ,STR ,162.9742058,"66,520,084.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Mar-73,STV GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B3CX3644,ORD GBP0.50 ,STVG,158.192844,"39,548,211.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 26-Jun-14,STYLES & WOOD GROUP PLC ,GB,AIM,,GB00BLG2TG58,ORD GBP0.01 ,STY ,28.133400375,"7,077,585.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 9-Mar-07,SUBEX LTD ,IN,PSM,Standard GDRs,US86428R2022,GDR EACH REPR 1 ORD 'REG S' ,SUBX,3.21108786958499,"46,833,575.00",Technology,Technology,Software & Computer Services,Software,9537,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 9-Mar-07,SUBEX LTD ,IN,PSM,Standard GDRs,US86428R4002,GDR EACH REPR 1 ORD '144A' ,SBXA,3.21108786958499,0.00,Technology,Technology,Software & Computer Services,Software,9537,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 3-Dec-96,SUEZ CEMENT CO ,EG,PSM,Standard GDRs,US8646902010,GDR-EACH REPR 1 ORD EGP4(REG S) ,SZCD,29.5205249999999,"7,750,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 3-Dec-96,SUEZ CEMENT CO ,EG,PSM,Standard GDRs,US8646901020,GDR-EACH REPR 1 ORD EGP4(144A) ,BB56,29.5205249999999,0.00,Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 9-Oct-12,SULA IRON & GOLD PLC ,GB,AIM,,GB00B6Y3CV16,ORD GBP0.01 ,SULA ,1.6404955974,"1,215,181,924.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Feb-14,SUMMIT GERMANY LTD ,GG,AIM,,GG00BJ4FZW09,ORD NPV ,SMTG ,372.978840390348,"465,399,862.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,EUR,,,,,,,,,,,,,,,,,, 14-Oct-04,SUMMIT THERAPEUTICS PLC ,GB,AIM,,GB00BN40HZ01,ORD GBP0.01 ,SUMM ,59.9473407,"61,484,452.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 16-Mar-01,SUNPLUS TECHNOLOGY CO LTD ,TW,PSM,Standard GDRs,US86764M3043,GDR EACH REPR 2 ORD TWD10 '144A' ,SUPA,0,0.00,Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 16-Mar-01,SUNPLUS TECHNOLOGY CO LTD ,TW,PSM,Standard GDRs,US86764M4033,GDR EACH REPR 2 ORD TWD10 'REGS' ,SUPD,0,"20,000,000.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 6-Jun-05,SUNRISE RESOURCES PLC ,GB,AIM,,GB00B075Z681,ORD GBP0.001 ,SRES ,2.569355404,"1,167,888,820.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 4-Jun-13,SUPERGLASS HLDGS PLC ,GB,AIM,,GB00B7VSCQ18,ORD GBP0.01 ,SPGH ,7.029041635,"127,800,757.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Mar-10,SUPERGROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B60BD277,ORD GBP0.05 ,SGP ,1201.6216377,"80,917,282.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 24-Sep-02,SURFACE TRANSFORMS PLC ,GB,AIM,,GB0002892528,ORD GBP0.01 ,SCE ,22.8089087625,"86,891,081.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 7-Jul-98,SURGICAL INNOVATIONS GROUP ,GB,AIM,,GB0004016704,ORD GBP0.01 ,SUN ,13.5418061385,"487,993,014.00",Health Care,Health Care,Health Care Equipment & Services,Medical Equipment,4535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Sep-04,SURGUTNEFTEGAZ ,RU,Trading Only,,US8688612048,ADR EACH REPR 10 ORD ,SGGD,0,"340,597,744.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,INHE,USD,,,,,,,,,,,,,,,,,, 23-Dec-96,SUTTON HARBOUR HLDGS ,GB,AIM,,GB0008659202,ORD GBP0.01 ,SUH ,28.8831258,"96,277,086.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 23-May-96,SVG CAPITAL ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0007892358,ORD GBP1 ,SVI ,1086.48013975,"194,884,330.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Oct-00,SVM UK EMERGING FUND ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0000684174,ORD GBP0.05 ,SVM ,3.603,"6,005,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 9-May-06,SWALLOWFIELD ,GB,AIM,,GB0008667304,ORD GBP0.05 ,SWL ,36.26061215,"16,865,401.00",Consumer Goods,Personal & Household Goods,Personal Goods,Personal Products,3767,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 31-Oct-07,SWEETT GROUP PLC ,GB,AIM,,GB00B23QD109,ORD GBP0.10 ,CSG ,29.44943595,"71,392,572.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Jun-02,SWP GROUP PLC ,GB,AIM,,GB00B010NX28,ORD GBP0.005 ,SWP ,11.283225345,"196,230,006.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 25-Mar-11,SYLVANIA PLATINUM LTD ,BM,AIM,,BMG864081044,ORD USD0.10 (DI) ,SLP ,22.95215013125,"301,011,805.00",Basic Materials,Basic Resources,Mining,Platinum & Precious Metals,1779,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Nov-01,SYMPHONY ENVIRONMENTAL TECH PLC ,GB,AIM,,GB0009589168,ORD GBP0.01 ,SYM ,6.18297537,"149,890,312.00",Industrials,Industrial Goods & Services,General Industrials,Containers & Packaging,2723,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Aug-07,SYMPHONY INTERNATIONAL HLDGS LTD ,VG,International Main Market,Standard Shares,VGG548121059,ORD NPV(CDI) ,SIHL,305.181587119484,"528,838,811.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSMU,SMEU,USD,,,,,,,,,,,,,,,,,, 26-Oct-04,SYNAIRGEN ,GB,AIM,,GB00B0381Z20,ORD GBP0.01 ,SNG ,30.621865255,"91,408,553.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Jan-02,SYNECTICS PLC ,GB,AIM,,GB0007156838,ORD GBP0.20 ,SNX ,33.440210625,"17,834,779.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 14-Oct-71,SYNTHOMER PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009887422,ORD GBP0.10 ,SYNT,1236.109273308,"339,403,974.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 4-Dec-13,SYQIC PLC ,JE,AIM,,JE00BF5S6G17,ORD NPV ,SYQ ,0,"26,898,845.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Jan-13,SYSGROUP PLC ,GB,AIM,,GB00BYT18182,ORD GBP0.01 ,SYS ,13.401446355,"22,151,151.00",Technology,Technology,Software & Computer Services,Internet,9535,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Dec-94,T.H.F.C.(INDEXED 2) ,GB,UK Main Market,Standard Debt,GB0008701624,5.5% INDEX-LINKED STK 2024 ,90IL,0,"31,250,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 9-Nov-90,T.H.F.C.(INDEXED) ,GB,UK Main Market,Standard Debt,GB0008714882,5.65% INDEX-LINKED STK 2020 ,96JS,0,"100,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 19-Dec-96,T.H.F.C.(SOCIAL HOUSING FINANCE) ,GB,UK Main Market,Standard Debt,GB0008765918,8.75% DEB STK 2021 ,96JP,0,"130,500,000.00",,,,,6,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 14-Dec-06,TAIHUA PLC ,GB,AIM,,GB00B1GC5F60,ORD GBP0.01 ,TAIH ,1.839089925,"81,737,330.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Sep-13,TALIESIN PROPERTY FUND LTD ,JE,UK Main Market,Standard Shares,JE00BCDP4K39,ZERO DIV PREF GBP1 ,TPFZ,19.45084072,"14,354,864.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 28-Aug-07,TALIESIN PROPERTY FUND LTD ,JE,AIM,,JE00B3B3WB31,ORD NPV ,TPF ,145.20561,"4,840,187.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 29-Mar-10,TALK TALK TELECOM GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B4YCDF59,ORD GBP0.001 ,TALK,1928.89648872,"914,168,952.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Sep-00,TANDEM GROUP ,GB,AIM,,GB00B460T373,ORD GBP0.25 ,TND ,4.92250455,"4,579,074.00",Consumer Goods,Personal & Household Goods,Leisure Goods,Recreational Products,3745,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 30-Dec-03,TANFIELD GROUP ,GB,AIM,,GB00B4QHFM95,ORD GBP0.05 ,TAN ,18.78125988,"156,510,499.00",Industrials,Industrial Goods & Services,Industrial Engineering,Commercial Vehicles & Trucks,2753,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 28-May-14,TAPTICA INTL LTD ,IL,AIM,,IL0011320343,ORD ILS0.01 (DI) ,TAP ,101.93436415,"66,842,206.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Mar-13,TARGET HEALTHCARE REIT LTD ,JE,UK Main Market,Premium Equity Closed Ended Investment Funds,JE00B95CGW71,ORD NPV ,THRL,234.7785094725,"212,951,029.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 26-Nov-08,TARSUS GROUP PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B3DG9318,ORD GBP0.05 ,TRS ,267.72921812,"100,650,082.00",Consumer Services,Media,Media,Media Agencies,5555,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 4-Jul-06,TASTY PLC ,GB,AIM,,GB00B17MN067,ORD GBP0.10 ,TAST ,98.7165994,"53,360,324.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 5-Jun-00,TATA GLOBAL BEVERAGES LTD ,IN,PSM,Standard GDRs,US8765691048,GDS EACH REPR 1 INR1(144A) ,TGBA,10.418955048,0.00,Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,MISC,INPE,USD,,,,,,,,,,,,,,,,,, 5-Jun-00,TATA GLOBAL BEVERAGES LTD ,IN,PSM,Standard GDRs,US8765692038,GDS EACH REPR 1 INR1(REGS) ,TGBL,10.418955048,"7,598,000.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 28-Jul-09,TATA POWER CO ,IN,Trading Only,,US8765664078,GDR EACH REP 10 ORD REG S ,TPCL,0,"14,838,110.00",Utilities,Utilities,Electricity,Conventional Electricity,7535,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 27-Jul-09,TATA STEEL ,IN,PSM,Standard GDRs,US87656Y4061,GDR EACH REPR 1 ORD SH'REG S' ,TTST,0,"65,410,589.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,IOBE,IPHE,USD,,,,,,,,,,,,,,,,,, 9-Dec-38,TATE & LYLE ,GB,UK Main Market,Standard Shares,GB0008754466,6.5% CUM PRF GBP1 ,BD15,3379.483726875,"2,394,000.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 9-Dec-38,TATE & LYLE ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008754136,ORD GBP0.25 ,TATE,3379.483726875,"460,414,125.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 13-Dec-96,TATNEFT PJSC ,RU,International Main Market,Standard GDRs,US8766292051,ADR EACH REP 6 ORD SHS REGS ,ATAD,8160.57138551751,"363,116,666.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 5-Oct-09,TATUNG CO ,TW,Trading Only,,US8766614064,GDS EACH REPR 20 SHS'REG S' ,TAT ,0,"47,300,000.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 9-May-07,TAU CAPITAL PLC ,IM,AIM,,IM00B1VVFG94,ORD GBP0.01 ,TAU ,2.51893185193799,"48,984,680.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 13-Feb-15,TAVISTOCK INVESTMENTS PLC ,GB,AIM,,GB00BLNMLS43,ORD GBP0.01 ,TAVI ,19.609110755,"394,152,980.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Jul-16,TAX SYSTEMS PLC ,GB,AIM,,GB00BDHLGB97,ORD GBP0.01 ,TAX ,59.0914686975,"76,001,889.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-Mar-47,TAYLOR WIMPEY PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008782301,ORD GBP0.01 ,TW. ,5201.433770528,"3,224,695,456.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 10-Aug-16,TBC BANK GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYT18307,ORD GBP5 ,TBCG,555.506644,"49,159,880.00",Financials,Banks,Banks,Banks,8355,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 11-Jun-14,TBC BANK JSC ,GE,International Main Market,Standard GDRs,US87217U2087,GDR EACH REPR 1 ORD REGS ,TBCB,450.220152006718,"49,248,308.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Oct-13,TCS GROUP HLDG PLC ,CY,International Main Market,Standard GDRs,US87238U2033,GDR EACH REPR 1 SHARE A REG S ,TCS ,911.313973611672,"177,219,655.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 25-Oct-13,TCS GROUP HLDG PLC ,CY,International Main Market,Standard GDRs,US87238U1043,GDR EACH REPR 1 SHARE A 144A ,TCSA,911.313973611672,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 16-Mar-15,TECHFINANCIALS INC ,VG,AIM,,VGG870911077,USD0.0005 (DI) ,TECH ,8.23538664,"68,628,222.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Apr-97,TECO ELECTRIC & MACHINERY CO LTD ,TW,PSM,Standard GDRs,US8787572028,GDR EACH REPR 10 ORD TWD10(REG'S) ,TECD,35.4394705095714,"5,539,880.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Durable Household Products,3722,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 1-Apr-97,TECO ELECTRIC & MACHINERY CO LTD ,TW,PSM,Standard GDRs,US8787571038,GDR EACH REPR 10 ORD TWD10(144A) ,TECA,35.4394705095714,0.00,Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Durable Household Products,3722,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 24-Jul-97,TED BAKER ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001048619,ORD GBP0.05 ,TED ,1083.91319966,"41,640,922.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 24-Mar-06,TEJOORI ,VG,AIM,,VGG8739M1133,ORD USD0.01 ,TJI ,7.28266253650558,"27,708,864.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIMI,AIMT,USD,,,,,,,,,,,,,,,,,, 4-Apr-14,TEKCAPITAL PLC ,GB,AIM,,GB00BKXGY798,GBP0.004 ,TEK ,11.33478624,"35,421,207.00",Technology,Technology,Software & Computer Services,Computer Services,9533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Dec-05,TELECOM EGYPT ,EG,International Main Market,Standard GDRs,US87927T2024,GDR EACH REPR 5 ORD EGP10 'REGS' ,TEEG,106.909191200592,"42,525,432.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 26-Jul-00,TELECOM PLUS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008794710,ORD GBP0.05 ,TEP ,824.60819424,"78,683,988.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 27-Jun-85,TELEFONICA SA ,ES,International Main Market,Standard Shares,ES0178430E18,EUR1 ,TDE ,37910.0791225111,"4,975,199,197.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,SSMU,SMEV,EUR,,,,,,,,,,,,,,,,,, 14-Dec-01,TELFORD HOMES ,GB,AIM,,GB0031022154,ORD GBP0.10 ,TEF ,241.20808383,"73,315,527.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 4-Apr-05,TELIT COMMUNICATIONS PLC ,GB,AIM,,GB00B06GM726,ORD GBP0.01 ,TCM ,257.0831615625,"105,470,015.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 15-Apr-52,TEMPLE BAR INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008825324,ORD GBP0.25 ,TMPL,684.3301737,"61,651,367.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 15-Apr-52,TEMPLE BAR INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0008826405,9 7/8% DEB STK 2017 ,53IM,684.3301737,"25,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDS,GBP,,,,,,,,,,,,,,,,,, 19-Jun-89,TEMPLETON EMERG MARK INVESTM TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008829292,ORD GBP0.25 ,TEM ,1646.58384743,"289,382,047.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 13-Jul-15,TEN ALPS PLC ,GB,AIM,,GB00BX7RGN99,ORD GBP0.001 ,TAL ,2.41153469925,"419,397,339.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Jul-14,TENGRI RESOURCES ,KY,AIM,,KYG8760E1052,ORD GBP0.05 (DI) ,TEN ,1.21070809125,"107,618,497.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 31-Aug-11,TERN PLC ,GB,AIM,,GB00BFPMV798,ORD GBP0.0002 ,TERN ,7.456049825,"78,484,735.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Nov-06,TERRA CAPITAL PLC ,IM,AIM,,IM00B1GJR404,ORD USD0.10 ,TCA ,42.9261722748538,"68,299,236.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 25-Feb-08,TERRA CATALYST FUND ,KY,AIM,,KYG8761F1431,ORD GBP0.01 (DI) ,TCF ,15.81488274,"15,504,787.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Nov-99,TERTIARY MINERALS PLC ,GB,AIM,,GB0008854563,ORD GBP0.01 ,TYM ,3.07274886525,"240,999,911.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Dec-47,TESCO ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008847096,ORD GBP0.05 ,TSCO,13501.0537246725,"8,116,052,735.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 19-Jan-04,TETHYAN RESOURCES PLC ,GB,AIM,,GB00BYVFRB16,ORD GBP0.001 ,TETH ,2.9366944425,"90,359,829.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Jul-11,TETHYS PETROLEUM LIMITED ,KY,International Main Market,Standard Shares,KYG876361091,USD0.10 ,TPL ,6.09272600625,"324,945,387.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 9-Nov-15,TETRAGON FINANCIAL GROUP LTD ,GG,UK Main Market,,GG00B1RMC548,ORD N/V USD0.001 ,TFG ,1124.94955581831,"137,363,774.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,USD,,,,,,,,,,,,,,,,,, 1-Dec-71,TEX HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008850470,ORD GBP0.10 ,TXH ,7.39944158,"6,351,452.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 29-Jul-08,THALASSA HLDGS LTD ,VG,AIM,,VGG878801031,ORD USD0.01 (DI) ,THAL ,10.091360655,"23,605,522.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 8-Jun-16,THARISA PLC ,CY,International Main Market,Standard Shares,CY0103562118,ORD USD0.001 DI ,THS ,205.353238515,"255,891,886.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 25-Jul-07,THIRD POINT OFFSHORE INVESTORS LTD ,GG,UK Main Market,Standard Shares,GG00B1YQ7219,ORD NPV USD ,TPOU,549.846583450183,"47,223,409.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMU,SMEU,USD,,,,,,,,,,,,,,,,,, 25-Jul-07,THIRD POINT OFFSHORE INVESTORS LTD ,GG,UK Main Market,Standard Shares,GG00B1YQ6R97,ORD NPV GBP ,TPOG,549.846583450183,"2,281,788.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 4-Jun-13,THOMAS COOK GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1VYCH82,ORD EUR0.01 ,TCG ,669.311637096,"961,654,651.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Jun-05,THOR MINING ,GB,AIM,,GB00B1DXJY95,ORD GBP0.0001 ,THR ,1.703412525,"5,678,041,750.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 6-Jan-06,THORPE(F.W.) ,GB,AIM,,GB00BC9ZLX92,ORD GBP0.01 ,TFW ,296.1496191,"118,935,590.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 24-Apr-53,THREADNEEDLE UK SELECT TRUST LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0004618236,ORD GBP0.10 ,UKT ,37.60015896,"21,424,592.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Jan-01,TIGER RESOURCE FINANCE ,GB,AIM,,GB0002308525,ORD GBP0.01 ,TIR ,0.795408425,"138,331,900.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 14-Jun-16,TIME OUT GROUP PLC ,GB,AIM,,GB00BYYV0629,ORD GBP0.001 ,TMO ,182.65,"130,000,000.00",Consumer Services,Media,Media,Publishing,5557,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 8-Jun-15,TISO BLACKSTAR GROUP SE ,MT,AIM,,MT0000620113,ORD EUR0.76 (DI) ,TBGR ,103.96286325,"268,291,260.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Jun-10,TISSUE REGENIX GROUP PLC ,GB,AIM,,GB00B5SGVL29,ORD GBP0.005 ,TRX ,152.0248528,"760,124,264.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Jan-96,TITON HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008941402,ORD GBP0.10 ,TON ,9.093414,"10,452,200.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 24-Apr-14,TIZIANA LIFE SCIENCES PLC ,GB,AIM,,GB00BKWNZY55,ORD GBP0.03 ,TILS ,181.707296925,"94,393,401.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 8-Dec-11,TLA WORLDWIDE PLC ,GB,AIM,,GB00B68HD384,ORD GBP0.02 ,TLA ,79.602096555,"143,427,201.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 30-Nov-15,TLOU ENERGY ,AU,AIM,,AU000000TOU2,ORD NPV (DI) ,TLOU ,15.4214469,"205,619,292.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Dec-10,TMT INVESTMENTS PLC ,JE,AIM,,JE00B3RQZ289,ORD NPV ,TMT ,39.5836358305499,"27,711,628.00",Financials,Financial Services,Financial Services,Investment Services,8777,ASQ1,AMQ1,USD,,,,,,,,,,,,,,,,,, 21-Jul-11,TOMCO ENERGY PLC ,IM,AIM,,GB0031782278,ORD NPV ,TOM ,1.7742101697,"1,971,344,633.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 1-Nov-39,TONGAAT HULETT LTD ,ZA,International Main Market,Standard Shares,ZAE000096541,ORD ZAR1 ,THL ,721.251441844813,"100,495,852.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 10-May-16,TOOPLE PLC ,GB,UK Main Market,Standard Shares,GB00BZ8TP087,ORD GBP0.000667 ,TOOP,6.625,"100,000,000.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 2-Jun-97,TOPPS TILES PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B18P5K83,ORD GBP0.03333 ,TPT ,221.72406755,"192,803,537.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-Oct-84,TORCHMARK CORP ,US,International Main Market,Standard Shares,US8910271043,USD1 ,TMK ,7531.96796459081,"161,707,685.00",Financials,Insurance,Life Insurance,Life Insurance,8575,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 8-May-15,TORO LTD ,GG,UK Main Market,,GG00BWBSDM98,ORD NPV EUR ,TORO,235.800297825917,"345,400,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM2,SFQQ,EUR,,,,,,,,,,,,,,,,,, 27-Jul-98,TOROTRAK ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002922382,ORD GBP0.01 ,TRK ,21.5416235015,"545,357,557.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 2-Jan-07,TOTAL PRODUCE PLC ,IE,AIM,,IE00B1HDWM43,ORD EUR0.01 ,TOT ,450.50564832,"330,040,768.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 26-Sep-73,TOTAL SA ,FR,International Main Market,Standard Shares,FR0000120271,EUR2.5 ,TTA ,88787.0792857527,"2,444,133,158.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,SSMU,SMEU,EUR,,,,,,,,,,,,,,,,,, 1-Apr-16,TOTALLY ,GB,AIM,,GB00BYM1JJ00,GBP0.1 ,TLY ,14.097265305,"19,996,121.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-Oct-05,TOUCHSTAR PLC ,GB,AIM,,GB00BD9YDB55,ORD GBP0.05 ,TST ,4.3530375,"6,308,750.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 3-Nov-05,TOUMAZ LD ,KY,AIM,,KYG6390E1070,ORD GBP0.0025 ,TMZ ,37.1509949475,"1,651,155,331.00",Technology,Technology,Technology Hardware & Equipment,Semiconductors,9576,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 17-Jan-06,TOWER RESOURCES ,GB,AIM,,GB00BZ6D6J81,ORD GBP0.01 ,TRP ,1.49756596,"27,228,472.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 21-Sep-60,TOWN CENTRE SECURITIES ,GB,UK Main Market,Standard Debt,GB00B1HHKK03,5.375% 1ST MTG DEB 20/11/31 GBP ,50BF,163.41992175,"150,000,000.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 21-Sep-60,TOWN CENTRE SECURITIES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0003062816,ORD GBP0.25 ,TOWN,163.41992175,"53,144,690.00",Financials,Real Estate,Real Estate Investment Trusts,Diversified REITs,8674,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 29-Sep-99,TOYOTA MOTOR CORP ,JP,International Main Market,Standard Shares,JP3633400001,NPV ,TYT ,170382.969884674,"3,666,551,829.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Automobiles,3353,SSX4,SXSN,JPY,,,,,,,,,,,,,,,,,, 4-Jul-01,TP GROUP PLC ,GB,AIM,,GB0030591514,ORD GBP0.10 ,TPG ,23.7636408375,"422,464,726.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 6-Sep-90,TR EUROPEAN GROWTH TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0009066928,ORD GBP0.125 ,TRG ,355.39751601,"50,126,589.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 11-Mar-53,TR PROPERTY INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0009064097,ORD GBP0.25 ,TRY ,1190.91630636,"379,151,960.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Mar-53,TR PROPERTY INVESTMENT TRUST ,GB,UK Main Market,Standard Misc Securities,GB0008887126,WTS TO SUBSCRIBE FOR ORD ,TRYW,1190.91630636,"17,252,103.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,MISL,STBL,GBX,,,,,,,,,,,,,,,,,, 5-Aug-08,TRACSIS PLC ,GB,AIM,,GB00B28HSF71,ORD GBP0.004 ,TRCS ,135.82134783,"27,328,239.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Feb-06,TRADER MEDIA EAST ,GB,UK Main Market,Standard GDRs,US89255G1094,GDR EACH REPR 1 ORD SH'144A' ,82FN,184.360439999999,0.00,Consumer Services,Media,Media,Media Agencies,5555,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 13-Feb-06,TRADER MEDIA EAST ,GB,UK Main Market,Standard GDRs,US89255G2084,GDR EACH REPR 1 ORD SH'REGS' ,TME ,184.360439999999,"55,000,000.00",Consumer Services,Media,Media,Media Agencies,5555,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 21-Apr-05,TRADING EMISSIONS ,IM,AIM,,GB00B073G363,ORD GBP0.01 ,TRE ,6.3574139702,"249,800,156.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 16-Jul-13,TRAFALGAR NEW HOMES ,GB,AIM,,GB00B0SP7491,ORD GBP0.01 ,TRAF ,2.3837519,"238,375,190.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Oct-13,TRAKM8 HLDGS ,GB,AIM,,GB00B0P1RP10,ORD GBP0.01 ,TRAK ,74.7327132,"32,492,484.00",Technology,Technology,Technology Hardware & Equipment,Computer Hardware,9572,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 15-Dec-99,TRANSENSE TECHNOLOGIES PLC ,GB,AIM,,GB0009360198,ORD GBP0.01 ,TRT ,10.4955299775,"466,467,999.00",Consumer Goods,Automobiles & Parts,Automobiles & Parts,Auto Parts,3355,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Nov-03,TRANS-SIBERIAN GOLD PLC ,GB,AIM,,GB0033756866,ORD GBP0.10 ,TSG ,50.62441358,"110,053,073.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 19-Sep-86,TRAVIS PERKINS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0007739609,ORD GBP0.10 ,TPK ,4061.21805,"243,917,000.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 19-May-14,TREATT ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BKS7YK08,ORD GBP0.02 ,TET ,95.63943525,"52,405,170.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 4-Jan-16,TRENDIT LTD ,IL,International Main Market,,IL0011370256,ORD ILS0.1 (DI) ,TRIT,0,"192,012,773.00",Technology,Technology,Software & Computer Services,Software,9537,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 21-Mar-96,TRIAD GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009035741,ORD GBP0.01 ,TRD ,7.044554235,"15,149,579.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 3-May-16,TRIBAL GROUP ,GB,AIM,,GB0030181522,ORD GBP0.05 ,TRB ,108.436065945,"195,380,299.00",Technology,Technology,Software & Computer Services,Software,9537,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 18-Dec-02,TRICOR PLC ,GB,AIM,,GB00B79BCZ12,ORD GBP0.00001 ,TRIC ,0.4419769675,"176,790,787.00",Telecommunications,Telecommunications,Fixed Line Telecommunications,Fixed Line Telecommunications,6535,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 5-Dec-01,TRICORN GROUP ,GB,AIM,,GB0009716340,ORD GBP0.10 ,TCN ,3.04155,"33,795,000.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 16-Feb-94,TRIFAST ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008883927,ORD GBP0.05 ,TRI ,159.76382688,"110,947,102.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SSMM,SSC7,GBX,,,,,,,,,,,,,,,,,, 21-Apr-06,TRINITY CAPITAL PLC ,IM,AIM,,GB00B0ZL5243,ORD GBP0.01 ,TRC ,7.36434412,"210,409,832.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 14-Feb-13,TRINITY EXPLORATION & PRODUCTION ,GB,AIM,,GB00B8JG4R91,ORD USD1 ,TRIN ,0,"94,799,986.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 2-Dec-53,TRINITY MIRROR ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009039941,ORD GBP0.10 ,TNI ,288.05081724,"282,402,762.00",Consumer Services,Media,Media,Publishing,5557,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 18-Feb-08,TRIPLE POINT INCOME VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B29KPN29,ORD GBP0.01 ,TPV1,18.551794,"37,103,588.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Feb-08,TRIPLE POINT INCOME VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B87XBC63,ORD GBP0.01 A ,TPVA,18.551794,0.00,Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Feb-08,TRIPLE POINT INCOME VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BNCBFH30,ORD GBP0.01 D ,TPVD,18.551794,"12,405,063.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 18-Feb-08,TRIPLE POINT INCOME VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BGSH2G43,ORD GBP0.01 C ,TPVC,18.551794,"13,441,438.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 24-Dec-10,TRIPLE POINT VCT 2011 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BYSQV489,ORD GBP0.01 B ,TPOB,0,"12,592,557.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 24-Dec-10,TRIPLE POINT VCT 2011 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BNCBFM82,ORD GBP0.01 A ,TPOA,0,"7,158,498.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 24-Dec-10,TRIPLE POINT VCT 2011 PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B54ST296,ORD GBP0.01 ,TPO ,0,"20,379,867.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXNC,GBX,,,,,,,,,,,,,,,,,, 27-Aug-10,TRI-STAR RESOURCES PLC ,GB,AIM,,GB0033646281,ORD GBP0.00005 ,TSTR ,7.1996286843,"7,999,587,427.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Jun-05,TRISTEL ,GB,AIM,,GB00B07RVT99,ORD GBP0.01 ,TSTL ,56.23599233,"42,282,701.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 9-Dec-13,TRITAX BIG BOX REIT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BG49KP99,ORD GBP0.01 ,BBOX,831.61595265,"575,512,770.00",Financials,Real Estate,Real Estate Investment Trusts,Specialty REITs,8675,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 18-Jul-88,TROY INCOME & GROWTH TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003708665,ORD GBP0.25 ,TIGT,154.2685937625,"199,700,445.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 18-Feb-91,TRUSTCO FINANCE ,GB,UK Main Market,Standard Debt,GB0008945718,11.5% SEVERAL DEB STK 2016(REGD) ,87IN,0,"40,000,000.00",,,,,6,MISL,STBL,GBP,,,,,,,,,,,,,,,,,, 9-Dec-48,TT ELECTRONICS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0008711763,ORD GBP0.25 ,TTG ,233.831370755,"159,339,946.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-Dec-14,TUI AG ,DE,International Main Market,Premium Equity Commercial Companies,DE000TUAG000,ORD REG SHS NPV (DI) ,TUI ,3061.03591118,"287,961,986.00",Consumer Services,Travel & Leisure,Travel & Leisure,Travel & Tourism,5759,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 19-Dec-06,TULLETT PREBON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1H0DZ51,ORD GBP0.25 ,TLPR,929.989764165,"243,771,891.00",Financials,Financial Services,Financial Services,Investment Services,8777,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 18-Dec-00,TULLOW OIL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001500809,ORD GBP0.10 ,TLW ,1975.04664592,"906,400,480.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 16-Oct-13,TUNGSTEN CORP PLC ,GB,AIM,,GB00B7Z0Q502,ORD GBP0.00438 ,TUNG ,78.4781996325,"126,069,397.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 28-Dec-06,TURBO POWER SYSTEMS INC ,CA,AIM,,CA8999101030,COM NPV ,TPS ,5.005298883,"3,336,865,922.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Feb-96,TURKIYE GARANTI BANKASI ,TR,International Main Market,Standard GDRs,US9001487019,ADS EACH 1 REPR 1 ORD 'LVL1' ,TGBD,3724.43326784099,"1,474,770,000.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLU,USD,,,,,,,,,,,,,,,,,, 12-Feb-96,TURKIYE GARANTI BANKASI ,TR,International Main Market,Standard GDRs,US9001486029,ADS EACH 1 REPR 1 ORD '144A' ,39IS,3724.43326784099,"4,200.00",Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 14-May-98,TURKIYE IS BANKASI ,TR,International Main Market,Standard GDRs,US9001515074,GDR EACH REPR 1'C'SHS REG'S' ,TIBD,123.59635842478,"47,999,488.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 14-May-98,TURKIYE IS BANKASI ,TR,International Main Market,Standard GDRs,US9001514085,GDR EACH REPR 1'C'SHS 144A ,98LM,123.59635842478,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 6-Mar-13,TWENTYFOUR INCOME FUND LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B90J5Z95,ORD RED GBP0.01 ,TFIF,610.0769235,"549,618,850.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 10-Mar-14,TWENTYFOUR SELECT MONTHLY INC FD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BJVDZ946,ORD GBP0.01 ,SMIF,144.53108424,"155,409,768.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 8-Jul-13,TYMAN PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B29H4253,ORD GBP0.05 ,TYMN,487.53026049,"178,582,513.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 1-Jun-07,TYRATECH INC ,US,AIM,,US90239R2031,ORD USD0.001 (DI) ,TYRU ,9.368211985,"55,442,852.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 1-Jun-07,TYRATECH INC ,US,AIM,,USU890581080,ORD USD0.001 DI REGS ,TYR ,9.368211985,"308,197,057.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,AIM ,AIMR,GBX,,,,,,,,,,,,,,,,,, 14-Jul-86,U & I GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0002668464,ORD GBP0.50 ,UAI ,212.19179925,"123,907,620.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 22-Jun-11,UBISENSE GROUP PLC ,GB,AIM,,GB00B3NCXX73,ORD GBP0.02 ,UBI ,19.2306051,"54,944,586.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Jul-08,UBM PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00BD9WR069,ORD GBP0.1125 ,UBM ,2715.223149375,"394,941,549.00",Consumer Services,Media,Media,Publishing,5557,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 5-Mar-92,UDG HEALTHCARE PLC ,IE,International Main Market,Premium Equity Commercial Companies,IE0033024807,ORD EUR0.05 ,UDG ,1467.024064625,"239,514,133.00",Consumer Services,Retail,Food & Drug Retailers,Drug Retailers,5333,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Jun-07,UIL FINANCE LTD ,BM,International Main Market,Standard Shares,BMG916101089,RED ZDP 31/10/16 GBP0.10(DI) ,UTLC,0,"47,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Jun-07,UIL FINANCE LTD ,BM,International Main Market,Standard Shares,BMG916101162,RED ZDP 31/10/18 GBP0.059319(DI) ,UTLD,0,"49,842,413.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Jun-07,UIL LTD ,BM,International Main Market,Premium Equity Closed Ended Investment Funds,BMG917071026,ORD GBP0.10(DI) ,UTL ,148.549732905,"90,303,789.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 22-Sep-06,UK COMMERCIAL PROPERTY TRUST LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B19Z2J52,ORD GBP0.25 ,UKCM,1003.857923754,"1,257,967,323.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 5-Jul-93,UK MAIL GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001576163,ORD GBP 0.10 ,UKM ,167.53734536,"54,395,242.00",Industrials,Industrial Goods & Services,Industrial Transportation,Delivery Services,2771,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 7-Jul-15,UK MORTGAGES LTD ,GG,UK Main Market,,GG00BXDZMK63,ORD GBP0.01 ,UKML,245.3125,"250,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SFM1,SFML,GBX,,,,,,,,,,,,,,,,,, 2-Mar-05,UK OIL & GAS INVESTMENTS PLC ,GB,AIM,,GB00B9MRZS43,ORD GBP0.0001 ,UKOG ,43.2943771635,"2,509,818,966.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 11-Feb-05,UKRPRODUCT GROUP ,JE,AIM,,GB00B03HK741,ORD GBP0.10 ,UKR ,1.24229486975,"41,067,599.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 28-Jul-14,ULS TECHNOLOGY PLC ,GB,AIM,,GB00BNG8T458,ORD GBP0.004 ,ULS ,42.85263774,"64,928,239.00",Consumer Services,Media,Media,Media Agencies,5555,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 8-Dec-99,ULTIMATE SPORTS GROUP PLC ,GB,AIM,,GB00BYV31355,ORD GBP0.10 ,USG ,3.84971122,"20,261,638.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Oct-96,ULTRA ELECTRONICS HLDGS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009123323,ORD GBP0.05 ,ULE ,1168.8121627,"69,160,483.00",Industrials,Industrial Goods & Services,Aerospace & Defense,Defense,2717,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 10-Mar-10,UNICORN AIM VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B1RTFN43,ORD GBP0.01 ,UAV ,129.057522,"93,860,016.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 11-Aug-39,UNILEVER ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B10RZP78,ORD GBP0.031111 ,ULVR,46235.41797969,"1,310,156,361.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 30-Jul-13,UNION JACK OIL PLC ,GB,AIM,,GB00B814XC94,ORD GBP0.00025 ,UJO ,4.621934088,"2,888,708,805.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-Jan-70,UNISYS CORP ,US,International Main Market,Standard Shares,US9092143067,USD0.01 ,USY ,330.306106499999,"42,300,000.00",Technology,Technology,Software & Computer Services,Computer Services,9533,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 11-Apr-00,UNITE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0006928617,ORD GBP0.25 ,UTG ,1386.375791745,"221,289,033.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 29-Jun-07,UNITED BANK LTD ,PK,PSM,Standard GDRs,US90953P1021,GDR EACH REPR 4 ORD '144A' ,UBLA,184.309208747729,0.00,Financials,Banks,Banks,Banks,8355,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 29-Jun-07,UNITED BANK LTD ,PK,PSM,Standard GDRs,US90953P2011,GDR EACH REPR 4ORD 'REGS' ,UBLS,184.309208747729,"43,987,773.00",Financials,Banks,Banks,Banks,8355,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 2-Dec-14,UNITED CACAO LTD SEZC ,KY,AIM,,KYG9271M1078,ORD USD0.001 (DI) ,CHOC ,21.0887314,"19,171,574.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Feb-05,UNITED CARPETS GROUP ,GB,AIM,,GB00B05J4D26,ORD GBP0.01 ,UCG ,8.44525,"81,400,000.00",Consumer Services,Retail,General Retailers,Home Improvement Retailers,5375,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Jul-08,UNITED UTILITIES GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B39J2M42,ORD GBP0.05 ,UU. ,6623.88489455,"681,820,370.00",Utilities,Utilities,"Gas, Water & Multiutilities",Water,7577,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 20-Feb-98,UNIVERSE GROUP ,GB,AIM,,GB0009483594,ORD GBP0.01 ,UNG ,24.87018347375,"223,552,211.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 16-Dec-05,UNIVISION ENGINEERING ,HK,AIM,,HK0000033065,ORD NPV ,UVEL ,1.917886615,"383,577,323.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 26-Oct-15,UPLAND RESOURCES LTD ,VG,International Main Market,Standard Shares,VGG7552A1075,ORD NPV(DI) ,UPL ,2.93477058875,"213,437,861.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 9-Aug-05,URALS ENERGY PUBLIC CO ,CY,AIM,,CY0000111027,ORD USD0.0063 (DI) ,UEN ,5.6804146875,"252,462,875.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Feb-05,URANIUM RESOURCES PLC ,GB,AIM,,GB00B068N088,ORD GBP0.001 ,URA ,2.272897485,"757,632,495.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 22-May-14,URBAN&CIVIC PLC ,GB,UK Main Market,Standard Shares,GB00BKT04W07,ORD GBP0.20 ,UANC,333.103627315,"141,295,282.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,SSMU,SMEV,GBX,,,,,,,,,,,,,,,,,, 12-Sep-07,URU METALS LD ,VG,AIM,,VGG930041022,ORD USD0.01 (DI) ,URU ,1.23359755875,"328,959,349.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 14-Oct-11,UTILICO EMERGING MARKETS LTD ,BM,International Main Market,Premium Equity Closed Ended Investment Funds,BMG931151069,ORD GBP0.10 (DI) ,UEM ,449.176040485,"211,462,599.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 14-Oct-11,UTILICO EMERGING MARKETS LTD ,BM,International Main Market,Standard Shares,BMG931071374,SUBSCRIPTION SHS GBP0.00005 (DI) ,UEMS,449.176040485,"42,648,610.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 12-Jun-12,UTILITYWISE PLC ,GB,AIM,,GB00B6WVD707,ORD GBP0.001 ,UTW ,106.56983898,"77,224,521.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 19-Dec-07,UVENCO UK PLC ,GB,AIM,,GB00B29HFH73,ORD GBP0.02 ,UVEN ,5.96779616,"74,597,452.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 3-Oct-06,VALIRX PLC ,GB,AIM,,GB00BWWYSP41,ORD GBP0.001 ,VAL ,4.655314785,"56,428,058.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 14-Jul-81,VALUE & INCOME TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0008484718,ORD GBP0.10 ,VIN ,112.555625,"45,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 14-Jul-81,VALUE & INCOME TRUST ,GB,UK Main Market,Standard Debt,GB0009258137,9.375% DEB STK 2026 ,96IO,112.555625,"20,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 30-Jun-06,VAST RESOURCES PLC ,GB,AIM,,GB00B142P698,ORD GBP0.001 ,VAST ,10.60256942145,"3,720,199,797.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Jul-07,VECTURA GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B01D1K48,ORD GBP0.00025 ,VEC ,854.07291991,"651,964,061.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 10-Dec-03,VEDANTA RESOURCES ,GB,UK Main Market,Premium Equity Commercial Companies,GB0033277061,ORD USD0.10 ,VED ,1464.44209454,"297,047,078.00",Basic Materials,Basic Resources,Mining,General Mining,1775,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Oct-03,VELA TECHNOLOGIES PLC ,GB,AIM,,GB00B7D7F340,ORD GBP0.001 ,VELA ,1.417495233,"859,088,020.00",Consumer Services,Media,Media,Media Agencies,5555,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 20-Nov-08,VELOCYS PLC ,GB,AIM,,GB00B11SZ269,ORD GBP0.01 ,VLS ,44.7247518975,"143,693,982.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 30-Jun-16,VELTYCO GROUP PLC ,IM,AIM,,IM00BYT32K14,ORD NPV ,VLTY ,14.855706285,"56,059,269.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-Dec-12,VENN LIFE SCIENCES HLDGS PLC ,GB,AIM,,GB00B9275X97,ORD GBP0.001 ,VENN ,17.168189955,"60,239,263.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 28-Mar-14,VENTURE LIFE GROUP PLC ,GB,AIM,,GB00BFPM8908,ORD GBP0.003 ,VLG ,18.45251866,"39,260,678.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 17-Mar-06,VENTUS 2 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B0WCHT14,ORD GBP0.25 ,VEN2,30.07499508,"24,392,655.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 17-Mar-06,VENTUS 2 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BFXW7841,ORD GBP0.25 D ,VND ,30.07499508,"1,990,767.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 17-Mar-06,VENTUS 2 VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3KVC529,ORD GBP0.25 C ,VNC ,30.07499508,"11,283,207.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 15-Mar-05,VENTUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B3KVC412,ORD GBP0.25 C ,VENC,30.5694585075,"11,283,207.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 15-Mar-05,VENTUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BFXW7734,ORD GBP0.25 D ,VEND,30.5694585075,"1,990,767.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 15-Mar-05,VENTUS VCT PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00B03KMY45,ORD GBP0.25 ,VEN ,30.5694585075,"16,307,547.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 27-Apr-12,VERNALIS ,GB,AIM,,GB00B3Y5L754,ORD GBP0.01 ,VER ,220.59264448,"522,112,768.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 19-Sep-06,VERONA PHARMA PLC ,GB,AIM,,GB00B06GSH43,ORD GBP0.001 ,VRP ,81.176472864,"2,536,764,777.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Biotechnology,4573,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 12-Jun-13,VERSARIEN PLC ,GB,AIM,,GB00B8YZTJ80,ORD GBP0.01 ,VRS ,11.6183614,"116,183,614.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 7-May-15,VERSEON CORP ,US,AIM,,USU9221J1098,ORD USD0.001 DI REG S ,VSN ,243.77730636,"151,414,476.00",Health Care,Health Care,Pharmaceuticals & Biotechnology,Pharmaceuticals,4577,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 19-Jan-15,VERTU CAPITAL LTD ,KY,International Main Market,Standard Shares,KYG9341F1081,ORD GBP0.01 (DI) ,VCBC,1.125,"100,000,000.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 27-Mar-07,VERTU MOTORS PLC ,GB,AIM,,GB00B1GK4645,ORD GBP0.10 ,VTU ,192.639787915,"397,195,439.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 17-Dec-12,VESUVIUS PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B82YXW83,ORD GBP0.10 ,VSVS,954.075325,"272,592,950.00",Industrials,Industrial Goods & Services,General Industrials,Diversified Industrials,2727,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 26-Oct-06,VIANET GROUP PLC ,GB,AIM,,GB00B13YVN56,ORD GBP0.10 ,VNET ,27.76829654,"28,191,164.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 16-Dec-13,VICTORIA ,GB,AIM,,GB0009290080,ORD GBP0.25 ,VCP ,287.913419325,"18,193,581.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 27-Jul-04,VICTORIA OIL & GAS ,GB,AIM,,GB00BRWR3752,ORD GBP0.005 ,VOG ,39.41829432,"109,495,262.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 21-Dec-95,VICTREX ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009292243,ORD GBP0.01 ,VCT ,1284.80858254,"84,415,807.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 5-Jul-16,VIETNAM ENTERPRISE INVESTMENTS LTD ,KY,International Main Market,Premium Equity Closed Ended Investment Funds,KYG9361H1092,ORD USD0.01(DI) ,VEIL,628.7956733025,"220,920,746.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 15-Jun-06,VIETNAM HLDG LTD ,KY,AIM,,KYG9361X1209,WTS 02/05/17 (TO SUB FOR ORD) DI ,VNHW ,122.364600524522,"19,977,746.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 15-Jun-06,VIETNAM HLDG LTD ,KY,AIM,,KYG9361X1043,ORD SHS USD1 ,VNH ,122.364600524522,"66,650,036.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 5-Jul-07,VIETNAM INFRASTRUCTURE LTD ,KY,AIM,,KYG936121022,PRIVATE EQTY SHS USD0.01 ,VNI ,61.0883989918444,"391,158,266.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 2-Aug-07,VIMETCO NV ,NL,International Main Market,Standard GDRs,US92718P1049,GDR EACH REPR 1 ORD '144A' ,42GD,33.4415698780799,0.00,Basic Materials,Basic Resources,Industrial Metals & Mining,Aluminum,1753,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 2-Aug-07,VIMETCO NV ,NL,International Main Market,Standard GDRs,US92718P2039,GDR EACH REPR 1 ORD 'REGS' ,VICO,33.4415698780799,"219,484,720.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Aluminum,1753,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 30-Mar-16,VINACAPITAL VIETNAM OPPORTNTY FD LT,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00BYXVT888,ORD USD0.01 ,VOF ,481.86946824,"211,346,258.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 22-Mar-06,VINALAND ,KY,AIM,,KYG936361016,ORD USD0.01 ,VNL ,231.786904912069,"487,782,222.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,AIM ,AIM ,USD,,,,,,,,,,,,,,,,,, 20-Dec-13,VINALAND ZDP LTD ,GG,UK Main Market,Standard Shares,GG00BFN0VM06,ORD ZDP NPV ,VNLZ,480.8144751875,"385,422,425.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 16-Aug-10,VIPERA PLC ,GB,AIM,,GB00B5M62J37,ORD GBP0.01 ,VIP ,11.632053375,"258,490,075.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 18-Nov-14,VIRGIN MONEY HLDGS (UK) PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BQ8P0644,ORD GBP0.0001 ,VM. ,1397.41685618,"444,329,684.00",Financials,Banks,Banks,Banks,8355,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 20-Jan-14,VISLINK PLC ,GB,AIM,,GB0001482891,ORD GBP0.025 ,VLK ,17.9117005125,"124,603,134.00",Technology,Technology,Technology Hardware & Equipment,Telecommunications Equipment,9578,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Dec-72,VITEC GROUP PLC (THE) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009296665,ORD GBP0.20 ,VTC ,266.05746323,"43,544,593.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 3-Oct-01,VITESSE MEDIA ,GB,AIM,,GB0006563406,ORD GBP0.01 ,VIS ,2.66316732,"64,561,632.00",Consumer Services,Media,Media,Publishing,5557,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 26-Oct-88,VODAFONE GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BH4HKS39,ORD USD0.2095238 ,VOD ,66340.981696294,"28,862,728,604.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,SET0,FE00,GBX,,,,,,,,,,,,,,,,,, 20-Jul-39,VOLEX PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009390070,ORD GBP0.25 ,VLX ,35.902602915,"89,476,892.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SET3,ON15,GBX,,,,,,,,,,,,,,,,,, 25-Apr-07,VOLGA GAS PLC ,GB,AIM,,GB00B1VN4809,ORD GBP0.01 ,VGAS ,41.319078,"81,017,800.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 29-May-15,VOLTA FINANCE LTD ,GG,UK Main Market,Premium Equity Closed Ended Investment Funds,GG00B1GHHH78,NPV ,VTA ,215.424730333694,"36,031,331.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSQ3,SQQ3,EUR,,,,,,,,,,,,,,,,,, 23-Jun-14,VOLUTION GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BN3ZZ526,ORD GBP0.01 ,FAN ,340,"200,000,000.00",Industrials,Construction & Materials,Construction & Materials,Building Materials & Fixtures,2353,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 24-Dec-02,VOLVERE ,GB,AIM,,GB0032302688,ORD GBP0.0000001 ,VLE ,21.71488055,"4,155,958.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 6-Apr-73,VP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009286963,ORD GBP 0.05 ,VP. ,286.51093606,"40,183,862.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 17-Mar-15,VPC SPECIALTY LENDING INVSTMNTS PLC,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BVG6X439,ORD GBP0.01 ,VSL ,309.918717,"382,615,700.00",Financials,Financial Services,Financial Services,Consumer Finance,8773,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 17-May-07,VTB BANK(PJSC) ,RU,International Main Market,Standard GDRs,US46630Q1031,GDR EACH REPR 2000 ORD '144A' ,36GK,10095.7560714447,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 17-May-07,VTB BANK(PJSC) ,RU,International Main Market,Standard GDRs,US46630Q2021,GDR EACH REPR 2000 ORD 'REGS' ,VTBR,10095.7560714447,"6,480,270,976.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 4-Nov-04,W RESOURCES PLC ,GB,AIM,,GB00B0358H47,ORD GBP0.001 ,WRES ,20.7452324574,"4,190,956,052.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 27-Jul-00,W.H.IRELAND GROUP ,GB,AIM,,GB0009241885,ORD GBP0.05 ,WHI ,26.39751655,"26,136,155.00",Financials,Financial Services,Financial Services,Investment Services,8777,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Dec-06,WALCOM GROUP LTD ,VG,AIM,,VGG574851074,ORD HKD0.01 (DI) ,WALG ,0.791595462,"68,834,388.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 22-Aug-96,WALKER CRIPS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1YMRV88,ORD GBP0.066666 ,WCW ,19.406400255,"39,204,849.00",Financials,Financial Services,Financial Services,Investment Services,8777,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 15-Apr-03,WALKER GREENBANK ,GB,AIM,,GB0003061511,ORD GBP0.01 ,WGB ,125.97815587,"59,006,162.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Furnishings,3726,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 10-Nov-10,WALSIN LIHWA CORP ,TW,Trading Only,,USY9489R1125,GDR EACH REPR 10 SHS REG S ,WALS,0,"53,961,540.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 1-Jun-12,WANDISCO PLC ,JE,AIM,,JE00B6Y3DV84,ORD GBP0.10 ,WAND ,69.262253775,"36,620,190.00",Technology,Technology,Software & Computer Services,Software,9537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Jun-12,WANDISCO PLC ,JE,AIM,,JE00BYPG6G89,ORD GBP0.10(DI) REGS ,WAN2 ,69.262253775,"1,939,659.00",Technology,Technology,Software & Computer Services,Software,9537,ASX1,AMSR,GBX,,,,,,,,,,,,,,,,,, 17-May-11,WATCHSTONE GROUP PLC ,GB,AIM,,GB00BYNBFN51,ORD GBP0.1 ,WTG ,104.01754716,"45,822,708.00",Technology,Technology,Software & Computer Services,Computer Services,9533,AMSM,ASM6,GBX,,,,,,,,,,,,,,,,,, 30-Jul-10,WATER INTELLIGENCE PLC ,GB,AIM,,GB00BZ973D04,ORD GBP0.01 ,WATR ,9.1312392,"10,617,720.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 24-May-88,WATERMAN GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009422543,ORD GBP0.10 ,WTM ,25.68153054,"30,756,324.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 23-Mar-16,WATKIN JONES PLC ,GB,AIM,,GB00BD6RF223,ORD GBP0.01 ,WJG ,287.8156565625,"255,268,875.00",Consumer Goods,Personal & Household Goods,Household Goods & Home Construction,Home Construction,3728,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 19-Jul-06,WEATHERLY INTERNATIONAL ,GB,AIM,,GB00B15PVN63,ORD GBP0.005 ,WTI ,3.4476103675,"1,060,803,190.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 9-May-00,WEBIS HOLDINGS PLC ,IM,AIM,,GB0004126271,ORD GBP0.01 ,WEB ,4.32672141,"393,338,310.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 25-Jan-46,WEIR GROUP ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009465807,ORD GBP0.125 ,WEIR,3240.82712976,"215,051,568.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 14-May-13,WEISS KOREA OPPORTUNITY FUND LTD ,GG,AIM,,GG00B933LL68,ORD NPV ,WKOF ,153.825,"105,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Oct-11,WENTWORTH RESOURCES LTD ,CA,AIM,,CA9506771042,ORD NPV (DI) ,WRL ,44.4806168625,"169,449,969.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,ASQ2,AMQ2,GBX,,,,,,,,,,,,,,,,,, 9-Jan-12,WEST AFRICAN MINERALS CORP ,VG,AIM,,VGG9544K1021,ORD NPV(DI) ,WAFM ,7.1449188375,"381,062,338.00",Basic Materials,Basic Resources,Mining,General Mining,1775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 29-Jul-05,WEST BROMWICH B.S. ,GB,UK Main Market,Standard Debt,GB00B0CX2M20,6.15% PERM INT BEARING SHS GBP1000 ,WBS ,0,"75,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 21-Jun-07,WESTMINSTER GROUP PLC ,GB,AIM,,GB00B1XLC220,ORD GBP0.10 ,WSG ,25.279140615,"88,698,739.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 2-Oct-95,WESTMOUNT ENERGY LTD ,JE,AIM,,GB00B0S5KR31,ORD NPV ,WTE ,1.235867765,"22,470,323.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 30-Oct-92,WETHERSPOON(J.D.) ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001638955,ORD GBP0.02 ,JDW ,1012.92591975,"114,132,498.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Dec-15,WEY EDUCATION PLC ,GB,AIM,,GB00B54NKM12,ORD GBP0.01 ,WEY ,3.47170748625,"95,771,241.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 1-Sep-06,WH SMITH PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B2PDGW16,ORD GBP0.220895 ,SMWH,1747.64899644,"114,675,131.00",Consumer Services,Retail,General Retailers,Specialty Retailers,5379,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 9-Jul-48,WHITBREAD ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B1KJJ408,ORD GBP0.76797385 ,WTB ,7520.88363292,"180,270,461.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 27-Jul-16,WIDECELLS GROUP PLC ,GB,UK Main Market,Standard Shares,GB00BD060S65,ORD GBP0.0025 ,WDC ,7.297838235,"54,058,061.00",Health Care,Health Care,Health Care Equipment & Services,Health Care Providers,4533,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 20-Jun-02,WILLIAM HILL PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0031698896,ORD GBP0.10 ,WMH ,2722.332267046,"855,541,253.00",Consumer Services,Travel & Leisure,Travel & Leisure,Gambling,5752,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 6-Dec-95,WILMINGTON PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009692319,ORD GBP0.05 ,WIL ,204.3175637275,"85,043,731.00",Consumer Services,Media,Media,Publishing,5557,SET3,ON10,GBX,,,,,,,,,,,,,,,,,, 18-May-01,WINCANTON ,GB,UK Main Market,Premium Equity Commercial Companies,GB0030329360,ORD GBP0.10 ,WIN ,233.79257655,"119,893,629.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 30-Mar-15,WINDAR PHOTONICS PLC ,GB,AIM,,GB00BTFR4F17,ORD GBP0.01 ,WPHO ,24.016905585,"39,051,879.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 15-Oct-07,WIRELESS GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BDGT1X16,ORD GBP0.07 ,WLG ,216.27202905,"68,657,787.00",Consumer Services,Media,Media,Broadcasting & Entertainment,5553,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 13-Nov-13,WISDOM MARINE LINES CO LTD ,KY,International Main Market,Standard GDRs,US97717T1060,GDS EACH REPR 5 SHS ,WML ,26.74643325624,"7,200,000.00",Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 16-Jul-12,WISHBONE GOLD PLC ,GI,AIM,,GI000A1JU9R7,ORD GBP0.001 (DI) ,WSBN ,7.5992435264,"999,900,464.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 19-Sep-05,WISTRON CORP ,TW,Trading Only,,US9773723096,GDR EACH REPR 10 ORD'REGS ,WIS ,0,"40,000,000.00",,,,,0,IOBU,INLN,USD,,,,,,,,,,,,,,,,,, 27-Oct-50,WITAN INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0009743658,2.7% CUM PRF GBP1 ,86IP,1426.23585854,"500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 27-Oct-50,WITAN INVESTMENT TRUST ,GB,UK Main Market,Standard Shares,GB0009744284,3.4% CUM PRF GBP1 ,87IP,1426.23585854,"2,055,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 27-Oct-50,WITAN INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0009744060,ORD GBP0.25 ,WTAN,1426.23585854,"173,343,307.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 27-Oct-50,WITAN INVESTMENT TRUST ,GB,UK Main Market,Standard Debt,GB0009743765,8.5% DEB STK 2016 ,62JT,1426.23585854,"46,000,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STBS,SBDL,GBP,,,,,,,,,,,,,,,,,, 11-Feb-52,WITAN PACIFIC INVESTMENT TRUST ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003656021,ORD GBP0.25 ,WPC ,182.6641908,"65,237,211.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 2-Mar-15,WIZZ AIR HLDGS PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00BN574F90,ORD GBP0.0001 ,WIZZ,898.52993155,"56,263,615.00",Consumer Services,Travel & Leisure,Travel & Leisure,Airlines,5751,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 30-Nov-11,WOLF MINERALS LTD ,AU,AIM,,AU000000WLF3,ORD NPV(DI) ,WLFE ,66.21917500125,"999,534,717.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Nov-10,WOLSELEY PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00BFNWV485,ORD GBP0.108030303 ,WOS ,11683.899222,"266,755,690.00",Industrials,Industrial Goods & Services,Support Services,Industrial Suppliers,2797,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 5-Jun-02,WOOD GROUP(JOHN) ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B5N0P849,ORD GBP0.04285714 ,WG. ,2585.458740025,"371,207,285.00",Oil & Gas,Oil & Gas,"Oil Equipment, Services & Distribution",Oil Equipment & Services,573,STMM,F25F,GBX,,,,,,,,,,,,,,,,,, 21-Apr-15,WOODFORD PATIENT CAPITAL TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB00BVG1CF25,ORD GBP0.01 ,WPCT,749.7125,"810,500,000.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 1-Mar-06,WORK GROUP ,GB,AIM,,GB00B0VP0707,ORD GBP0.02 ,WORK ,0.908346985,"27,949,138.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 18-Feb-16,WORK SERVICE SA ,PL,International Main Market,Standard Shares,PLWRKSR00019,PLN0.10 ,WSE ,143.2086106,"65,094,823.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 15-Dec-93,WORKSPACE GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00B67G5X01,ORD GBP1 ,WKP ,1091.553871885,"159,002,749.00",Financials,Real Estate,Real Estate Investment Trusts,Industrial & Office REITs,8671,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 20-Mar-00,WORLD CAREERS NETWORK ,GB,AIM,,GB0002677085,ORD GBP0.001 ,WOR ,13.44855575,"7,684,889.00",Industrials,Industrial Goods & Services,Support Services,Business Training & Equipment Agencies,2793,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 18-Aug-88,WORLD TRADE SYSTEMS ,GB,UK Main Market,,GB0031939183,ORD GBP0.50 ,WTS ,0,"8,747,377.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,SSQ3,SQQ3,GBX,,,,,,,,,,,,,,,,,, 24-Nov-11,WORLDLINK GROUP PLC ,GB,UK Main Market,,GB00B3P21X12,GBP0.01 ,WGP ,0,"42,036,383.00",Consumer Services,Media,Media,Publishing,5557,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 16-Oct-15,WORLDPAY GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BYYK2V80,ORD GBP0.03 (WI) ,WPG ,5976,"2,000,000,000.00",Industrials,Industrial Goods & Services,Support Services,Financial Administration,2795,SET1,FS10,GBX,,,,,,,,,,,,,,,,,, 27-Mar-97,WORLDSEC ,BM,International Main Market,Premium Equity Closed Ended Investment Funds,BMG9774L1019,ORD USD0.001 ,WSL ,3.6877477,"56,734,580.00",Financials,Financial Services,Financial Services,Asset Managers,8771,SSX3,SQNC,GBX,,,,,,,,,,,,,,,,,, 28-Apr-95,WORLDWIDE HEALTHCARE TRUST PLC ,GB,UK Main Market,Premium Equity Closed Ended Investment Funds,GB0003385308,ORD GBP0.25 ,WWH ,877.88095017,"43,309,371.00",Financials,Equity Investment Instruments,Equity Investment Instruments,Equity Investment Instruments,8985,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 11-Jan-54,WORTHINGTON GROUP ,GB,UK Main Market,,GB00B01YQ796,ORD GBP0.10 ,WRN ,0,"14,498,783.00",Consumer Goods,Personal & Household Goods,Personal Goods,Clothing & Accessories,3763,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 2-Jan-13,WPP PLC ,JE,UK Main Market,Premium Equity Commercial Companies,JE00B8KF9B49,ORD GBP0.10 ,WPP ,20999.12480592,"1,195,849,932.00",Consumer Services,Media,Media,Media Agencies,5555,SET1,FE10,GBX,,,,,,,,,,,,,,,,,, 4-Feb-10,WYG PLC ,GB,AIM,,GB00B5N5WH70,ORD GBP0.001 ,WYG ,73.097300675,"67,997,489.00",Industrials,Industrial Goods & Services,Support Services,Business Support Services,2791,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 24-May-04,WYNNSTAY GROUP ,GB,AIM,,GB0034212331,ORD GBP0.25 ,WYN ,101.174526075,"18,999,911.00",Consumer Goods,Food & Beverage,Food Producers,Farming & Fishing,3573,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, 21-Sep-95,WYNNSTAY PROPERTIES ,GB,AIM,,GB0009842898,ORD GBP 0.25 ,WSP ,12.7445999,"2,711,617.00",Financials,Real Estate,Real Estate Investment & Services,Real Estate Holding & Development,8633,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 11-May-05,X5 RETAIL GROUP N.V ,NL,International Main Market,Standard GDRs,US98387E2054,GDR EACH REPR 0.25 SHS REG'S' ,FIVE,5432.92550045269,"264,586,852.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 11-May-05,X5 RETAIL GROUP N.V ,NL,International Main Market,Standard GDRs,US98387E1064,GDR EACH REPR 0.25 SHS '144A' ,89VS,5432.92550045269,"6,986,020.00",Consumer Services,Retail,Food & Drug Retailers,Food Retailers & Wholesalers,5337,MISL,ADPL,USD,,,,,,,,,,,,,,,,,, 17-Oct-97,XAAR ,GB,UK Main Market,Premium Equity Commercial Companies,GB0001570810,ORD GBP0.10 ,XAR ,372.37614629,"74,031,043.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 16-Nov-07,XCITE ENERGY LTD ,VG,AIM,,VGG9828A1194,ORD NPV(CDI) ,XEL ,22.1761384191,"311,900,681.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,AMSM,AM25,GBX,,,,,,,,,,,,,,,,,, 25-Mar-14,XEROS TECHNOLOGY GROUP PLC ,GB,AIM,,GB00BJFLLV84,ORD GBP0.0015 ,XSG ,179.589622955,"82,951,327.00",Industrials,Industrial Goods & Services,Industrial Engineering,Industrial Machinery,2757,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 21-Mar-14,XLMEDIA PLC ,JE,AIM,,JE00BH6XDL31,ORD USD0.000001 ,XLM ,178.814518785,"200,352,402.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 25-Apr-07,XP POWER LTD ,SG,International Main Market,Premium Equity Commercial Companies,SG9999003735,ORD NPV (DI) ,XPP ,313.11784032,"19,069,296.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electrical Components & Equipment,2733,SSMM,SSC5,GBX,,,,,,,,,,,,,,,,,, 11-Jul-13,XPLORER PLC ,GB,UK Main Market,,GB00B8VWXF68,ORD GBP0.001 ,XPL ,0,"12,375,100.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Exploration & Production,533,SSX3,SQSL,GBX,,,,,,,,,,,,,,,,,, 13-Sep-11,XTRACT RESOURCES PLC ,GB,AIM,,GB00B06QGC57,ORD GBP0.0001 ,XTR ,7.024993241,"14,049,986,482.00",Basic Materials,Basic Resources,Mining,Gold Mining,1777,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 15-Nov-96,YANGMING MARINE TRANSPORT CORP ,TW,PSM,Standard GDRs,US9847491019,GDR-EACH REPR 10 ORD TWD(144 A) ,YMT1,20.2075460037,0.00,Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,MISC,INPD,USD,,,,,,,,,,,,,,,,,, 15-Nov-96,YANGMING MARINE TRANSPORT CORP ,TW,PSM,Standard GDRs,US9847492009,GDR-EACH REPR 10 ORD TWD(REG'S) ,YMTD,20.2075460037,"9,999,330.00",Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,IOBU,IPLN,USD,,,,,,,,,,,,,,,,,, 27-Jun-97,YAPI VE KREDI BANKASI AS ,TR,International Main Market,Standard GDRs,US9848482009,GDR EACH REPR 1 ORD REG S ,YKBD,0,"6,637,440.00",Financials,Banks,Banks,Banks,8355,IOBU,LLLN,USD,,,,,,,,,,,,,,,,,, 27-Jun-97,YAPI VE KREDI BANKASI AS ,TR,International Main Market,Standard GDRs,US9848481019,GDR EACH REPR 1 ORD 144A ,98KI,0,0.00,Financials,Banks,Banks,Banks,8355,MISC,INTM,USD,,,,,,,,,,,,,,,,,, 2-Apr-03,YOLO LEISURE & TECHNOLOGY PLC ,GB,AIM,,GB00B6TG6Y69,ORD GBP0.01 ,YOLO ,1.6550355115,"178,922,758.00",Financials,Financial Services,Financial Services,Specialty Finance,8775,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 28-Mar-06,YORKSHIRE BUILDING SOCIETY ,GB,UK Main Market,Standard Debt,XS0247065674,5.649% PERM INT BEARING SHS GBP50000 ,YBS ,0,"150,000,000.00",,,,,7,STBS,SBDU,GBP,,,,,,,,,,,,,,,,,, 25-Apr-05,YOUGOV ,GB,AIM,,GB00B1VQ6H25,ORD GBP0.002 ,YOU ,198.674692185,"104,291,177.00",Consumer Services,Media,Media,Media Agencies,5555,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 5-Jul-05,YOUNG & CO'S BREWERY ,GB,AIM,,GB00B2NDK765,ORD GBP0.125 A ,YNGA ,570.97730544,"29,524,002.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 5-Jul-05,YOUNG & CO'S BREWERY ,GB,AIM,,GB00B2NDK989,NON VTG ORD GBP0.125 ,YNGN ,570.97730544,"19,160,000.00",Consumer Services,Travel & Leisure,Travel & Leisure,Restaurants & Bars,5757,AMSM,AS50,GBX,,,,,,,,,,,,,,,,,, 17-Mar-16,YU GROUP PLC ,GB,AIM,,GB00BYQDPD80,ORD GBP0.005 ,YU. ,33.729732,"14,054,055.00",Utilities,Utilities,"Gas, Water & Multiutilities",Multiutilities,7575,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Feb-09,YUJIN INTL LTD ,SG,AIM,,SG9999005946,NPV (DI) ,YUJ ,0,"30,000,010.00",Industrials,Industrial Goods & Services,Industrial Transportation,Marine Transportation,2773,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 13-Dec-07,ZAMANO PLC ,IE,AIM,,IE00B1G17W46,ORD EUR0.001 ,ZMNO ,9.9460174,"99,460,174.00",Telecommunications,Telecommunications,Mobile Telecommunications,Mobile Telecommunications,6575,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 23-Jun-11,ZAMBEEF PRODUCTS ,ZM,AIM,,ZM0000000201,ORD ZMW0.01 ,ZAM ,40.2964566875,"247,978,195.00",Consumer Goods,Food & Beverage,Food Producers,Food Products,3577,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Nov-10,ZANAGA IRON ORE CO LTD ,VG,AIM,,VGG9888M1023,ORD NPV (DI) ,ZIOC ,7.34675395125,"279,876,341.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Iron & Steel,1757,AMSM,ASM7,GBX,,,,,,,,,,,,,,,,,, 29-Jun-70,ZCCM INVESTMENTS HLDGS ,ZM,International Main Market,Standard Shares,ZM0000000037,'B'ORD ZMK10 ,ZCC ,28.0209617961931,"35,470,620.00",Basic Materials,Basic Resources,Mining,General Mining,1775,SSX4,SXSN,USD,,,,,,,,,,,,,,,,,, 29-Sep-15,ZEGONA COMMUNICATIONS PLC ,GB,UK Main Market,Standard Shares,GB00BVGBY890,ORD GBP0.01 ,ZEG ,203.8867584,"196,044,960.00",Financials,Nonequity Investment Instruments,Nonequity Investment Instruments,Nonequity Investment Instruments,8995,SSQ3,SQS3,GBX,,,,,,,,,,,,,,,,,, 21-Mar-13,ZENITH BANK ,NG,International Main Market,Standard GDRs,US98935J1025,SPONS GDR EACH REPR ORD SHS REG S ,ZENB,1104.639,"500,000,000.00",Financials,Banks,Banks,Banks,8355,IOBE,LLHE,USD,,,,,,,,,,,,,,,,,, 5-May-00,ZHEJIANG EXPRESSWAY CO ,CN,International Main Market,Standard Shares,CNE1000004S4,'H'CNY1 ,ZHEH,1224.92142390774,"1,433,854,500.00",Industrials,Industrial Goods & Services,Industrial Transportation,Transportation Services,2777,SSX4,SXSN,GBX,,,,,,,,,,,,,,,,,, 20-Jun-14,ZIBAO METALS RECYCLING HLDGS LTD ,GB,AIM,,GB00BGP6NY91,ORD GBP0.01 ,ZBO ,1.3726125,"122,010,000.00",Basic Materials,Basic Resources,Industrial Metals & Mining,Nonferrous Metals,1755,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 10-Dec-01,ZINCOX RESOURCES PLC ,GB,AIM,,GB0031124638,ORD GBP0.01 ,ZOX ,1.540244594,"220,034,942.00",Basic Materials,Basic Resources,Mining,General Mining,1775,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 18-Jun-14,ZOLTAV RESOURCES INC ,KY,AIM,,KYG9895N1198,ORD USD0.2 (DI) ,ZOL ,31.88371185,"141,705,386.00",Oil & Gas,Oil & Gas,Oil & Gas Producers,Integrated Oil & Gas,537,ASQ1,AMQ1,GBX,,,,,,,,,,,,,,,,,, 14-May-01,ZOO DIGITAL GROUP PLC ,GB,AIM,,GB00B1FQDL10,ORD GBP0.15 ,ZOO ,2.8134586375,"32,153,813.00",Technology,Technology,Software & Computer Services,Software,9537,AIM ,AIM ,GBX,,,,,,,,,,,,,,,,,, 23-Jun-14,ZOOPLA PROPERTY GROUP PLC ,GB,UK Main Market,Premium Equity Commercial Companies,GB00BMHTHT14,ORD GBP0.001 ,ZPLA,1246.71114786,"417,658,676.00",Consumer Services,Media,Media,Media Agencies,5555,STMM,25FS,GBX,,,,,,,,,,,,,,,,,, 28-Feb-95,ZOTEFOAMS ,GB,UK Main Market,Premium Equity Commercial Companies,GB0009896605,ORD GBP 0.05 ,ZTF ,117.47915091,"44,415,558.00",Basic Materials,Chemicals,Chemicals,Specialty Chemicals,1357,SSMM,SSC6,GBX,,,,,,,,,,,,,,,,,, 6-Jul-00,ZYTRONIC ,GB,AIM,,GB0006971013,ORD GBP0.01 ,ZYT ,56.00122875,"14,933,661.00",Industrials,Industrial Goods & Services,Electronic & Electrical Equipment,Electronic Equipment,2737,AIMI,AIMT,GBX,,,,,,,,,,,,,,,,,, ================================================ FILE: p5-capstone/report.md ================================================ # Predicting Daily Adjusted Close Stock Prices ### Machine Learning in Trading: An Exploratory Study Jessica Yung, October 2016 Udacity Machine Learning Nanodegree Capstone Project # I. Definition ## I.1 Project Overview ### Introduction People have used machine learning in trading for decades. Hedge funds, high-frequency trading shops and sole traders use all sorts of strategies, from Bayesian statistics to physics related strategies. ### Scope of this project We will investigate **using machine learning in trading equities**, specifically to **predict equity prices for a 7-day period**. Equities are stocks - shares of companies like Apple and Google that are publically listed on the stock exchange. That means any licensed stock broker can trade those stocks. By trading, we mean buying and selling these shares on the stock exchange. We will only tackle trading equities and not other more complex financial products because calculating returns for those products is more complex and equities are sufficiently interesting. ### Why trading is an interesting domain for machine learning 1. Firstly, there are many non-engineered features. If we include only equities, we already have over 10,000 equities globally. That makes for at least 10,000 potential non-engineered features. 2. Secondly, there are many datapoints. Even access to only daily trading information gives us 30 years * 365 days = over 10,000 datapoints for each of many stocks. (This is only an estimate because trading does not take place on Sundays in all non-Israeli exchanges.) If we were to look at intraday figures, there's even more data: in January 2009, an average of 881,609 trades were made per day in equities on the London Stock Exchange [(Source: LSE Group)](http://www.lseg.com/media-centre/news/corporate-press-releases/185-million-electronic-equity-trades-across-london-stock-exchange-group-order-books-january). 3. It is also interesting because research in machine learning and statistics has affected how markets behave. There is no strategy or algorithm that will solve this problem or remain forever 'optimal' - if a profitable strategy is found, it may be copied by other people and so be priced in or it may be fought against or taken advantage of. This is more relevant to high-frequency trading than daily trading but nonetheless has an impact. ### Aim of this project The aim of this exploratory study is to get a feel for what types of features are involved in predicting stock prices and how different models perform in this setting. The challenges will be discussed in more detail in the Problem Statement. Predicting stock prices accurately is difficult: there are many factors that influence stock prices and a lot of noise. This exploratory study does not aim to produce a state-of-the-art, better-than-benchmark-buy-and-hold (transaction costs included) trading strategy - that is extremely difficult and is a challenge even for top trading firms. ### Data used in this project There is one primary dataset for this project and two supplementary datasets. * The primary dataset is a CSV with all the daily stock prices from 1977 for stocks listed on the the London Stock Exchange. This dataset was downloaded from Quandl. * The first supplementary dataset is a spreadsheet listing the stocks currently listed on the London Stock Exchange with information such as what each listed company's stock symbol is and which sector they belong to. This spreadsheet was downloaded from the London Stock Exchange website. * The second supplementary dataset is a CSV with Open, High, Low, and Close data for the FTSE100 from April 1, 1984 to Sept 9, 2016. This data was scraped from Google Finance and is used for feature engineering. The features and characteristics of the primary dataset will be discussed more thoroughly in Section II: Data Exploration. ## I.2 Problem Statement ### Problem Build a stock price predictor that satifies:
CategoryDetails
InputDaily trade data over a `start_date - end_date`. Daily trade data consists of adjusted and unadjusted Open, High, Low, Close figures for a set of stocks S.
Output
  • Projected estimates of Adjusted Close prices for query dates for pre-chosen stock BP in S.
  • Results satisfy predicted stock value 7 days out is within +/- 5% of actual value, on average.
Glossary: * **Adjusted prices** are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open. * **BP** is the stock symbol for British Petroleum, an energy company. ### Interesting characteristics of this problem There are a few interesting characteristics of this problem compared to previous projects in the Machine Learning Engineer Nanodegree. 1. Predicting multiple outputs: We will predict the adjusted close prices for 7 days after the last input date. 2. Extracting and engineering the input data as opposed to being given input data. 3. We will be using time series data. ### Challenges 1. The model has to be run for dates not within the training set for the model to be 'fair'. But given there may be big shifts in how people view the markets from year to year, it may be hard for the model to generalise from one year to the next. 2. Energy companies' stock prices are volatile so they may be harder to predict. ### Analysis of Problem This is a regression problem (as opposed to a classification problem) because we are predicting daily Adjusted Close prices for a stock. These prices are continuous. Compare this to a related problem: If this were high-frequency trading and we were trying to predict the stock price in the next nanosecond we could tackle price prediction as a binary classification problem instead (does the price go up or down?). It's not immediately obvious what kind of model will be best. Characteristic of problem: - Time-series data. - Noisy data - Datapoints (prices of different stocks) are not independent of each other -> Naive Bayes is not appropriate - Many features. (Daily open, high, low, adjusted close for many stocks) -> - Regression problem (continuous output). - Training cost or time: it is not critical to keep this lower than 12 hours because we are predicting daily prices based on stats from prior days' trading. - Prediction time: Again not critical to keep this low. Anything within an hour would do. ### Strategy I intend to do the following: 1. Explore the data - Come up with a basic model with which I can predict the next day's prices and then the next 7 days' prices as a benchmark - Try adding different features and using different algorithms - Features include x-day moving averages of BP stocks, stocks in the oil industry, and indices such as the FTSE 100. - Assess which model is best using the metric described below. ### Expected Solution The solution will be 7 predicted prices for each trading day within 7 trading days after the last date in the input date range. We will compare the 7 predicted prices with the actual adjusted close prices. ## I.3 Metrics We will measure performance as the **root mean squared percentage error** (difference between the stock's actual and predicted Adjusted Close prices). Reasoning: 1. This represents the error between the actual price and the predicted price. 2. We have to square it and then take the square root because if we don't square it, errors from overestimates and underestimates will cancel each other out. We will also informally consider **the range of root mean squared percentage error** as a secondary metric - we want a model with lower error variance because a series of small good trades (gaining \$1 ten times) can be more than cancelled out by a single large-magnitude bad trade (losing \$50 once). We will not consider transaction costs (you have to pay every time you trade and that will reduce profits). # II. Analysis ## II.1 Data Exploration ### Description of Primary Dataset The primary dataset used is daily stock data for stocks on the London Stock Exchange (LSE). The date range for stock data varies depending on when the stock went public. The furthest date was in the year 1954. The most recent date in the dataset was 9 September 2016. The data was taken from Quandl's free access database. All the data is in one comma-separated value file (CSV), with each row being one datapoint. There are over 14 million datapoints in the dataset. Each row has 14 columns. That means we have 14 features for each stock on every trading day since the year when the stock was tradable (from 1954 onwards). Unless otherwise indicated, the column values are all floats.
ColumnFormat or accuracy if floatMeaning
Stock symbolstringHow the stock is represented on the London Stock Exchange. E.g. GOOGLE's stock symbol is GOOGL.
DateYYYY-MM-DD
Opengiven to 2 decimal places (2 d.p.)Price of stock when the market opened on that day in GBP £.
High2 d.p.Maximum price of the stock during the trading day in GBP £.
Low2 d.p.Minimum price of the stock during the trading day in GBP £.
Close2 d.p.Price of stock when the market closed on that day in GBP £.
Volume1 d.p.The number of shares of that stock traded on that day.
Ex-Dividend1 d.p.The value of the declared or upcoming dividend that will belong to the seller of the stock share rather than the buyer. Dividend is profits distributed to shareholders. If the upcoming dividend will be given to the buyer, Ex-Dividend = 0.
Split Ratio1 d.p.A company may choose to split their stock. E.g. a 2.0 (2:1) split ratio means shareholders get two new shares for every share they hold. This halves the price to preserve the market capitalisation (total value) of the company.
Adjusted Open6 d.p.Adjusted opening price (price of stock when the market opened on that day). Adjusted prices are prices amended to include any distributions and corporate actions such as stock splits (splitting one stock into two which would halve the price), dividends (giving stockholders cash as a fraction of profits) that occurred at any time before the next day's open.
Adjusted High6 d.p.See Adjusted Open and High.
Adjusted Low6 d.p.See Adjusted Open and Low.
Adjusted Close6 d.p.See Adjusted Open and Close.
Adjusted Volume1 d.p.See Adjusted Open and Volume.
Reference: [Definition of Ex-Dividend (Investopedia)](http://www.investopedia.com/terms/e/ex-dividend.asp) #### Data sample
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
0A1999-11-1845.5050.0040.0044.0044739900.00.01.043.47181047.77121938.21697542.03867344739900.0
1A1999-11-1942.9443.0039.8140.3810897100.00.01.041.02592341.08324938.03544538.58003710897100.0
2A1999-11-2241.3144.0040.0644.004705200.00.01.039.46858142.03867338.27430142.0386734705200.0
3A1999-11-2342.5043.6340.2540.254274400.00.01.040.60553641.68516638.45583238.4558324274400.0
4A1999-11-2440.1341.9440.0041.063464400.00.01.038.34118140.07049938.21697539.2297253464400.0
*Obtained using `df.head()`* ### Description of supplementary dataset (FTSE100) I wanted to add features that corresponded to the general market trend and thought the FTSE100 would be a good representation. The FTSE100 as a single index was not included in my primary dataset, so I obtained the data by scraping Google Finance with a python script (see `google-finance-scraper.py`). The supplementary dataset has Open, High, Low, Close data in the date range April 1, 1984 - September 9, 2016. ### Defining Characteristics about Stock Data 1. **Limit Down Circuit Breakers**: When the stock price falls by Limit Down during one trading day, trading curbs may kick in. This may mean no further trading of that stock is allowed on that day unless the trading prices are above the Limit Down. Curbs and Limit Downs vary by exchange. - This reduces the maximum daily variation of stock prices. ### Dataset Statistics The summary statistics for the dataset are not too meaningful, but it gives us an idea of the **variance within the dataset**. The standard deviation of the adjusted close price is of magnitude 10^3 ($1000), and the standard deviation of adjusted volume is of magnitude 10^6 (1,000,000 shares). The summary statistics suggest that the data is **positively skewed**.
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
mean7.092291e+017.188109e+017.047024e+017.120251e+011.182026e+061.982789e-031.000210e+007.518079e+017.633755e+017.451613e+017.544570e+011.402925e+06
std2.193723e+032.220224e+032.191789e+032.206792e+038.868551e+063.370723e-012.165061e-022.266636e+032.295340e+032.261718e+032.279264e+036.620816e+06
min0.000000e+000.000000e+000.000000e+000.000000e+000.000000e+000.000000e+001.000000e-020.000000e+000.000000e+000.000000e+000.000000e+000.000000e+00
max2.281800e+052.293740e+052.275300e+052.293000e+056.674913e+099.625000e+025.000000e+012.281800e+052.293740e+052.275300e+052.293000e+052.304019e+09
I have checked the count is constant across all columns, i.e. that there are no missing values. ### Interesting observations: Abnormalities in dataset The minimum Open, High, Low and Close are all zero. If a stock trades at a price of zero, it kind of doesn't exist. I will examine this in the Data Preprocessing section. ### BP Statistics More meaningful than the summary statistics for all 3,000+ stocks is the summary statistics for one stock. Since one of the stocks we are hoping to predict is that of BP (British Petroleum), let's examine the corresponding summary statistics.
OpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. VolumeDaily Variation
mean59.42843359.90822258.94380959.4461372.816082e+060.0046261.00040018.70536718.85524618.54757618.7073583.408274e+060.0
std20.58937820.67688520.51327220.5985007.217241e+060.0482700.01998714.12767414.22879114.01197314.1226097.532096e+060.0
min27.25000027.85000026.50000027.0200000.000000e+000.0000001.0000001.5223661.5288721.5031091.5223660.000000e+000.0
25%44.75000045.16250044.25000044.7700001.831500e+050.0000001.0000005.4263995.4938165.3733025.4427647.536000e+050.0
50%53.94000054.36000053.50000053.9400006.371500e+050.0000001.00000015.07776715.16576915.03317915.0994741.904100e+060.0
75%69.75000070.23000069.32750069.7950003.784475e+060.0000001.00000031.84952232.20768931.52477231.8895134.051675e+060.0
max147.120000147.380000146.380000146.5000002.408085e+080.8400002.00000050.66900450.98868350.03914450.5337022.408085e+080.0
I have checked the count is 10010 across all columns, i.e. that there are no missing values. This is much better understood with a visualisation of the BP data. ## II.2 Exploratory Visualisations ### Open and Adjusted Open Prices Let's first get an idea of the open and adjusted open prices. This is equivalent to visualising the the close and adjusted close prices - the variable we want to predict - shifted by one day. *Prices are in GBP £.* #### Observations 1. **Adjusted vs non-adjusted figures** It is extraordinary: the adjusted open and the open are radically different for BP, whereas with stock 'A' in the first few rows of the df, Adj. Open and Open had similar values. This makes sense because some stocks that have few corporate actions e.g. stocks that don't have stock splits or give out dividends will require little value adjustment. - Since we are predicting the Adjusted Close, my guess is that the Adjusted figures (Open, High, Low, Volume) will be more useful in predicting the adjusted price. The non-adjusted figures (specifically Volume) may still useful in predicting momentum. 2. **Trend** The non-adjusted prices do not show an upward trend. The adjusted open prices show somewhat of an upward trend but it has been too volatile in recent years to draw any conclusions. 3. **Volatility** The stock price looks volatile, which is expected for an oil stock. From the descriptive statistics, the mean daily percentage variation is 1.72% and the maximum daily percentage variation is 16.0%. ### Volatility: Percentage Variation To examine the volatility of BP stock, I constructed the features Percentage Variation and Adj. Percentage Variation, where `Percentage Variation = (High - Low)/Open * 100`. #### Observations The Adjusted Percentage Variation and Percentage Variation look similar. There does not seem to be marked trends. It is of note that the stocks are consistently volatile with typical percentage variation of 0-4% in recent years, punctuated with spikes of extremely volatile periods of up to 16% variation. ## II.3 Algorithms and techniques ### Algorithm I intend to use **linear regression**. #### Algorithm Description Linear Regression is a way of modelling data by observing data and constructing an equation that minimises error. This regression is linear because the equation takes the form $$\hat y = \sum \beta_i x_i$$ where $y$ is what we want to predict (stock prices) and $x_i$s are features such as the date. The hat on top of $y$ indicates it is an estimate. That is, this regression is linear because the $x_i$s all have degree 1. #### Algorithm Justification 1. I am using a **linear algorithm** because the the **signal-to-noise ratio in trading is low** and more complicated models seem like they would overfit. 2. A linear regression is appropriate because this is a **regression problem** - that is, the output are continuous. - Note that *regression* in linear regression does not mean the same thing as *regression* in a regression problem. #### Algorithm Parameters There are only four parameters for `LinearRegression`: - `fit_intercept` is set to True by default; setting it to false assumes the data is centered and will not produce better results. - `normalize` normalizes the regressors X before regression. It is set to `False` by default. - `copy_X` alters whether or not X may be overwritten, which does not affect the result. - `n_jobs` can provide a speedup if the problem is large and you ask the algorithm to use more CPUs, but it will not change error measures. Within these, there is only one parameter that it may be useful to adjust (`normalize`) to improve the error of the result. ### Techniques 1. **Time-series train-test split** - We will train our model on what we'll call the **training set**, a subset of the data that we have. - To make sure our model generalises, we need to test it on some data it has not seen before and evaluate how well it does predicting on that data. - To do this, we need to set aside data for testing our model - the **test set**. - Because our data is time series data (there is some ordering to it and the ordering influences prices), we cannot shuffle the data. - If the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating. - So we cannot use sklearn's `train_test_split` function which automatically shuffles the data. Instead, I will write my own function. 2. **Time-series cross-validation** - But testing on only one test set and training on only one training set isn't robust enough. What if the test or training sets we choose have special characteristics that aren't common to other datasets? - To make our evaluation more robust so we choose the best model, it's better if we can run multiple train-test cycles. - To do this, I wrote the function `execute()`. In this function, I set a number of train-test cycles (`steps`), a total length of the train-test data (`periods` datapoints) and a number of datapoints between the starting points of each consecutive train-test cycle (`buffer_step`). ## II.4 Benchmark The benchmark given in the project outline was +/- 5% of the stock price 7 days out. That seems reasonable to start. That is, our benchmark will be a **root mean squared percentage error of 5%**. # III. Methodology ## III.1 Data Preprocessing ### Minor edits 1. On opening the CSV and sampling it with `df.head()`, I realised the CSV had no header. I added a header to the CSV: ```python df = pd.read_csv('~/lse-data/lse/WIKI_20160909.csv', header=None, names=header_names) ``` where `header_names` was an slightly edited header I'd obtained from downloading the data for an individual stock from Quandl. ### Examining Abnormalities I noted above that there were datapoints with opening price, high, low and closing price of 0.0. Were these mistakes? On investigating the data, it is plausble these were not mistakes.
SymbolDateOpenHighLowCloseVolumeEx-DividendSplit RatioAdj. OpenAdj. HighAdj. LowAdj. CloseAdj. Volume
1047193ARWR2002-10-110.00.000.00.0065000.00.01.00.00.000.00.000000100.000000
1047194ARWR2002-10-140.00.000.00.000.00.01.00.00.000.00.0000000.000000
7608936LFVN2003-02-210.00.010.00.0127200.00.01.00.04.760.04.76000057.142857
I've included three examples in the table above. The third example shows that the figures may not actually be zero but may be zero to one or two decimal places: the open and low prices were 0.0, but the high and close prices were 0.01. I assembled a list of stocks where the open or close was equal to 0 and will examine individual stocks on the list if they end up as features I'd like to use in my model. ### Feature Engineering ### 1. Daily and Percentage Variation Reasoning: This is an indicator of how volatile prices have been. If the daily variation has been higher recently, that may mean there is a lot of uncertainty and that we can expect more fluctuations or that we shouldn't take big one-day changes too seriously when considering long-term predictions. I calculated the daily absolute and percentage variation (adjusted and unadjusted) for the entire data frame. ### 2. Prices of related stocks (Oil stocks) Reasoning: BP's stock price is affected by how people feel about oil in general. Thus prices of oil stocks may correlate positively or negatively (if they are direct competitors) with BP's prices. I obtained a list of oil companies listed on the LSE by searching for stocks with the same group code (537 for oil) in `list-of-all-securities-ex-debt.csv`. Unfortunately there was only one other oil stock on my list that I found in this database (`GAIA`), so instead of creating an aggregated dataframe, I only included `GAIA`'s data in my additional set of features. Improvement for future studies: Collect data from another data source to come up with a more informative feature. #### Adding GAIA Features The GAIA trading dates started on 1999-10-29 whereas the BP trading dates started much earlier, so that cut out a large portion of the dataset. Data had to be taken out because it did not make sense to create proxy values for 20+ years' of volatile price data. **Complications** There was also a discrepancy in the trading dates. We have data for BP and GAIA on every trading day from 1999-10-29 to 2014-10-02, but beyond that the data for GAIA is incomplete. There was no information on GAIA trading on the second, fourth or fifth of October 2014 (whereas there was for BP). Thus our dataset is pared down even further to a size of 3754 as opposed to 10010 for BP. This is a huge cut. ### 3. Prices of FTSE100 Reasoning: Stock prices are also affected by how people feel about the market in general. The FTSE100 is fairly representative of the performance of the market in general, so including it as a feature can help us account for that aspect. **Complications** There were 158 dates for which we had BP trading data but not FTSE trading data. (This is unexpected because the FTSE should have values on all trading days. The discrepancy is likely due to problems with the data source. This is unexpected because the data source for FTSE prices was Google Finance, which should be reliable.) But because there were only 158 NaNs and they were spread thinly over 8000 datapoints, it made it impossible to truncate a large section with no NaNs that would be large enough to do multiple rounds of meaningful training and testing on. I thus proxied the missing prices by taking the means of the the FTSE prices from the trading day before and the trading day after. If those were also NaNs, I moved either one day forward or one day backward. (See `# Proxy remaining NaNs` in 1.2.2.3.) Since the FTSE does not usually fluctuate wildly, I considered the mean to be a reasonable proxy. As with prices of oil stocks, an improvement would be to consult another data source to fill in the gaps. ## III.2 Initial implementation I initially implemented the Linear Regression algorithm with the following basic features: * Adjusted Close prices on each of the 7 days prior to the first prediction date * Max Adjusted High and Min Adjusted Low for that 7-day period prior to the first prediction date. ### Process: 1. Construct dataframe `X` containing initial features and dataframe `y` with 'Adjusted Close' prices. - This required some setting up to extract the relevant features from the dataset and put them in an appropriately formatted dataframe. This is in the first half of `prepare_train_test()` function in part 2.1 of `III. Methodology - Code.ipynb`. - The `y` target `nday_prices` had prices for the next `n` days. 2. Split `X` and `y` into training and test datasets. - I wrote my own function to do this (initially in `train_test_split_noshuffle` before I absorbed it into `prepare_train_test()`) instead of using sklearn's `train_test_split`. This was because sklearn's function automatically shuffles the data. Shuffling the data is okay and desired for situations in which data is not ordered, but is not okay for time-series data. - As stated in the *Algorithms and Techniques* section, if the data were shuffled, e.g. the adjusted close price for 1 Sept 2016 might be in the training set. We might then be asked to predict the adjusted close prices for the 7 days after 31 Aug 2016, which would include the price for 1 Sept 2016 which we'd have seen before. That's cheating. 3. Train model on training data. - Because there were multiple outputs to predict in `nday_prices` (the model had to forecast prices for each of the 7 trading days after the last date it was given), I wrapped `MultiOutputRegressor` from sklearn's `multioutput` module around my classifier. - This is in the first half of the function `classify_and_metrics` in `2.2 Classifier` in `III. Methodology - Code.ipynb`. 4. Ask model to predict prices on test features. 5. Print metrics - I included this in `classify_and_metrics()` using my helper functions `rmsp()` (root mean squared percentage error) and `print_metrics()`. See Section `2.2 Classifier` in `III. Methodology - Code.ipynb`. #### Refactoring I refactored the code so that I could run a full (1) train-test split, (2) train classifier, (3) test classifier and print metrics cycle using only one line. To do this, I wrapped all the functions those processes with the `execute()` function. ### Initial Results The results are shown below. I also tried using an SVM regression for comparison. #### Linear Regression
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
11.669
22.422
32.968
43.407
53.834
64.230
74.590
Mean R2 score: 0.807. Ranged from 0.606 to 0.936. #### SVM.SVR
Days after last training dateMean Root mean squared daily percentage error (across 8 distinct train-test sets)
111.230
211.460
311.761
412.022
512.323
612.667
713.060
Mean R2 score: -2.044. Ranged from -9.156 to 0.822. The Linear Regression did surprisingly well, with a mean R2 score above 0.807 overall for 7-day predictions and a mean RMS percentage error of under 5% for forecasts 7 days away. The SVM regression did horribly - it had a negative mean R2 score (-2.044) and negative median R2 score, which means it was worse than guessing randomly. It had a mean RMS percentage error of over 24% for all number-of-days ahead predicted. It is impressive that the Linear Regression model did so well with such basic features. ## III.4 Refinement ### 1. Adjusting parameters As discussed in Analysis: Algorithm Parameters, there is only one parameter that it may be useful to adjust (`normalize`). I ran the algorithm with `normalize=True` to see if it produced better results. The metrics returned were exactly the same as when, by default, `normalize=False`. ### 2. Add features (Feature Selection) I then experimented with adding the features I'd engineered earlier. (See *Data Preprocessing: Feature Engineering* for more details on how these features came about.) #### 2.1 Adding more of the same type of features: In the first implementation, I only used prices from the 7 days running up to the first prediction day. I then tried using prices from 10, 14, 21 and 30 days running up to the first prediction day. Reasoning: If we have more data, it makes sense to use it if we are confident it will give us better results. To do this, I changed the value of the parameter `days` in the function `execute`, which trains and tests the classifier and prints metrics. #### Mean Daily Error across 15 trials
Day to predict7d (used)10d14d21d30d100d
11.6691.7321.7291.7461.7841.924
22.4222.5432.5262.5552.5932.768
32.9683.1383.1033.1133.1523.370
43.4073.5793.5863.5863.6333.890
53.8343.9394.0023.9914.0484.355
64.2304.2694.3724.3424.3924.769
74.5904.5434.7024.6584.7055.163
We can see that mean RMS percentage error is slightly smaller in one instance (using 10d instead of 7d to predict precisely 7 days ahead),but otherwise that mean RMS percentage error is greater as the number of days of data given increases. This is because more days' of data in this case means more features (e.g. for 100 days' of data we have 102 features). This increases the risk of overfitting. #### 2.2 Adding GAIA (Oil Stock) Prices There were far fewer datapoints to work with because of date inconsistencies (3753 datapoints vs 10010 for the BP-only model), so I decreased the step length (the difference between start dates) between consecutive trials to 200 from 500. This does not affect individual trial performance, but reduces the variety of data used for trials. We should bear this in mind when comparing performance of adding GAIA prices as features and not adding GAIA prices as features.
Day to predict7d (no GAIA)7d (GAIA)10d (no GAIA)10d (GAIA)
11.6691.7441.7321.751
22.4222.4442.5432.467
32.9682.9383.1382.978
43.4073.4243.5793.479
53.8343.8813.9393.946
64.2304.2944.2694.368
74.5904.7024.5434.816
*Trial information: (1) Not GAIA: Mean over 15 trials, buffer step = 500. (2) GAIA: Mean over 13 trials, buffer step = 200. 1000 periods used (800 to train, 200 to test) per trial* When considering 7 days' worth of data, adding GAIA features produces predictions with a similar mean RMS percentage error. The mean error is higher for 6 out of 7 days-ahead (the exception being 3 days ahead). When considering 10 days' worth of data, adding GAIA features performs slightly better for 2-4 days-ahead (0.08%, 0.16%, 0.1% improved) and slightly worse for all other days-ahead (0.02%, 0.01%, 0.1%, 0.27% worse). But these mean RMS percentage errors are all larger than the 7-day no-GAIA mean RMS percentage errors. **Action**: I conclude that adding GAIA features in this way does not reliably produce better results, likely because additional features increase the risk of overfitting. **Interpretation**: It makes sense because BP prices would not correlate perfectly in one direction or the other with GAIA prices: oil companies' stock prices incorporate sentiment about oil but companies are also often in different regions and compete against each other, muddying correlations. #### 2.3 Adding related features: FTSE100 The timespan used for no-FTSE and with-FTSE trials was similar (since we had over 8000 FTSE datapoints), so we can compare the two more readily than we could compare the no-GAIA and with-GAIA figures.
Day to predict7d (no FTSE)7d (FTSE)10d (no FTSE)10d (FTSE)
11.6691.5181.7321.531
22.4222.2222.5432.230
32.9682.7333.1382.743
43.4073.1793.5793.187
53.8343.5453.9393.574
64.2303.8574.2693.910
74.5904.1624.5434.236
*Trial information: (1) Not FTSE: Mean over 15 trials, buffer step = 500. (2) FTSE: Mean over 15 trials, buffer step = 450. 1000 periods used (800 to train, 200 to test) per trial* Finally something that performs better than the initial model! Adding FTSE features makes the model perform better than not adding FTSE features when considering 7 days' or 10 days' worth of data. Using 7 days' worth of data is better than using 10 days' worth of data (reduces overfitting), but it's worth noting that adding FTSE features and using 10 days' worth of data is better than using 7 days' of data but not including FTSE data. This is a significant improvement. Note that the percentage error reduction increases the further away the prediction is (0.4% reduction for 6-7 days ahead vs 0.15% reduction for 1 day ahead). Improvement (Implementation): Generalise functions `prepare_train_test_with_ftse()` so I don't have to write a function for each dataframe join. # IV. Results ## IV.1 Model Evaluation and Validation ### Model Choice The final model is - Features: - BP Adjusted Close, max BP Adjusted High, min BP Adjusted Low for 7 days prior to the first prediction date. - FTSE Close, max FTSE High and min FTSE Low for 7 days prior to the first prediction date. - Classifier: - Default Linear Regression (`sklearn.linear_model.LinearRegression`) - Target: - Predict BP Adjusted Close prices for 7 days after the final training date. This model had the **lowest mean root mean squared percentage error** across over 10 trials (across timespans of around 30 years) out of all the models I tried. Insight: Most of the improvements I tried to make only made the model worse. This goes to show that added complexity doesn't necessarily make a model better, especially when that complexity contains much noise. ### Generalisability When we evaluated the model in the previous section, each iteration of the model was run on 13-15 training and test sets. We then looked at the mean daily root mean squared percentage error. This **variation of input data** is to ensure that the model can generalise well and does not only perform well on one set of data. There are two types of metrics we need to look at: mean performance and variance of performance. Both are encapsulated in mean daily RMS percentage error because (1) it measures the performance (error) and (2) it penalises larger errors more because we sum the squared percentage errors before taking the square root. Additionally, by observation, the error of our chosen model does not vary significantly from trial to trial. #### Performance Metrics
Day to predictMean root mean squared percentage error across 15 trials
11.518
22.222
32.733
43.179
53.545
63.857
74.162
## IV.2 Justification (Comparison with expectations) Overall, this model aligns with solution expectations and on average performs slightly better than the benchmark of predicting within +/- 5% of the stock's adjusted closing price 7 days after the last training date. The model has mean performance of 4.162% error predicting adjusted closing price 7 days ahead. The solution gives a reasonably accurate predictions but it **is not significant enough** to reliably give advice on trades because a 5% error is significant in trading. There are also transaction costs with every trade, which would cut into profits. # V. Conclusion ## V.1 Free-Form Visualisation ### Plotting predictions compared with actual prices This graph visualises the 7th-day predictions compared with the actual adjusted close prices. By 7th-day predictions, I am referring to the price predicted for e.g. Sept 7 if we are given training data up till Aug 30th. The purpose is to see how predictions vary with actual prices. I picked 200 datapoints to visualise because visualising all the points at once does not provide much insight. Here is the visualisation with all points for reference: ## V.2 Reflection ### Summary In this project, we predicted BP's stock price. Initially we used a linear regression only on BP stock prices from the past 7 days, which produced impressive results, with 7-day predictions having a root mean squared percentage error of 5.4%. In this initial iteration, we perfomed the following steps: 1. Import data (CSV) and format it as a Pandas Dataframe 2. Create features dataframe: Select features we wanted to use and put it into a separate dataframe 3. Create target dataframe (Prices for 7 days following the last date provided in the features). 4. Split into training and testing sets. (No shuffle because we are dealing with time series data.) 5. Train chosen classifier. 6. Predict test target. 7. Evaluate test target and print evaluation metrics. After the initial iteration, I then repeated the process firstly with different classifiers (altering parameters, tried SVM regression) and then with new features (more days' worth of data, GAIA data, FTSE data). I then chose the model with the lowest mean root mean squared percentage error, which was a Linear Regression classifier trained on 7 days of BP and FTSE data (Close, max High and min Low prices. Adjusted for BP, not adjusted for FTSE). ### Interesting Aspects of the Project 1. **Coming up with new features from scratch as opposed to selecting them from a given set**. This resulted in much analysis paralysis because the universe of possible features is so large. 2. **Collating data from different sources.** I wanted to use FTSE prices that weren't in the Quandl database I downloaded, so I wrote a Python script to scrape the data from Google Finance. I then had to combine this data with the BP price data. This was made more tedious because there were missing data values when I joined the two dataframes by dates, so I also had to **proxy data values**. 2. **A simple model turned out to be better than several more complex models.** E.g. Linear Regression did better than SVM regression, and adding GAIA features or increasing the number of days' worth of data we considered both made increased RMS percentage error. ### Difficult Aspects of the Project 1. It was hard **selecting the algorithm** to use for this problem. - It seemed as though any regression algorithm could work - and there are so many of them! I dealt with this by (1) first implementing an SVM regression to get the code to implement the algorithm down on the page so things would feel more concrete. Then I (2) chose the simplest algorithm that seemed to fit the problem and tried that. - I was also conflicted as to whether or not I should use reinforcement learning. On the one hand there are profits that can act as rewards, but on the other hand trading would not impact the environment. 2. **Putting different features together** in a dataframe took effort. - Different stocks or indices had data for different dates (e.g. some had data for 1984-04-20, some didn't). I had to find these differences and decide what to do with missing data. 3. There were **many possible features**. - The project just got longer and longer and I hadn't even looked through half of the features I wanted to investigate or tried different algorithms. I decided to test out only a few features in this exploratory study and leave the rest for another study. It is worth noting that the interesting and difficult parts of this project overlapped. ## V.3 Improvements
ImprovementExpected Change
1. Try a wider selection of features. - Stocks from other stock markets (e.g. NYSE) - Company-specific figures such as P/E ratiosMore accurate model
2. Obtain and combine data from different data sources to minimise missing data - e.g. FTSE100 prices because they must exist somewhere.Increase number of datapoints with accurate data and so improve predictive range and capabilities
3. Add measure of confidence for predictions (Probabilities)Better idea of how reliable each prediction is so we can then recommend trades for high-confidence, postive-profit predictions.
### Things to Explore 1. Try more algorithms (different classes). - Different types of regressions - Reinforcement Learning - Deep Learning, EnsemblesGenerically 2. It would also be interesting to try this as a binary classification problem (predicting whether the price would go up or down) as opposed to predicting the exact price. ### A Better Solution? Given the openness of this problem and the large universe it is contained in, I am confident that better solutions exist. That is a beautiful characteristic of this problem - than many things (even things which are beyond the scope of financial figures and stock prices, such as Wikipedia page views) can be used as features or proxies for stock prices.